Nine things, in the order they happen
Each chapter is one concept in plain words: what it is, what it is not, and what KernelHub does with it. Every animation and table on this page shows something v1.0.2 ships today.
AI Employee
The one you hire. A named role — AI Developer, for example — with a definition, the skills it claims, the environment those skills need, the workspaces it is assigned to, the permissions it works under, and the tasks, memory and results that accumulate as it works.
It is not a chat session and not a model. Hiring one does not widen what can be done on your machine — permission still does that.
KernelHub keeps the Employee as an account-level thing: its role and skills are the same in every workspace it is assigned to, and the console reports whether its environment is actually ready.
Scroll sideways to see the whole chain →
Agent
The intelligence the Employee works with: it understands the task, plans, reasons, calls tools and decides what to do next.
Deciding is not the same as being allowed. The Agent can propose a write; it cannot perform one.
KernelHub does not build its own Agent and never calls a model itself. It governs the Agents you already use, by putting every action they want through the Workspace, the Permission contract and the Executor.
Scroll sideways to see the whole chain →
Runtime
The model or runtime that carries the Agent's intelligence — Claude Code, Codex, Qwen Code, Antigravity (agy), MiMo and others, installed and signed in by you.
The Runtime is not the Employee. Switching it does not change who you hired, what they are allowed to do, or which workspace they work in.
The Runtime Router picks a Runtime that can actually take the task on this machine. Whichever one runs, its writes, edits and commands go through the same built-in Tool Server and are checked against your grants — not a prompt asking the model to behave.
| Runtime | Read | Write | Exec | Web | Push | Delete | Status |
|---|---|---|---|---|---|---|---|
| claude | KernelHub | runtime | runtime | KernelHub | KernelHub | KernelHub | SUPPORTED |
| codex | KernelHub | runtime | runtime | KernelHub | KernelHub | KernelHub | SUPPORTED |
| mimo | KernelHub | KernelHub | KernelHub | KernelHub | KernelHub | KernelHub | SUPPORTED |
| opencode | KernelHub | KernelHub | KernelHub | KernelHub | KernelHub | KernelHub | SUPPORTED |
| qwen | KernelHub | KernelHub | runtime | KernelHub | KernelHub | KernelHub | SUPPORTED |
| acp | KernelHub | KernelHub | — | KernelHub | KernelHub | KernelHub | NOT READY |
| agy | KernelHub | KernelHub | KernelHub | KernelHub | KernelHub | KernelHub | NOT READY |
| codebuddy | KernelHub | KernelHub | runtime | KernelHub | KernelHub | KernelHub | NOT READY |
| gemini | KernelHub | runtime | runtime | KernelHub | KernelHub | KernelHub | NOT READY |
| kimi | KernelHub | KernelHub | KernelHub | KernelHub | KernelHub | KernelHub | NOT READY |
| mcp | KernelHub | KernelHub | — | KernelHub | KernelHub | KernelHub | NOT READY |
| ohmypi | KernelHub | KernelHub | — | KernelHub | KernelHub | KernelHub | NOT READY |
| pi | KernelHub | KernelHub | KernelHub | KernelHub | KernelHub | KernelHub | NOT READY |
The runtime has its own verifiable switch and KernelHub passes it. Verified by actually building the argv, not by reading its docs.
The runtime has no switch of its own for this tier, so this cell is held by the outer OS boundary KernelHub puts around the runtime process — seatbelt on macOS, Landlock on Linux, both on by default; on Windows it is off by default in this release, and a Windows machine shows a gap here instead. It is an optional hardening layer, not something the work depends on; whatever this cell says, writes, edits and execs still go through the Tool Server against your grants and the workspace boundary.
Nobody on this machine can prove this tier is held. The runtime is marked NOT_READY — that is recorded, not a stop sign: it still takes work, and every write, edit and command still goes through your grants, the workspace boundary and the exec rules.
Executor
The governed execution layer on your own machine: the icloser process. It carries out authorised actions — read, write, exec, build, test, git, artifact, device — and reports what happened.
It is not an agent. It has no intelligence of its own and no authority of its own; it is bounded by the Permission contract and the Workspace contract.
The Executor has its own gate: a command that reaches it without the grant it needs is refused before it runs, whichever model asked for it — and every action it takes is recorded.
The one you hire
The intelligence it works with
The model that carries the intelligence
The governed hands on your machine
Workspace
A directory on your machine that a task is bound to. Tasks, permissions, memory and results are recorded per workspace.
A Workspace does not own the Employee; it is where the Employee is assigned to work. Workspaces do not reach into each other.
A task runs inside the workspace it was sent to, and nowhere else. Moving the directory keeps its identity; tasks, memory and files come along.
Workspaces do not reach into each other
A task runs inside the workspace it was sent to. Permissions are recorded per device and per workspace; there is no global switch.
Your repository is never uploaded
Execution happens on your machine. What crosses the network is task text, progress, diffs you chose to see, and approvals.
Permission
Six tiers — read, write, exec, web, push, delete/migrate — granted separately, per device and per workspace. Below them, two things no grant can open: your credentials, and writing outside the workspace.
A permission is not a suggestion to the model. It is checked by the Tool Server and the Executor's gate before the action runs.
A task that needs a tier it does not have stops before doing anything and asks. A grant for one task expires the moment that task ends.
Credential paths that no grant can open
Credential paths — SSH keys, cloud config, .env files, keychains — and high-risk operations are denied independently of what you granted. The list does not change when you approve a tier.
“Just this once” actually means once
A permission approved for a task applies to that task only, in that workspace, and expires the moment the task reaches a terminal state — by read-time evaluation, not by a cleanup job.
If it can't be held, you get told
When a task would touch the delete/migrate boundary on a runtime that cannot express a deny list, KernelHub stops before doing anything and asks you to release that one run explicitly. Approving it grants no permission tier.
Six tiers, checked before anything runs
Read, write, execute, web, push and delete/migrate are granted separately, per device and per workspace. Whichever runtime is working, its writes, edits and commands go through KernelHub's built-in Tool Server and are checked against those grants and the workspace boundary before they run — not a prompt that asks the model to behave.
Local Execution
The work happens on the machine that already holds your code. Nothing is uploaded; what travels is the task text, progress, the diffs you chose to see, and your approvals.
It is not a remote terminal. Nobody types into your machine; the Executor applies allowed actions and nothing else.
This is the actual path a task takes in v1.0.2 — every node below exists in the shipping product.
Scroll sideways to see the whole chain →
Every frame maps to a step KernelHub performs in v1.0.2. The file, the counts and the build line come from a task that actually ran.
The agent runs where your code already is
A small executor (icloser) watches a workspace on your own machine and drives the CLI runtime you already have installed — Claude Code, Codex, Antigravity (agy) and others. There is no cloud sandbox, no repository upload, no source mirror.
No prompt that nobody can answer
Runtimes normally stop and ask a terminal that has no human in front of it. KernelHub moves that decision to a card on a device you actually hold.
Mobile Approval
When a task reaches a WRITE, EXEC or other boundary it does not have, a card appears on the device you are holding, with the diff so far and the exact wording of what is being asked.
The phone is not an Executor and not a Runtime. It sends tasks, approves, and reads results.
Approve once and the same task resumes — nothing is re-run and nothing was done while you were deciding.
Decisions come to you, not the other way round
When a task needs a tier it doesn't have, it stops before burning a run and raises a card with the diff so far and the exact wording of what it is asking for. Approve once and the same task resumes.
Task · Approval · Result
The phone is not an Executor. It sends tasks, approves, and reads results.
“In PermToggle.kt, the three labels are hard-coded — lift them to constants. Then build to check nothing broke.”
- Sent from the phoneTyped into the composer, queued for the workspace
- Executor picks it upThe machine holding the Android repo claims the task
- Reads PermToggle.ktEvidence stream shows every file it opens
- Modifies itLive diff appears while it is still working
- Runs the buildGradle runs locally; output streams back
- Approval card on the phoneCarries the diff — +8 −3, with the hunk
- ResultYou approve, and the same task finishes
“Add an install section to README.md, and keep the tone of the rest of the file.”
- ReadingIt reads the file before writing anything
- ModifyingEdits land on disk on your machine
- Live DiffYou watch the paragraphs appear, line by line
- ResultNo approval needed — write was already granted
Evidence: Diff · Artifact · Result
Done is a claim; evidence is what makes it true. Each task ends with a diff attributed to that task, any artifact it produced, and a result that is done, revised or stopped — never a false “complete”.
A result is not a chat summary. If a command was refused mid-task, the result says so.
The live diff streams from the Executor while the task is still running; the file list is attributed to the task, so other edits in the same workspace stay out of it.
Real output from a task issued on a phone and executed on a laptop.
Attributed to the task
Files already modified before the task started, or changed by another process while it ran, are counted separately and kept out of the task's diff.
Evidence, not narration
Read / command / edit events as they happen. Rows that come from filesystem watching are dimmed and hedged — they say a file changed, not who changed it.
Replay after the fact
Every task keeps its timeline and diff. Open a finished task and read what it did, in order.
I hire an AI Employee. Its Agent thinks. A Runtime carries the thinking. An Executor on my computer does only what I allowed. KernelHub organises, governs, and keeps the evidence.
Try it against your own repository
Node.js LTS (with npm) first, then one command on the machine that holds your code. The demo runs in your browser with no account.