メインコンテンツへスキップ
nefs — portfolio

【EvenG2】サブエージェント委託中のホールドが効かない?止まる不具合を追った記録

サブエージェントに作業を任せて待機している間、ホールドで話しかけると会話が止まった。今のところ回避策は見つかっておらず、委託中のホールド操作は動かないものとして扱っている。

Terminal Modeは、EvenG2経由でClaude Codeを操作する仕組みだ。作業中はタップホールドで音声指示やライブ誘導ができるのが売りとなっている。ところが、サブエージェントへ委託して待機している間だけこの現象に遭遇した。

この記事では、2026年9月時点で確認できた原因の推定と、今の運用でどう凌いでいるかを実践ログとして記録する。

この記事でわかること

  • 2026年9月時点の検証で分かったホールド停止不具合の症状
  • 原因がeven-terminal本体ではなく推定される理由
  • 委託中に会話を止めずに済ませる今の運用
  • 不具合の変化に気づいたときの対応方針

委託中のホールド操作は今のところ動かないと割り切る

サブエージェント委託中のホールド操作は、今のところ動かないものとして扱っている。even-terminal公式は作業中にタップホールドで音声指示・ライブ誘導ができると謳っている。

実際にはサブエージェント(Agentツール)へ委託し待機している間にホールドで話しかけると、会話が進まなくなる。「会話を停止しますか」のような状態のまま止まってしまう。

サブエージェント委託中にホールドで話しかけると会話が止まる現象を示す図

原因はeven-terminal本体ではなくSDK側の既知issue

切り分けを進めた結果、even-terminal固有の実装不具合とは言い切れなかった。土台のClaude Agent SDK側の既知issueが原因と推定された。

interrupt()がキャンセルでなくエラー扱いになる仕組み

該当するのは`anthropics/claude-agent-sdk-typescript`のissue #366だ。thinkingやツール実行中に`interrupt()`を呼ぶと、正常なキャンセルにならず`is_error`扱いになるという内容だった。

サブエージェントへの委託中はまさにこのthinking・ツール実行の状態が続く。そのため、同じ条件に当てはまっていたと考えられる。

interrupt()を呼ぶタイミングによって正常キャンセルとis_errorに分かれる推定原因を示す図

今の運用でどう凌いでいるか

現時点で回避策は見つかっていない。サブエージェント委託中の会話継続はできないものとして扱い、次の2つの工夫で凌いでいる。

委託前に指示を出し切る

サブエージェントへ委託する前に、必要な指示をあらかじめ出し切っておく。もしくは、そもそも委託自体を控える。

check_terminal_interrupt_status.pyで様子を見る

`check_terminal_interrupt_status.py`という手動チェックツールを用意した。関連パッケージのバージョンやissueのクローズ状況を、これで確認できるようにしている。cronによる自動実行はしておらず、この話題が再び気になったときに手動で叩けば十分と判断している。

Terminal Modeの不具合に気づいたらどうする?

この不具合の変化に気づいたら、次にグラスを使うタイミングで実機を使ってホールド操作を再確認する。issueのクローズ状況が変わっていないか、SDK側のバージョンアップで直っていないかを都度確かめる形にしている。

Terminal Mode・EvenHub SDK周辺は仕様変更が速く、今回の推定原因も2026年9月時点のものだ。似た症状に遭遇した場合は、コード側を疑う前に、まず委託中かという状況の切り分けからはじめると良い。