rtk
减少 LLM token 消耗 60-90% 的 CLI 代理,专门针对 AI 编码工具的 Bash 命令输出进行智能过滤和压缩。Rust 编写,单一二进制无依赖,安装极简。支持 Claude Code、Copilot、Cursor 等 13 种主流 AI 工具,通过 hook 或插件自动重写命令,对 ls、git、test 等 100+ 命令有针对性优化,且延迟 <10ms。适合高频使用 LLM 编码助手的开发者,能显著节省 API 费用。
README
高性能 CLI 代理,将 LLM token 消耗降低 60-90%
Website • Install • Troubleshooting • Architecture • Discord
English • Francais • 中文 • 日本語 • 한국어 • Espanol
rtk 在命令输出进入 LLM context 之前对其进行过滤和压缩。单个 Rust 二进制文件,支持 100+ 命令,开销 <10ms。
Token 节省(30 分钟 Claude Code 会话)
| 操作 | 频率 | 标准 | rtk | 节省 |
|---|---|---|---|---|
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 log |
5次 | 2,500 | 500 | -80% |
git add/commit/push |
8次 | 1,600 | 120 | -92% |
cargo test / npm test |
5次 | 25,000 | 2,500 | -90% |
ruff check |
3次 | 3,000 | 600 | -80% |
pytest |
4次 | 8,000 | 800 | -90% |
go test |
3次 | 6,000 | 600 | -90% |
docker ps |
3次 | 900 | 180 | -80% |
| 总计 | ~118,000 | ~23,900 | -80% |
基于中型 TypeScript/Rust 项目的估算。实际节省取决于项目大小。
安装
Homebrew(推荐)
brew install rtk
快速安装(Linux/macOS)
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh
安装到
~/.local/bin。如需添加到 PATH:echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc # 或 ~/.zshrc
Cargo
cargo install --git https://github.com/rtk-ai/rtk
预构建二进制文件
从 releases 下载:
- macOS:
rtk-x86_64-apple-darwin.tar.gz/rtk-aarch64-apple-darwin.tar.gz - Linux:
rtk-x86_64-unknown-linux-musl.tar.gz/rtk-aarch64-unknown-linux-gnu.tar.gz - Windows:
rtk-x86_64-pc-windows-msvc.zip
Windows 用户:解压 zip 并将
rtk.exe放入 PATH 中的某个位置(例如C:\Users\<你>\.local\bin)。通过命令提示符、PowerShell 或 Windows 终端运行 RTK — 不要双击.exe(它会一闪而过)。为了获得最佳体验,请使用 WSL,那里完整的 hook 系统可原生工作。详见下面的 Windows 设置。
验证安装
rtk --version # 应显示 "rtk 0.28.2"
rtk gain # 应显示 token 节省统计
名称冲突警告:另一个名为 "rtk"(Rust Type Kit)的项目存在于 crates.io 上。如果
rtk gain失败,说明你安装了错误的包。请改用上面的cargo install --git。
快速开始
# 1. 为你的 AI 工具安装
rtk init -g # Claude Code / Copilot(默认)
rtk init -g --gemini # Gemini CLI
rtk init -g --codex # Codex (OpenAI)
rtk init -g --agent cursor # Cursor
rtk init --agent windsurf # Windsurf
rtk init --agent cline # Cline / Roo Code
rtk init --agent kilocode # Kilo Code
rtk init --agent antigravity # Google Antigravity
rtk init --agent hermes # Hermes
# 2. 重启 AI 工具,然后测试
git status # 自动重写为 rtk git status
基于 hook 的 agent 会在执行前重写 Bash 命令(例如 git status -> rtk git status)。基于插件的 agent(包括 Hermes)使用其插件 API 在执行前重写命令。agent 会收到紧凑的输出,无需显式调用 rtk。
重要提示:hook 仅对 Bash 工具调用生效。Claude Code 的内置工具如 Read、Grep 和 Glob 不会经过 Bash hook,因此不会自动重写。若要为这些工作流获得 RTK 的紧凑输出,请使用 shell 命令(cat/head/tail、rg/grep、find)或直接调用 rtk read、rtk grep、rtk find。
工作原理
无 rtk: 有 rtk:
Claude --git status--> shell --> git Claude --git status--> RTK --> git
^ | ^ | |
| ~2,000 tokens (原始) | | ~200 tokens | 过滤 |
+-----------------------------------+ +------- (过滤后) -----+----------+
每种命令类型应用四种策略:
- 智能过滤(Smart Filtering) - 移除噪声(注释、空白、样板代码)
- 分组(Grouping) - 聚合相似项(按目录的文件、按类型的错误)
- 截断(Truncation) - 保留相关上下文,削减冗余
- 去重(Deduplication) - 用计数折叠重复的日志行
命令
文件
rtk ls . # 优化 token 的目录树
rtk read file.rs # 智能文件读取
rtk read file.rs -l aggressive # 仅签名(剥离函数体)
rtk smart file.rs # 2 行启发式代码摘要
rtk find "*.rs" . # 紧凑的查找结果
rtk grep "pattern" . # 分组的搜索结果
rtk diff file1 file2 # 精简的 diff
Git
rtk git status # 紧凑状态
rtk git log -n 10 # 单行提交
rtk git diff # 精简的 diff
rtk git add # -> "ok"
rtk git commit -m "msg" # -> "ok abc1234"
rtk git push # -> "ok main"
rtk git pull # -> "ok 3 files +10 -2"
GitHub CLI
rtk gh pr list # 紧凑的 PR 列表
rtk gh pr view 42 # PR 详情 + 检查
rtk gh issue list # 紧凑的 issue 列表
rtk gh run list # 工作流运行状态
测试运行器
rtk jest # Jest 紧凑(仅失败)
rtk vitest # Vitest 紧凑(仅失败)
rtk playwright test # E2E 结果(仅失败)
rtk pytest # Python 测试(-90%)
rtk go test # Go 测试(NDJSON,-90%)
rtk cargo test # Cargo 测试(-90%)
rtk rake test # Ruby minitest(-90%)
rtk rspec # RSpec 测试(JSON,-60%+)
rtk err <cmd> # 从任何命令中仅过滤错误
rtk test <cmd> # 通用测试包装器 - 仅失败(-90%)
构建与 Lint
rtk lint # ESLint 按规则/文件分组
rtk lint biome # 支持其他 linter
rtk tsc # TypeScript 错误按文件分组
rtk next build # Next.js 构建紧凑输出
rtk prettier --check . # 需要格式化的文件
rtk cargo build # Cargo 构建(-80%)
rtk cargo clippy # Cargo clippy(-80%)
rtk ruff check # Python lint(JSON,-80%)
rtk golangci-lint run # Go lint(JSON,-85%)
rtk rubocop # Ruby lint(JSON,-60%+)
包管理器
rtk pnpm list # 紧凑的依赖树
rtk pip list # Python 包(自动检测 uv)
rtk pip outdated # 过时的包
rtk bundle install # Ruby gems(剥离 Using 行)
rtk prisma generate # 模式生成(无 ASCII 艺术)
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 恢复
容器
rtk docker ps # 紧凑的容器列表
rtk docker images # 紧凑的镜像列表
rtk docker logs <container> # 去重日志
rtk docker compose ps # Compose 服务
rtk kubectl pods # 紧凑的 pod 列表
rtk kubectl logs <pod> # 去重日志
rtk kubectl services # 紧凑的服务列表
数据与分析
rtk json config.json # 结构无值
rtk deps # 依赖摘要
rtk env -f AWS # 过滤的环境变量
rtk log app.log # 去重日志
rtk curl <url> # 截断 + 保存完整输出
rtk wget <url> # 下载,剥离进度条
rtk summary <long command> # 启发式摘要
rtk proxy <command> # 原始透传 + 追踪
Token 节省分析
rtk gain # 摘要统计
rtk gain --graph # ASCII 图(最近 30 天)
rtk gain --history # 最近的命令历史
rtk gain --daily # 逐日分解
rtk gain --all --format json # JSON 导出用于仪表盘
rtk discover # 查找未利用的节省机会
rtk discover --all --since 7 # 所有项目,最近 7 天
rtk session # 显示最近会话中的 RTK 采用情况
全局标志
-u, --ultra-compact # ASCII 图标,内联格式(额外 token 节省)
-v, --verbose # 增加详细程度(-v, -vv, -vvv)
示例
目录列表:
# ls -la(45 行,约 800 个 token) # rtk ls(12 行,约 150 个 token)
drwxr-xr-x 15 user staff 480 ... my-project/
-rw-r--r-- 1 user staff 1234 ... +-- src/(8 个文件)
... | +-- main.rs
+-- Cargo.toml
Git 操作:
# git push(15 行,约 200 个 token) # rtk git push(1 行,约 10 个 token)
Enumerating objects: 5, done. ok main
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
...
测试输出:
# cargo test(失败时 200+ 行) # rtk test cargo test(约 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
...
自动重写 Hook
这是使用 rtk 最有效的方式。Hook 透明地拦截 Bash 命令,在执行前将其重写为 rtk 等效命令。
结果:在所有对话和子 agent 中实现 100% rtk 采用率,零 token 开销。
范围说明:仅适用于 Bash 工具调用。Claude Code 的内置工具如 Read、Grep 和 Glob 会绕过 hook,因此当需要 RTK 过滤时,请使用 shell 命令或显式的 rtk 命令。
设置
rtk init -g # 安装 hook + RTK.md(推荐)
rtk init -g --opencode # OpenCode 插件(代替 Claude Code)
rtk init -g --auto-patch # 非交互式(CI/CD)
rtk init -g --hook-only # 仅 hook,无 RTK.md
rtk init --show # 验证安装
安装后,重启 Claude Code。
Windows
RTK 可在 Windows 上使用,但有一些限制。自动重写 hook(rtk-rewrite.sh)需要 Unix shell,因此在原生 Windows 上 RTK 回退到 CLAUDE.md 注入模式 — 你的 AI 助手会收到 RTK 指令,但命令不会自动重写。
推荐:WSL(完整支持)
为获得最佳体验,请使用 WSL(Windows Subsystem for Linux)。在 WSL 内部,RTK 的工作方式与 Linux 完全相同 — 完整的 hook 支持、自动重写,一切正常:
# 在 WSL 内部
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh
rtk init -g
原生 Windows(有限支持)
在原生 Windows(cmd.exe / PowerShell)上,RTK 过滤功能可用,但 hook 不会自动重写命令:
# 1. 从 releases 下载并解压 rtk-x86_64-pc-windows-msvc.zip
# 2. 将 rtk.exe 添加到 PATH
# 3. 初始化(回退到 CLAUDE.md 注入)
rtk init -g
# 4. 显式使用 rtk
rtk cargo test
rtk git status
重要提示:不要双击 rtk.exe — 它是一个 CLI 工具,会打印使用信息并立即退出。请始终在终端(命令提示符、PowerShell 或 Windows 终端)中运行它。
| 特性 | WSL | 原生 Windows |
|---|---|---|
| 过滤(cargo、git 等) | 完整 | 完整 |
| 自动重写 hook | 是 | 否(回退到 CLAUDE.md) |
rtk init -g |
Hook 模式 | CLAUDE.md 模式 |
rtk gain / 分析 |
完整 | 完整 |
支持的 AI 工具
RTK 支持 13 种 AI 编码工具。每种集成都将 shell 命令重写为 rtk 等效命令,在 agent 支持命令拦截的情况下实现 60-90% 的 token 节省。
| 工具 | 安装 | 方法 |
|---|---|---|
| Claude Code | rtk init -g |
PreToolUse hook (bash) |
| GitHub Copilot (VS Code) | rtk init -g --copilot |
PreToolUse hook — 透明重写 |
| GitHub Copilot CLI | rtk init -g --copilot |
PreToolUse deny-with-suggestion (CLI 限制) |
| Cursor | rtk init -g --agent cursor |
preToolUse hook (hooks.json) |
| Gemini CLI | rtk init -g --gemini |
BeforeTool hook |
| Codex | rtk init -g --codex |
AGENTS.md + RTK.md 指令 |
| Windsurf | rtk init --agent windsurf |
.windsurfrules (项目范围) |
| Cline / Roo Code | rtk init --agent cline |
.clinerules (项目范围) |
| OpenCode | rtk init -g --opencode |
插件 TS (tool.execute.before) |
| OpenClaw | openclaw plugins install ./openclaw |
插件 TS (before_tool_call) |
| Hermes | rtk init --agent hermes |
Python 插件适配器 (通过 rtk rewrite 实现终端命令突变) |
| Mistral Vibe | 计划中 (#800) | 等待上游支持 |
| Kilo Code | rtk init --agent kilocode |
.kilocode/rules/rtk-rules.md (项目范围) |
| Google Antigravity | rtk init --agent antigravity |
.agents/rules/antigravity-rtk-rules.md (项目范围) |
有关每个 agent 的设置详情、覆盖控制和优雅降级,请参阅 支持的 Agent 指南。Hermes 插件源代码和测试位于 hooks/hermes/;已安装的 Hermes 运行时文件仍位于 ~/.hermes/plugins/rtk-rewrite/。
配置
~/.config/rtk/config.toml(macOS:~/Library/Application Support/rtk/config.toml):
[hooks]
exclude_commands = ["curl", "playwright"] # 跳过这些命令的重写
[tee]
enabled = true # 失败时保存原始输出(默认:true)
mode = "failures" # "failures"、"always" 或 "never"
当命令失败时,RTK 会保存完整的未过滤输出,以便 LLM 无需重新执行即可读取:
FAILED: 2/15 tests
[full output: ~/.local/share/rtk/tee/1707753600_cargo_test.log]
有关完整的配置参考(所有章节、环境变量、按项目过滤),请参阅 配置指南。
卸载
rtk init -g --uninstall # 移除 hook、RTK.md、settings.json 条目
cargo uninstall rtk # 移除二进制文件
brew uninstall rtk # 如果通过 Homebrew 安装
文档
- rtk-ai.app/guide — 完整用户指南(安装、支持的 agent、优化内容、分析、配置、故障排除)
- INSTALL.md — 详细安装参考
- ARCHITECTURE.md — 系统设计和技术决策
- CONTRIBUTING.md — 贡献指南
- SECURITY.md — 安全策略
隐私与遥测
RTK 可以每天收集一次匿名的、汇总的使用统计。遥测默认禁用,需要在 rtk init 期间或通过 rtk telemetry enable 显式同意(GDPR 第 6、7 条)。这些数据帮助我们构建更好的产品:识别哪些命令需要过滤器、哪些过滤器需要改进,以及 RTK 提供了多少价值。有关字段的完整列表、数据处理和贡献者指南,请参阅 docs/TELEMETRY.md。
收集了哪些数据及其原因:
| 类别 | 数据 | 原因 |
|---|---|---|
| 身份 | 加盐设备哈希(SHA-256,不可逆) | 统计唯一安装量,不追踪个人 |
| 环境 | RTK 版本、操作系统、架构、安装方式 | 了解哪些平台需要支持和测试 |
| 使用量 | 命令计数(24h)、总命令数、节省的 token(24h/30d/总计) | 衡量采用率和交付价值 |
| 质量 | 前 5 个透传命令(0% 节省)、解析失败次数、节省 <30% 的命令 | 识别缺失的过滤器和需要改进的弱过滤器 |
| 生态系统 | 命令类别分布(例如 git 45%、cargo 20%、js 15%) | 优先为流行生态系统开发过滤器 |
| 留存 | 首次使用以来天数、最近 30 天活跃天数 | 了解参与度并检测流失 |
| 采用率 | AI agent hook 类型(claude/gemini/codex)、自定义 TOML 过滤器数量 | 追踪集成覆盖率和 DSL 采用情况 |
| 配置 | config.toml 是否存在、排除的命令数量、项目数量 | 了解用户成熟度和自定义模式 |
| 特性 | 元命令(gain、discover、proxy、verify)的使用次数 | 了解哪些 RTK 功能被重视或未被使用 |
| 经济性 | 估计的美元节省(基于 API token 定价) | 量化 RTK 为用户提供的价值 |
所有数据均为聚合计数或匿名命令名称(前 3 个单词,无参数)。顶部命令仅报告工具名称(例如“git”、“cargo”),从不报告完整的命令行。
不收集的内容: 源代码、文件路径、命令参数、密钥、环境变量、个人数据或仓库内容。
管理遥测:
rtk telemetry status # 检查当前同意状态
rtk telemetry enable # 给予同意(交互式提示)
rtk telemetry disable # 撤回同意 — 立即停止所有收集
rtk telemetry forget # 撤回同意 + 删除所有本地数据 + 请求服务器端擦除
通过环境变量覆盖:
export RTK_TELEMETRY_DISABLED=1 # 无论同意状态如何,阻止遥测
Star 历史
StarMapper
核心团队
- Patrick Szymkowiak — 创始人 GitHub · LinkedIn
- Florian Bruniaux — 核心贡献者 GitHub · LinkedIn
- Adrien Eppling — 核心贡献者 GitHub · LinkedIn
贡献
欢迎贡献!请在 GitHub 上开启 issue 或 PR。
加入 Discord 社区。
许可证
MIT 许可证 — 详见 LICENSE。
免责声明
详见 DISCLAIMER.md。