RTK

VS Code 1.120 のターミナル出力圧縮とリスク評価がなかなかよさそう

TL;DR — VS Code 1.120 でプレビュー追加されたターミナル出力圧縮(chat.tools.compressOutput.enabled)とリスク評価(chat.tools.riskAssessment.enabled)。圧縮はコンテキスト管理、リスク評価は実行前の安全確認と役割が違う。特に圧縮は RTK と処理レイヤーが完全に別なので共存できる(らしい)。

何が追加されたか

VS Code 1.120 のリリースノートを眺めていたら、エージェント周りで自分の関心をひく機能が 2 つ入っていた。

ターミナル出力の自動圧縮ターミナルコマンドのリスク評価だ。

ターミナル出力の自動圧縮

設定は Chat › Tools › Compress Output: Enabled。これはプレビュー。

Claude さんの解説は以下。

有効にすると、エージェントがターミナルコマンドを実行したあと、その出力をモデルに送る前に VS Code 側で自動的に削減してくれる。具体的には以下の処理が入る。

  • git diff の差分で変更のない部分を折りたたむ
  • lockfile や snapshot の差分を丸ごと除外
  • ls -l をファイル名だけに削減
  • npm install の進捗バー・非推奨警告・audit サマリーを除去

圧縮された出力には先頭にバナーが付く。「どのフィルタが適用されたか」「生のテキストが必要なら圧縮を無効にできる」という情報をモデルに伝えるためのやつ。モデルが圧縮済みであることを認識できるのは地味に大事。

いや、これ RTK と同じじゃね?

AI を提供している会社のどれかがそのうち自社で実装するかもなー、とか思ってたけど案外早かったな。

リスク評価

設定は Chat › Tools › Risk Assessment: Enabled。こちらはエクスペリメンタル。

おなじみの Claude さんの解説は以下。

エージェントがターミナルコマンドを実行しようとしたとき、確認ダイアログにリスクバッジと AI 生成の説明が表示されるようになる。バッジは 3 段階。

バッジ意味
🟢 Safeファイルの読み取りや出力のみ。変更なし
🟠 Cautionワークスペースへの変更やネットワーク呼び出しを含む
🔴 Review carefullyforce push や外部への削除など、要注意な操作

バッジの横に 1 文のサマリーが出る。「このコマンドが何をするか」を一言で教えてくれるやつ。自動承認の判断材料として使える。

RTK に issue 立ててプルリク作った話

TL;DR — RTK に立てた issue が1週間放置されたので自分でプルリクを出した。run_in_terminal の未認識バグを修正し、重複関数を統合。ローカル確認では mise と linuxbrew の PATH 競合に引っかかったが解決し、PR #1800 を提出した。

前の記事で「引き続き更新を待つかぁ」と書いたやつの続き。

1週間待ったけど動きがなかった

Issue #1425 を立てたあと、1週間ほど本体の動向を見ていた。メンテナさんも忙しいだろうし、そんなもんかと思っていたけど、なかなか動きがない…

うん。待つの飽きた。

「どうせなら自分でプルリクを出してしまえ」

リファクタしてからプルリクを作る

ローカルには fix(hooks): VS Code Copilot Chat... というコミットがすでにあった。ただそのまま出すのは品質的に不安だったので、upstream/develop ベースでブランチを切り直して cherry-pick し、ついでに既存のコードベースのお作法を調査してリファクタも入れた。

変更の内容は3つ:

  1. detect_format()"run_in_terminal" を追加 VS Code Copilot Chat が渡す tool_name の値で、これが認識されないとフックが PassThrough になっていた。根本的なバグ修正。

  2. handle_vscode()handle_copilot_cli()handle_copilot_rewrite() に統合 ほぼ同じロジックが2関数に分散していたので1つにまとめた。

  3. VS Code 向けのレスポンスを allow/ask + updatedInput から deny + suggestion に変更 前の記事で書いた「承認ループ」の回避。Copilot Chat は updatedInput を承認後に無視するので、Copilot CLI と同じ deny + reason 方式に統一した(詳細は #1425)。

NanoClaw のアップデートで RTK が pnpm test を素通りしてた話

TL;DR — RTK の rewrite は pnpm run build を圧縮するが pnpm test(実体は vitest run)は素通り。加えて /update-nanoclaw/update-skills を同一コンテキストで自動呼び出ししていた。SKILL.md を2行変えて解決。

NanoClaw の大型アップデート来ましたね。かなり中身が変わっていてローカルでのマージにものすごく時間がかかりました。最終的には、

「もう俺の作ったスキルさえ無事なら後はどうでもいいから全部上書きしちゃって!」

と雑な投げ方をしてアップデートをしてもらいました。

無事(一部無事じゃなかったけど git のログから復旧した)終わったんだけど、後日再度 /update-nanoclaw を実行した時の話です。

/update-nanoclaw を実行したら5時間制限の40%くらいを1回で使い切ってしまった。なにこれ、と思って Claude さんに調べてもらった。

以前 RTK を入れた記事を書いたとき、「効果はこれからに期待」と書いたんだけど、うまく行かなかったようで…

以下は、Claude さんに解説してもらった文章です。

RTK の仕組みをおさらい

RTK は Claude Code の PreToolUse hook として動く。Bash ツールが呼ばれるたびに rtk hook claude が起動し、rtk rewrite "<コマンド>" でコマンドを書き換えられるか確認する。

  • 書き換えできる(exit 3)→ rtk <subcommand> が代わりに実行され、出力が圧縮される
  • 書き換えできない(exit 1)→ 元のコマンドがそのまま実行される(RTK はノータッチ)

何が素通りしていたか

rtk rewrite "pnpm run build"
# → rtk pnpm run build(exit 3: 書き換え成功)

rtk rewrite "pnpm test"
# → (何も出力なし、exit 1: 書き換えなし)

pnpm run build は圧縮される。でも pnpm test は exit 1 で素通り。

WSL + VSCode Copilot Chat で RTK インストールしたら動かなかった話

TL;DR — RTK のフックが vscode の Copilot Chat では動かない(2つの理由がある)。フックをやめてグローバルインストラクションに .github/copilot-instructions.md の内容を転記すれば Copilot が自発的に rtk プレフィックスを使うようになった。

職場の WSL 環境に RTK をインストールして VSCode Copilot Chat と組み合わせようとしたら、フックが全然動かなかった。調査した結果と、現状の対策を書いておく。

RTK とは

RTK(Rust Token Killer) は CLI プロキシで、コマンド出力を 60〜90% 圧縮して AI エージェントのトークン消費を削減するツール。git status の代わりに rtk git status を使うと、AI に渡る出力がコンパクトになる。

前の記事でも紹介したなこれ。書かなくてもいいかと思ったけど一応書いておく。

rtk init -g は Copilot 向けではない

RTK のセットアップで rtk init -g を実行すると Claude Code 向けのフックしか設置されない。Copilot 向けは --copilot フラグが必要:

rtk init -g --copilot

ただし -g(グローバル)をつけても実質プロジェクトスコープで、このコマンドを実行したディレクトリの .github/ 以下に copilot-instructions.mdhooks/rtk-rewrite.json が生成される。

Claude Code のトークンを節約する RTK を入れた

TL;DR — RTK(Rust Token Killer)は Claude Code の bash 出力をフィルタして LLM へのトークン消費を削減するプロキシ。rtk init -g だけで自動設定される。

ちょっと仕事が忙しくて疲弊してたんだけど、気分転換に前から気になってたツールを入れてみた。

効果はこれからに期待。

RTK とは

RTK (Rust Token Killer) は、Claude Code などの AI アシスタントが bash コマンドを実行したときの出力をフィルタして、LLM に渡るトークン数を削減する CLI プロキシ。git logls の出力って、そのまま渡すと無駄に長いことが多い。RTK はそれをコンパクトにまとめてから Claude のコンテキストに入れてくれる。公称で 60〜90% の節約効果があるらしい。

インストール

brew install rtk
rtk init -g

rtk init -g を叩くだけで、以下が自動設定される:

  • ~/.claude/RTK.md の生成(Claude Code に RTK の使い方を教えるファイル)
  • ~/.claude/settings.json への hook 追記(PreToolUse/Bashrtk hook claude が入る)

これ以降、Claude Code が bash を呼ぶたびに透過的に RTK を通るようになる。ユーザー側で何か変えなくていい。