Codexに「戻って対応が必要」なシステム通知を追加:Codex Attention Notifier

さっきローカルで解決した Codex の通知漏れ問題を、小さなツールとしてまとめました:

openai/codex のディスカッションにも投稿しました:

このツールが解決するのは、Codex デフォルトの「turn 終了通知」だけでは「戻ってきて対応が必要」な状況を十分にカバーできない、という問題です。たとえば、タスクの途中で権限承認が必要になったり、sudo xcodebuild -license accept、インストーラ、softwareupdate のような管理者パスワード入力が発生しがちなコマンドを実行しようとしたりするケースでは、ウィンドウが前面にないと Codex がまだ動いていると勘違いしやすい一方で、実際には人待ちで止まっていることがあります。

効果:

  • Codex が PermissionRequest を出したときに macOS のシステム通知を出します。
  • sudoxcodebuild -licensexcodebuild -runFirstLaunch.pkg installer、softwareupdate、AppleScript administrator privileges など、手動介入が必要になりがちなコマンドの実行前に事前通知します。
  • 通常のコマンドでは通知しないので、lsgit、ビルドのたびに毎回ポップアップすることはありません。
  • 通知とログだけを行い、Codex のツール呼び出しを自動で承認・拒否したり、書き換えたりはしません。
  • ログは ~/.codex/logs/codex-attention-notifier.log に書き込みます。

インストール方法:

git clone https://github.com/constansino/codex-attention-notifier.git
cd codex-attention-notifier
python3 install.py

インストール後に Codex Desktop を再起動するか、新しい Codex session を開いて、新しい hooks 設定を有効にしてください。

このコマンドでテストできます。sudo を実際に実行するわけではなく、Codex hook の入力をシミュレートするだけです:

printf '%s\n' '{"hook_event_name":"PreToolUse","tool_name":"Bash","cwd":"'"$PWD"'","tool_input":{"command":"sudo xcodebuild -license accept"}}' \
  | python3 ~/.codex/hooks/codex_attention_notify.py

正常なら macOS の通知が表示され、ログも確認できます:

tail -n 5 ~/.codex/logs/codex-attention-notifier.log

制限も明確にしておくと:これは公式の一等機能ではなく、Codex hooks を使った実用パッチです。「子プロセスが起動した後に stdin/password 入力待ちで固まる」ケースについては、Codex にまだ安定した「入力待ち」イベント hook がないため、このツールは実行前に高リスクなコマンドを識別して、よくある場面をカバーする方式になっています。

更新一下:这个工具的默认安装方式已经改成只保留 PermissionRequest 通知,不再默认启用 PreToolUse

原因是 Codex app 目前会把每一次 PreToolUse hook 都显示成“调用工具前”的记录。即使脚本内部判断普通命令后直接退出,UI 里还是会出现很多 hook 记录,实际体验会比较吵。

现在默认行为是:

  • Codex 真正发出权限请求时通知。
  • 不再每次 Bash 调用前运行 PreToolUse
  • 所以不会再刷“调用工具前”记录。

对应的限制是:sudo Password: 这类子进程密码输入等待,默认方案不再提前兜底。Codex 目前还没有稳定的“子进程已经进入等待 stdin/password 状态”的 hook;如果强行用 PreToolUse 做前置识别,就会带来上面说的 UI 噪音。

仓库 README 和安装脚本已经更新: