在 Mac 收到 Codex 核准提醒與完成通知。

Codex 可以發送完成通知,也能提醒你它正在等你核准,但 notify 設定只支援前者。本指南說明 Mac 上各項 Codex 通知設定的用途,範例程式碼已對照 OpenAI 文件查核。

截至 2026 年 10 月,Codex 的 notify 設定只會在一個回合完成時執行你指定的程式,不會在需要核准時執行。若要收到核准提醒,可以使用 Codex 內建的終端機通知([tui] notifications,預設開啟,終端機在背景時會觸發,但只有部分終端機會顯示橫幅),或在 ~/.codex/hooks.json 中加入 PermissionRequest 鉤子。在 ChatGPT 桌面 App 中,請到 Settings > Notifications 開啟權限通知。

最後更新:

Cowork Island

macOS 14 或以上版本。
Apple 晶片與 Intel。
免費版不需要帳號。

免費下載

了解各項 Codex 設定的用途。

Codex 可以透過以下四種方式在 Mac 上通知你。回合是指一輪工作:你傳送訊息,Codex 開始工作,然後停下來等你回應。鉤子(hook)是 Codex 在特定時機執行的指令,例如即將請你核准某項操作時。

Mac 上的 Codex 通知設定,依據 OpenAI 文件整理(查核日期:2026年10月18日)
設定設定位置回合完成需要核准注意事項
notify~/.codex/config.toml支援不支援設定後才會啟用。執行一個你指定的程式。
[tui] notifications~/.codex/config.toml支援支援預設開啟。終端機不在前景時觸發。只有支援的終端機會顯示橫幅。
鉤子(Stop、PermissionRequest)~/.codex/hooks.json支援支援預設開啟。每個新鉤子都必須先在 /hooks 中設為信任,才會執行。
ChatGPT 桌面 AppSettings > Notifications支援支援回合完成、權限與問題通知各有獨立開關。

常見的誤解是設定好 notify,就等著收核准提醒,結果一直等不到。OpenAI 的設定文件說明,notify 目前只會由 agent-turn-complete 觸發。若要收到核准提醒,請使用表格中另外三種方式之一。

先從 Codex 內建的通知開始。

Codex 的終端機通知預設開啟,你可能已經收得到。只有當終端機(執行 Codex 的 App,例如 Terminal 或 iTerm2)不在前景時,才會觸發通知。若要自行選擇哪些事件會觸發通知,請在設定檔中指定。

將以下內容加入 ~/.codex/config.toml。如果檔案已有 [tui] 區段,請把這些鍵放在該區段下方,不要再加第二個 [tui] 標頭。註解中的終端機清單來自 Codex 原始碼,而非文件(詳見下文)。

[tui]
notifications = ["agent-turn-complete", "approval-requested"]
notification_method = "auto"        # osc9 in iTerm2/Ghostty/Kitty/Warp/WezTerm; bel elsewhere
notification_condition = "unfocused" # or "always"

將 notification_method 設為 auto 時,Codex 會自行選擇通知方式:osc9 會傳送特殊控制碼(跳脫序列),部分終端機會將它轉成桌面通知;bel 則會讓終端機發出提示鈴聲。如果你正在查看終端機時也想收到通知,請將 notification_condition 設為 "always"。

為什麼 Terminal 只會發出提示鈴聲。

OpenAI 文件沒有列出哪些終端機會顯示橫幅。依據 Codex 公開的原始碼(因此之後可能變更),它會向 Ghostty、iTerm2、Kitty、Warp 和 WezTerm 傳送橫幅通知序列,其他終端機則只會收到一般提示鈴聲,包括 macOS 內建的 Terminal。單靠提示鈴聲不會顯示橫幅。在 Terminal 的 Settings > Profiles > Advanced > Bell 中,可以設定視覺提示、Dock 標記,以及視窗在背景時跳動的 Dock 圖示。若要在 Terminal 顯示真正的橫幅,請使用下文的鉤子。

在 tmux 中,只有開啟 allow-passthrough,Codex 的橫幅通知序列才能傳出去:設為 on 時,只允許可見窗格傳送;設為 all 時,隱藏的窗格也可以(依據 tmux 手冊)。將以下這行加入 ~/.tmux.conf;如果也想收到隱藏窗格的通知,請把 on 改成 all:

set -g allow-passthrough on

透過 notify,在回合完成時顯示 Mac 通知橫幅。

notify 會在一個回合完成時執行一個程式,並以單一 JSON 引數傳入詳細資訊。在任何終端機中,運作方式都一樣。OpenAI 的範例使用 terminal-notifier,這是透過 Homebrew 安裝的第三方工具,並非 macOS 內建。以下腳本只使用 macOS 內建功能:顯示 Codex 最後一則回覆的開頭與專案資料夾,並播放 Glass 音效。

步驟 1。將以下內容另存為新檔案 ~/.codex/notify-macos.js:

// Codex notify -> macOS banner + sound. Codex appends one JSON argument.
function run(argv) {
  var n = {};
  try { n = JSON.parse(argv[argv.length - 1] || "{}"); } catch (e) {}
  if (n.type && n.type !== "agent-turn-complete") return;
  var app = Application.currentApplication();
  app.includeStandardAdditions = true;
  var msg = String(n["last-assistant-message"] || "Turn complete").slice(0, 180);
  var folder = String(n.cwd || "").split("/").pop();
  app.displayNotification(msg, { withTitle: "Codex finished", subtitle: folder, soundName: "Glass" });
}

步驟 2。將以下這行加入現有的 ~/.codex/config.toml,放在第一個 [section] 標頭上方。將 YOUR_NAME 換成你的個人專屬檔案夾名稱:Codex 會依照清單原樣執行,不會將 ~ 展開為完整路徑(依據 Codex 原始碼,而非文件)。

notify = ["/usr/bin/osascript", "-l", "JavaScript", "/Users/YOUR_NAME/.codex/notify-macos.js"]

三種會讓 notify 失效的情況:

  • 多加了一行 notify。一份設定檔只能有一行,重複的鍵會讓檔案無法載入。如果其他工具已經使用它,可以改讓它執行一個小腳本,由腳本執行兩個程式;也可以改用 Stop 鉤子,因為各個檔案中的鉤子可以並行執行。
  • 放錯位置。如果貼在檔案末端、某個 [section] 標頭下方,這行就會屬於該區段,Codex 不會將它讀取為 notify 設定。
  • 放在專案設定檔中。Codex 會忽略專案本身 .codex/config.toml 中的 notify。它只在 ~/.codex/config.toml 中有效。

如果沒有出現橫幅,請開啟「系統設定」>「通知」。Anthropic 的鉤子指南指出,透過 osascript 發送的橫幅會列在 Script Editor 名下,你必須在這裡允許通知,macOS 不會先詢問你。你的 Mac 上顯示的名稱可能不同。

透過 Codex 鉤子顯示核准提醒橫幅。

鉤子能在任何終端機中顯示真正的核准提醒橫幅,包括 Terminal。Codex 會在即將請你核准某項操作時執行 PermissionRequest 鉤子,並在一個回合完成時執行 Stop 鉤子。不需要核准的指令不會觸發 PermissionRequest。

將以下內容合併至 ~/.codex/hooks.json。如果檔案已存在,請不要覆蓋:其他工具可能已在其中存放自己的項目(在 Cowork Island 中開啟 Codex 後,它也會這樣做)。將下方每個項目加入 "hooks" 內對應的清單;若清單不存在,就建立一份。每個項目都要保留各自的大括號。

{
  "hooks": {
    "PermissionRequest": [
      { "hooks": [ { "type": "command", "async": true, "timeout": 10,
        "command": "/usr/bin/osascript -e 'display notification \"Codex needs your approval\" with title \"Codex\" sound name \"Funk\"' >/dev/null 2>&1" } ] }
    ],
    "Stop": [
      { "hooks": [ { "type": "command", "async": true, "timeout": 10,
        "command": "/usr/bin/osascript -e 'display notification \"Codex finished\" with title \"Codex\" sound name \"Glass\"' >/dev/null 2>&1" } ] }
    ]
  }
}
  1. 儲存檔案,開啟 Codex,然後輸入 /hooks。
  2. 將兩個新項目都設為信任。Codex 會略過尚未設為信任的新增或修改過的鉤子,因此未受信任的鉤子看起來會像是失效了。
  3. 保留結尾的 >/dev/null 2>&1:Stop 鉤子必須輸出 JSON,或完全不輸出內容。

如果想改用語音播報或手機通知,通知設定產生器可以直接在瀏覽器中產生設定項目,並告訴你該放進哪個檔案。

在 ChatGPT 桌面 App 中使用 Codex。

自 2026 年 7 月 9 日起,Codex App 已整合至 macOS 版 ChatGPT 桌面 App。通知要在 App 中設定,而非設定檔:

  • Settings > Notifications(Cmd+,):回合完成通知可設為永不顯示、僅在 ChatGPT 位於背景時顯示,或一律顯示。權限與問題通知各有獨立開關。
  • Sound:任務完成、權限請求與問題共用一種通知音效。可以選擇 Default、Classic 或 None;在 macOS 上,也能使用系統音效或自行匯入的檔案。
  • Activity:若有提供這項功能,點按側邊欄的鈴鐺或按 Cmd+Option+U,即可列出未讀、執行中或等待你回應的聊天。

上文的 [tui] 設定鍵適用於終端機中的 Codex。OpenAI 文件未說明 notify 或自訂鉤子是否會在桌面 App 的聊天中執行,因此不要預期它們在那裡也能運作。

選擇免自行設定的方式。

Cowork Island 是一款適用於 macOS 14 或以上版本的 App,會把你在支援工具中的 AI 代理工作階段集中在瀏海下方的面板中,顯示每個工作階段的狀態。你能看到哪個 Codex 或 Claude Code 工作階段正在執行,哪個「需要你處理」,提醒也會出現在同一個畫面中。

Codex 預設關閉。你需要先在「設定」中開啟,再到 Codex 允許 Cowork Island 的鉤子,信任步驟與上文相同。完成後,每個 Codex 工作階段都會顯示狀態。預設情況下,只要有工作階段需要你處理,小島就會自動展開;但如果該工作階段的終端機已在前景,或工作階段來自 ChatGPT App 且該 App 已在前景,小島就不會展開。你可以在「設定」中關閉「收到提問時」。工作階段完成時,小島預設會展開 5 秒。ChatGPT App 中的 Codex 也會顯示「需要你處理」,你在 ChatGPT 中回答。對於支援的 Claude Code 請求,你可以在小島中允許或拒絕某項操作,或回答選擇題。使用其他工具時,你可能需要在該工具自己的 App 或終端機中回應。

Cowork Island 不會發送 macOS 通知,而是讓小島本身展開。音效預設關閉,需要自行開啟;「需要審核」音效可免費使用,「工作階段完成」提示音則包含在 Pro 中。它不會使用 Codex 的 notify 設定,因此你的 notify 腳本仍可繼續運作。它會在 ~/.codex/hooks.json 中加入自己的項目,與你的項目並存:請像上方範例一樣,將自己的鉤子放在各自獨立的項目中,並將鉤子檔案放在它的 ~/.perch 資料夾之外,Cowork Island 就會保留它們。

免費版一次顯示一張工作階段卡片。Pro 會顯示你所有的工作階段,讓你跳轉回這些工作階段,並加入詳細的用量表、完成音效,以及更多角色選項。7 天 Pro 試用會自動開始,每台 Mac 限一次,不需要付款資訊。請參閱方案與安裝指南。

免費下載

資料來源。

把下載連結寄給自己,之後再用。