Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

tierhostswhat you get
FullClaude 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-firstCursor, WindsurfThe 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-onlyCline, Roo, OpenCode, VS Code, Zed, Copilot, Antigravity, Hermes, PiMemory, 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.