rtk

rtk-aiApache-2.0活跃维护

一个用 Rust 写的单文件 CLI 代理,在跑常见开发命令时把 LLM token 消耗砍掉 60-90%,帮编码 Agent 省成本。

CLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies

v1.2.0发布于 2026-11-08 10:46 UTC86,036star +261 / 7 天5,512fork同步于 2026-11-10 05:17 UTC

怎么上手

由 README 提炼,执行前请确认
brew install rtk
rtk init -g
rtk --version && rtk gain
硬件要求按 README 说明

README 未说明硬件要求;为单 Rust 二进制,未提及 GPU 或显存需求。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

拦截并压缩 shell 命令输出,减少 AI 编码代理读取的 token 消耗

一个用 Rust 写的单文件 CLI 代理,在跑常见开发命令时把 LLM token 消耗砍掉 60-90%,帮编码 Agent 省成本。

核心能力

  • 拦截 git、ls、grep、测试等 100+ 命令输出并压缩
  • 按命令类型做过滤、分组、截断与去重四种策略
  • 通过 hook 自动把 shell 命令重写为 rtk 等价命令
  • 支持 Claude Code、Cursor、Gemini CLI 等 18 种 AI 工具
  • 单 Rust 二进制,命令开销低于 10ms

容易踩的坑

crates.io 上存在同名 rtk 项目,装完需用 rtk gain 确认是正确包;rtk 与 rtk-oss 安装的二进制同名,不能共存,需先卸载再装另一个;hook 只对 Bash 工具调用生效,Read/Grep/Glob 等内置工具不经过它。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v1.2.0
  1. dev-1.2.1-rc.627pre-release2026-11-08 · 2026-11-08 20:28 UTC

    这个版本没有写更新说明。

  2. dev-1.2.1-rc.626pre-release2026-11-08 · 2026-11-08 16:29 UTC

    这个版本没有写更新说明。

  3. dev-1.2.1-rc.625pre-release2026-11-08 · 2026-11-08 11:36 UTC

    这个版本没有写更新说明。

  4. v1.2.0最新正式版2026-11-08 · 2026-11-08 10:46 UTC

    1.2.0 (2026-11-08)

    Features

    • git: fold ls-tree path listings by directory (#1816)

    Bug Fixes

    • analytics: sum per-project ccusage rows in monthly economics (#4771)
    • cargo: keep nextest timeouts and retried failures (#4697)
    • cicd: build the deb, rpm and aarch64 Linux binaries as static musl (#5017)
    • dotnet: preserve discovery and classic TRX reports (#4628)
    • gain: distinguish filtered timings from passthrough lifetimes (#4677)
    • git: announce the cap on the filtered git log path (#4152)
    • hermes: close the rewrite's stdin and make its timeout configurable (#3833)
    • hook: honour opt-outs inside a quoted script behind uv run (3467fb2)
    • hook: preserve fish-wrap decisions and reuse permission scans (#4785)
    • hook: rewrite commands without rewriting the text between them (#4132)
    • hook: skip proxy autostart on occupied loopback ports (#4778)
    • hooks: honour exclude_commands for a swapped program called by path (#5019)
    • hooks: preserve host checks when settings cannot be loaded (#4680)
    • init: install the OpenCode plugin independently of agent setup (#4740)
    • init: return exit code 2 when codex uninstall guard refuses hook (fixes #4164) (#4463)
    • init: scope guidance to external commands (#4175)
    • lexer: classify heredocs before /dev/null exemption (#4666)
    • lint: route SQLFluff file shortcuts through lint (#4683)
    • ls: hold a bare listing to what ls prints, not to the long listing rtk asks for (#4833)
    • permissions: ignore NotADirectory and strip BOM before empty check (#4658)
    • pipe: preserve non-JSON Go test reports (#4455)
    • pipeline: swap commands rtk has no filter for (#4685)
    • read: fall back to raw bytes when a plain read is not valid UTF-8 (#4066)
    • read: separate line numbers with a tab (#4647)
    • read: window the tracking baseline like the output, so a partial read is not booked as a saving (#3943)
    • ruff: route flag-first implicit check invocations to check (#3927) (#3968)

    Performance Improvements

    • hook: use mimalloc as the global allocator on musl builds (#4461)
  5. dev-1.2.0-rc.620pre-release2026-11-07 · 2026-11-07 15:25 UTC

    这个版本没有写更新说明。

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    rtk filters and compresses command outputs before they reach your LLM context. Single Rust binary, 100+ supported commands, <10ms overhead.

    Angular builds are supported with rtk ng build: compact build tables with every bundle and diagnostic retained.

    What RTK Does

    RTK intercepts shell commands and compresses their output before your agent reads it.

    OperationWhat RTK does to the output
    ls / treeTree format with file counts instead of one line per entry
    cat / readSmart file reading: signatures and structure over full bodies
    grep / rgTruncates long lines, groups matches by file
    ast-grepGroups structural matches by file, caps overflow
    git statusCompact stat format, grouped by state
    git diffReduced context, headers stripped
    git logHash, author and subject only
    git add/commit/pushConfirmation line instead of full progress output
    cargo test / npm testFailures only, passing tests collapsed to a count
    ruff checkGrouped by rule and file
    sqlfluff lintGrouped by rule and file
    pytestFailures only, traceback trimmed
    go testNDJSON parsed, failures only
    docker psEssential fields only

    How Savings Work

    RTK reduces the bash output your agent reads. That is what RTK measures, and it is not the same as cutting your bill by the same amount.

    Bash output is one contributor to input tokens, alongside your prompt, the system prompt and conversation history. Input tokens are in turn only part of the bill, which also counts output tokens. The reduction dilutes at every step.

    The token counts RTK reports are estimated as bytes / 4 — RTK ships no tokenizer, so the percentages are reliable but the absolute token numbers are approximate.

    Full explanation: How RTK Savings Work

    Installation

    brew install rtk                                              # macOS / Linux
    winget install rtk-ai.rtk                                     # Windows
    curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh
    

    Then check you have the right package — another project named "rtk" exists on crates.io:

    rtk --version   # any current version
    rtk gain        # must show the savings dashboard, not "command not found"
    

    Cargo, pre-built binaries, native Windows, WSL, and uninstall: Installation guide

    What You Install

    RTK ships as three downloads. The two rtk editions install a binary with the same name — hooks, scripts and agent config work unchanged across both — so they cannot be installed together. Uninstall one before installing the other.

    flowchart TD
        agent["Your coding agent"]
    
        subgraph editions["Pick one · both install a binary named rtk"]
            direction LR
            full["<b>rtk</b><br/>Apache-2.0 + BUSL-1.1<br/>hooks · filters · engine"]
            oss["<b>rtk-oss</b><br/>Apache-2.0 only<br/>hooks · filters"]
        end
    
        proxy["<b>rtk-proxy</b><br/>BUSL-1.1<br/>compresses API traffic"]
    
        agent -->|"command output"| full
        agent -->|"command output"| oss
        agent -.->|"API traffic"| proxy
    
        classDef apache stroke:#2da44e,stroke-width:2px,fill:none
        classDef busl stroke:#0969da,stroke-width:2px,fill:none
        classDef mixed stroke:#8250df,stroke-width:2px,fill:none
        classDef plain stroke:#8c959f,stroke-width:1px,fill:none
        class full mixed
        class oss apache
        class proxy busl
        class agent plain
        style editions fill:none,stroke:#d0d7de,stroke-dasharray:4 4
    
    DownloadLicenceContains
    rtk-<target>Apache-2.0 + BUSL-1.1Hook core, every command filter, and the compression engine
    rtk-oss-<target>Apache-2.0 onlyHook core and every command filter. No engine.
    rtk-proxy-<target>BUSL-1.1The RTK Proxy daemon. Never bundled with either rtk.

    Production use is free, engine and daemon included. What the BUSL grant does not cover is offering RTK or a derivative to third parties as a commercial product or service — for that, contact [email protected].

    curl -fsSL .../install.sh | RTK_EDITION=oss sh    # Apache-2.0 edition
    brew install rtk-ai/tap/rtk-oss
    

    What the Apache-2.0 edition omits and where the licence boundary falls: Editions and Licensing

    Quick Start

    # 1. Install for your AI tool
    rtk init -g                     # Claude Code / Copilot (default)
    rtk init -g --gemini            # Gemini CLI
    rtk init -g --codex             # Codex (OpenAI)
    rtk init -g --agent cursor      # Cursor
    rtk init -g --agent windsurf    # Windsurf
    rtk init --agent cline          # Cline / Roo Code
    rtk init --agent kilocode       # Kilo Code
    rtk init --agent antigravity    # Google Antigravity
    rtk init --agent kimi           # Kimi AI
    rtk init -g --agent pi          # Pi
    rtk init --agent omp            # Oh My Pi (OMP)
    rtk init --agent hermes         # Hermes
    rtk init -g --agent droid       # Factory Droid
    rtk init --agent trae           # Trae (project: .trae/hooks.json)
    rtk init -g --agent trae        # Trae global: ~/.trae and existing ~/.trae-cn
    
    # 2. Restart your AI tool, then test
    git status  # Automatically rewritten to rtk git status
    

    The agent receives compact output without ever calling rtk explicitly.

    The hook only fires on Bash tool calls. Built-in tools like Read, Grep and Glob do not pass through it. Use shell commands (cat, rg, find) or call rtk read, rtk grep, rtk find directly.

    Per-agent setup, --dry-run, and uninstall: Quick Start · Supported Agents

    How It Works

      Without rtk:                                    With rtk:
    
      Claude  --git status-->  shell  -->  git         Claude  --git status-->  RTK  -->  git
        ^                                   |            ^                      |          |
        |         full raw output           |            |  compact output      | filter   |
        +-----------------------------------+            +------- (filtered) ---+----------+
    

    Four strategies applied per command type:

    1. Smart Filtering - Removes noise (comments, whitespace, boilerplate)
    2. Grouping - Aggregates similar items (files by directory, errors by type)
    3. Truncation - Keeps relevant context, cuts redundancy
    4. Deduplication - Collapses repeated log lines with counts

    Does RTK break Claude's prompt cache? No. RTK filters output once per command. The result is stored in history and cached normally on subsequent API calls, so the cache keeps working as expected. Smaller outputs also mean cheaper cache writes and reads. See Troubleshooting for details.

    Supported AI Tools

    RTK supports 18 AI coding tools. Each integration rewrites shell commands to rtk equivalents, reducing the bash output the agent reads where the agent supports command interception.

    ToolInstallMethod
    Claude Codertk init -gPreToolUse hook (native binary)
    GitHub Copilot (VS Code)rtk init -g --copilotPreToolUse hook — transparent rewrite
    GitHub Copilot CLIrtk init -g --copilotPreToolUse deny-with-suggestion (CLI limitation)
    Cursorrtk init -g --agent cursorpreToolUse hook (hooks.json)
    Gemini CLIrtk init -g --geminiBeforeTool hook
    Codexrtk init -g --codexPreToolUse hook (updatedInput) + AGENTS.md
    Windsurfrtk init -g --agent windsurf.windsurfrules (project-scoped)
    Cline / Roo Codertk init --agent cline.clinerules (project-scoped)
    OpenCodertk init -g --opencodePlugin TS (execute.before / tool.execute.before), needs 1.18.29 or newer
    OpenClawopenclaw plugins install ./openclawPlugin TS (before_tool_call)
    Pirtk init -g --agent pi (global)TypeScript extension (tool_call)
    Oh My Pi (OMP)rtk init -g --agent omp (global) / rtk init --agent omp (project)TypeScript extension (tool_call, shared with Pi)
    Hermesrtk init --agent hermesPython plugin adapter (terminal command mutation via rtk rewrite)
    Mistral Vibertk init -g --agent vibepre_tool hook (hooks.toml)
    Kilo Codertk init --agent kilocode.kilocode/rules/rtk-rules.md (project-scoped)
    Google Antigravityrtk init --agent antigravity / rtk init -g --agent antigravity.agents/plugins/rtk/ (project) or ~/.gemini/config/plugins/rtk/ (global): plugin.json, hooks.json, rules/AGENTS.md
    Kimi AIrtk init --agent kimiAGENTS.md (project-scoped)
    Factory Droidrtk init -g --agent droid (or per-project)PreToolUse hook in ~/.factory/hooks.json (matcher Execute)
    Traertk init --agent traeNative PreToolUse hook in .trae/hooks.json (RunCommand)
    Trae (global)rtk init -g --agent trae~/.trae/hooks.json, plus ~/.trae-cn/hooks.json when that directory exists

    For per-agent setup details, override controls, and graceful degradation, see the Supported Agents guide. The Hermes plugin source and tests live in hooks/hermes/; installed Hermes runtime files still live under ~/.hermes/plugins/rtk-rewrite/.

    What RTK Covers

    100+ commands across Git, GitHub CLI, Cargo/Rust, JavaScript (npm, pnpm, vitest, jest, tsc, Next.js, Playwright, Prisma), Python (ruff, pytest, mypy, pip), Go (go test, golangci-lint), Ruby, .NET, JVM (Gradle, Maven), PHP, Docker, Kubernetes, AWS, Terraform, and the file/search builtins.

    -v, --verbose          # increase verbosity (-v, -vv, -vvv)
    rtk bypass <cmd>       # run one command unfiltered, still tracked
    

    Every command and its filter: What RTK Optimizes

    Escape hatches

    rtk filters command output by default. When a result looks wrong, bypass the filter for one command to see the raw output and tell a filter bug apart from the real thing:

    rtk bypass git log --oneline -20        # full git log, no truncation
    rtk bypass npm install express          # raw npm output, no filtering
    rtk bypass curl https://api.example.com/data
    
    • What it does: runs one command unfiltered and still tracks it — bypassed commands appear in rtk gain --history with 0% bash output reduction.
    • When to use it: an output looks off and you need to know whether the filter or the command produced it, when debugging a filter, or for an edge case a filter mishandles.
    • rtk proxy <cmd> is a deprecated alias of rtk bypass <cmd>.

    Not the same thing as rtk llm-proxy. rtk bypass runs one local command unfiltered. rtk llm-proxy manages the rtk-proxy daemon, which compresses your agent's provider-API traffic — see RTK Proxy.

    Measure It

    rtk gain                        # Summary stats
    rtk gain --graph                # ASCII graph (last 30 days)
    rtk gain --history              # Recent command history
    rtk gain --daily                # Day-by-day breakdown
    rtk gain --all --format json    # JSON export for dashboards
    
    rtk discover                    # Find missed savings opportunities
    rtk discover --all --since 7    # All projects, last 7 days
    
    rtk session                     # Show RTK adoption across recent sessions
    

    Attribution, the live dashboard and export formats: Token Savings Analytics

    RTK Proxy (optional)

    rtk optimizes command output before your agent reads it. The rtk-proxy daemon extends the same engine to your agent's provider-API traffic — a local background process that sits between your agent and the provider and runs the pipeline on the traffic itself: it compresses payloads, strips bytes no model ever needed before forwarding, and carries the calls your pipeline routes to cheaper models, so they borrow the credential your agent already sends and show up in rtk gain. It can also align prompt-cache breakpoints where the agent leaves them open (opt-in).

    rtk claude              # start the daemon if needed, then launch Claude through it
    rtk llm-proxy status    # is it up
    rtk gain                # savings, command-filtering and proxy side by side
    

    Two independent ways in, because not every harness has a session hook:

    What it does
    rtk init -gOffers to set it up once: writes the base URL and the rtk:proxy pipeline, then asks how the daemon should come back after a reboot — SessionStart hook, background service, or neither.
    rtk <harness>No configuration at all. Starts the daemon, points the harness at it, then execs it. Needs no hook system, which is why it covers harnesses that have none.

    rtk <harness> resolving is itself the signal that traffic really goes through the daemon — the subcommand exists only where redirection is verified. Today that is rtk claude. A harness without one is never silently unproxied: it falls through to plain passthrough, and rtk llm-proxy setup lists what can be launched.

    It is a separate binary under a separate licence (BUSL-1.1), shipped as its own rtk-proxy-<target> archive — rtk never links it.

    Setup and subcommands: RTK Proxy · what it compresses: What the Proxy Compresses · settings and endpoints: Proxy Configuration

    The Engine (pipeline.toml)

    Everything RTK does — which commands get rewritten, what happens to a tool's output, what the proxy compresses — is expressed in one composable file. The engine (engine/, crate rtk-engine, BUSL-1.1) reads it, so the levers are configurable instead of hard-coded.

    Upgrading changes nothing. With no pipeline file you are on rtk:default: the same PreToolUse rewrite, the same awareness file, your filters.toml, your config.toml. Everything beyond that is opt-in, one line at a time:

    # ~/.config/rtk/pipeline.toml
    [pipeline]
    extends = ["rtk:posthook", "rtk:proxy"]
    

    The tour: Pipelines · the reference: Writing a Pipeline, Conditions and Judges, Methods, Tasks and Upstreams · the commands: Pipeline Commands · write your own method: Plugins

    Documentation

    rtk-ai.app/guide is the full user guide.

    Installationevery install method, Windows, WSL, uninstall
    Quick Startper-agent init, --dry-run, first savings
    Supported Agentssetup detail, override controls, degradation
    Agent Coveragewhat each agent's hook API lets RTK do
    What RTK Optimizesevery command and its filter
    Configurationconfig.toml, env vars, recall recovery
    Token Savings Analyticsrtk gain in full
    Pipelinesthe engine: pipeline.toml, rules, judges, tasks, sharing
    RTK Proxythe daemon: setup, what it compresses, settings
    Editions and Licensingwhat each download contains
    Telemetry & Privacywhat is collected, how to opt in, your GDPR rights
    Troubleshootingcommon issues, prompt-cache questions

    Repository references: engine/README.md · proxy/README.md · ARCHITECTURE.md · CONTRIBUTING.md · SECURITY.md

    RTK collects no command content and no file contents. Telemetry is anonymous and off by default — it sends nothing until you opt in with explicit consent (GDPR Art. 6 & 7) via rtk telemetry enable, and documented in Telemetry & Privacy.

    Star History

    StarMapper

    Core team

    Contributing

    Contributions welcome! Please open an issue or PR on GitHub.

    Join the community on Discord.

    License

    The rtk CLI is Apache-2.0 — see LICENSE.

    It links one component under a different licence. rtk-engine (engine/) is BUSL-1.1, source-available: see engine/LICENSE. Its Additional Use Grant permits production use as part of the rtk binary, so running rtk is covered; using the engine on its own, or inside another product, is not until the Change Date.

    The rtk-proxy daemon (proxy/) is BUSL-1.1 on the same terms and ships as its own archive with its licence alongside — rtk never links it.

    RTK Pro

    Your company is looking to take control back on your AI fleet ? RTK Pro provides the control layer for costs, security and governances for all agents.

    Check it out : RTK Pro.

    Disclaimer

    See DISCLAIMER.md.