はじめに
※ 本記事はmacOS環境を前提としています(terminal-notifierを使用します)
実行に時間のかかるプロンプトを投げた際、ちまちま実行結果を確認するのが辛かったので、以下のOpenAIの公式ドキュメントを参考に、実行完了を通知するようにカスタムしました。
画面右上に以下画像のような通知が表示されるようにしました。
また、通知をクリックするとVSCodeを前面表示するような設定をしています。
terminal-notifierのインストール
terminal-notifierを使用します。
未インストールの場合は導入してください。
homebrewを使用する場合は以下のコマンドでインストールできます。
brew install terminal-notifier
インストールができたかの確認
which terminal-notifier
以下のコマンドでterminal-notifierが機能することを確認
terminal-notifier -title "terminal-notifier" -message "test"
以下のような通知がでてこればOKです。
通知がでてこない場合、macのシステム設定 > 通知 > terminal-notifierが許可されているか、確認してください。
config.tomlの設定
codexの設定ファイル~/.codex/config.tomlに、通知用コマンドを追記します。
path/to/notify.pyは後述のPythonスクリプトの配置パスに置き換えてください。
notify = ["python3", "path/to/notify.py"]
codex通知用のコード(python)
ファイル名はnotify.pyで作成しています。
codexからJSONを受け取り、通知種別がagent-turn-completeの場合のみterminal-notifierを使用して通知を行うようにしています。
-activateでクリック時に表示するエディタを指定しています。
以下ではVSCodeのBundleIDを指定していますが、VSCode以外で設定したい場合は適宜任意のBundleIDに置き換えてください。
私はpythonの知識を持ち合わせていないので、この処理はcodexと会話しながら作成しました。
#!/usr/bin/env python3
import json
import subprocess
import sys
def main() -> int:
if len(sys.argv) != 2:
return 1
try:
notification = json.loads(sys.argv[1])
except json.JSONDecodeError:
return 1
# Codex の処理完了時のみ通知
if notification.get("type") != "agent-turn-complete":
return 0
title = "Codex"
message = "codexの処理が完了しました"
thread_id = notification.get("thread-id", "")
subprocess.run(
[
"terminal-notifier",
"-title", title,
"-message", message,
"-group", "codex-" + thread_id,
"-activate", "com.microsoft.VSCode",
],
check=False,
)
return 0
if __name__ == "__main__":
sys.exit(main())
動作確認
codexを実行する前に、スクリプト単体で通知が出るか確認できます。
python3 path/to/notify.py '{"type":"agent-turn-complete","thread-id":"test"}'
設定した文言で通知が表示され、通知をクリックしVSCodeがアクティブになれば成功です。
同様の通知がcodex実行完了時にも来るようになっていると思います。
おわりに
処理時間が読めないプロンプトを投げると、完了するまでついターミナルやエディタを何度も確認してしまいがちでした。
今回通知を仕込んだことで、ちまちま実行結果を確認することから解放され、さっとやることを切り替えて他の作業を進められるようになった気がしています。
小さな工夫ですが、日常的に使うツールほど、こうした改善の積み重ねが効いてくると感じています。


