AI Employees that actually work.
Govern every agent behind them.
KernelHub is an AI Employee Runtime & Governance Platform. You hire an AI Employee. Its Agent thinks. A Runtime such as Claude, Codex or Qwen carries that thinking. And an Executor on your own Mac, Linux or Windows machine carries out only the actions you allowed — then hands you the diff, the artifact and the result.
The shell command installs on macOS and Linux; the PowerShell one needs Windows PowerShell 5.1 or later. Installers, a portable package and signed binaries with checksums are on the download page.
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.
Execution + Governance, in one product
Two things have to be true at once: the AI Employee gets real work done, and every agent behind it stays governed. KernelHub is built so that neither one is left to trust.
An AI Employee Runtime & Governance Platform
It organises who works (the AI Employee), lets the intelligence run on whichever Runtime fits, keeps every action inside a Workspace and a Permission contract, executes on your own machine through an Executor, and keeps the evidence.
- Not a model — it never calls one itself.
- Not a single agent — it governs the agents you already use.
- Not a Runtime launcher — a Runtime is one part it schedules, not the product.
- Not a CLI wrapper — the CLI is one door into KernelHub, not KernelHub.
- Not a remote terminal — nothing types into your machine; only allowed actions land on it.
Employee · Agent · Runtime · Executor
Most agent products fold these into one thing. KernelHub keeps them separate, because the whole point is that the one who thinks is not automatically the one who is allowed to act.
The one you hire
A role with a definition, skills, an environment, a workspace assignment, permissions, tasks, memory and results. Example: an AI Developer. You hire a role, not a model.
The intelligence it works with
Understanding, planning, reasoning, calling tools, deciding. The Agent is the thinking part of the Employee's work.
The model that carries the intelligence
Claude, Codex, Qwen, Antigravity, MiMo and others. It can be switched. Switching the Runtime does not change the Employee — its role, skills, workspace, permissions and task context stay.
The governed hands on your machine
A controlled execution layer on your own Mac, Linux or Windows machine. It carries out authorised actions — read, write, exec, build, test, git, artifact, device — and nothing else.
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.
From you to the result — and where the phone stands
Intelligence does not equal authority.
Traditional agent products fuse three things into one: the AI's decision, the system's permissions, and execution on your machine. If the model decides, it also acts. KernelHub takes them apart.
Decide, get permission, execute — one blob
The same process that reasons about your code is the process that has the keys to it. Every mistake in judgement is immediately a change on disk.
Decide in one place, act in another, approve on the device in your hand
The Agent decides. The Workspace bounds where. The Permission contract bounds what. The Executor is the only thing that acts, and only within both. Writing a file, running a command, building, pushing to git or operating a device must pass through Workspace + Permission + Executor.
The question has changed
It is no longer “is there a smarter agent?”. It is: who organises the work, who authorises it, who provides the environment, who bounds the workspace, who chooses the Runtime, and who confirms the work is actually done. That is what KernelHub is for.
You hire a role, not a model
In KernelHub you hire an AI Developer. Behind it the Runtime Router schedules whichever Runtime fits the task. The Employee's identity, role, skills, workspace, permissions and task context do not change when the Runtime does.
Hire → Assign → Work → Approval → Artifact → Result
What an AI Employee's day looks like in KernelHub, end to end.
Scroll sideways to see the whole chain →
Where the intelligence stops and the authority begins
The Agent may decide anything. Only the Executor acts — and at a WRITE or EXEC you have not granted, it waits for you.
Scroll sideways to see the whole chain →
Say it on the phone. It runs on your Mac.
This is the actual path a task takes in v1.0.2 — every node below exists in the shipping product.
Four things it actually does
Everything below ships in v1.0.2. How far it has been verified end to end depends on the platform: macOS — on real machines; Linux — in containers, real-machine verification still pending; Windows — on real machines. Nothing on this page describes work in progress.
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.
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.
Watch it work, line by line
While a task runs you see the evidence stream — files read, commands run, files changed — and a live diff with real hunks. Changes are attributed to the task, so other edits in the same workspace stay out of it.
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.
Two tasks, start to finish
Both of these are things v1.0.2 does today. Nothing here is a mock-up of a future feature.
“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
13 runtimes — and who actually holds each of the six tiers
Granting a permission and something enforcing it are two different things. This table is generated from the live registry: every runtime is asked, tier by tier, whether that grant really lands. Nothing here is typed in by hand.
| 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.
A table that prints SUPPORTED when nobody can prove the boundary is held is worse than no table. So this one shows who holds each tier and prints a gap as a gap. A gap does not stop the work — whatever you grant, only two things are refused outright: touching credentials, and writing outside the workspace.
That outer OS boundary is an optional hardening layer, not something your work depends on. It is drawn on macOS (seatbelt) and Linux (Landlock); on Windows it is off by default in this release, so a Windows machine shows more gaps. When it cannot be drawn the work still runs — the cell just shows the gap. The table is computed per machine, and we would rather say that than imply it is universal.
Not a spinner. The actual diff.
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.
The boundary is the product
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.
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.
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.
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.
Data handling is described in the Privacy Policy. Terms of use are in the Terms of Service.
Try it against your own repository
The demo runs entirely in your browser with no account. The real thing needs Node.js LTS (with npm) installed first, then one command on the machine that holds your code.