Skip to content

proposal: codex monitor 配送の PATH 依存を断つ cli_wrapper= マニフェストキー (spawn 経由の idle-deaf 恒久対処) #397

Description

@chemica-tan

症状 (実話ベース)

Windows + Git Bash、delivery.sh set monitor codex 済み・hooks 配置済みの環境で、idle 中の codex に monitor 配送が一切届かない (実質 idle-deaf) 事象に当たりました。ターン中は codex 自身の inbox チェックで受信できてしまうため疎通確認は通り、idle に落ちて初めて顕在化します。

  • agmsg version: v1.1.6 で発見、v1.1.7 のコードでも同経路を確認
  • host agent: Claude Code (leader) + codex (peer)

根本原因

monitor 配送のリアルタイム性は codex を codex-shim.sh (→ codex-monitor.sh → bridge) 経由で起動することが前提ですが、その入口が PATH 順序任せになっています:

  1. spawn.sh の boot script は素の cli= ワード (codex) を印字し、spawn された shell の PATH で再解決させる (v1.1.7 の printf '%s%s' "$MSYS_GUARD" "$CLI_BIN" でも同様)
  2. 本環境では npm 版 codex が ~/.agents/bin シムより PATH で先に解決される (npm=25番目、agents/bin=33番目)
  3. → 素の codex が直接起動、bridge は一度も起動せず、idle-deaf に

さらに codex-shim-install.sh~/.agents/bin が「PATH にあるか」しか見ないため、順序が負けていても無警告で、mode/hooks 設定済み = シム適用済みと誤認しやすい状態でした。shell 関数方式も boot script が非対話なので spawn 経由では保証されません。

提案: cli_wrapper= マニフェストキー (data-driven)

codex の type.conf に:

cli_wrapper=codex-shim.sh

を追加し、spawn.sh がこれを type の driver ディレクトリ内の絶対パスに解決して boot script に印字する方式です (Direct-CLI 型のみ、spawn= node launcher は無視)。シム自身がプロジェクトの delivery mode を判定するので、turn/off のプロジェクトでは従来どおり素の codex になります。

セットで必要になるのが codex の spawn_unset_env= です (#294 の機構)。monitor 親から spawn された子が AGMSG_CODEX_BRIDGE=1 を継承すると、シムを絶対パスで呼んでも shim が即 real codex へ exec して idle-deaf が再発します。AGMSG_CODEX_SHIM_* / AGMSG_REAL_CODEX / CODEX_THREAD_ID / CODEX_SANDBOX も同様に strip が必要でした (CODEX_THREAD_ID は #350 で配送先の束縛は改善済みですが、継承遮断は防御の重畳として残す価値があると考えています)。

検討して棄却した代替案 (詳細は ADR ドラフトにまとめてあり、PR にする場合は同梱します):

  • ユーザー PATH の並べ替え — 環境依存で移植不能、spawn 元セッションの再起動も必要
  • boot script で ~/.agents/bin を PATH prepend — optional なグローバルシムの設置が前提
  • spawn 時に解決した command -v の絶対パスを埋め込む — spawner 側 PATH が素の codex を指していた場合にシムを恒久バイパスする逆効果
  • codex-monitor.sh を直接起動 — monitor が delivery mode を set してしまい turn/off 指定を壊す

実装の現物

fork で実装・テスト済みです (bats 85 ok、Codex による監査 APPROVE):
chemica-tan/agmsg branch integration/v1.1.6-chemica, commit 06dbad9 (v1.1.6 基準。main は spawn.sh が大きく動いているので、議論が前向きであれば main 基準に移植して PR を出します)。

付随して codex-shim-install.sh に PATH 順序の検証 (Windows では codex.exe/.cmd/.bat も対象、警告は stderr) を足しています。

driver 契約に新キーを足す変更なので、CONTRIBUTING に従い issue-first で相談します。方向性に問題がなければ ADR + PR を用意します。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions