Skip to content

RTK (Rust Token Killer) Getting Started

整理日期:2026-04-11 仓库地址:https://github.com/rtk-ai/rtk Stars: 快速增长中 | License: MIT | Language: Rust

项目简介

RTK 是一个用 Rust 编写的高性能 CLI 代理,拦截 AI 编码工具(Claude Code、Cursor、Copilot、Gemini CLI 等)执行的 shell 命令,对输出进行智能过滤和压缩,将 LLM token 消耗降低 60-90%

核心价值:AI 编码工具在工作时会频繁调用 git statuscatcargo test 等命令,原始输出充满冗余信息(时间戳、权限位、通过的测试用例等)。RTK 作为透明代理,只把 LLM 真正需要的信息传递过去。

一句话概括:给 AI 编码助手装一个"信息过滤器",让它用更少的 token 做更多的事。

项目结构

rtk/
├── src/
│   ├── main.rs              # CLI 入口,2537行,Clap 路由所有子命令
│   ├── cmds/                # 命令过滤模块(按生态系统组织)
│   │   ├── git/             # git status/diff/log/add/commit/push + gh CLI
│   │   ├── rust/            # cargo test/build/clippy
│   │   ├── js/              # eslint/tsc/vitest/playwright/next/prettier/prisma/pnpm
│   │   ├── python/          # ruff/pytest/pip/mypy
│   │   ├── go/              # go test/build/vet + golangci-lint
│   │   ├── ruby/            # rake/rspec/rubocop/bundle
│   │   ├── dotnet/          # dotnet build/test/binlog
│   │   ├── cloud/           # aws/docker/kubectl/curl/wget/psql
│   │   └── system/          # ls/read/grep/find/json/log/env/deps/summary
│   ├── core/                # 基础设施
│   │   ├── runner.rs        # 命令执行骨架(run_filtered 函数)
│   │   ├── filter.rs        # 代码过滤(None/Minimal/Aggressive 三级)
│   │   ├── tracking.rs      # SQLite token 追踪
│   │   ├── tee.rs           # 失败时保存原始输出
│   │   ├── config.rs        # 配置加载
│   │   └── telemetry.rs     # 匿名遥测(每日一次)
│   ├── hooks/               # AI 工具集成钩子
│   │   ├── init.rs          # rtk init 安装钩子(支持 10+ 工具)
│   │   ├── rewrite_cmd.rs   # 命令重写逻辑
│   │   ├── hook_cmd.rs      # Copilot/Gemini 钩子处理
│   │   └── permissions.rs   # 安全权限控制(allow/deny/ask)
│   ├── discover/            # 发现未使用 RTK 的命令
│   ├── analytics/           # 经济分析(token 成本计算)
│   ├── learn/               # 学习模式
│   └── parser/              # 通用解析器
├── hooks/                   # 预构建的钩子脚本
├── openclaw/                # OpenClaw 插件
├── tests/                   # 集成测试
└── Cargo.toml               # 22 个依赖,优化的 release profile

规模:64 个模块(42 个命令模块 + 22 个基础设施模块),单二进制 ~4.1MB。

核心架构

代理模式(Proxy Pattern)

  无 RTK:                                     有 RTK:

  AI Agent  --git status-->  Shell  -->  git     AI Agent  --git status-->  RTK  -->  git
    ^                                    |         ^                        |          |
    |      ~2,000 tokens(原始输出)      |         |   ~200 tokens         | 过滤     |
    +------------------------------------+         +------- (压缩输出) -----+----------+

六阶段执行流程

1. PARSE   → Clap 解析命令和标志(-v, -u)
2. ROUTE   → main.rs match 路由到对应模块
3. EXECUTE → std::process::Command 执行原始命令
4. FILTER  → 按策略过滤输出(核心价值所在)
5. PRINT   → 输出压缩结果
6. TRACK   → 记录到 SQLite(token 统计)

12 种过滤策略

RTK 不是简单的 | head,而是针对不同命令类型使用不同的过滤策略:

#策略适用场景压缩率
1Stats Extractiongit status/log/diff90-99%
2Error Onlyerr 模式,只保留错误60-80%
3Grouping by Patternlint/tsc/grep 按规则/文件分组80-90%
4Deduplication日志去重 + 计数70-85%
5Structure OnlyJSON 只保留 schema80-95%
6Code Filteringread 三级过滤(none/minimal/aggressive)0-90%
7Failure Focus测试只显示失败用例94-99%
8Tree Compressionls 目录树压缩50-70%
9Progress Filteringwget 去除进度条85-95%
10JSON/Text Dual Moderuff/pip 优先用 JSON80%+
11State Machine Parsingpytest 状态机解析90%+
12NDJSON Streaminggo test 逐行 JSON90%+

Hook 系统(自动重写)

RTK 最强大的功能是透明重写钩子:AI 工具执行 git status 时,钩子自动将其改写为 rtk git status,AI 完全无感知。

Hook 拦截流程:
1. AI Agent 发出 Bash 命令 "git status"
2. PreToolUse hook 拦截
3. rtk rewrite "git status" → "rtk git status"(exit 0 = 允许, 1 = 透传, 2 = 拒绝)
4. 执行重写后的命令
5. AI 收到压缩输出(不知道发生了重写)

支持 10 个 AI 工具:Claude Code、Copilot(VS Code + CLI)、Cursor、Gemini CLI、Codex、Windsurf、Cline/Roo Code、OpenCode、OpenClaw。

核心工作流程

用户视角

bash
# 1. 安装
brew install rtk          # 或 cargo install --git

# 2. 一键集成 AI 工具
rtk init -g               # Claude Code(默认)
rtk init -g --copilot     # GitHub Copilot
rtk init -g --gemini      # Gemini CLI
rtk init -g --agent cursor  # Cursor

# 3. 重启 AI 工具,开始省钱
# 所有 Bash 命令自动走 RTK,无需改变使用习惯

开发者视角(添加新命令过滤器)

  1. src/cmds/{ecosystem}/ 创建 xxx_cmd.rs
  2. 实现过滤函数 fn filter_xxx(output: &str) -> String
  3. main.rs 添加 Commands::Xxx 枚举
  4. discover/registry.rs 注册重写规则
  5. 编写测试

部署步骤

编译

bash
git clone https://github.com/rtk-ai/rtk.git
cd rtk
cargo build --release    # ~1m43s(首次编译含依赖)
./target/release/rtk --version   # rtk 0.35.0

Release profile 优化配置:

  • opt-level = 3:最高优化
  • lto = true:链接时优化
  • codegen-units = 1:单编译单元
  • strip = true:去除调试符号
  • panic = "abort":更小的二进制

验证

bash
rtk --version    # 确认版本
rtk ls .         # 测试基本功能
rtk gain         # 查看 token 统计

Demo 示例

Demo 1: 目录列表压缩

bash
$ rtk ls src/
analytics/
cmds/
core/
discover/
filters/
hooks/
learn/
parser/
main.rs  82.9K

对比原始 ls -la(包含权限、所有者、时间等冗余信息),压缩率 ~75%。

Demo 2: Git 操作压缩

bash
$ rtk git status
* master...origin/master
~ Modified: 2 files
   .gitignore
   CLAUDE.md
? Untracked: 2 files
   .claude/skills/gitnexus/
   AGENTS.md
bash
$ rtk git push    # 原始输出 15 行 → 1 行
ok main

Demo 3: 智能代码阅读

bash
$ rtk read src/core/filter.rs -l aggressive --max-lines 20
# 只保留函数签名,去除所有函数体
pub enum FilterLevel { ... }
pub trait FilterStrategy {
    fn filter(&self, content: &str, lang: &Language) -> String;
}
pub enum Language { ... }

Demo 4: Token 节省统计

bash
$ rtk gain
RTK Token Savings (Global Scope)
═══════════════════════════════════════════
Total commands:    12
Tokens saved:      9.6K (79.1%)
Efficiency meter: ███████████████████░░░░░ 79.1%

关键发现 / 学习心得

1. 极简但有效的设计哲学

RTK 不用 ML、不用 LLM,纯粹靠针对每种命令的规则化过滤。12 种策略覆盖了绝大多数开发场景。这比用 AI 来压缩 AI 输出更靠谱,因为:

  • 延迟极低(5-15ms 额外开销)
  • 确定性输出(不会丢失关键信息)
  • 零成本(不需要额外 API 调用)

2. Hook 系统是杀手锏

rtk init -g 一键安装后,所有 AI 工具的 Bash 命令自动走 RTK,用户和 AI 都无需改变习惯。这种透明代理 + 自动重写的模式值得学习。

3. 经济账很清楚

一个 30 分钟的 Claude Code session 大约消耗 118K tokens,用 RTK 后降到 24K。按 Claude Sonnet 的定价($3/$15 per 1M tokens),每个 session 能省约 $1.4。重度用户一天 10 个 session 就是 $14/天。

4. 生态系统覆盖全面

支持 8 个语言生态(Git、Rust、JS/TS、Python、Go、Ruby、.NET、Cloud),42 个命令模块,100+ 条具体命令。基本覆盖了全栈开发者日常使用的所有 CLI 工具。

5. 安全设计合理

Hook 系统内置了权限控制(allow/deny/ask),防止恶意命令通过重写绕过安全检查。Tee 机制在命令失败时保存原始输出,确保调试信息不丢失。

6. 与 OpenClaw 的集成

RTK 已经有 OpenClaw 插件(openclaw/ 目录),使用 before_tool_call hook 实现自动重写。安装方式:openclaw plugins install ./openclaw

性能数据

指标数值
二进制大小~4.1 MB
冷启动时间~5-10ms
内存占用~2-5 MB
命令额外延迟5-15ms
平均 token 压缩率60-90%
支持的命令数100+
支持的 AI 工具10 个

参考资源

实测验证:RTK + Claude Code Token 消耗对比

测试日期:2026-04-12 | 测试环境:AWS EC2 (dev-server) | Claude Code 2.1.104 + Bedrock Opus

测试设计

在 RTK 自己的 Rust 仓库上,让 Claude Code 完成一个真实编码任务:添加 docker build 输出过滤模块(读源码 → 写代码 → cargo check → cargo test → 修复 → 重复)。分别在启用和禁用 RTK hook 的条件下跑同一个 prompt,对比 token 消耗和费用。

测试 Prompt:

Add docker build output filtering support to RTK. Look at how container.rs handles docker ps/images/logs, then add a DockerBuild variant that filters verbose build output (layer hashes, download progress, cache messages) into a compact summary showing only the final image tag and any errors. Include unit tests. Run cargo check and cargo test to verify everything compiles and passes.

结果对比

总体数据

指标✅ 有 RTK❌ 无 RTK差异
总 Turns26 (max)26 (max)相同
总耗时240s295sRTK 快 18%
input_tokens10,185586
cache_creation63,45852,483+20.9% ⬆️
cache_read1,220,1891,272,396-4.1%
output_tokens12,61113,907-9.3%
总费用$1.373$1.315+4.4% ⬆️

早期单命令测试(参考)

命令原始输出RTK 输出压缩率
find (全量文件)106,222 B909 B99.1%
cargo check7,013 B2,696 B61.6%
git status464 B134 B71.1%

关键发现

1. 单命令压缩效果显著,但端到端 session 费用基本持平

RTK 在单条命令上的压缩率确实惊人(find 压缩 99%),但在 Claude Code 的完整编码 session 中,这个优势被以下因素稀释:

  • Claude Code 的 Read/Write/Edit 工具不走 Bash,不经过 RTK
  • 中等规模项目的 cargo check/test 输出本身不算特别大(几 KB 级别)
  • RTK hook 的执行开销(rewrite 元数据 + 输出包装)会增加 context

2. Bedrock cache 计费放大了 overhead

RTK 改变了命令输出内容,导致 cache_creation tokens 增加 21%(63K vs 52K)。在 Bedrock 的计费模型下,cache_creation 比 cache_read 贵得多,这个差异被放大了。

3. 有趣的副作用:RTK 版本快了 18%

虽然费用略高,但 API 调用时间从 276s 降到 221s。压缩后的 context 减少了模型的处理时间,这在长 session 中可能更有实际价值(开发者等待时间更短)。

RTK 的真正甜区

基于测试数据推断,RTK 的最大价值场景是:

场景预期效果原因
大型 monorepo(数千文件)⭐⭐⭐ 高find/ls 输出巨大,压缩率 99%+
重编译项目(C++/大 Rust workspace)⭐⭐⭐ 高build log 几十~几百 KB
CI 调试循环⭐⭐ 中高反复查看长测试输出
中小型项目日常开发⭐ 一般输出本身不大,overhead 抵消收益

建议

  • 保留 RTK hook:不碍事,在遇到大输出时自动发挥作用
  • 对于 Bedrock 用户:注意 cache 计费模型的影响,RTK 的"省 token"不等于"省钱"
  • 关注速度提升:18% 的速度提升在长 session 中是实质性的开发体验改善

Real notes from real engineering exploration.