Mac에서 Codex 승인 요청과 작업 완료 알림을 확인하세요.
Codex는 작업 완료 알림도, 승인을 기다린다는 알림도 보낼 수 있습니다. 하지만 notify 설정은 작업 완료만 알려 줍니다. 이 가이드에서는 Mac에서 Codex의 각 알림 설정이 어떤 역할을 하는지 설명합니다. 코드 예제는 OpenAI 문서와 대조해 확인했습니다.
Codex의 notify 설정은 턴이 완료될 때만 지정한 프로그램을 실행하며, 승인 요청에는 실행되지 않습니다(2026년 10월 기준). 승인 요청을 알림으로 받으려면 Codex의 내장 터미널 알림([tui] notifications, 기본적으로 터미널이 백그라운드에 있을 때 작동하며 일부 터미널에서만 배너로 표시됨)이나 ~/.codex/hooks.json의 PermissionRequest 훅을 사용하세요. ChatGPT 데스크톱 앱에서는 Settings > Notifications에서 권한 요청 알림을 켜세요.
Codex의 각 알림 설정이 하는 일을 알아보세요.
Mac에서 Codex 알림을 받는 방법은 네 가지입니다. 턴은 한 차례의 작업을 뜻합니다. 메시지를 보내면 Codex가 작업한 뒤 멈추고 다음 입력을 기다립니다. 훅은 Codex가 정해진 시점에 실행하는 명령입니다. 예를 들어 승인을 요청하기 직전에 실행할 수 있습니다.
| 설정 | 설정 위치 | 턴 완료 | 승인 필요 | 알아둘 점 |
|---|---|---|---|---|
notify | ~/.codex/config.toml | 예 | 아니요 | 직접 설정하기 전까지 꺼져 있습니다. 선택한 프로그램 하나를 실행합니다. |
[tui] notifications | ~/.codex/config.toml | 예 | 예 | 기본적으로 켜져 있습니다. 터미널이 맨 앞에 있지 않을 때 작동합니다. 배너는 이를 지원하는 터미널에서만 표시됩니다. |
훅(Stop, PermissionRequest) | ~/.codex/hooks.json | 예 | 예 | 기본적으로 켜져 있습니다. 새 훅은 각각 /hooks에서 신뢰하도록 승인해야 실행됩니다. |
| ChatGPT 데스크톱 앱 | Settings > Notifications | 예 | 예 | 턴 완료, 권한 요청, 질문 알림을 각각 별도의 스위치로 켜고 끕니다. |
notify를 설정한 뒤 승인 알림도 올 것으로 생각하고 기다리는 경우가 많습니다. OpenAI 설정 문서에 따르면 현재 notify는 agent-turn-complete에만 반응합니다. 승인 알림에는 표의 나머지 세 가지 방법 중 하나를 사용하세요.
Codex 내장 알림부터 사용해 보세요.
Codex의 터미널 알림은 기본적으로 켜져 있어 이미 받고 있을 수도 있습니다. 이 알림은 터미널(Terminal이나 iTerm2처럼 Codex를 실행하는 앱)이 맨 앞에 있지 않을 때만 작동합니다. 알림을 받을 이벤트를 직접 고르려면 설정 파일에서 지정하세요.
~/.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의 예제는 macOS에 기본 포함되지 않은 외부 Homebrew 도구인 terminal-notifier를 사용합니다. 아래 스크립트는 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" } ] }
]
}
}
- 파일을 저장한 다음 Codex를 열고
/hooks를 입력하세요. - 새 항목 두 개를 모두 신뢰하도록 승인하세요. Codex는 새로 추가되거나 변경된 훅을 신뢰하도록 승인하기 전까지 건너뜁니다. 그래서 승인하지 않은 훅은 작동하지 않는 것처럼 보입니다.
- 끝부분의
>/dev/null 2>&1을 유지하세요.Stop훅은 JSON을 출력하거나 아무것도 출력하지 않아야 합니다.
대신 음성이나 휴대폰 알림을 받으려면 알림 설정 생성기를 사용하세요. 브라우저에서 항목을 만들고, 어느 파일에 넣어야 하는지 알려 줍니다.
ChatGPT 데스크톱 앱에서 Codex 알림을 설정하세요.
2026년 7월 9일부터 Codex 앱은 macOS용 ChatGPT 데스크톱 앱에 통합되었습니다. 알림은 설정 파일이 아니라 앱에서 설정합니다.
- Settings > Notifications(Cmd+,): 턴 완료 알림을 받지 않을지, ChatGPT가 백그라운드에 있을 때만 받을지, 항상 받을지 선택합니다. 권한 요청과 질문 알림은 별도의 스위치로 켜고 끕니다.
- Sound: 작업 완료, 권한 요청, 질문에 같은 알림음 하나를 사용합니다. Default, Classic, None 중에서 선택하세요. macOS에서는 시스템 사운드나 직접 가져온 파일도 사용할 수 있습니다.
- Activity: 이 기능을 사용할 수 있는 경우, 사이드바의 벨이나 Cmd+Option+U로 읽지 않은 채팅, 실행 중인 채팅, 응답을 기다리는 채팅의 목록을 볼 수 있습니다.
위의 [tui] 키는 터미널에서 실행하는 Codex용입니다. OpenAI 문서에는 데스크톱 앱의 채팅에서도 notify나 직접 만든 훅이 실행되는지 나와 있지 않습니다. 따라서 앱에서도 작동할 것으로 기대하지 마세요.
별도 설정 없이 사용하는 방법도 있습니다.
Cowork Island는 macOS 14 이상용 앱으로, 지원되는 도구의 AI 에이전트 세션을 노치 패널에 모아 두고 각 세션의 상태를 보여 줍니다. 어떤 Codex 또는 Claude Code 세션이 실행 중이고 어떤 세션이 ‘확인 필요’ 상태인지 볼 수 있으며, 알림도 이 화면에서 확인합니다.
Codex는 설정에서 켠 다음 Codex에서 Cowork Island의 훅을 허용하기 전까지 꺼져 있습니다. 위에서 설명한 것과 같은 신뢰 승인 단계입니다. 그 뒤에는 각 Codex 세션의 상태가 표시됩니다. 기본적으로 확인이 필요한 세션이 생기면 아일랜드가 자동으로 펼쳐집니다. 단, 해당 세션의 터미널이 이미 맨 앞에 있거나, ChatGPT 앱의 Codex 채팅인 경우 ChatGPT 앱이 이미 맨 앞에 있으면 펼쳐지지 않습니다. 설정의 ‘질문이 있을 때’를 끄면 이 동작을 해제할 수 있습니다. 세션이 완료되면 기본적으로 아일랜드가 5초 동안 펼쳐집니다. ChatGPT 앱의 Codex도 ‘확인 필요’ 상태가 표시되며, 답변은 ChatGPT에서 합니다. 지원되는 Claude Code 요청은 아일랜드에서 허용하거나 거부할 수 있고, 객관식 질문에도 답할 수 있습니다. 다른 도구에서는 해당 도구의 앱이나 터미널에서 응답해야 할 수 있습니다.
Cowork Island는 macOS 알림을 보내지 않습니다. 아일랜드 자체가 펼쳐집니다. 사운드는 직접 켜기 전까지 꺼져 있습니다. ‘승인 필요’ 사운드는 무료이며, ‘세션 완료’ 알림음은 Pro에 포함됩니다. Codex의 notify 설정을 사용하지 않으므로 기존 notify 스크립트는 계속 작동합니다. Cowork Island는 ~/.codex/hooks.json에 기존 항목과 함께 자체 항목을 추가합니다. 위의 코드 예제처럼 직접 만든 훅을 별도의 항목으로 두고 Cowork Island의 ~/.perch 폴더 밖에 보관하면, 해당 훅은 그대로 유지됩니다.
무료 요금제는 세션 카드를 한 번에 하나씩 보여 줍니다. Pro는 모든 세션을 보여 주고, 세션으로 바로 이동할 수 있게 해 주며, 상세 사용량 미터, 완료 알림음, 더 많은 캐릭터 옵션을 추가합니다. 결제 정보 없이 Pro 7일 체험이 자동으로 시작되며, Mac마다 한 번만 제공됩니다. 요금제와 설치 방법을 확인하세요.
무료 다운로드출처를 확인하세요.
- OpenAI: 고급 설정
- OpenAI: 설정 파일 참고 문서
- OpenAI: 설정 예제
- OpenAI: 훅
- OpenAI: 알림
- OpenAI: 설정 참고 문서
- OpenAI: 변경 이력
- openai/codex 소스 코드(터미널 목록에 한함)
- Apple: Terminal 프로파일의 고급 설정
- Apple: 알림 표시하기
- tmux 매뉴얼
- Anthropic: Claude Code 훅 가이드(Script Editor)
출처 확인일: 2026년 10월 18일. 이 가이드는 Cowork Island를 만든 사람이 작성했습니다. 수정할 내용이 있으면 support@coworkisland.com으로 메일을 보내거나 GitHub에 이슈를 등록하세요.