大家好,我是何三,独立开发者

你的 Claude Code 账单,可能有一半在烧冤枉钱

用 Claude Code 写了一天代码,回头一看 Token 消耗——11.8 万。其中 8 万多是 git statuscatcargo test 这些基础命令的原始输出喂进去的。

说白了,AI 编程工具的 Token 开销大头,根本不在代码生成本身,而在那些反反复复执行的终端命令。每次 git difflsgrep 输出的完整内容,全都原封不动塞进上下文窗口,占着 Token 位。

最近 GitHub 上冒出来一个叫 RTK 的项目,23.4k Star,专门解决这个痛点——在命令输出到达 LLM 之前,先帮你「减肥」。

rtk_comparison

一个 Rust 二进制,干了什么脏活

RTK 的全称没什么花哨的,就是一个 CLI 代理工具。用 Rust 写的,编译出来就一个二进制文件,零外部依赖。

它的思路非常简单粗暴:拦截命令输出 → 智能压缩 → 再喂给 LLM

rtk_howitworks

具体来说,RTK 对每条命令的输出做四件事:

  • 智能过滤:把注释、空行、样板代码这些对 AI 理解毫无帮助的噪音全删掉
  • 分组聚合:把类似的东西归类到一起,比如按目录结构折叠文件列表
  • 智能截断:保留核心上下文,砍掉冗余部分
  • 去重折叠:重复的日志行合并成一行,后面标个出现次数

说白了就是,以前 git status 输出 2000 个 Token,RTK 压缩后只剩 400 个,AI 照样能理解当前项目状态,但成本降了 80%。

最狠的是 git add/commit/push 这类操作——执行完了输出「ok main」就够了,RTK 直接砍掉 92% 的 Token。

上手体验:三分钟搞定

安装就一行命令的事:

brew install rtk

没有 Homebrew 的话,curl 一行搞定:

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

装完之后,运行初始化:

rtk init -g

这条命令会自动安装一个 Bash Hook——之后你在 Claude Code 里输入的命令,RTK 会在执行前透明地改写。比如你敲 git status,Claude Code 发出去的时候自动变成 rtk git status,输出被压缩后再返回给 Claude。

Claude 完全不知道这个 Hook 的存在,它只是收到了一个更精简的输出结果。

装完重启 Claude Code,直接正常用就行,感受大概是这样的:

# 以前 git push 输出 15 行,约 200 tokens
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 350 bytes | 350.00 KiB/s, done.
...

# 现在只有 1 行,约 10 tokens
ok main

想看省了多少 Token,可以随时运行:

rtk gain          # 查看汇总统计
rtk gain --graph  # 最近 30 天的 ASCII 图表

兼容性:不止 Claude Code

RTK 目前支持 10 款主流 AI 编程工具

工具 安装命令
Claude Code rtk init -g
GitHub Copilot rtk init -g --copilot
Cursor rtk init -g --agent cursor
Gemini CLI rtk init -g --gemini
Codex (OpenAI) rtk init -g --codex
Windsurf rtk init --agent windsurf
Cline / Roo Code rtk init --agent cline

覆盖了市面上主流的 AI 编程助手。不管你用哪个,装上 RTK 都能白嫖那一波 Token 节省。

支持的命令超过 100 种,涵盖 git、cargo/npm/pnpm、docker、kubectl、pytest、eslint、aws cli……基本日常开发会用到的终端命令,RTK 都做了压缩适配。

一个细节:失败了也能回溯

这是我觉得 RTK 设计得比较聪明的地方。

正常的命令输出被压缩了,但如果命令执行失败了呢?这时候 AI 需要看到完整的错误信息来排查问题。

RTK 内置了一个叫 Tee 的机制——命令失败时,自动把完整的原始输出保存到本地文件,然后在压缩输出里附上一行路径:

FAILED: 2/15 tests
[full output: ~/.local/share/rtk/tee/1707753600_cargo_test.log]

AI 看到失败提示后,可以自己去读那个日志文件,拿到完整信息。既省了日常开销,又不影响错误排查

这个设计说实话挺到位的。很多「优化」工具最大的问题就是压缩过度导致丢关键信息,RTK 用这种 fallback 机制解决了。

什么时候该用,什么时候不用

适合用的场景:

  • 每天用 Claude Code / Cursor 写代码超过 2 小时,月 Token 开销过百刀
  • 项目比较大,git diffcargo test 这类命令输出动辄几百行
  • 团队多人共用 AI 编程工具,想控制整体成本

可能不适合的场景:

  • 偶尔用一下 AI 辅助,Token 消耗本来就不多,装了也省不了多少
  • 对实时性极度敏感的场景(RTK 的压缩延迟在 10ms 以内,正常使用基本无感)
  • Claude Code 内置的 Read、Grep、Glob 工具不经过 Bash Hook,RTK 拦截不到——需要手动用 rtk readrtk grep 替代

本文使用 MGO 编辑并发布

关注"何三笔记",回复"mgo" 免费下载使用