Supported agents
Which host you run decides what OMNI can do, and the ceiling is the host’s, not the pipeline’s. This page is worth reading before judging whether OMNI is earning its place.
The tiers
| tier | hosts | what you get |
|---|---|---|
| Full | Claude Code, Codex CLI, Gemini CLI, Aider (pipe) | The host applies OMNI’s rewrite, so the model reads distilled output from its own built-in tools. |
| Handoff-first | Cursor, Windsurf | The host cannot rewrite built-in tool output. omni_run distils anything routed through it, and omni init --cursor installs the rule that makes the agent reach for it. |
| MCP-only | Cline, Roo, OpenCode, VS Code, Zed, Copilot, Antigravity, Hermes, Pi | Memory, recall and session state. No shell distillation, and no claim of it. |
omni doctor # prints the tier for every installed host
Savings are only ever counted where the model actually received less. A host that cannot apply the rewrite will not move the distillation numbers however good the filters get, and claiming otherwise would be the same defect as a distiller reporting a saving it did not make.
Installing for each
omni init --claude omni init --cursor omni init --zed
omni init --cline omni init --roo omni init --roo-code
omni init --copilot omni init --gemini omni init --opencode
omni init --codex omni init --openclaw omni init --antigravity
omni init --hermes omni init --vscode omni init --pi
omni init --all
Host-specific notes
Codex CLI runs only hooks it has been told to trust, and skips the rest without a
word. After omni init --codex, start codex once and approve them under “Hooks need
review”. omni doctor fails until you do. This has bitten before: Codex ran zero
hooks for a whole release while everything looked correctly installed.
Cursor cannot rewrite its built-in shell tool’s output. Intercepting the shell by denying execution and returning output as a hook message is technically possible and was rejected: it tells the agent its command was blocked, loses the exit code, moves execution semantics into OMNI, and bypasses the host’s approval flow.
Claude Code matches more than Bash. The post-tool matcher is
Bash|Read|Grep|WebFetch, which is what finally let the file-read, search and fetch
distillers run at all. Three of them had been fully written and tested and had never
executed on a real session.
Hermes has its own integration page: Hermes Agent.
Windows is supported. Paths, line endings and the .exe suffix are handled, and
the CI matrix includes windows-latest.
Several agents at once
Give each its own identity so the numbers stay separable:
OMNI_AGENT_ID=claude ...
OMNI_AGENT_ID=cursor ...
omni_agents reports which agents are currently active on the project. Every
distillation row carries the id, and any figure that blends them is describing a mix
rather than a product.
Adding a host
The agent modules live in src/agents/, one file per host, and each writes that
host’s own configuration format in that host’s own location. The pattern is small and
mostly mechanical.
The part that is not mechanical is verification. “Provider unreachable” is not a reason to leave a hook path unverified: serve the API and fake only the model. Hooks that had never run in production have been found on three hosts by doing exactly that.