github / github/copilot-cli

[Bug] Subagents executing long tool-call sequences in a single turn fail prompt caching and compound token consumption

オープン
#4,829 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

triage
主要言語
Shell
スター
11.2k
フォーク
1.9k
平均マージ
14時間 16分
マージ済み PR(30日)
6

説明

Environment
  • GitHub Copilot CLI v1.0.83
  • OS: Windows 11 / PowerShell
  • Primary Model: Gemini 3.8 Flash
Problem Description

When executing autonomous subagents (such as custom agents via the task tool), the agent harness allows a subagent to run hundreds of tool calls within a single monolithic turn (Turn 0) without yielding or compacting context.

Because each tool execution (file edits, test outputs, build diagnostics) is appended sequentially to the conversation history of the active turn:

  1. Prompt Caching is defeated: The dynamic append of intermediate tool results changes the prompt prefix and prevents effective provider-side KV prompt caching.
  2. Exponential Token Compounding: Every subsequent tool call re-submits the entire growing history (75k-100k+ tokens) to the model. In our session, a single subagent ran ~750 tool calls in Turn 0, compounding to over 120 million tokens consumed in under 40 minutes on local test/edit loops.
  3. No Turn-Yielding / Throttling Mechanism: The agent does not yield control or checkpoint its context, and background interrupt signals (write_agent) are queued rather than preempting execution.
Expected Behavior
  • Subagent harnesses should enforce turn boundaries or context compaction/eviction after a reasonable threshold of consecutive tool calls (e.g. 15-20 tool calls) to preserve prompt caching and avoid runaway token compounding.
  • An explicit cancellation/stop API (stop_agent) should exist to immediately interrupt runaway background subagents.
Actual Behavior

The subagent executed 750+ tool calls in Turn 0 without yielding, burning >120M tokens on repeated compilation and test iterations, and could not be preemptively stopped via standard agent messaging.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

task tool の背後にあるサブエージェント・ハーネスのエントリーポイントから始め、長い Turn 0 のツール呼び出しシーケンス中に write_agent メッセージがどのようにキューに入れられるかを調べます。Windows 11/PowerShell で 750-call の動作を再現し、その後、ハーネスがコンテキストを譲るか圧縮すること、および stop_agent スタイルのキャンセルで実行中のサブエージェントを中断できることを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
powershell, shell
領域
ai, cli, performance
issue の種類
バグ
難易度
5/5
見積もり時間
1週間以上
活発さ
活発
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。