
RTK 实战指南让 LLM Agent 少读 90% 命令行输出的 Rust CLI 代理【免费下载链接】rtkCLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies项目地址: https://gitcode.com/GitHub_Trending/rtk4/rtkRTKRust Token Killer是一个高性能 CLI 代理它在 shell 命令的输出抵达 LLM 上下文之前先对输出进行过滤与压缩最高可削减 Agent 读取的 bash 输出达 90%。本文基于仓库日文版 READMEREADME_ja.md的完整骨架展开并结合当前仓库源码入口 src/main.rs、追踪模块 src/core/tracking.rs、配置文档 docs/guide/getting-started/configuration.md系统讲解 RTK 的压缩机制、安装方式、核心命令、统计分析与配置体系。读完后你可以独立完成 RTK 的安装、把自动重写 Hook 接入 AI 编码工具并理解每条rtk命令背后的过滤策略与 token 统计原理。RTK 是什么在输出进入上下文之前压缩它RTK 的定位是命令输出的中间人它拦截 shell 命令先执行原始命令捕获输出再按命令类型应用相应的过滤策略只把压缩后的结果交给终端以及阅读该终端的 AI Agent。它是单个 Rust 二进制零运行时依赖代理开销低于 10ms。从 Cargo.toml 可以看到其工程属性当前版本0.42.4Rust edition 2021、要求rust-version 1.91Apache 2.0 许可release 构建启用了opt-level 3、lto true、codegen-units 1与符号剥离并且unsafe_code deny——这些配置支撑了“单二进制、低开销”的主张。RTK 对各类操作所做的具体压缩日文 README 用一张表概括得很清楚这里完整继承操作RTK 对输出做的事ls/tree不逐行列出条目而是带文件计数的树形结构cat/read智能读取文件优先保留签名函数/类型声明与结构而非整个文件正文grep/rg截断超长行按文件分组匹配结果git status紧凑的 stat 格式按状态分组git diff减少上下文行去除头部信息git log只保留哈希、作者与提交主题git add/commit/push用一行确认信息替代整个进度输出cargo test/npm test只报失败项通过的测试折叠为计数ruff check按规则与文件分组pytest只报失败项缩短 tracebackgo test解析 NDJSON只保留失败项docker ps只保留必要字段对应的过滤实现按命令族组织在 src/cmds/ 目录下git/、rust/、js/、python/、go/、ruby/、php/、jvm/、cloud/含docker/curl/psql、system/ls、find、grep、read、log等各是一个独立模块符合 ARCHITECTURE 文档中“单一职责每个模块只处理一类命令”的设计原则见 docs/contributing/ARCHITECTURE.md。节约的口径压缩的是 bash 输出不是账单这一点日文 README 专门辟了一节“節約の仕組み”必须准确理解避免误读宣传数字RTK 削减的是 Agent 读取的 bash 输出最高 90%。这是 RTK 实际测量的对象并不等价于账单减少 90%。bash 输出只是输入 token 的构成要素之一与你的 prompt、系统提示词、对话历史并列而输入 token 本身也只是账单的一部分账单还包含输出 token。因此削减效果在每一级传递中都会被稀释。token 数是按字节数 / 4估算的。RTK 不内置 tokenizer所以百分比可靠但绝对 token 数是近似值。第 3 点在源码中可以直接验证。src/core/tracking.rs 中的估算函数采用tokens ceil(chars / 4)的规则文档注释里给出了精确的断言示例空串为 0 token4 个字符为 1 token5 个字符为 2 个 token即ceil(1.25) 2。每次命令执行后原始输出与过滤后输出的字节数都会以input_tokens ceil(原始字节/4)、output_tokens ceil(过滤字节/4)的形式记录进本地 SQLite 数据库Linux 下为~/.local/share/rtk/tracking.db并计算savings_pct——这正是rtk gain看板的数据来源。因此当你看到rtk gain报告“节省了 85%”时正确的解读是这类命令的 bash 输出体积被压缩了 85%它对整体 API 费用的实际贡献取决于 bash 输出在你输入 token 中所占的比重。安装与验证日文 README 给出三种安装方式以下完整继承并补充仓库内的佐证文件。方式一Homebrew推荐brew install rtk仓库中附带 Homebrew formula 文件 Formula/rtk.rb其中按架构从 Releases 下载rtk-x86_64-apple-darwin.tar.gz/rtk-aarch64-apple-darwin.tar.gz与上述命令对应。方式二一键安装脚本Linux/macOScurl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh安装脚本为仓库根目录的 install.sh安装到~/.local/bin如需要把该目录加入 PATHecho export PATH$HOME/.local/bin:$PATH ~/.bashrc # 或 ~/.zshrc方式三Cargo 源码安装cargo install --git https://github.com/rtk-ai/rtk验证安装rtk --version # 显示当前版本 rtk gain # 显示 token 节约统计看板需要注意版本口径日文 README 中示例写作rtk 0.27.x而当前仓库 Cargo.toml 中声明的版本是0.42.4以仓库实际内容为准即可。快速开始自动重写 HookRTK 最有效的用法是让 AI 工具的 Hook 在执行 Bash 命令前透明地把命令改写成 rtk 等价命令Agent 无需显式调用rtk# 1. 安装 Claude Code 用 Hook推荐 rtk init --global # 等价于 rtk init -g # 2. 重启 Claude Code 后测试 git status # 会自动被改写为 rtk git statusrtk init支持多种 Agent 目标目标枚举定义在 src/main.rs 的AgentTarget中包括Claude默认、Cursor、Windsurf、Cline、Kilocode、Antigravity、Kimi、Pi、Hermes、Droid、Vibe等。从源码结构看Hook 机制本身有独立的实现模块 src/hooks/含init.rs负责安装、hook_check.rs负责状态检查、rewrite_cmd.rs负责命令改写各 Agent 的安装脚本与规则文件则放在 hooks/ 目录下claude/、cursor/、copilot/、opencode/等子目录并附有针对性测试如 hooks/claude/test-rtk-rewrite.sh。一个作用域细节需要注意英文版 README 同样强调Hook 只对Bash 工具调用生效。Agent 的内置工具如Read、Grep、Glob不经过 Bash Hook不会被自动改写这类场景应直接使用 shell 命令cat/rg/find或显式调用rtk read、rtk grep、rtk find。工作原理代理模式与四种过滤策略日文 README 用一张 ASCII 图展示了有/无 RTK 的区别无 rtk 有 rtk Claude --git status-- shell -- git Claude --git status-- RTK -- git ^ | ^ | | | ~2,000 tokens原始输出 | | ~200 tokens | 过滤 | ----------------------------------- -------压缩后--------------即 RTK 在 Agent 与真实命令之间插了一层过滤代理。按命令类型应用四种策略智能过滤Smart Filtering——去噪注释、空白、样板文本分组Grouping——聚合同类项按目录聚合文件、按类型聚合错误截断Truncation——保留相关上下文砍掉冗余去重Deduplication——把重复的日志行合并为带计数的单行。从源码结构看每条命令走一个六阶段生命周期详见 docs/contributing/ARCHITECTURE.mdPARSEclap 解析子命令与全局标志→ROUTEmain.rs按Commands枚举路由到对应模块如git::run(args, verbose)→EXECUTEstd::process::Command执行原始命令并捕获 stdout/stderr/exit_code→FILTER按命令类型格式化输出→PRINT按 verbose 级别打印→TRACK把输入/输出字节数写入 SQLite。入口 src/main.rs 中的Cli结构体定义了两个全局标志与日文 README 的命令区呼应-u, --ultra-compact # 超紧凑模式ASCII 图标、行内格式进一步压缩输出 -v, --verbose # 提高详细级别-v、-vv、-vvv此外还有一个面向子进程环境校验的--skip-env标志为 Next.js、tsc、lint、prisma 等设置SKIP_ENV_VALIDATION1。核心命令详解以下命令输出中标注的百分比是bash 输出字节数的削减率按 RTK 的字节数 / 4估算器测量参见上文“节约的口径”一节。文件类rtk ls . # 优化的目录树 rtk read file.rs # 智能文件读取 rtk find *.rs . # 紧凑的查找结果 rtk grep pattern . # 按文件分组的搜索rtk read在 src/main.rs 的Commands::Read中定义了完整参数支持多文件类似cat、-l/--level过滤级别none/minimal/aggressive默认none即全量内容、-m/--max-lines与--tail-lines保留最后 N 行二者互斥、-n显示行号。即rtk read file.rs -l aggressive只保留签名、剥离函数体。Git 类rtk git status # 紧凑状态 rtk git log -n 10 # 单行提交 rtk git diff # 压缩后的 diff rtk git push # 输出形如 ok main写操作类命令add/commit/push/pull被压缩为一行确认信息如ok abc1234、ok 3 files 10 -2实现位于 src/cmds/git/git.rs。测试类rtk jest # Jest 紧凑输出仅失败项 rtk vitest # Vitest 紧凑输出仅失败项 rtk pytest # Python 测试-90% rtk go test # Go 测试-90% rtk test cmd # 通用测试包装器仅显示失败-90%rtk test cmd是一个泛化包装器对任意测试命令只保留失败内容go test的过滤器会直接解析 Go 1.24 的 NDJSON 输出见 src/cmds/go/go_cmd.rs。构建与 Lint 类rtk lint # ESLint 按规则/文件分组 rtk tsc # TypeScript 错误按文件分组 rtk cargo build # Cargo 构建-80% rtk ruff check # Python lint-80%分析类token 经济学看板rtk gain # 节约统计 rtk gain --graph # ASCII 图形近 30 天 rtk discover # 发现被遗漏的节约机会rtk gain的参数面比日文 README 更广从 src/main.rs 的Commands::Gain定义可以看到完整参数列表参数作用-p, --project只统计当前项目当前工作目录的记录-g, --graph显示每日节约的 ASCII 图-H, --history显示最近的命令历史-q, --quota显示月度配额节约估算可配合--tier pro/5x/20x默认 20x--daily/--weekly/--monthly/--all按日/周/月/全维度拆分-f, --format输出格式text默认、json、csv-F, --failures显示解析失败日志回退为原始执行的命令--reset配--yes跳过确认将统计清零数据存储在本地 SQLite~/.local/share/rtk/tracking.dbmacOS 为~/Library/Application Support/rtk/tracking.dbWindows 为%APPDATA%\rtk\tracking.db保留期默认 90 天自动清理src/core/tracking.rs。rtk discover的实现则在 src/discover/ 模块用于扫描历史中未被压缩或压缩率低的命令提示“还有哪些命令可以接入 RTK”。配置与故障排查RTK 的配置文件为~/.config/rtk/config.tomlmacOS~/Library/Application Support/rtk/config.toml完整的配置参考见 docs/guide/getting-started/configuration.md核心结构如下[tracking] enabled true # 开关 token 追踪 history_days 90 # 保留天数自动清理 database_path /custom/path/history.db # 可选覆盖 [display] colors true # 彩色输出 emoji true # 输出中使用 emoji max_width 120 # 最大输出宽度 [filters] # 作用于文件读取类命令ls、find、grep、cat/rtk read ignore_dirs [.git, node_modules, target, __pycache__, .venv, vendor] ignore_files [*.lock, *.min.js, *.min.css] [tee] enabled true # 命令失败时保存原始输出 mode failures # failures默认、always、never max_files 20 # 轮转保留最近 N 个文件 max_file_size 1048576 # 单文件上限 1 MB字节 [telemetry] enabled true # 匿名每日上报 [hooks] exclude_commands [] # 永不自动改写的命令其中两个机制值得注意Tee 系统命令失败时RTK 会把完整原始输出存到本地文件并打印路径例如FAILED: 2/15 tests后附[full output: ~/.local/share/rtk/tee/1707753600_cargo_test.log]。AI 助手可以直接读取该文件获得细节无需重跑命令——这保证了“压缩输出”与“可恢复完整现场”之间的平衡。排除改写[hooks] exclude_commands支持前缀与正则^开头匹配例如exclude_commands [^curl, git rebase]对单次执行可用环境变量绕过RTK_DISABLED1 git rebase main。相关环境变量还有RTK_TEE_DIR覆盖 tee 目录、RTK_TELEMETRY_DISABLED1禁用遥测、RTK_HOOK_AUDIT1启用 Hook 审计日志。配置解析的实现在 src/core/config.rsHook 侧的排除规则匹配在 src/hooks/ 模块中处理。延伸阅读与许可围绕本文主题仓库内还有几份值得深入阅读的文档INSTALL.md——详细安装参考含预构建二进制与 Windows/WSL 说明docs/contributing/ARCHITECTURE.md——系统架构、过滤分类学、六阶段命令生命周期与构建优化docs/TELEMETRY.md——遥测字段、数据边界与贡献者指引docs/usage/FEATURES.md 与 docs/usage/TRACKING.md——功能清单与追踪系统的使用视角DISCLAIMER.md——免责声明许可Apache 2.0见 LICENSE。总结RTK 的价值主张非常克制且可验证——它压缩的是命令行输出这一种输入 token 来源口径是bytes / 4的估算百分比数据全部保存在本地 SQLite。理解了这套口径之后你就可以放心地用rtk gain --all --format json之类的命令在自己的 Agent 工作流里量化每一条过滤策略的真实收益。【免费下载链接】rtkCLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies项目地址: https://gitcode.com/GitHub_Trending/rtk4/rtk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考