# Token Killer: RTK,给你的 AI 编程代理瘦个身


![rtk.jpg](https://img.lixueduan.com/ai/cover/rtk.jpg)

[RTK (Rust Token Killer)](https://github.com/rtk-ai/rtk) 是一个 CLI 代理工具，它的核心思路是在命令输出到达 AI 之前把噪音过滤压缩掉，从而实现平均省 60-90% 的 token 的效果。

<!--more-->

你有没有算过，Claude Code 一个小时的会话，光 `git status`、`cargo test` 这些命令的输出就吃掉多少 token？

**原因在于大多数 CLI 命令的输出是给人看的**——带进度条、带彩色、带提示语、带格式化。但对 AI 来说，`git push` 输出的 15 行 "Enumerating objects..." 毫无意义，它只需要知道 "ok main"。

## 快速上手

### 安装

```bash
# Homebrew（推荐）
brew install rtk

# 或脚本安装
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh
```

验证一下：

```bash
rtk --version   # 应该显示 rtk 0.39.x
rtk gain        # 应该显示 token 节省统计
```

### 配置

一条命令搞定——给你的 AI 工具装上 Hook：

```bash
# 对于 Claude Code（默认）
rtk init -g          
# 对于 Cursor           
rtk init -g --agent cursor      
# 对于 Windsurf
rtk init -g --agent windsurf       
# 更多工具使用 rtk init --help 查看
```

### 使用

配置完 RTK 之后重启 AI 工具就行。

之后你在 AI 会话里执行 `git status`，它会被自动重写成 `rtk git status`——AI 收到的是压缩后的输出，但你完全无感。

效果对比：

```bash
# 普通 git push (~200 tokens)          # rtk git push (~10 tokens)
Enumerating objects: 5, done.           ok main
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), done.
To github.com:user/repo.git
   abc123..def456  main -> main
```

```bash
# 普通 cargo test (200+ 行)            # rtk 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
test utils::test_edge_case ... FAILED
...150 行 backtrace...
```

30 分钟典型会话的估算节省：

| 命令         | 频次 | 原始 token | rtk 后  | 节省     |
| ------------ | ---- | ---------- | ------- | -------- |
| `git status` | 10x  | 3,000      | 600     | -80%     |
| `cargo test` | 5x   | 25,000     | 2,500   | -90%     |
| `git diff`   | 5x   | 10,000     | 2,500   | -75%     |
| `cat`/`read` | 20x  | 40,000     | 12,000  | -70%     |
| **合计**     |      | ~118,000   | ~23,900 | **-80%** |

![rtk-gain.png](https://img.lixueduan.com/ai/rtk/rtk-gain.png)

## 它是怎么工作的

### 核心思路

**RTK 是一个 CLI 代理，拦截命令输出并压缩后再交给 AI**。

```
AI Agent ──"git status"──> RTK ──> git ──> 原始输出
                                  │
                              过滤压缩
                                  │
AI Agent <──────────────── RTK <──┘
```

对不同类型的命令，RTK 用不同策略压缩：

- **git 操作**（add/commit/push）：成功时只输出 `ok`，省 92%
- **测试命令**（cargo test/pytest）：只显示失败的测试，省 90%+
- **lint/tsc**：按规则分组错误，省 80%+
- **文件列表**（ls/tree）：压缩为带计数的树状结构，省 80%
- **代码阅读**（read/smart）：可选去除注释、折叠函数体，省 30-90%

RTK 不认识的命令会原样执行，不做压缩——**永远不会因为 RTK 导致命令失败**。

### Hook 自动重写

`rtk init -g` 会在你的 AI 工具配置里加一个 Hook，让每次 Bash 命令执行前自动走 RTK。以 Claude Code 为例，它在 `~/.claude/settings.json` 里加了一个 PreToolUse Hook：

```json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "rtk hook claude"
          }
        ]
      }
    ]
  }
}
```

每次 Claude Code 执行 Bash 命令前，这个 Hook 会先触发 `rtk hook claude`，由 RTK 接管命令的执行和输出压缩。

```
Claude Code 执行 "git status"
  → Hook 拦截，改写为 "rtk git status"
  → RTK 执行并压缩输出
  → Claude 收到精简结果
```

### 两套过滤体系

RTK 支持两种方式添加命令过滤：

- **Rust 模块**（`src/cmds/`）：适合需要复杂解析的命令，比如 pytest 用状态机追踪测试状态、go test 用 NDJSON 流式解析
- **TOML DSL**（`src/filters/*.toml`）：声明式规则，适合简单的行过滤/替换，比如 `helm`、`shellcheck`

内置了 100+ 命令支持，你也可以在 `.rtk/filters.toml` 里写自定义规则。

### 实用命令速查

```bash
# 文件操作
rtk ls .                        # 压缩目录树
rtk read file.rs                # 智能读取
rtk read file.rs -l aggressive  # 只保留函数签名
rtk grep "pattern" .            # 按文件分组搜索

# Git
rtk git status / diff / log     # 压缩输出
rtk git add / commit / push     # 极简输出

# 测试
rtk cargo test / pytest / go test   # 只显示失败

# 包管理
rtk pnpm list / pip list        # 压缩依赖树

# 查看节省
rtk gain                        # 总览
rtk gain --graph                # 30 天趋势图
rtk gain --quota -t pro         # 按订阅估算省钱
rtk discover                    # 发现未优化的命令
```

全局标志：`-u` 开启超压缩模式（ASCII 图标 + 内联格式），`-v`/`-vv`/`-vvv` 逐级调试。

## 小结

RTK 是一个 CLI 代理工具——Token Killer 名字很贴切，在命令输出到达 AI 之前把噪音过滤掉。它解决了一个很实际问题：AI 编程代理执行命令时大量无意义输出导致的 token 浪费。
用起来没什么感知，看账单才知道省了多少，时不时跑下 `rtk gain` 看看又省了多少 Token 哈哈。


---

> 作者: [意琦行](https://github.com/lixd)  
> URL: https://www.lixueduan.com/posts/ai/20-rtk/  

