أضف إلى Codex إشعار نظام «نحتاجك للعودة للتعامل مع الأمر»: Codex Attention Notifier

جمّعت الحلّ الذي اشتغلته قبل قليل على جهازي لمشكلة تفويت تنبيهات Codex في أداة صغيرة:

ونشرتها أيضًا في قسم النقاشات الخاص بـ openai/codex:

المشكلة التي يحلّها هي: تنبيه نهاية الـ turn الافتراضي في Codex لا يغطي كل الحالات التي “تحتاجك ترجع تتدخل فيها”. مثلًا إذا وصل تنفيذ المهمة لنصف الطريق واحتاج موافقة صلاحيات، أو كان على وشك تنفيذ أوامر مثل sudo xcodebuild -license accept أو المُثبّت (installer) أو softwareupdate… وهي أوامر غالبًا ستطلب كلمة مرور المدير. إذا لم تكن النافذة في المقدمة فمن السهل أن تظن أن Codex ما زال يعمل، بينما هو في الحقيقة عالق بانتظار تدخّل منك.

النتيجة:

  • عندما يرسل Codex حدث PermissionRequest يظهر إشعار نظام macOS.
  • تنبيه مسبق قبل تنفيذ أوامر شائعة تتطلب تدخّلًا يدويًا، مثل sudo وxcodebuild -license وxcodebuild -runFirstLaunch ومُثبّت .pkg وsoftwareupdate وAppleScript administrator privileges.
  • الأوامر العادية لا تُنبِّه، فلن يظهر إشعار عند كل ls أو git أو build.
  • يقوم بالإشعارات وتسجيل السجلات فقط، ولا يوافق/يرفض تلقائيًا ولا يعيد كتابة استدعاءات أدوات 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 جديدة، لكي تدخل إعدادات 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 和安装脚本已经更新: