windows为opencode安装rtk压缩命令节省token

一、rtk的原理(Rust Token Killer)

RTK 会在命令输出内容到达上下文窗口之前对其进行压缩处理。

很多命令工具输出的信息都是冗长的,关键信息只占很少。AI编程助手本身不具备过滤和压缩功能。rtk会设钩子自动处理命令后再发送给大模型。

如:git status 会自动转成 rtk git status

二、安装步骤(原生Windows + OpenCode)

  1. 下载与解压
    • 从rtk的GitHub releases页面下载rtk-x86_64-pc-windows-msvc.zip
    • 解压后将rtk.exe放入PATH路径中(例如 C:\Users\<你>\ .local\bin)。
  2. 验证安装
cmd 复制代码
rtk --version   # 应显示 "rtk 0.28.2"
rtk gain        # 应显示 token 节省统计
  1. 为OpenCode初始化插件
cmd 复制代码
rtk init --global --opencode

此命令会在OpenCode的插件目录(C:\Users\<你>\.config\opencode\plugins)中安装rtk.ts插件。

  1. 验证插件安装
cmd 复制代码
rtk init --show   # 应显示 "OpenCode: plugin installed"

  1. 验证功能

进入opencode,输入!进入shell模式

cmd 复制代码
git status
rtk gain        # 应显示 token 节省统计

三、为什么原生Windows上OpenCode也能自动重写命令?

文档明确指出,原生Windows不支持系统级别的Bash Hook(即无法自动拦截所有shell命令),这种能力仅适用于WSL或Linux/macOS。但OpenCode是通过**自身的插件系统(TypeScript插件)**来实现命令拦截的,与操作系统无关。

具体机制:

  • OpenCode的插件会在每个命令执行前tool.execute.before)运行。
  • rtk的插件会检查当前命令(如git status)是否需要重写,如果需要,则替换为rtk git status
  • 因此,只要OpenCode插件在Windows上能正常运行,自动重写就有效,完全绕过了Windows缺少Bash Hook的限制。

四、常见问题及修复:插件未生效

问题现象

执行rtk init --show显示插件未安装,或运行git status时未被重写。

错误原因

社区发现,rtk官方插件中使用了which rtk命令来检查rtk二进制是否存在,但**which命令在Windows上可能不兼容或未安装**,导致插件检查失败并静默禁用(静默意味着插件不报错,但实际不工作)。

修复方法(手动修改插件文件)
  1. 打开插件文件:
    C:\Users\<你>\.config\opencode\plugins\rtk.ts
  2. 找到类似下面的代码段(原版):
typescript 复制代码
const check = await $`which rtk`.quiet()
if (check.exitCode !== 0) throw new Error("rtk not available")
  1. 修改为(已修复版):
typescript 复制代码
const check = await $`rtk --version`.quiet().nothrow()
if (check.exitCode !== 0) throw new Error("rtk not available")
  1. 重启OpenCode,插件会自动重新加载。
修改原理
  • 原版:which rtk --- 在Windows上可能找不到which命令或返回非零退出码。
  • 修改版:直接运行rtk --version --- 不需要外部命令,直接检测rtk是否存在且可执行,更兼容Windows。

五、使用说明

  • 不要双击rtk.exe --- 它是CLI工具,双击会闪退,必须在命令提示符、PowerShell或Windows Terminal中运行。
  • 初始化模式 :对于OpenCode,使用rtk init --global --opencode(CLAUDE.md注入模式不适用于OpenCode)。
  • 验证工作状态 :执行任意可被重写的命令(如git status),观察是否被自动替换为rtk git status并输出token节省信息。

六、总结对比:支持能力

功能 WSL 原生Windows(一般CLI) 原生Windows + OpenCode
命令过滤(cargo, git等) ✅ 完整 ✅ 完整 ✅ 完整
自动重写命令 ✅ 是(Bash Hook) ❌ 否(仅CLAUDE.md注入) ✅ 是(OpenCode插件)
初始化模式 Hook模式 CLAUDE.md模式 OpenCode插件模式
统计与分析 ✅ 完整 ✅ 完整 ✅ 完整

关键结论

  • 您能在原生Windows上使用OpenCode并让rtk自动重写命令,是因为OpenCode通过自己的TypeScript插件系统实现了命令拦截,绕过了Windows缺失的Bash Hook。
  • 若插件因which命令不兼容而静默失效,手动修改rtk.ts中的检查逻辑即可恢复。
  • 该机制同样适用于其他依赖插件/规则系统的AI工具(如Cline、Roo Code等),但Claude Code的自动重写仍需通过WSL或Linux/macOS环境实现。