GitHub Copilot

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 文のサマリーが出る。「このコマンドが何をするか」を一言で教えてくれるやつ。自動承認の判断材料として使える。

VS Code の Chronicle 機能が結構便利だった

TL;DR — Chronicle は Copilot Chat のチャット履歴をローカルで記録・分析する実験的機能。/chronicle:standup でその日の作業サマリー、/chronicle:tips で自分の使い方フィードバックが出せる。これがなかなか良い。Claude にはこういう公式機能はないけど、自宅では QMD で履歴検索は実現してる。

職場で VS Code を使っていて、ふと試してみた機能の話。

Chronicle とは

VS Code v1.118 で実験的に追加された GitHub Copilot Chat の機能。Copilot とのやり取り、編集したファイル、参照した PR や Issue あたりをローカルの SQLite データベースに記録しておいて、あとから振り返ったり分析したりできる。

で、早速使ってみた。

有効化は github.copilot.chat.localIndex.enabledtrue にするだけ。

GUI の設定じゃないのはまだプレビュー段階だからかな。

使えるコマンドは主に 3 つ。

/chronicle:standup 過去 24 時間の作業内容をまとめてくれる。「このブランチでこのファイル触って、この PR を参照した」みたいな感じで出てくる。朝会の準備が秒で終わるらしい(使ったことはない)。

/chronicle:tips 7 日間の使い方を分析して、「お前こういうプロンプトの書き方してるけど、こうしたほうが良くね?」みたいなフィードバックをくれる。自分の癖を指摘してもらえるのがおもしろいし、フィードバックがまあまあためになる。これはよき。

/chronicle [query] 自然言語で過去の履歴を検索できる。「先週やってたあれ、なんだっけ」が出てくる。

試してよかったのは tips

「同じような質問を繰り返してる」とか「毎回コンテキストを初めから説明してる」みたいな自分のパターンを指摘してくれる。ほう、わかってんじゃねーかこいつ…

Copilot との対話の仕方に改善余地があると気づかせてくれるのが嬉しい。

やるじゃん。

Claude だと?

で、家で使ってる Claude Code でこういう機能があるかというと、公式にはない。 そこんとこどうなんよ?と Claude さんに聞いてみた結果が以下。

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 が生成される。

VSCode Copilot Chat と Claude Code、bash の扱いが違う

TL;DR — oh-my-posh v28.1.1 以降は VSCode Shell Integration と競合してエージェントモードが固まる。.bashrc$TERM_PROGRAM=vscode の早期リターンを入れれば解決。Claude Code の PATH は .profile 経由で解決している。

午前中、Copilot Chat のエージェントモードでコマンド実行したら止まるという事象が頻発した。.bashrc に仕掛け作って凌いだ。定時過ぎに Claude Code の仕組みを調べたらなんか知らんけど上手く動いてた、という一日の話。

午前:Copilot Chat のエージェントモードでコマンド実行すると以後進まない

VSCode の Copilot Chat をエージェントモードで使っていたら、コマンドを実行させるとそこで「Preparing」が点滅し続けてそこから進まなくなった。

なんだよこれと思って調べてみると、oh-my-posh が原因。oh-my-posh v28.1.1 以降で VSCode Shell Integration と競合するようになったらしく、エージェントが叩いた bash がそのまま固まる。

解決策として .bashrc に VSCode 向けの早期リターンを仕込んだ。$TERM_PROGRAM は VSCode が統合ターミナルを開くときにセットする変数で、WSL・ネイティブ Ubuntu どちらでも vscode になる。

# mise shims(全環境で必要)
eval "$(mise activate bash --shims)"

# VSCode 統合ターミナルはここで早期リターン
if [[ "$TERM_PROGRAM" == "vscode" ]]; then
  return
fi

# 以降はインタラクティブ専用(Tabby / GNOME Terminal など)
eval "$(oh-my-posh init bash ...)"
# ghq, fzf など...

これで Copilot Chat のエージェントモードは直った。さくさく進むようになった。でも午前の業務は溶けた。う○こですよ。