Runtimes
KernelHub does not include a model. It drives a CLI coding agent you installed yourself. Whichever one you pick, grants are checked in the same place: every write, edit and exec goes through KernelHub's built-in Tool Server, against your grants and the workspace boundary.
node -v and npm -v both print a version before installing KernelHub; its installer does not install Node for you. The exception is agy (Antigravity), which comes from Google's own channel.Choosing one
If a supported agent is on your PATH, KernelHub finds it. To pin one:
Valid kinds: claude · codex · agy · qwen · codebuddy · opencode · kimi · mimo · pi · ohmypi · acp · mcp · generic.
Google's runtime here is agy (Antigravity). The kind gemini is still accepted — its adapter is kept, not deleted — but it is retired: Google no longer ships a gemini CLI you can sign in to and use on its own.
Granted is not enforced
Two different things. What a grant allows is decided where the action happens: every write, edit and command the runtime asks for goes through KernelHub's built-in Tool Server and is checked against your grants and the workspace boundary before it runs. Whether a tier is also held by something that does not rely on that path — a verifiable switch on the runtime's own command line, or the optional OS boundary around its process — is a separate question. If nothing can prove it for one of the six, that runtime is marked NOT_READY. That is recorded, not a stop: it still takes work.
Which runtime holds which tier is not repeated here. The table on the home page is built by asking the live registry runtime by runtime, tier by tier, so it moves with the code. A second copy written by hand would drift from it, and swapping runtimes on the strength of a stale copy buys you nothing.
What KernelHub does about it
Routing skips a runtime only when it genuinely cannot take the task — not installed, will not start, cooling down after a quota error, or already failed on this task. One kind of task also looks at the tiers: if it would delete or move data, a runtime that can hold a deny list goes first; if none on the machine can, the task stops at a boundary card before anything is deleted and asks you to release that one run.
Switching mid-task
If the chosen agent runs out of quota or refuses a command it was authorised for, the task can be handed to another agent and continue as the same task, keeping its history and its diff.
What icloser runtimes shows you
It answers three questions this machine could otherwise only answer by reading source: which runtimes are installed, which version each one is, and what each one can do. It only ever runs --version — it burns no model quota and touches no workspace credential, so it also answers on a machine you have not set up yet.
The six states, and the three that must not be folded into them
The state word is printed verbatim by the CLI, so it reads the same in every language. The order below is the order the probe decides in: it reports the first step you can still take.
| State | What it means | Takes work | Your next step |
|---|---|---|---|
| NOT_INSTALLED | This machine has no such executable on PATH. | no hard — not even tried | Install it. If the reason line names a path, the package is on the machine but never got linked onto PATH — installing it again will not help. |
| INSTALLED_NOT_STARTABLE | The file is there, but it will not start — a half-finished install, a missing payload, a broken permission bit. | no hard — not even tried | Reinstall that runtime. Note that --version can still answer in this state, which is exactly why it is not folded into a healthy one. |
| STARTABLE_NOT_AUTHENTICATED | It starts, but it is not signed in on this machine, or the credential it wants is not configured. | no soft — the router still lets it fail with the runtime's own message | Sign in with that runtime's own command, in your own terminal. KernelHub never holds a model API key — it uses the session you already have. |
| TOOL_CHANNEL_INCOMPATIBLE | It cannot be handed the built-in tool server on its command line. Signing in does not fix this one — it is a property of that CLI. | yes | Nothing to do. It still takes work that needs no tool channel; work that does gets routed elsewhere. |
| AUTHENTICATED | Starts, credential is there, tool channel attaches. There is no evidence that it answers right now — a key can be expired, a provider can be rate-limiting. | yes | Nothing required. Want the harder answer? icloser runtimes --verify really asks the model once. |
| HEALTHY | Hard evidence that it takes work right now — something actually asked it and got an answer back. | yes | Nothing. Only --verify can put a runtime here; without it the best a runtime reaches is AUTHENTICATED. |
| STARTABLE_AUTH_UNKNOWN Not one of the six — do not read it as a variant of them | It starts, but the sign-in state cannot be read. We neither guess an OK nor accuse it of being signed out. | yes | Nothing forced. It is still dispatchable — treating "cannot tell" as "no" would idle a machine that can work. |
| USER_SUPPLIED Not one of the six — do not read it as a variant of them | You named the executable yourself with --runtime. "Is it installed" is not a question that applies. | yes | Nothing. This is the door for a runtime KernelHub has never heard of. |
| NOT_APPLICABLE Not one of the six — do not read it as a variant of them | A protocol entry (acp / mcp). It does not correspond to any one executable, so probing it means nothing. | yes | Nothing. This is not "broken" — it is a different kind of thing. |
Scroll the table sideways for the next step →