1. 概述:为什么需要 RTK

AI 编程助手(Claude Code、Cursor、Codex 等)在执行 git statuscargo testnpm test 等命令时,会将完整的原始输出送入 LLM 上下文窗口。测试框架的一次运行可能产生 5,000–10,000 tokens 的输出,而其中 90% 是冗余信息。

RTK 是一个 Rust 编写的 CLI 代理,位于 AI Agent 和 Shell 之间,自动拦截命令、压缩输出后再送入 LLM。平均节省 60–90% Token,单二进制文件,零依赖,<10ms 开销。

核心数据

指标数值
GitHub Stars56,000+
平均压缩率89%
额外延迟<10ms
支持命令100+
二进制大小~3.8 MB(静态链接)
支持 AI 工具14+(Claude Code、Cursor、Copilot、Gemini CLI、Codex 等)
许可协议MIT
最新版本v0.38.x

实测效果

场景原始 TokenRTK 后节省率
cargo test(262 tests)~4,823~1199.8%
git status~3,000~60080%
pytest(33 tests)~8,000~25696.8%
30 分钟完整开发会话~150,000~16,85088.9%
长期统计(15,720 条命令)83.7%(1.38 亿 Token)

2. 架构原理

2.1 整体数据流

无 RTK:                              有 RTK:

Claude --git status--> Shell --> Git   Claude --git status--> RTK --> Git
  ^                         |           ^                  |         |
  |     ~3,000 tokens 原始   |           |   ~600 tokens    | 过滤    |
  +-------------------------+           +--- (已压缩) -----+---------+

RTK 通过 PreToolUse Hook 在 Claude Code 执行命令前静默改写命令,Claude Code 完全无感知。

2.2 四步改写管线

Claude Code 执行 "git status"
       │
       ▼
  [PreToolUse Hook 拦截]          ← rtk-rewrite.sh(4 状态状态机)
       │
       ▼
  "rtk rewrite" → "rtk git status"  ← Rust 二进制改写命令
       │
       ▼
  RTK 执行 → 4 种策略过滤 → 输出压缩版  ← Rust 过滤管线
       │
       ▼
  Claude Code 看到 ~80% 更少的 Token

2.3 PreToolUse Hook——4 状态状态机

Hook 脚本通过不同退出码控制命令流转:

退出码行为JSON 输出
0 + JSON允许并改写 —— permissionDecision: "allow" + updatedInput命令已改写,自动批准
1(无 JSON)透传 —— Hook 无操作,原命令直接执行
2(无 JSON)拒绝移交 —— 交由 Claude Code 原生拒绝规则处理
3 + JSON询问 —— 改写命令但省略 permissionDecision,提示用户确认改写后输入,无决策

关键安全机制:

  • Kill Switchtouch /tmp/agentkit-ccpack-pause 即时停止所有改写
  • 版本守卫:解析 rtk --version,版本 < 0.23.0 则优雅退出
  • 依赖守卫:检测 jq 可用性,缺失时告警退出(fail-open,不阻塞会话)
  • 多 Hook 协调:RTK 通过补丁化插件缓存成为唯一的 Bash PreToolUse 处理器,同时将其他插件作为子进程调用,防止 Claude Code 丢弃 updatedInput

2.4 四种过滤策略

策略说明示例
智能过滤去除注释、空白、样板提示文本去掉 git status 的 "use git add..." 建议
分组聚合将相似条目按类别归组262 个通过测试 → 一行计数
截断保留关键结构,裁剪次要细节保留失败堆栈,压缩日志前缀
结构化摘要保留失败追踪原文,压缩通过输出只展示失败用例的完整断言信息

2.5 Tee 模式——失败时保留完整输出

当命令失败时,RTK 将完整未过滤输出保存到 ~/.local/share/rtk/tee/,LLM 无需重新执行即可读取:

✓ 42 passed, 1 failed (3.2s)
FAIL: test_parse_complex_input - assertion failed at src/filter.rs:142
📄 Full output: ~/.local/share/rtk/tee/cargo-test-2026-02-12-143052.log

配置项(config.toml):

[tee]
enabled = true        # 失败时保存原始输出(默认开启)
mode = "failures"     # "failures"、"always" 或 "never"
max_files = 20        # 轮转上限

3. 安装

3.1 方式一:Homebrew(macOS 推荐)

brew install rtk

3.2 方式二:Shell 脚本(Linux / macOS)

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

安装到 ~/.local/bin,需确保该目录在 PATH 中。

3.3 方式三:Cargo

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

3.4 方式四:预编译二进制

GitHub Releases 下载对应平台的二进制:

  • macOS:x86_64 / aarch64
  • Linux:musl / gnu
  • Windows:msvc

3.5 验证安装

rtk --version   # 应显示 "rtk 0.38.x"
rtk gain        # 应显示 Token 节省统计(区分正版的关键步骤)

⚠️ 注意:crates.io 上存在同名项目 “Rust Type Kit”,安装后务必运行 rtk gain 确认安装的是正确的 rtk-ai/rtk


4. 配置与初始化

4.1 全局初始化(推荐)

# 安装 Hook + RTK.md + 补丁 settings.json
rtk init -g

# 非交互模式(CI/CD)
rtk init -g --auto-patch

# 仅安装 Hook,不添加 RTK.md
rtk init -g --hook-only

rtk init -g 自动完成:

  1. ~/.claude/settings.json 注册 PreToolUse Hook
  2. 在 CLAUDE.md 中注入 RTK 使用指令
  3. 配置 Hook 版本标记和完整性哈希

4.2 按 AI 工具初始化

rtk init -g --gemini              # Gemini CLI
rtk init -g --codex               # Codex (OpenAI)
rtk init -g --agent cursor        # Cursor
rtk init -g --agent windsurf      # Windsurf
rtk init --agent cline            # Cline / Roo Code
rtk init --agent kilocode         # Kilo Code
rtk init --agent hermes           # Hermes
rtk init --agent antigravity      # Google Antigravity

4.3 配置文件

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

[hooks]
# 跳过这些命令的改写(直接透传)
exclude_commands = ["curl", "playwright"]

[tee]
enabled = true        # 失败时保存原始输出
mode = "failures"     # "failures"、"always" 或 "never"
max_files = 20        # 轮转上限

4.4 卸载

rtk init -g --uninstall  # 移除 Hook、RTK.md、settings.json 条目
brew uninstall rtk        # 如通过 Homebrew 安装
cargo uninstall rtk       # 如通过 Cargo 安装

5. Windows 支持

5.1 现状

Unix 平台上,rtk init -g 安装 OS 级别的 PreToolUse Hook,可靠性 ~100%。Windows 上原生不支持 Hook 自动改写,需采用以下替代方案:

方案机制可靠性
Unix rtk init -gPreToolUse Hook(OS 级)~100%
Windows 默认回退CLAUDE.md 指令注入~70–80%
Windows + PowerShell Hook原生 PreToolUse Hook~100%
Windows + Git Bash HookPreToolUse Hook(通过 bash.exe)~100%
WSL(推荐)完整的 Unix Hook 机制~100%

5.2 推荐方案

WSL 中获得完整体验:在 WSL 中按 Unix 方式安装,所有功能完全可用。


6. 支持的命令完整列表(100+)

6.1 文件与搜索

命令说明
rtk lsToken 优化的目录树
rtk read <file>智能文件读取
rtk read <file> -l aggressive仅保留签名(剥离函数体)
rtk smart <file>2 行启发式代码摘要
rtk find "*.rs" .紧凑查找结果
rtk grep "pattern" .分组搜索结果
rtk diff <f1> <f2>压缩差异对比
rtk cat / tree / rg别名,同上

6.2 Git

命令说明压缩率
rtk git status紧凑状态-80%
rtk git log -n 10单行提交记录-
rtk git diff压缩 diff-85%
rtk git add / commit / push / pull返回简洁确认-
rtk git branch / fetch / stash / show紧凑输出-

6.3 GitHub CLI

命令说明
rtk gh pr list紧凑 PR 列表
rtk gh pr view 42PR 详情 + Checks
rtk gh issue listIssue 列表
rtk gh run listWorkflow 运行状态
rtk gh api / release紧凑 API 响应

6.4 测试框架

命令说明压缩率
rtk cargo testRust 测试-90%
rtk pytestPython 测试-90%
rtk go testGo 测试(NDJSON)-90%
rtk jest / vitestJS/TS 测试(仅失败)-
rtk playwright testE2E 结果(仅失败)-
rtk rspecRuby RSpec(JSON)-60%+
rtk npm testnpm 测试-90%
rtk test <cmd>通用测试包装器——仅失败-90%
rtk err <cmd>仅过滤错误输出-

6.5 构建与 Lint

命令说明压缩率
rtk cargo buildCargo 构建-80%
rtk cargo clippyCargo Clippy-80%
rtk tscTypeScript 编译错误(按文件分组)-85%
rtk next buildNext.js 构建-
rtk lintESLint(按规则/文件分组)-
rtk lint biomeBiome linter-
rtk ruff checkPython linting(JSON)-80%
rtk golangci-lint runGo linting(JSON)-85%
rtk rubocopRuby linting(JSON)-60%+
rtk prettier --check .需要格式化的文件列表-

6.6 包管理

命令说明
rtk pnpm list紧凑依赖树
rtk pip listPython 包(自动检测 uv)
rtk pip outdated过期包列表
rtk uv pipUV pip 支持
rtk bundle installRuby gems(剥离 Using 行)
rtk prisma generateSchema 生成(移除 ASCII 艺术)

6.7 AWS

命令说明
rtk aws sts get-caller-identity单行身份信息
rtk aws ec2 describe-instances紧凑实例列表
rtk aws lambda list-functions名称/运行时/内存(剥离密钥)
rtk aws logs get-log-events仅时间戳消息
rtk aws cloudformation describe-stack-events失败优先展示
rtk aws dynamodb scan展开类型注解
rtk aws iam list-roles剥离策略文档
rtk aws s3 ls截断 + tee 恢复

6.8 容器

命令说明
rtk docker ps紧凑容器列表
rtk docker images紧凑镜像列表
rtk docker logs <container>去重日志
rtk docker compose psCompose 服务列表
rtk docker run / build / exec紧凑运行/构建输出
rtk kubectl pods紧凑 Pod 列表
rtk kubectl logs <pod>去重日志
rtk kubectl services紧凑服务列表
rtk kubectl get / describe / apply紧凑操作输出

6.9 数据与分析

命令说明
rtk json config.json结构展示(不含值)
rtk deps依赖摘要
rtk env -f AWS过滤环境变量
rtk log app.log去重日志
rtk curl <url>截断 + 保存完整输出
rtk wget <url>下载,剥离进度条
rtk summary <cmd>启发式摘要
rtk proxy <cmd>原始透传 + 追踪

7. Token 节省分析

7.1 rtk gain——核心分析命令

rtk gain                # 摘要统计
rtk gain --graph        # ASCII 图表(最近 30 天)
rtk gain --history      # 最近命令历史
rtk gain --daily        # 按日统计
rtk gain --all --format json  # JSON 导出(可用于仪表盘)

7.2 rtk discover——发现遗漏的节省机会

rtk discover                  # 扫描当天遗漏
rtk discover --all --since 7  # 所有项目,最近 7 天

7.3 rtk session——会话中 RTK 采纳率

rtk session   # 查看最近会话中 RTK 的使用占比

7.4 典型 30 分钟 Claude Code 会话 Token 流

操作频率原始 TokenRTK Token节省
ls / tree10×2,000400-80%
cat / read20×40,00012,000-70%
git status/diff/log20×15,5003,600-77%
cargo test / npm test25,0002,500-90%
总计~118,000~23,900-80%

8. 安全模型

机制说明
Fail-Open依赖缺失或版本不兼容时优雅退出,不阻塞会话
Kill Switchtouch /tmp/agentkit-ccpack-pause 即时停止所有改写
保守白名单docker run/exec/build 等危险命令不改写,直接透传
原子写入所有文件修改使用 temp-file-then-rename,绝不产生部分写入
版本守卫自动检测 RTK 版本,过低版本不注入 Hook
Tee 恢复失败时保留完整输出,LLM 可直接读取无需重新执行
无网络依赖单静态二进制,无外部 API 调用
隐私不发送数据到外部服务

8.1 安全白名单(保守策略)

主动不处理的命令类别:

  • docker run / exec / build
  • 带有任意参数的 curl / wget
  • 不受信任的第三方 CLI

9. 高级配置

9.1 Hook 跳过特定命令

[hooks]
exclude_commands = ["curl", "playwright", "terraform apply"]

9.2 开关 Tee 模式

[tee]
enabled = true
mode = "always"    # 无论成功失败都保留原始输出
max_files = 50     # 最多保留 50 个日志文件

9.3 验证 Hook 完整性

rtk verify   # 运行 145+ 完整性测试

10. 与同类工具对比

维度RTKCavemancontext-mode
设计定位Shell 输出压缩代理AI 回复压缩沙箱执行 + 输出过滤
压缩目标命令输出(git/test/lint 等)LLM 回复文本日志 / Web 抓取
压缩率60–90%65–75%最高 98%
实现语言Rust(单二进制)TypeScriptTypeScript(沙箱)
额外延迟<10ms~100ms~50ms
支持命令数100+N/A(回复层)有限
Hook 集成✅ PreToolUse 自动改写
跨 Agent14+ 工具Claude Code 专用Claude Code 专用

11. 轻量分支:rtk-lite-cc

rtk-lite-cc 是专注 Claude Code 的精简分支:

  • 剥离 ~15,000 行代码
  • 移除:遥测、SQLite 数据库、Token 分析、CLAUDE.md 补丁、权限系统、非 Claude Agent
  • 保留:完整过滤管线
  • 纯单二进制,零网络调用

适用场景:对隐私极其敏感、只需 Claude Code 支持、偏好最小依赖。


12. 故障排查

问题解决方案
rtk 命令找不到检查 ~/.local/bin 是否在 PATH 中;或重新执行安装脚本
rtk gain 无输出确认安装了 rtk-ai/rtk 而非 crates.io 上的同名 “Rust Type Kit”
Hook 未生效(Unix)运行 rtk init -g 重新注册;检查 ~/.claude/settings.json
Hook 未生效(Windows)使用 WSL 获得完整体验;或手动配置 PowerShell/Git Bash Hook
PreToolUse Hook 与其他插件冲突RTK 自动协调多 Hook,通常无需手动处理
Hook 版本告警运行 rtk init -g 更新版本标记
Tee 文件占用磁盘调整 max_files 或设置 mode = "failures"
特定命令未改写检查 exclude_commands 配置和命令白名单

参考资源

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐