官方指南:Hook 拦截、输出过滤与 Token 节省度量的完整工作流)
RTKRust Token Killer官方指南Hook 拦截、输出过滤与 Token 节省度量的完整工作流【免费下载链接】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本篇技术文章以 RTK 官方文档指南首页docs/guide/index.md为骨架展开先讲清 RTK「CLI 代理 Hook 透明重写」的核心机制再覆盖从安装初始化、命令过滤到rtk gain/rtk discover/rtk session节省度量与采用率分析的完整流程。读完后你将能在自己的 AI 编程助手中接入 RTK理解它压缩 bash 输出的底层策略并会用分析命令量化与追踪 Token 节省效果。一、RTK 是什么站在 LLM 与开发工具之间的输出过滤器RTKRust Token Killer是一个 CLI 代理部署在 AI 助手与开发工具之间。它在命令输出到达 LLM 之前进行过滤只保留有信息量的内容丢弃样板文本、进度条和噪音。文档给出的量化结论是每条命令到达 LLM 的 bash 输出字节最多减少 90%且不改变你的任何工作流。以git status为例——你照常运行它RTK 的 Hook 拦截该命令、过滤其输出LLM 最终看到的是一份 3 行的紧凑摘要而不是 40 行原始输出。从源码结构看这个「代理」的定位在 主入口文件 中体现得很直接RTK 通过 clap 子命令路由Commands::Git、Commands::Go、Commands::Pytest等按生态组织命令模块每个命令模块独立实现「执行原命令 → 捕获输出 → 过滤压缩 → 记录节省量」的完整闭环。二、How it worksHook 拦截与透明重写流程官方文档给出的端到端流程图是理解 RTK 的第一块拼图Your AI assistant runs: git status ↓ Hook intercepts (PreToolUse) ↓ rtk git status (transparent rewrite) ↓ Raw output: 40 lines → Filtered: 3 lines ↓ LLM sees the compact output整个流程对你零配置——Hook 自动完成拦截与改写。其运行机制可拆解为三步拦截AI 助手如 Claude Code的PreToolUseHook 在命令执行前拿到原始命令字符串改写Hook 调用 RTK 二进制内置的rtk rewrite决策逻辑将git status改写为rtk git status。从 支持代理文档 可以确认所有改写逻辑集中在 RTK 二进制rtk rewrite中各 Agent 的 Hook 只是解析 Agent 专有 JSON 格式的薄委托层过滤执行被改写后的命令由 RTK 执行原始工具、捕获 stdout/stderr按策略过滤后再输出。[ARCHITECTURE.md](https://link.gitcode.com/i/97e2624c9d3a440c58bc1401557a031c)进一步将单次命令的执行拆解为六个阶段Phase 1: PARSE — clap 解析子命令与参数如 verbose、ultra_compact 标志 Phase 2: ROUTE — main.rs 按子命令分发到对应模块git::run 等 Phase 3: EXECUTE — std::process::Command 执行原始命令捕获 stdout/stderr/exit_code Phase 4: FILTER — 按该命令类型的过滤策略压缩输出 Phase 5: PRINT — 输出彩色紧凑结果-v 系列标志可逐级输出调试信息 Phase 6: TRACK — tracking::track() 将输入/输出字节数换算为估算 token 并写入 SQLite其中 Phase 6 是后文rtk gain度量的数据来源。此外架构文档还强调四条设计原则对使用者很重要退出码保真CI/CD 依赖的失败信号不被代理吞掉、Fail-Safe过滤失败时回退原始输出、透明可调试-v/-vv/-vvv逐级显示调试信息、执行命令与过滤前原始输出、最小开销每条命令约 5–15ms 的代理开销。三、What the savings mean90% 到底省的是什么这是官方指南中特意单列一节澄清的概念边界使用 RTK 时应准确理解RTK 减少的是bash 输出字节——shell 命令回传给 Agent 之前发送的输出bash 输出只是input tokens 的贡献者之一与你的提示词、系统提示词、对话历史并列input tokens 又只是账单的一部分账单还计 output tokens因此压缩比例在每一层都被稀释——「bash 输出减少 90%」不等于「账单减少 90%」。在 token 估算的实现上RTK 按设计不内置任何真实分词器嵌入分词器会增加启动耗时且每个模型/会话都需要对应的 tokenizer。从 token 跟踪实现 可以看到估算函数/// tokens ceil(chars / 4) (text.len() as f64 / 4.0).ceil() as usize即estimate_tokens(text) ceil(bytes / 4)。由于同一估算器同时应用于原始输出与过滤后输出百分比是可靠的但绝对 token 数是近似值不会与服务商账单逐一对应。这也是 Token Savings Analytics 中反复强调「Save% 是 bash 输出字节比例不是账单占比」的原因。四、What RTK optimizes覆盖的命令生态RTK 覆盖主流生态的数十条命令。从 src/cmds 的目录结构可以核对各生态的模块划分生态模块目录代表命令与过滤机制Git / GitHubgitgit status紧凑 stat 分组、git diff削减上下文、git log仅 hash/作者/标题、gh pr list、glabRustrustcargo test/build/clippy失败聚焦rtk err、rtk test通用失败过滤器JS/TSjslint按规则/文件分组、tsc按文件分组、vitest/playwright仅失败、next build、pnpm list、prettier、prismaPythonpythonpytest状态机解析、traceback 裁剪、ruff checkJSON 按规则分组、mypy、pip、uv runGogogo testNDJSON 逐行解析、仅失败、golangci-lint runJSON 按 linter 分组Rubyrubyrake testminitest 状态机、rspec、rubocop.NET / JVMdotnet、jvmdotnet build/test、TRX 解析、mvn/mvnd、sbt、gradlewPHPphpphpunit、pest、ecs、phpstan、pint、artisan云与容器cloudawsSTS/EC2/Lambda/S3 等、docker/kubectl/oc紧凑列表 日志去重、curl/wget截断 进度条剥离、psql系统通用systemls/tree目录树 文件计数、read签名式智能读文件、grep截断 按文件分组、find、json只留结构、log重复行折叠计数、env、deps按架构文档的口径各生态的 bash 输出压缩率大致为Git 85–99%、JS/TS 70–99%、Python 70–90%、Go 75–90%、Ruby 60–90%、.NET 70–85%、云 60–80%、Rust 60–99%、系统命令 50–90%。这些压缩由一整套过滤策略支撑。架构文档归纳了 12 类策略统计提取、仅错误、模式分组、去重、仅结构、代码过滤、失败聚焦、树压缩、进度过滤、JSON/文本双模式、状态机解析、NDJSON 流式解析Token Savings Analytics 给出了几条典型命令的机制对照git status77–93%紧凑 stat、eslint84%按规则分组、jest/vitest94–99%仅显示失败、find75%树形格式、grep70%截断 分组。五、快速开始安装、验证与初始化官方指南的 Get started 三步为安装 → 5 分钟接入 AI 助手 → 确认 Agent 支持。以下是结合仓库文档的完整操作路径。1. 安装安装方式详见 Installation# Quick InstallLinux/macOS安装到 ~/.local/bin curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/master/install.sh | sh # 或 Homebrew brew install rtk-ai/tap/rtk # 或 Cargo必须显式指定 Git URL cargo install --git https://github.com/rtk-ai/rtk --branch master rtk重名冲突警告安装文档专门强调crates.io 上存在另一个同名项目 Rust Type Kitreachingforthejack/rtkcargo install rtk可能装错包。最可靠的判别方式是运行rtk gain——它应显示节省量看板若报 command not found说明装错了包或未装成功。2. 验证rtk --version # 应输出 rtk x.y.z rtk gain # 应显示节省量看板3. 初始化为 Agent 安装 HookQuick Start 给出的核心步骤# Claude Code全局应用到所有项目 rtk init --global # 仅当前项目 cd /your/project rtk init # 其他 Agent--agent 指定目标 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 antigravity # Google Antigravity rtk init -g --agent pi # Pi rtk init --agent hermes # Hermes rtk init -g --agent droid # Factory Droid安装后重启 AI 助手。此后你照常使用工具例如 Claude Code 执行cargo test时Hook 在执行前将其改写为rtk cargo testLLM 收到的只有失败用例而不是 500 行通过的测试输出——你始终不会看到或手打rtk前缀。两个实用细节--dry-run预演rtk init --global --dry-run会以[dry-run] would ...前缀打印所有将要创建/修改/打补丁的文件然后以[dry-run] Nothing written.结束磁盘零改动且跳过遥测同意提示配合-v还能查看将要写入的完整内容。所有 init 变体含--uninstall均支持但不能与--show组合。Hook 的作用域限制Hook 只对 Bash 类工具调用生效。Claude Code 的内置Read、Grep、Glob工具不经过 Bash Hook不会被自动改写若希望这些工作流也走 RTK 过滤应使用 shell 命令cat/rg/find或直接调用rtk read、rtk grep、rtk find。不支持的命令走 passthrough输出原样透传但用量仍被记录可显式用rtk proxy cmd。六、Measure your savings用 rtk gain 量化节省官方指南给出的三个核心命令rtk gain # 所有会话的累计节省 rtk gain --daily # 按天拆分 rtk gain --weekly # 按周聚合Token Savings Analytics 文档给出了完整的命令行参考# 时间维度拆分 rtk gain --daily # 从开始追踪以来的所有天 rtk gain --weekly # 按周聚合周日-周六 rtk gain --monthly # 按月聚合 rtk gain --all # 一次性输出所有拆分 # 经典标志 rtk gain --graph # ASCII 图最近 30 天 rtk gain --history # 最近 10 条命令 rtk gain --quota # 月度配额节省估算默认 20x 档 rtk gain --quota -t pro # 使用 pro 档 token 预算做估算 # 导出 rtk gain --all --format json savings.json rtk gain --all --format csv savings.csv--daily的输出示例数字为示例值实际取决于你运行了哪些命令Date Cmds Input Output Saved Save% ──────────────────────────────────────────────────────────────── 2026-01-28 89 380.9K 26.7K 355.8K 93.4% 2026-01-29 102 894.5K 32.4K 863.7K 96.6% ──────────────────────────────────────────────────────────────── TOTAL 196 1.3M 59.2K 1.2M 95.6%各列含义Cmds 为执行的 RTK 命令数Input/Output 分别为原始输出与过滤后输出按bytes / 4估算的 token 数Saved Input − OutputSave% Saved / Input × 100是bash 输出字节比例。这些数据背后的存储与计算链路可以从源码核实每次命令执行后tracking::track()将 timestamp、original_cmd、rtk_cmd、input_tokens、output_tokens、saved_tokens、savings_pct、exec_time_ms 写入 SQLite库文件位于~/.local/share/rtk/history.dbLinux/macOS跨项目与跨 Claude 会话全局共享保留 90 天并自动清理可用sqlite3 ~/.local/share/rtk/history.db SELECT COUNT(*) FROM commands直接检查原始数据也可cp备份或在删除该文件后重置下次命令执行时自动重建。分析工作流方面文档提供了三类可直接套用的模板每周一生成 CSV 周报rtk gain --weekly --format csv reports/week-$(date %Y-%W).csv、cron 每日 JSON 快照供仪表盘消费0 0 * * * rtk gain --all --format json /var/www/dashboard/rtk-stats.json、以及 GitHub Actions 每周提交统计 JSON 的完整 workflow。此外--quota将估算节省量表达为某订阅档月度 token 预算的占比pro/5x/20x档位但由于其分母同样来自bytes / 4估算应视为数量级参考而非账单预测。七、Analyze your usagertk discover 与 rtk session指南的第二个度量维度是「没省到的部分」与「采用率」对应 Discover and Session 文档中的两条命令。rtk discover找出漏掉的节省机会rtk discover分析 Claude Code 的命令历史识别未经过 RTK 过滤就执行过的命令并估算 RTK 本可压缩掉的 bash 输出量rtk discover # 分析当前项目的历史 rtk discover --all # 所有项目 rtk discover --all --since 7 # 最近 7 天所有项目输出示例数字为示例Missed savings analysis (last 7 days) ──────────────────────────────────── Command Count Est. lost cargo test 12 ~48,000 tokens git log 8 ~12,000 tokens pnpm list 3 ~6,000 tokens ──────────────────────────────────── Total missed: 23 ~66,000 tokens同样注意~N tokens是估算的 bash 输出字节除以 4不是服务商计费的 token 数。若安装 RTK 后命令仍出现在漏省清单里通常说明该 Agent 的 Hook 未激活。rtk session按会话统计采用率rtk session输出每个近期 Claude Code 会话中经 RTK 执行的 shell 命令数与原始命令数的比值Session Total RTK Coverage 2026-04-06 14:32 (45 cmds) 45 43 95.6% 2026-04-05 09:14 (38 cmds) 38 38 100.0% ───────────────────────────────────────────────────── Average coverage: 96.6%某个会话覆盖率偏低通常意味着该时段 RTK 被RTK_DISABLED1临时禁用或某个子 Agent 的 Hook 未生效。八、配置速览config.toml、环境变量与 Tee 恢复Configuration 文档对应指南 Further reading 中提到的「config.toml、全局标志、环境变量、tee 恢复」四项能力。配置文件位置Linux 为~/.config/rtk/config.tomlmacOS 为~/Library/Application Support/rtk/config.toml。可用rtk config查看当前配置、rtk config --create生成带默认值的配置模板。完整配置结构[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字节 # directory /custom/tee/path # 可选覆盖 [telemetry] enabled true # 匿名每日上报——详见 Telemetry Privacy [hooks] exclude_commands [] # 永不自动改写的命令环境变量覆盖变量作用RTK_DISABLED1对单条命令禁用 RTKRTK_DISABLED1 git status执行原始命令RTK_TEE_DIR覆盖 tee 目录RTK_TELEMETRY_DISABLED1禁用遥测无视同意状态RTK_HOOK_AUDIT1启用 Hook 审计日志SKIP_ENV_VALIDATION1跳过环境校验配合 Next.js 时有用Tee 恢复机制值得单独说明命令失败时RTK 将完整未过滤输出保存到本地文件并在摘要中打印路径见 tee 实现FAILED: 2/15 tests [full output: ~/.local/share/rtk/tee/1707753600_cargo_test.log]这样 AI 助手需要更多细节时可直接读取该文件而无需重新执行命令——在「压缩输出」与「不丢现场」之间取得平衡。全局标志方面所有命令支持-u/--ultra-compactASCII 图标 单行内联格式进一步压缩与-v/--verbose-v/-vv/-vvv三级调试。九、支持的 Agent 与集成层级RTK 支持 16 款 AI 编码工具。从仓库结构看各 Agent 的接入实现分别位于 hooks 目录claude/、cursor/、copilot/、hermes/、opencode/、pi/、openclaw/等OpenClaw 插件 则是独立的 TypeScript 插件包。Supported Agents 文档将集成划分为三个层级层级机制改写方式Full hookShell 脚本或 Rust 二进制经 Agent API 拦截透明——Agent 永远看不到原始命令Claude Code、Cursor、Gemini CLI、Copilot、Factory Droid、Mistral Vibe 等PluginAgent 插件系统中的 TS/JS/PythonAgent 允许时原位改写OpenCodetool.execute.before、Pitool_call、Hermes 终端命令改写Rules file提示词级指令仅引导——告知 Agent 优先使用rtk cmdCline、Windsurf、Codex、Kilo Code、Antigravity各 Agent 的安装命令速查完整卸载与升级说明见该文档rtk init --global # Claude CodeHook 补丁 settings.json rtk init --global --agent cursor # CursorpreToolUse updated_input rtk init --copilot # Copilot 项目级.github/hooks/ rtk init --global --copilot # Copilot 用户级~/.copilot/hooks/尊重 $COPILOT_HOME rtk init --global --gemini # Gemini CLIBeforeTool rtk init --global --opencode # OpenCode 插件~/.config/opencode/plugins/rtk.ts rtk init --agent pi --global # Pi 扩展~/.pi/agent/extensions/rtk.ts rtk init --codex # CodexAGENTS.md 指令 rtk init --agent hermes # Hermes Python 插件适配器hooks/hermes/ rtk init -g --agent droid # Factory Droid~/.factory/hooks.jsonmatcher Execute rtk init -g --agent vibe # Mistral Vibe~/.vibe/hooks.toml两个工程化细节优雅降级Hook 永远不会阻塞命令执行。RTK 二进制缺失、JSON 输入非法、版本过旧或过滤逻辑出错时Hook 干净退出exit 0或回退原始命令照常运行单命令覆盖RTK_DISABLED1 git status可临时跳过改写也可在[hooks] exclude_commands中永久排除特定命令如[git rebase, git cherry-pick]。十、Further reading继续深入的路径沿着官方指南首页的 Further reading 线索结合仓库中的对应文档与源码推荐的深入路径如下配置Configuration —— config.toml 全量字段、环境变量、tee 恢复的完整语义节省原理Token Savings Analytics —— 从bytes / 4估算到数据库 schema 的完整推导架构设计ARCHITECTURE.md —— 六阶段命令生命周期、12 类过滤策略矩阵、SQLite 追踪系统、退出码保真策略面向贡献者的系统级参考遥测与隐私TELEMETRY.md —— 采集字段清单、GDPR 依据与退出机制rtk telemetry status/enable/disable/forget源码入口主路由 查看命令分发与AgentTarget枚举10 种 Agent 目标core 基础设施 中的 tracking.rs、tee.rs、config.rs、toml_filter.rs 分别对应追踪、失败恢复、配置解析与自定义 TOML 过滤器测试验证tests 目录 收录了大量真实命令输出的 fixturemvn、gradlew、ctest、sbt、glab、tsc 等与对应的过滤逻辑测试如 guard_integration_test.rs、grep_faithful_format_test.rs可作为理解各过滤器边界行为的参照。小结RTK 的价值链路可以概括为——Hook 透明改写rtk init→ 按命令类型过滤 bash 输出12 类策略→ 本地 SQLite 记录每次的输入/输出字节bytes / 4估算→ 用rtk gain看总节省、用rtk discover查漏网之鱼、用rtk session盯采用率。理解「压缩的是 bash 输出字节而非账单比例」这一边界后你即可把它作为 AI 编程工作流中一套可量化、可配置、可优雅降级的输出治理层来使用。【免费下载链接】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),仅供参考