> [!right-bubble] ![[neovim-chan-face1.webp]] > > [!caution] [[ネオ]](agent)により自動で記述された項目です。 > ## 事象 [[Claude Code]]が `run_in_background` のshell完了待ち(ターンを終了し、background shellの完了通知で再開する状態)のとき、[[herdr]]のサイドバーでそのエージェントが `done` と表示される。実際にはまだ作業途中なのに、終わったように見えてしまう。 画面には `✳ Baked for 3m 27s · 1 shell still running` のように表示されている状態。 ### 環境 | 対象 | バージョン | | --------------- | --------- | | [[herdr]] | 0.7.4 | | [[Claude Code]] | 2.1.212 | ## 原因 [[herdr]]のエージェント状態判定は、エージェント別マニフェスト(`~/.local/state/herdr/agent-detection/remote/claude.toml`)のルールによる**画面スクレイピング+OSCタイトルのマッチ**で行われる。 - 作業中: タイトル先頭のスピナー文字(点字ブロック)→ working - 完了: タイトル先頭の `✳` およびプロンプト箱の `❯` → idle(サイドバーのdone) [[Claude Code]]はshell完了待ちのときターンを終えてプロンプトに戻るため、タイトルもプロンプトも完了時と同じ見た目になり、idleルールにマッチしてしまう。画面に出ている「N shell(s) still running」を見るルールがマニフェストに存在しないのが直接の原因。 デバッグには `herdr agent explain <target> --json` が有効で、全ルールの評価結果とマッチ根拠まで確認できる。 なお、公式連携(`herdr integration install claude`)はSessionStartフックでセッションID・transcriptパスをherdrへ報告するだけで、状態判定はスクレイピングのまま。実測でもこの事象は解消しなかった(導入不要)。 ## 解決方法 ローカルoverrideマニフェスト `~/.config/herdr/agent-detection/claude.toml` を作り(remote版のコピーに以下を追加)、`herdr server reload-agent-manifests` で反映する。remote版の直接編集は自動更新で上書きされるため、ローカルoverrideに置くのがポイント。 ```toml [[rules]] id = "background_shell_still_running" state = "working" priority = 960 region = "bottom_non_empty_lines(8)" visible_working = true line_regex = ['\d+ shells? still running'] ``` - priority 960 は「idle判定(950)には勝ち、権限プロンプト等のblocked判定(980)には負ける」意図的な設定 - 副作用: dev server等を常駐background shellにすると、その間ずっとworking表示になる - remote版マニフェストが大きく更新されたら、overrideを新remote版+本ルールで作り直す必要がある ## 参考 - 対応の経緯・検証ログ: owlery Vaultの `shared/tasks/herdrでshell完了待ちのAgentがdone表示になる問題の修正.md` - 仕組みの詳細: owlery Vaultの `shared/knowledge/herdrのエージェント状態検知の仕組みとローカルカスタマイズ.md`