ツール使用サマリー
Qwen Code は、各ツールバッチの完了後に、そのバッチが何を行ったかを要約する git コミットメッセージの件名形式の短いラベルを生成できます。このラベルはトランスクリプト内にインラインで表示され、コンパクトモードでは汎用的な Tool × N ヘッダーを置き換えます。
これは並列ツール呼び出し向けの UX 補助機能です。モデルが一度に複数の Read + Grep + Bash 呼び出しに分散する場合、ツールリストをスキャンする代わりに、サマリーを見るだけで意図を一目で把握できます。
この機能はデフォルトで有効であり、バックグラウンドでサイレントに実行されます。fast model の設定が必要です。
表示される内容
フルモード(デフォルト)
サマリーは、ツールグループの直下に薄色のバッジ行として表示されます。
╭──────────────────────────────────────────────╮
│ ✓ ReadFile a.txt │
│ ✓ ReadFile b.txt │
│ ✓ ReadFile c.txt │
│ ✓ ReadFile d.txt │
╰──────────────────────────────────────────────╯
● Read 4 text filesコンパクトモード(Ctrl+O または ui.compactMode: true)
ラベルは、コンパクトな1行表示における汎用的な Tool × N ヘッダーを置き換えます。
╭──────────────────────────────────────────────╮
│✓ Read txt files · 4 tools │
│Press Ctrl+O to show full tool output │
╰──────────────────────────────────────────────╯個々のツール呼び出しは、キー操作1つで確認できます(Ctrl+O でフルモードに切り替え)。
動作の仕組み
ツールバッチが確定すると、Qwen Code は設定済みの fast model に対して fire-and-forget 形式の呼び出しを実行し、以下のデータを渡します。
- ツール名、切り詰められた引数、切り詰められた結果(各フィールド最大 300 文字)。
- アシスタントの最新のテキスト出力(最初の 200 文字)を意図のプレフィックスとして使用。
- モデルに対して、git コミットメッセージの件名形式で過去形の 30 文字以内のラベルを返すよう指示するシステムプロンプト。
この呼び出しは次のターンの API ストリーミングと並行して実行されるため、約 1 秒のレイテンシはメインモデルの応答の裏に隠れます。ラベルが解決されると、tool_use_summary エントリとしてトランスクリプトに追加されます。
ラベルの例: Searched in auth/、Fixed NPE in UserService、Created signup endpoint、Read config.json、Ran failing tests。
表示される条件
サマリーは、以下の条件が すべて 満たされた場合に生成されます。
experimental.emitToolUseSummariesがtrue(デフォルト)。fastModelが設定されている(設定ファイルまたは/model --fastコマンド経由)。- バッチ内に少なくとも 1 つのツールが完了している。
- ツール完了前にターンが中断されていない。
- fast model が空ではなく、エラーでもない応答を返している。
サブエージェントのツール呼び出しはサマリー生成をトリガーしません。メインセッションのツールバッチのみが対象です。
表示されない場合
以下の場合はサマリーがサイレントにスキップされます(エラー発生なし、UI 変化なし)。
- fast model が設定されていない。
- fast model への呼び出しが失敗、タイムアウト、または空の応答を返した。
- モデルが明らかなエラーメッセージのような文字列(例:
Error: ...、I cannot ...)を返した場合。クライアント側でフィルタリングされ、UI に誤解を招くラベルが表示されないようになっています。 - モデルが完了する前にターンが中断された(
Ctrl+C)。
これらのいずれの場合も、ツールグループは従来通りレンダリングされます。
Fast Model
ラベルは fast model を使用して生成されます。これは、プロンプト候補や投機的実行に設定するのと同じモデルです。以下の方法で設定できます。
コマンド経由
/model --fast qwen3-coder-flashsettings.json 経由
{
"fastModel": "qwen3-coder-flash"
}fast model が設定されていない場合、サマリー生成は完全にスキップされます。設定を行うまで、この機能は有効になりません。
設定
以下の設定は settings.json で構成できます。
| Setting | Type | Default | Description |
|---|---|---|---|
experimental.emitToolUseSummaries | boolean | true | サマリー生成のマスター切り替え。無効にすると、追加の fast model 呼び出しを停止します。 |
fastModel | string | "" | サマリー生成に使用される fast model(プロンプト候補と共有)。必須。空の場合は no-op。 |
環境変数による上書き
QWEN_CODE_EMIT_TOOL_USE_SUMMARIES は、現在のセッションにおける experimental.emitToolUseSummaries 設定を上書きします。
QWEN_CODE_EMIT_TOOL_USE_SUMMARIES=0または=false— 強制オフ。QWEN_CODE_EMIT_TOOL_USE_SUMMARIES=1または=true— 強制オン。- 未設定 —
experimental.emitToolUseSummaries設定に従う。
設定例
{
"fastModel": "qwen3-coder-flash",
"experimental": {
"emitToolUseSummaries": true
}
}スコープとライフサイクル
この機能を初めて読む際につまずきやすい 3 つのポイントがあります。
-
バッチごとに 1 回生成され、両方の表示モードで共有されます。 fast model への呼び出しは、ツールバッチが確定した際に
handleCompletedTools内で正確に 1 回だけ実行されます。その後Ctrl+Oを切り替えても、新しい呼び出しはトリガーされません。両モードとも、最初にキャプチャされた同じtool_use_summary履歴エントリを読み取ります。追加コストなしでコンパクトモードのオン/オフを自由に切り替えられます。 -
切り替え時やセッション再開時のバックフィルはありません。 機能の有効化前(または設定をオンにする前、または再開されたセッション —
ChatRecordingServiceはサマリーエントリを永続化しません)に完了したtool_groupには、ラベルが割り当てられることはありません。「既存の履歴を一括スキャンする」処理は実行されません。セッションの途中でこの設定をオンにした場合、以降の バッチのみがラベルを表示します。古いグループはデフォルトのレンダリングのままとなり、ラベルが欠落していることを示すインジケーターは表示されません。 -
メインエージェントのバッチのみ対象です。 トリガーはメインセッションのターンループ(
useGeminiStream)内に存在するため、以下のようになります。- ✅ シェル、MCP、ファイル操作、および
Task/ サブエージェントツールへの 呼び出し自体(メインバッチに表示されるもの)はサマリー化されます。 - ❌ サブエージェントの 内部 ツールバッチ(
packages/core/src/agents/runtime/を経由して実行されるもの)はサマリー化されません。
Taskツールを 含む 外部バッチにはラベルが付きますが、fast model が参照するのはサブエージェントのツール呼び出しとその集約された出力のみであり、サブエージェント内部の個々のツール呼び出しではありません。Searched 14 filesではなく、Ran research-agentやDelegated file searchのようなラベルが生成されます。これは意図的な設計です。サブエージェントの内部をサマリー化すると、fast model のコストが乗算され、メイン UI には表示されないノイズが表面化してしまうためです。 - ✅ シェル、MCP、ファイル操作、および
推奨設定: コンパクトモードの有効化
3 つ以上の並列ツール呼び出しを含むバッチの場合、この機能と ui.compactMode: true を組み合わせると、最もすっきりしたトランスクリプトが得られます。コンパクトビューでは、すべてのツール行と末尾のサマリーを表示する代わりに、バッチ全体をラベル付きの 1 行(✓ Read txt files · 4 tools)に折りたたみます。詳細は Ctrl+O でいつでも確認できます。
{
"fastModel": "qwen3-coder-flash",
"ui": {
"compactMode": true
},
"experimental": {
"emitToolUseSummaries": true
}
}フルモード(デフォルト)では、サマリーはツールグループの下部に ● <label> 行としてレンダリングされます。大規模または多様なバッチには有用ですが、小規模で同種のバッチ(例: Read × 3)の場合、ラベルが表示されているツール行の言い換えのように見えることがあります。これが通常のワークフローに合致する場合は、上記のようにコンパクトモードをオンにするか、experimental.emitToolUseSummaries: false でサマリー機能を完全にオフにしてください。
モニタリング
サマリーモデルの使用量は、/stats 出力の fast model トークン合計の下に表示されます。prompt_id が tool_use_summary_generation となっているため、プロンプト候補やその他のバックグラウンドタスクと区別できます。
データフローとプライバシー
サマリー呼び出しでは、各成功したツールの名前、切り詰められた args、切り詰められた結果(各フィールド最大 300 文字)が fast model に送信されます。さらに、アシスタントの最新のテキストの最初の 200 文字が意図のプレフィックスとして追加されます。
fast model がメインセッションモデルと同じプロバイダー/認証で設定されている場合、データはメインセッションがすでに使用しているのと同じ境界を流れ、信頼スコープに変更はありません。異なるプロバイダーの fast model を設定している場合、ツールの入力と出力(read_file で読み取られたファイルの内容、シェル呼び出しのコマンド出力、MCP ツールを通じて表面化された値などを含む可能性があります)が、サマリープロンプトの一部としてその別のプロバイダーに送信されます。これは、メインセッション単独の場合よりも厳密に大きなデータ共有スコープとなります。
これがワークフローにとって重要な場合、以下の 2 つの明確な選択肢があります。
fastModelをメインセッションと同じプロバイダーのモデルに設定し、サマリー呼び出しが新しい認証/データ境界を越えないようにする。experimental.emitToolUseSummaries: false(またはQWEN_CODE_EMIT_TOOL_USE_SUMMARIES=0)で機能を完全に無効にする。
1 フィールドあたり 300 文字の制限は露出を軽減しますが、完全に排除するものではありません。切り詰め制限の範囲内でツール出力に発見されたシークレットは、依然として送信される可能性があります。fast model のデータ境界は、メインモデルのデータ境界と同じように扱ってください。
コスト
条件を満たすツールバッチごとに 1 回の fast model 呼び出しが発生します。入力は小さな固定システムプロンプトと、切り詰められたツールの入力/出力(各フィールド最大 300 文字)です。出力は短い 1 行(最大 100 文字、通常 20 トークン以下)です。一般的な fast model では、バッチあたり約 $0.001 です。
追加コストを避けたい場合は、experimental.emitToolUseSummaries: false または QWEN_CODE_EMIT_TOOL_USE_SUMMARIES=0 で機能をオフにしてください。
関連項目
- Compact Mode —
Ctrl+Oで切り替え。コンパクトモードがオンの場合、サマリーが汎用的なツールグループヘッダーを置き換えます。 - Followup Suggestions — 同じ
fastModel設定を共有する、fast model を活用した別の UX 改善機能。