GITHUB DAILY · 第034期
RTK:Rust Token Killer
一个 CLI 代理工具,让 AI 编程助手省下 60-90% 的 Token
单二进制零依赖,一行命令安装即用
🔗 GitHub 🌐 官网 📖 文档
项目速览
项目名
RTK (Rust Token Killer)
GitHub Stars
51,091 ⭐(今日 +704)
编程语言
Rust 92% + Shell 5%
开源协议
MIT
当前版本
v0.40.x
支持命令数
100+
AI 工具集成
13 款主流工具
Token 节省率
60%~90%(平均 89%)
它解决了什么问题?
你有没有算过——用 Claude Code 或 Cursor 编程一小时,到底烧掉了多少 Token?
💡 答案可能让你心疼:一个 30 分钟的典型会话中,AI 工具执行了约 70~100 条 shell 命令,每条命令的原始输出被原封不动塞进上下文窗口。这些输出里,高达 80% 是对 AI 完全无用的噪音。
来看几个触目惊心的例子:
| 命令场景 | 原始输出量 | AI 真正需要的 | 浪费比例 |
|---|---|---|---|
git push | |||
| 15 行进度信息 | |||
| "push 成功" 1 行 | |||
| 93% | |||
cargo test | |||
| (15 个测试) | |||
| 200+ 行含通过测试 | |||
| 仅失败测试 ~20 行 | |||
| 90% | |||
ls -la | |||
| 40+ 行详细信息 | |||
| 目录结构树 | |||
| 80% | |||
tsc --noEmit | |||
| 数百行错误堆栈 | |||
| 按文件分组的错误摘要 | |||
| 75% | |||
docker ps -a | |||
| 宽表格输出 | |||
| 精简容器列表 | |||
| 80% |
核心矛盾在于:CLI 命令的输出是给人看的——进度条、彩色提示、格式化对齐、冗余分隔线……但 LLM 不需要这些。它只需要结构化的关键信息。
更致命的是:Token 浪费直接导致三个连锁反应:
-
💰 成本爆炸 — API 账单里近 70% 花在了噪音 Token 上
-
⚡ 会话缩短 — 200K 上下文窗口被垃圾填满,Agent 频繁重启丢上下文
-
🚫 额度耗尽 — 平面费率下 40% 更快触发速率限制
RTK 的解法非常直接:在命令输出到达 LLM 之前,先经过一层智能过滤和压缩。就像给 CLI 输出装了一个"降噪耳机"。
核心亮点
🔧 一、四层压缩引擎:不是简单裁剪,而是结构化重写
1****Smart Filtering(智能过滤)
移除注释行、空白分隔符、模板代码、ASCII 进度条等噪音内容。例如 cargo test 中 Compiling foo... 和 Downloading... 这类编译进度信息会被完全丢弃。
2****Grouping(分组聚合)
将相似项智能聚合——文件按目录分组而非逐行列出;错误按类型分组,同类型错误只展示一次并标注数量;测试结果按 passed/failed 分块显示。
3****Truncation(智能截断)
保留相关上下文,裁掉冗余部分。git log -n 50 的 50 条 commit 历史会被压缩为单行摘要格式;git diff 的 50 行变更只保留文件路径 + 变更统计。
4****Deduplication(去重折叠)
将重复日志行折叠为一行附带计数:
# 原始:47 行相同的数据库连接失败[repeated 47 times] Failed to connect to database# → LLM 知道问题出现 47 次,只占 1 行 Token
🎯 二、Auto-Rewrite Hook:透明拦截,零感知使用
这是 RTK 最强大的特性——你不需要手动敲 rtk git status。
安装后,RTK 在 AI 工具中注册一个 PreToolUse Hook,当 AI 执行 Bash 命令时自动拦截并重写为 rtk 版本。整个过程对 Agent 完全透明:
# AI 发出的命令:git status# Hook 自动重写为:rtk git status # ← AI 完全不知道 RTK 存在
不同 AI 工具有不同的扩展点,RTK 为每家做了定制适配:
| AI 工具 | 集成方式 | 安装命令 |
|---|---|---|
| Claude Code | ||
| PreToolUse hook | ||
rtk init -g | ||
| Cursor | ||
| preToolUse hook | ||
rtk init -g --agent cursor | ||
| Gemini CLI | ||
| BeforeTool hook | ||
rtk init -g --gemini | ||
| Windsurf | ||
| .windsurfrules 规则注入 | ||
rtk init --agent windsurf | ||
| Cline / Roo Code | ||
| .clinerules 文件 | ||
rtk init --agent cline | ||
| Codex | ||
| AGENTS.md 指令注入 | ||
rtk init -g --codex | ||
| Kilo Code | ||
| .kilocode/rules/ 规则 | ||
rtk init --agent kilocode | ||
| Google Antigravity | ||
| .agents/rules/ 规则 | ||
rtk init --agent antigravity |
📊 三、实测效果:30 分钟会话节省 79.7% Token
以下是在一个中等规模 TypeScript/Rust 项目上使用 Claude Code 30 分钟的真实数据:
| 操作类别 | 执行次数 | 原始 Token | RTK 后 Token | 节省率 |
|---|---|---|---|---|
ls | ||||
/ tree | ||||
| 10 次 | ||||
| 2,000 | ||||
| 400 | ||||
| -80% | ||||
cat | ||||
/ read | ||||
| 20 次 | ||||
| 40,000 | ||||
| 12,000 | ||||
| -70% | ||||
grep | ||||
/ rg | ||||
| 8 次 | ||||
| 16,000 | ||||
| 3,200 | ||||
| -80% | ||||
git status | ||||
| 10 次 | ||||
| 3,000 | ||||
| 600 | ||||
| -80% | ||||
git diff | ||||
| 5 次 | ||||
| 10,000 | ||||
| 2,500 | ||||
| -75% | ||||
git add/commit/push | ||||
| 8 次 | ||||
| 1,600 | ||||
| 120 | ||||
| -92% | ||||
cargo test | ||||
/ pytest | ||||
| 5 次 | ||||
| 25,000 | ||||
| 2,500 | ||||
| -90% | ||||
ruff check | ||||
| 3 次 | ||||
| 3,000 | ||||
| 600 | ||||
| -80% | ||||
| 总计 | ≈118,000 | ≈23,900 | -79.7% |
一位开发者连续使用数周后的累计数据:处理 2,927 条命令,输入 11.6M Token,输出仅 1.4M Token,总共节省 89.2%(10.3M Token)。
⚙️ 四、Rust 工程品质:单二进制,零运行时依赖
R****Rust 核心技术栈
**Rust 92%****Shell 5%**TypeScript 1.5%
编译为单个静态二进制文件,不依赖 Node.js、Python 或任何运行时环境。开箱支持 macOS(x86/ARM)、Linux(x86/ARM)和 Windows(WSL)。
性能开销 <10ms/命令,几乎感知不到延迟。
架构设计亮点:
-
双线程 + mpsc 通道:stdout/stderr 各有独立读取线程,通过通道合并到主处理线程,避免阻塞
-
ChildGuard RAII 模式:自动 wait() 子进程,防止僵尸进程(源码注释提到这修复过一个内核 panic)
-
10 MiB 硬上限:防止失控命令输出撑爆内存
-
原子写入配置:用 NamedTempFile → persist() 防止崩溃损坏 settings.json
-
幂等安装:重复
rtk init不会重复创建 hook
🛡️ 五、TEE 安全网:失败时保留完整日志
你可能会担心:如果过滤太激进,把调试需要的细节也砍掉了怎么办?
RTK 设计了 TEE 机制作为安全网:当命令以非零退出码结束时,自动将完整的未过滤原始输出保存到磁盘:
FAILED: 2/15 tests [full output: ~/.local/share/rtk/tee/1707753600_cargo_test.log]# ← AI 可以读取这个文件获取完整日志
配置文件位于 ~/.config/rtk/config.toml,可设置 TEE 模式(failures / always / never)。
📈 六、内置分析面板:量化你的节省
rtk gain# 总览节省统计rtk gain --graph # ASCII 图表(过去 30 天趋势)rtk gain --daily # 按天分解rtk discover# 发现尚未被 rtk 覆盖的命令rtk session# 最近会话中的 RTK 覆盖率
Token 追踪数据存储在本地 SQLite 数据库(~/.local/share/rtk/tracking.db),支持 WAL 模式并发访问,90 天自动过期清理。支持按项目路径过滤统计(用 GLOB 匹配而非 LIKE,因为路径常包含下划线——典型的 Rust 工程思维)。
实战场景
场景一:日常开发循环
开发者打开 Claude Code 开始一天的工作。AI 反复执行 git status、cat 读文件、grep 搜代码、npm test 跑测试……在 RTK 安装前,这些命令每次都向上下文窗口灌入大量噪音;安装后,所有输出自动降噪。开发者唯一感知到的是——同一个 Session 能用更久了,API 账单变少了。
场景二:大型 Monorepo 项目
Monorepo 下 pnpm list 可能输出上千行依赖树,git diff 动辄数万行变更。RTK 将这些巨量输出压缩为结构化摘要,让 AI 能在有限上下文中理解项目全貌而不被信息淹没。
场景三:团队成本控制
团队中每位开发者都在用 AI 编程工具,每月 API 费用不菲。通过 rtk gain --all --format json 导出数据接入 Dashboard,可以精确量化每个成员、每个项目的 Token 节省情况,为采购决策提供数据支撑。(RTK Cloud 团队版即将推出,$15/dev/月起步。)
上手指南
第一步:安装 RTK
# 方式一:Homebrew(推荐)brew install rtk# 方式二:一键脚本(macOS / Linux)curl -fsSL raw.githubusercontent.com/rtk-ai/rtk/… | sh# 方式三:Cargo 从源码编译cargo install --git github.com/rtk-ai/rtk\… 验证安装rtk --version rtk gain # 显示节省统计(初始为空)
第二步:为 AI 工具启用
# Claude Code / GitHub Copilot(最常用)rtk init -g# Cursor IDErtk init -g --agent cursor# Gemini CLIrtk init -g --gemini# Windsurf / Cline / Kilo Code 等rtk init --agent windsurf rtk init --agent cline rtk init --agent kilocode
⚠️ 初始化后需重启对应的 AI 工具使 Hook 生效。
第三步:验证效果
启动你的 AI 编程工具正常工作一段时间后,运行:
rtk gain # 查看 Token 节省总览rtk gain --graph # 可视化趋势图rtk discover # 发现还能优化的命令
常用命令速查
| 类别 | 命令示例 | 说明 |
|---|---|---|
| 文件 | ||
rtk ls . | ||
| 压缩目录树 | ||
| 文件 | ||
rtk read file.rs | ||
| 智能文件读取 | ||
| 搜索 | ||
rtk grep "pattern" . | ||
| 分组搜索结果 | ||
| Git | ||
rtk git status/diff/log | ||
| 精简 Git 输出 | ||
| Git | ||
rtk git push | ||
| 成功时仅 1 行 "ok main" | ||
| 测试 | ||
rtk cargo test | ||
| 仅显示失败测试 (-90%) | ||
| 测试 | ||
rtk pytest | ||
| Python 测试 (-90%) | ||
| Lint | ||
rtk tsc | ||
| TypeScript 错误按文件分组 | ||
| Lint | ||
rtk ruff check | ||
| Python linting (-80%) | ||
| 容器 | ||
rtk docker ps | ||
| 精简容器列表 | ||
| 云服务 | ||
rtk kubectl pods | ||
| 精简 Pod 列表 | ||
已知局限
-
无法拦截 AI 工具内置工具(如 Claude Code 的 Read/Grep/Glob),这些不走 Bash Hook
-
Windows 原生体验受限,推荐使用 WSL 获得完整功能(包括 Auto-Rewrite Hook)
-
激进过滤偶尔可能丢失调试所需上下文(可通过 TEE 机制恢复完整日志缓解)
-
Token 计数为估算值(基于字符长度×经验系数),非精确 GPT tokenizer 计数——这是有意的设计权衡
今日总结
RTK 解决的是 AI 编程时代的一个隐形成本问题:当 LLM 成为日常开发的协作者,CLI 命令输出的噪音正在悄悄掏空你的钱包和上下文空间。
-
它不是魔法压缩算法——而是结构化重写:理解每种命令输出的语义,然后只保留 LLM 需要的部分
-
它的最佳使用方式不是手动调用——而是透明代理:Hook 机制让 AI 无感知地享受优化
-
它的工程品质值得称道:单二进制、零依赖、原子写入、幂等安装——每一个细节都体现了 Rust 社区的工程严谨性
-
51k Stars 说明这不是一个小众工具——成千上万开发者已经用它省下了大量 Token 开销
如果你每天用 Claude Code / Cursor / Copilot 写代码超过 30 分钟,RTK 大概率能帮你省下一杯咖啡的钱——每天。🚀
GitHub Daily · 第034期 · 2026-05-20 · 早间篇
🔗 github.com/rtk-ai/rtk