先说结论

用 Claude Code、Codex、Cursor 这类工具写代码,最烧钱的往往不是模型思考,而是它反复把 git statuscargo testdocker ps 的整屏输出塞回上下文。rtk 就是一个卡在 Agent 和 shell 之间的 CLI 代理,把命令输出过滤压缩后再喂给模型,Rust 单二进制、零依赖、Apache-2.0。

但预期必须先摆正:它削的是命令输出,不是你的账单。README 自己写得很直白——命令输出只是输入 token 的一小部分,输入 token 又只是账单的一部分,每往下一层都在稀释。更值得警惕的是,过滤器会把硬失败伪装成良性摘要,这是社区实测踩出来的坑。

它到底做什么

rtk 拦截 shell 命令,把输出压缩后再交给你的 Agent。它逐条命令认,而不是粗暴截断:

命令rtk 怎么处理输出
ls / tree目录树加文件计数,不再一行一个条目
cat / read智能读文件,签名与结构优先于函数体
grep / rg截断长行,按文件分组
git status / diff / log紧凑 stat 按状态分组 / 精简上下文 / 只要 hash、作者、主题
git add / commit / push一行确认替代整段进度输出
cargo test / npm test只留失败项,通过的折叠成一个计数
docker ps / kubectl logs只留关键字段 / 日志去重

背后是四种策略:Smart Filtering(去注释、空白、样板)、Grouping(按目录/错误类型聚合)、Truncation(保留相关上下文)、Deduplication(重复日志折叠成计数)。仓库声明覆盖 100+ 条命令,开销小于 10ms。

怎么用(命令逐字取自 README)

安装,三条路任选:

brew install rtk

curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh

cargo install --git https://github.com/rtk-ai/rtk

验证装对了没:

rtk --version   # Should show "rtk 0.28.2"
rtk gain        # Should show the savings dashboard

这里 README 特意给了个警告:crates.io 上另有一个同名的 rtk(Rust Type Kit),如果 rtk gain 跑不动,说明装错了包,改用上面的 cargo install --git

接上你的 AI 工具,装 hook:

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 --opencode          # OpenCode plugin
rtk init --agent cline          # Cline / Roo Code
rtk init --show                 # Verify installation

装完必须重启你的 AI 工具。hook 会把 Bash 调用里的 git status 透明改写成 rtk git status。注意范围:hook 只作用于 Bash 工具调用,Claude Code 内置的 Read、Grep、Glob 不走 hook,那部分要自己显式调 rtk read / rtk grep

配置文件(macOS 在 ~/Library/Application Support/rtk/config.toml):

[hooks]
exclude_commands = ["curl", "playwright"]  # skip rewrite for these

[retriever]
mode = "sqlite"         # sqlite (default) | tee (legacy files) | disabled

命令失败时 rtk 会把完整未过滤输出存下来,模型不用重跑就能取回,格式是 FAILED: 2/15 tests 后面跟一行 [full output: rtk recall 3f9c2a81d4e7]

优点

  • Apache-2.0,可商用可改,没有 copyleft 包袱。
  • 单二进制、零依赖,仓库声明开销小于 10ms,不用为它起服务。
  • 认命令而不是乱截:git、测试框架、构建、lint、包管理、容器、k8s、AWS、Pulumi 各有专用过滤器,覆盖面在同类里算厚。
  • 失败留后路:出错时完整输出进 sqlite,能 rtk recall 取回,不逼 Agent 重跑一遍。
  • 不破坏 prompt cache:每条命令只过滤一次,结果照常进历史并被缓存,官方说明还提到更小的输出意味着更便宜的缓存写入与读取。
  • 遥测默认关闭,要显式 opt-in;不想碰可以直接 export RTK_TELEMETRY_DISABLED=1 强制关掉。
  • 适配面广:README 列了 17 个 AI 编码工具,从 Claude Code、Copilot、Cursor、Gemini CLI、Codex 到 Cline、OpenCode、Hermes、Kimi 都有对应装法。

缺点与风险(社区 issue 实测)

三个要命的点

  • 过滤器会把硬失败说成正常:issue #2317 报告 pytest 收集错误被显示成「No tests collected」,被标为 help wanted、高优先级。让 Agent 拿这个当验收结论,会直接误判。
  • 重写会绕过权限设置:issue #3152 指改写后的命令不再走 Claude Code 的权限配置,标签同时挂了 area:security 和 priority:high。
  • 压缩率可能远不及文档:issue #2001 有人实测平均只压掉约 2%,远低于文档写的 40%。效果高度依赖你的命令构成。

另外几个真实短板也得记下:自动重写可能丢掉精确的文件与路径语义(#2110,高优先级);有一条 P0 记录是被 Claude Code 调用时直接崩溃(#1556);cargo install --git 走的其实是 develop 分支、Cargo.toml 过期,容易装到旧版本(#2235);走 hook 重写时 rtk gain 统计记不上(#1082、#3276),省了多少你自己都看不准。还有两条实操层面:Flutter 与 Dart 命令目前还没支持(#1098 仍 open),Flutter 主力用不上;部分过滤器 shell out 给 ripgrep,rg 不在 PATH 上会一直告警。最后,rtk 不内置 tokenizer,token 数按 bytes/4 估算——官方原话是百分比可信、绝对 token 数只作参考

最终效果:适合谁、不适合谁

适合:重度用 Claude Code / Codex / Cursor 写代码,日常命令又长又吵(跑测试、构建、看 git、查 k8s 与 AWS),想把上下文里那些噪音压下去、顺带降低缓存成本的人。

不适合:指望装上就把账单砍九成的人;把 Agent 当验收工具、依赖精确退出码与完整错误栈的人;以及 Flutter / Dart 主力项目——过滤器还没覆盖。

落地三坑:① 算账要换算,命令输出削减不等于账单削减,别拿 README 的 90% 当财务预期;② 涉及失败与错误的命令,先跑一次原始命令或用 rtk proxy 对照,别只信压缩摘要;③ 关注 #3152 权限绕过,在没权限约束的环境里别裸用。

下期预告:把上下文管起来之后,下一个烧钱点是记忆——开源 Agent 记忆层方案横向对比。

数据来源:GitHub Trending 官方页(Rust 周榜)+ github.com/rtk-ai/rtk 仓库页、raw README(master 分支)、issues(抓取时间 2026-09-16)。许可 Apache-2.0,安装与用法命令均逐字取自 README。压缩率为项目自报与社区 issue 反馈,未独立复现。