ツール使用サマリー
Qwen Code は、ツールバッチが完了するたびに、短い git commit subject スタイルのラベルを生成し、そのバッチで行われた処理を要約できます。このラベルはトランスクリプトにインラインで表示され、コンパクトモードでは汎用的な Tool × N ヘッダーを置き換えます。
これは並列ツール呼び出しのための UX 補助機能です。モデルが複数の Read + Grep + Bash 呼び出しを同時に実行する場合、サマリーがあればツールリストをスキャンしなくても一目で意図がわかります。
この機能はデフォルトで有効になっており、バックグラウンドで静かに動作します。設定済みの fast model が必要です。
表示されるもの
フルモード(デフォルト)
サマリーはツールグループの直下に薄いバッジ行として表示されます。
╭──────────────────────────────────────────────╮
│ ✓ ReadFile a.txt │
│ ✓ ReadFile b.txt │
│ ✓ ReadFile c.txt │
│ ✓ ReadFile d.txt │
╰──────────────────────────────────────────────╯
● テキストファイル4件を読み込みコンパクトモード(Ctrl+O または ui.compactMode: true)
ラベルはコンパクトな1行表示において、汎用的な Tool × N ヘッダーを置き換えます。
╭──────────────────────────────────────────────╮
│✓ txtファイルを読み込み · 4 tools │
│Ctrl+Oでツール出力をすべて表示 │
╰──────────────────────────────────────────────╯個々のツール呼び出しは、キーを一つ押すだけで表示できます(Ctrl+O でフルモードに切り替え)。
仕組み
ツールバッチが完了すると、Qwen Code は設定された fast model に対して、ファイアアンドフォゲットの呼び出しを以下の情報とともに送信します:
- ツール名、切り詰められた引数、切り詰められた結果(各フィールドは300文字に制限)。
- アシスタントの最新のテキスト出力(最初の200文字)を意図のプレフィックスとして。
- モデルに過去形で30文字以内の git commit subject スタイルのラベルを返すよう指示するシステムプロンプト。
この呼び出しは次のターンの 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 ...)— クライアント側でフィルタリングされ、誤解を招くラベルが表示されるのを防ぎます。 - モデルが完了する前にターンが中断された場合(
Ctrl+C)。
これらの場合、ツールグループは通常通りの表示になります。
高速モデル
ラベルは 高速モデル を使用して生成されます。これはプロンプト提案や投機的実行のために設定するモデルと同じものです。以下の方法で設定します:
コマンドの場合
/model --fast qwen3-coder-flashsettings.json の場合
{
"fastModel": "qwen3-coder-flash"
}高速モデルが設定されていない場合、サマリー生成は完全にスキップされます。設定が行われるまでは機能は無効です。
設定
以下の設定は settings.json で設定できます:
| Setting | Type | Default | Description |
|---|---|---|---|
experimental.emitToolUseSummaries | boolean | true | サマリー生成のマスタースイッチ。オフにすると追加のfast model呼び出しを無効にします。 |
fastModel | string | "" | サマリー生成に使用する高速モデル(プロンプト提案と共有)。必須。空の場合は何も行いません。 |
環境変数によるオーバーライド
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)にあるため、次のようになります。- ✅ Shell、MCP、ファイル操作、および
Task/ サブエージェントツールの呼び出しそのもの(メインバッチに表示されるもの)はサマリー化されます。 - ❌ サブエージェントの内部ツールバッチ(
packages/core/src/agents/runtime/で実行されるもの)はサマリー化されません。
Taskツールを_含む_外部バッチは引き続きラベル付けされますが、fast model はサブエージェントのツール呼び出しとその集約された出力のみを参照します。サブエージェント内部の個別のツール呼び出しは参照されません。Searched 14 filesではなく、Ran research-agentやDelegated file searchのようなラベルが期待されます。これは意図的な設計です。サブエージェントの内部をサマリー化すると、fast model のコストが増大し、プライマリ UI には表示されないノイズが表面化するためです。 - ✅ Shell、MCP、ファイル操作、および
推奨される組み合わせ:コンパクトモードを有効にする
3つ以上の並列ツール呼び出しがあるバッチでは、この機能と ui.compactMode: true を組み合わせることで最もクリーンなトランスクリプトが得られます。コンパクトビューでは、すべてのツール行と後続のサマリーを表示する代わりに、バッチ全体が1つのラベル付き行(✓ txtファイルを読み込み · 4ツール)に折りたたまれます。詳細は Ctrl+O を押すだけで表示できます。
{
"fastModel": "qwen3-coder-flash",
"ui": {
"compactMode": true
},
"experimental": {
"emitToolUseSummaries": true
}
}フルモード(デフォルト)では、サマリーはツールグループの下に後続の ● <ラベル> 行として表示されます。大規模または異種混合のバッチでは便利ですが、小規模で同じタイプのバッチ(例: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)で機能を完全に無効にする。
フィールドごとの300文字の制限は露出を制限しますが、排除するわけではありません。制限範囲内でツール出力に含まれる機密情報は依然として送信される可能性があります。fast model のデータ境界は、メインモデルと同様に扱ってください。
コスト
対象となるツールバッチごとに1回の fast model 呼び出し。入力は小さな固定システムプロンプトと、切り詰められたツールの入力/出力(各フィールド300文字に制限)です。出力は1行の短い行(100文字に制限、通常20トークン以下)。一般的な fast model では、1バッチあたり約 $0.001 です。
追加コストを避けたい場合は、experimental.emitToolUseSummaries: false または QWEN_CODE_EMIT_TOOL_USE_SUMMARIES=0 で機能をオフにしてください。