Agent Coverage
Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.
Agent Coverage
Section titled “Agent Coverage”A pipeline.toml is written once. How much of it actually runs depends on what your agent’s hook API lets RTK do — and that varies a lot.
Where a column says ”—”, the agent does not offer the capability.
The table
Section titled “The table”Rows are grouped by what works — output compression first, then command rewriting without compression, then partial coverage — and alphabetically within each group.
| Agent | Rewrite the command | Block it | Compress tool output | Add context | Session start | Route via proxy |
|---|---|---|---|---|---|---|
| Claude Code | yes | yes | yes | yes | yes | yes |
| Copilot CLI | yes | yes | yes ¹ | yes | yes | yes |
| Hermes | yes | yes | yes | yes | yes | yes |
| Kilo Code ⁸ | yes | yes | yes | yes | — | yes |
| Mistral Vibe | yes | yes | yes ³ | yes | — | — |
| Oh My Pi | yes | yes | yes | yes | yes | yes |
| OpenCode | yes | yes | yes ² | yes | — | — |
| Pi | yes | yes | yes | yes | yes | — |
| Cursor | yes | yes | MCP only | yes | yes | — |
| Codex | yes ⁵ | yes | — | yes | yes | yes |
| Copilot (VS Code) | yes | yes | — | yes | yes | — |
| Factory Droid | yes | yes | — | yes | yes | — |
| Gemini CLI | yes ⁴ | yes | — | yes | yes | yes |
| OpenClaw | yes | yes | — | — | yes | yes |
| Trae | yes | yes | — | yes | yes | — |
| Windsurf / Devin ⁸ | yes ⁶ | yes | — | yes | yes | — |
| Antigravity ⁸ | — | yes | — | — | — | — |
| Cline ⁸ | — ⁷ | yes | — | yes | — | yes |
| Kimi Code ⁸ | — | yes | — | — | yes | yes |
| Roo Code | — | — | — | — | — | yes |
Command rewriting — turning git status into rtk git status — is allowed by 16 of 20; rtk init installs it on 14. That is RTK’s main mechanism, and it is where most of the savings come from.
Compressing tool output after the fact is allowed by 8; rtk init installs it on 7. Everywhere else the model reads the raw result, because the agent provides no way to replace it.
Footnotes — where the detail matters
Section titled “Footnotes — where the detail matters”- Copilot CLI: output replacement relies on Copilot CLI’s documented
modifiedResultfield. - OpenCode: built-in tools only. MCP results are rebuilt after the hook runs, and built-in output is already truncated by OpenCode before RTK sees it.
- Mistral Vibe: replacement rides on a
denydecision, reaches only the text form of the result, and the UI shows it as a warning. - Gemini CLI: input edits merge rather than replace, and each one makes Gemini append a
[System] Tool input parameters were modifiednote to the output — so rewriting costs a few tokens back. - Codex: the rewrite is honoured only alongside an explicit
allowdecision. Without it the hook fails and the original command runs unwrapped. - Windsurf: now Devin Desktop. Older Windsurf installs are block-only and cannot rewrite.
- Cline: the VS Code extension silently drops input overrides and cannot replace output. Both work only in the SDK/CLI plugin runtime, which is a different install. Hooks are also off by default — enable them in Feature Settings.
- Rules file only: for Kilo Code, Cline, Windsurf / Devin, Kimi Code and Antigravity,
rtk initwrites a rules file asking the model to preferrtk <cmd>and installs no hook. Their row shows what the agent’s hook API allows; with RTK today, nothing is blocked, rewritten or compressed.
What this means per pipeline position
Section titled “What this means per pipeline position”| Position | Where it runs |
|---|---|
hook.before_tool.shell | every agent with a hook |
hook.before_tool.{write,edit,search,web,subagent,mcp,any} | every agent with a hook |
hook.before_tool.read | Claude Code |
hook.after_tool.* | Claude Code |
proxy.request.* | any agent you can point at the daemon (the last column above) |
A non-shell rule can deny or passthrough. It cannot rewrite the call — that
is a shell capability, because rewriting a command is what RTK does.
Each subject sees the facts its conditions need, plus input.* mirroring the
tool’s own arguments so a rule can reach a field RTK has no named condition for:
[[hook.before_tool.edit]]name = "no-lockfile-edits"action = "deny"message = "do not hand-edit lockfiles"when = { basename = "Cargo.lock" }
[[hook.before_tool.mcp]]name = "one-server-only"action = "deny"when = { tool_starts_with = "mcp__payments__" }The tool fact is the category — edit, web, search — so one rule covers
agents that spell the tool differently. Under mcp and any it is the raw tool
name instead, which is what lets a rule target a single MCP server.
read keeps its own evaluator because its conditions (file_exists,
file_bytes, file_lines) are read from disk before the tool runs.
Agents that cannot be made agnostic
Section titled “Agents that cannot be made agnostic”Three are limited by the agent’s own hook API:
- Antigravity — hooks can block a call but never rewrite its arguments,
PostToolUsereturns{}so output is immutable, and there is no base-URL override. Deny-only. - Kimi Code — the hook API is allow/deny with no mutation anywhere. Its API traffic is proxyable, so the proxy layer is the route.
- Roo Code — has no hooks. Only the awareness file and an OpenAI-compatible base URL are available.
Checking your own setup
Section titled “Checking your own setup”rtk pipeline explain --agent cursor --tool Shell --command "git status"explain reports the subject your tool maps to, which rules fire, and how far RTK can take the output on that agent. Agent names accept either spelling — claude and claude-code both work.