用 AI 写代码,钱都去哪了? 用过 Claude Code 或 Cursor 做项目的人,多半都有这个感受:跑一个下午,API 账单上的数字就蹭蹭往上涨。费用大头不是让 AI 写代码,而是那些反复执行的命令。
git status 、 cargo test 、 ls 、 grep ……这些命令 AI 每执行一次,输出结果就会完整塞进上下文窗口。原始的 git status 输出可能有两千个 token, cargo test 失败时能泻出几百行日志。AI 代理一次会话里会跑几十次这样的命令。乘一下就知道,单是命令输出这一项,就能吃掉大量 token 配额。
rtk 就是专门来处理这个问题的。
rtk 是什么 rtk 全名 Rust Token Killer ,是一个用 Rust 写的命令行代理工具,MIT 开源,托管在 GitHub 上。
它的定位很简单:在 AI 代理执行 shell 命令时,拦截命令输出,把里面的冗余内容去掉,再把压缩后的结果交给 AI。整个过程对 AI 完全透明,AI 不知道中间有人动过手脚,只是收到了更精简的信息。
项目官方给出的数据是:在一次 30 分钟的 Claude Code 会话里,rtk 能把 token 用量从约 11.8 万压到约 2.4 万,整体降幅接近 80% 。
ls cat grep git status
git diff cargo test 合计 ~118,000 ~23,900 -80%
以上数据基于中等规模的 TypeScript/Rust 项目估算,实际节省因项目而异。
正是因为rtk能给我们实际生产中节约大量token,达到省钱的效果,它开源后迅速在GitHub爆火,目前有近40k star。
它怎么工作 rtk 的处理逻辑可以用这张图来说明:
具体来说,rtk 对每类命令分别用四种策略处理:
• 智能过滤 :去掉注释、空行、样板输出。 git push 原本会打出十几行 "Enumerating objects" 之类的进度信息,rtk 过滤后只留一行 ok main 。 • 分组 :把同类信息聚在一起。比如 ls 的输出,按目录层级重新整理成树状,而不是一行行列出来。 • 截断 :只保留有用的部分,去掉重复内容。测试通过的用例不需要逐条列出,失败的才需要关注。 • 去重 :如果日志里同一条错误反复出现五十次,rtk 会合并成一行加一个计数,而不是让 AI 读五十遍一样的内容。 效果非常直观,比如跑 cargo test:
# 原始输出(200+ 行) # rtk 输出(约 20 行) running 15 tests FAILED: 2/15 tests test utils::test_parse ... ok test_edge_case: assertion failed test utils::test_format ... ok test_overflow: panic at utils.rs:18 ...(省略大量通过的用例) AI 只需要看失败的,根本不需要知道哪些通过了。
还有一个细节值得一提: tee 机制 。当命令执行失败时,rtk 会把完整的原始输出保存到本地文件,同时在压缩结果里附上路径。如果 AI 觉得精简版信息不够用,可以直接去读完整日志,不需要重新执行命令。
支持哪些命令 rtk 目前支持 100+ 条命令,覆盖日常开发最常用的工具链。
文件操作
rtk ls . # 优化后的目录树 rtk read file.rs # 智能读文件 rtk read file.rs -l aggressive # 只保留函数签名,去掉函数体 rtk grep "pattern" . # 按文件分组的搜索结果 rtk find "*.rs" . # 精简的 find 输出 Git 全家桶
rtk git status # 紧凑状态 rtk git log -n 10 # 每条提交一行 rtk git diff # 精简 diff rtk git push # 只输出 "ok main" rtk git pull # 只输出 "ok 3 files +10 -2" 测试框架
rtk jest # 只看失败 rtk vitest # 只看失败 rtk pytest # -90% token rtk go test # -90% token rtk cargo test # -90% token rtk rspec # -60%+ token 构建与 lint
rtk tsc # TypeScript 错误按文件分组 rtk cargo build # -80% rtk ruff check # Python lint,-80% rtk golangci-lint run # Go lint,-85% 容器与云
rtk docker ps # 紧凑容器列表 rtk docker logs # 去重日志 rtk kubectl pods # 紧凑 Pod 列表 rtk aws ec2 describe-instances # 精简实例列表 其他实用命令
rtk json config.json # 只显示结构,不显示值 rtk env -f AWS # 过滤指定前缀的环境变量 rtk log app.log # 去重日志 rtk err # 只输出错误 支持哪些 AI 工具 目前 rtk 官方支持 12 款 AI 编程工具:
rtk init -g rtk init -g --copilot rtk init -g --agent cursor rtk init -g --gemini rtk init -g --codex rtk init --agent windsurf rtk init --agent cline rtk init -g --opencode rtk init --agent kilocode
其中 Claude Code 的集成最深。rtk 通过 PreToolUse hook 拦截所有 bash 调用,把 git status 自动重写成 rtk git status
,完全不需要手动加前缀,对 AI 来说也是无感知的。
需要注意一点:这个 hook 只对 bash 工具调用生效。Claude Code 内置的 Read 、 Grep 、 Glob 工具不走 bash,所以不会被自动拦截。如果想对这些场景也用上 rtk,需要在提示词里用 cat 、 rg 、 find 这类 shell 命令,或者直接调用 rtk read 、 rtk grep 。
安装与上手 安装非常简单,三种方式任选:
Homebrew(推荐)
brew install rtk 快速安装脚本(Linux / macOS)
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh 安装完之后需要把 ~/.local/bin 加到 PATH,脚本会提示。
Cargo 源码安装
cargo install --git https://github.com/rtk-ai/rtk 注意:crates.io 上有个同名的包叫 "Rust Type Kit",不是这个项目。用 Cargo 安装时一定要加 --git ,直接 cargo install rtk 会装错。
验证安装
rtk --version # 显示版本号 rtk gain # 查看 token 节省统计 接入 Claude Code
rtk init -g # 安装 hook 并写入 RTK.md 执行完之后重启 Claude Code,hook 就生效了。之后运行 git status 会自动被重写成
rtk git status ,Claude 收到的是压缩后的输出。
Windows 上需要单独说一下。原生 Windows 环境下,bash hook 不能用,rtk 会退回到 CLAUDE.md 注入模式,也就是在提示词里给 AI 写明该怎么用 rtk。过滤功能本身正常,但命令不会自动重写。想要完整体验,建议用 WSL。
Token 分析功能 除了过滤命令输出,rtk 还内置了一套分析工具,可以追踪节省了多少 token。
rtk gain # 汇总统计 rtk gain --graph # ASCII 折线图(最近 30 天) rtk gain -- history # 最近命令历史 rtk gain --daily # 按天分解 rtk gain --all --format json # 导出 JSON,适合接自己的仪表盘 还有一个 rtk discover 命令,可以扫描最近的 shell 历史,找出哪些命令还没有被 rtk 过滤,提示你可以补充配置。
rtk discover # 当前项目 rtk discover --all --since 7 # 所有项目,最近 7 天 如果你想知道整体 AI 会话里 rtk 的覆盖率,可以用:
rtk session # 显示最近会话里 rtk 的采用情况 从 Star 增长曲线来看,这个项目最近涨势不错,说明确实有开发者觉得有用。
关于隐私和遥测 rtk 有一个可选的匿名遥测功能, 默认关闭 ,需要在 rtk init 时主动开启才会收集。
收集的内容很有限:版本号、系统信息、命令数量、节省的 token 数,以及命令类别分布(比如 git 占 45%、cargo 占 20%)。不会收集源代码、文件路径、命令参数、环境变量,也不会收集任何个人信息。
管理遥测的命令:
rtk telemetry status # 查看当前状态 rtk telemetry enable # 开启 rtk telemetry disable # 关闭 rtk telemetry forget # 关闭并删除所有本地数据 也可以用环境变量强制关闭:
export RTK_TELEMETRY_DISABLED=1 总结 rtk 解决的是一个很实际的问题:AI 编程代理在执行 shell 命令时,原始输出里有大量 AI 根本用不上的内容,这些内容白白占用了 token 配额。
rtk 做的事情就是在命令输出进入上下文之前,把冗余的部分过滤掉。不修改 AI 的行为,不改变你的工作流,只是在中间加了一层过滤。
它用 Rust 写,单个二进制文件,零依赖,延迟不到 10ms,几乎感觉不到它的存在。如果你每天都在用 Claude Code 或 Cursor 写代码,不妨试一试,说不定账单能少一截。
GitHub:https://github.com/rtk-ai/rtk