正在打开工具详情…
正在打开工具详情…
单个 Rust 二进制:在 shell 输出进入 LLM 上下文之前压缩它,覆盖 100+ 命令,开销 10ms 以内。适合天天用 Claude Code / Codex 烧 token 的人;代价是只拦 Bash 调用,内置 Read / Grep 管不到。
每天让编码代理跑大量 shell 命令(git、测试、lint、构建、kubectl、aws)的人,尤其是被长输出撑爆上下文或按量付费心疼的人。
主要用 IDE 内置工具读文件、很少走 Bash 的人——hook 管不到那条路径,收益有限;也不适合指望装完账单立刻砍半的人。
rtk 做的事很直接:你(和你的代理)敲的 shell 命令,输出先过它一道再进上下文。它是单个 Rust 二进制、零依赖、开销 10ms 以内,覆盖 100+ 命令——ls 变树形并带文件计数、cat/read 取签名与结构而不是全文、grep 截断长行并按文件分组、git status 变紧凑 stat、git log 只留 hash 与主题、测试只留失败项(通过项压成计数)、docker ps 只留关键字段,AWS 命令还会顺手去掉策略文档和敏感字段。装好 rtk init -g 之后它往代理的 hook 里注册,命令被自动重写成 rtk git status,代理不需要知道 rtk 存在。
省多少要说实话:README 自己强调「最多省 90% 的 bash 输出」不等于账单少 90%——bash 输出只是输入 token 的一部分,输入又只是账单的一部分,每一层都在稀释。而且它没带分词器,token 数按 bytes / 4 估算,百分比可信、绝对数字是近似值。
两个必踩的坑。一是名字撞车:crates.io 上另有一个叫 rtk 的 Rust Type Kit,rtk gain 报错基本就是装错了,改用 cargo install --git。二是 hook 只在 Bash 工具调用上生效,Claude Code 内置的 Read / Grep / Glob 不走 Bash,所以要改用 shell 命令(cat、rg、find)或直接调 rtk read / rtk grep / rtk find 才有压缩。
上手步骤之外的具体做法:常见场景怎么配、命令怎么写、报错怎么处理。
按第一次装会卡在哪讲:安装与验证、init 之后要重启、hook 只覆盖 Bash 这件事、以及「省 90% 输出」为什么不等于省 90% 账单。
bashbrew install rtk # macOS
winget install rtk-ai.rtk # Windows
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh # Linux/macOSLinux / macOS 的脚本装到 ~/.local/bin,必要时加 PATH:
bashecho 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc # zsh 用 ~/.zshrc验证两条命令:
bashrtk --version # 应显示 rtk 0.28.2
rtk gain # 打开节省看板rtk gain 失败 = 装错了包:crates.io 上另有一个叫 rtk 的 Rust Type Kit。改用 cargo install --git https://github.com/rtk-ai/rtk。
bashrtk init -g # Claude Code / Copilot(默认)
rtk init -g --gemini # Gemini CLI
rtk init -g --codex # Codex
rtk init -g --agent cursor # Cursor改完必须重启代理,然后敲一句 git status——它会被自动重写成 rtk git status,代理拿到的是压缩后的输出。
这是最容易被误解的一条:
git status、npm test、cat file…)Read、Grep、Glob,它们不经过 Bash hook想要后者的压缩,两个办法:改用 shell 命令(cat / head / tail、rg / grep、find),或直接调用 rtk read、rtk grep、rtk find。
README 单独用一节解释这件事:bash 输出只是输入 token 的一部分,输入 token 又只是账单的一部分(还有输出 token),每一层都在稀释。另外 rtk 不带分词器,token 估算按 bytes / 4,所以:
要看自己真实的数据,用 rtk gain。
bashrtk git status # 紧凑状态
rtk git log -n 10 # 单行提交
rtk pytest # 只留失败
rtk tsc # TypeScript 错误按文件分组
rtk docker logs <container> # 去重日志
rtk read file.rs -l aggressive # 只要签名
rtk err <cmd> # 只留错误与警告
rtk run <cmd> # 原样执行,不过滤需要原始输出时用 rtk run,别为了拿完整结果去关掉 hook。