승인
휴대폰에서 Claude Code(와 Codex) 권한 요청 승인하기
에이전트가 진전을 멈추는 흔한 이유는 아무도 보지 못한 권한 요청입니다. 주머니 속에서 답하는 방법은 세 가지입니다. Claude Code 자체의 푸시 알림, 직접 만드는 ntfy 훅, 받은함이 있는 앱. Claude Code에서 각각 어떻게 작동하는지, Codex와 다른 에이전트에서는 무엇이 다른지, 그리고 각각 보안상 치르는 대가를 소개합니다.
빠른 답변
Pro, Max, Team, Enterprise 요금제라면 Remote Control을 시작하고 /config에서 Push when actions required를 켜세요. 그러면 Claude 앱이 알림을 보내고, 앱에서 요청에 답합니다. 무료이자 셀프 호스팅 대안으로는 claude-remote-approver 같은 오픈 소스 훅이 각 PermissionRequest를 승인/거부 버튼과 함께 ntfy로 보냅니다. Codex에도 같은 PermissionRequest 훅이 있습니다. Maude 같은 앱은 여러 에이전트의 요청을 하나의 받은함에 보여 주고, 허용/거부가 있는 푸시 알림을 보냅니다.
Claude Code는 미리 승인하지 않은 명령을 실행하거나 파일을 편집하려 하면 멈추고 묻습니다. 터미널 앞에 있다면 1초면 끝납니다. 없다면 세션은 기다리며, 키 하나를 누르기 위해 한 시간을 기다릴 수도 있습니다. 모든 원격 승인 구성은 요청을 휴대폰으로 보내고 답을 에이전트에게 돌려줍니다. 차이는 요청을 어떻게 가로채는지, 어디를 거쳐 가는지, 누가 답할 수 있는지입니다.
원격 승인의 작동 방식
메커니즘은 두 가지이며, 모든 도구는 둘 중 하나를 씁니다.
- 에이전트 자체의 원격 프로토콜. Claude Code의 Remote Control은 실제 권한 대화 상자를 Claude 앱으로 전달합니다. Antigravity의 Remote Control과 Codex의 app-server도 같은 방식입니다. 중간에서 무언가를 결정하는 것은 없으며, 에이전트 자신의 요청에 답하는 것입니다.
- 훅. Claude Code는 정해진 시점에 설정한 프로그램을 실행합니다.
PermissionRequest훅은 권한 대화 상자가 나타나려 할 때 실행되며,{"behavior": "allow"}나"deny"같은 결정을 출력해 대신 답할 수 있습니다.PreToolUse훅은 모든 도구 호출 전에 실행되며allow,deny,ask,defer를 반환할 수 있습니다. 푸시를 보내고 탭을 기다리는 훅, 그것이 모든 직접 만든 휴대폰 승인 도구의 작동 방식입니다. 자세한 내용은 훅 레퍼런스에 있습니다.
Claude Code의 네이티브 푸시
Anthropic의 공식 경로는 Remote Control을 거칩니다.
claude remote-control(서버 모드)이나claude --remote-control로 세션을 시작하거나, 실행 중인 세션에서/remote-control을 입력합니다.- 휴대폰의 Claude 앱에 같은 계정으로 로그인하고 알림을 허용합니다.
- 터미널에서
/config를 실행하고 Push when actions required를 켭니다. 권한 요청과 질문이 대상입니다. Push when Claude decides는 "테스트 완료" 같은 능동적인 업데이트가 대상입니다.
문서에는 실제로 마주칠 몇 가지가 나와 있습니다.
- 요금제와 인증. Remote Control은 Pro, Max, Team, Enterprise에서 쓸 수 있고, API 키는 지원하지 않습니다. Team과 Enterprise에서는 소유자가 켜야 합니다.
- 요청은 시간 초과되지 않습니다. 권한 요청과 질문은 답할 때까지 열려 있습니다.
- 터미널 앞에 있는 동안에는 푸시가 멈춥니다. 연결된 터미널에서 입력 중이거나 포커스가 있는 동안 Claude Code는 푸시를 보내지 않습니다.
CLAUDE_CLIENT_PRESENCE_FILE을 쓰면 머신 앞에 있는 동안 전체로 넓힐 수 있습니다. - 프로세스가 살아 있어야 합니다.
claude프로세스가 계속 실행되어야 하므로, 서버에서는 tmux 안에서 시작하세요. - 앱에서 고를 수 없는 모드가 있습니다. 모바일 문서에 따르면 앱에서 바이패스 권한을 고를 수 없고, Remote Control 세션에서는 자동 모드도 고를 수 없습니다.
Claude 요금제를 쓰고 Claude Code만 사용한다면 여기서 시작하세요. 요금제에 무료로 포함되어 있고 Anthropic이 관리합니다.
ntfy 훅으로 직접 만들기
ntfy는 오픈 소스 푸시 서비스입니다. 평범한 HTTP 요청으로 토픽에 게시하면 휴대폰의 ntfy 앱이 보여 줍니다. 여러 오픈 소스 프로젝트가 이를 PermissionRequest 훅과 결합합니다. 훅은 대기 중인 도구 호출을 동작 버튼과 함께 토픽에 게시하고, 두 번째 토픽에서 탭을 기다린 뒤, 결정을 Claude Code에 출력합니다. 공을 돌려야 할 곳은 다음과 같습니다.
| 프로젝트 | 훅 | 답하지 않으면 | 참고 |
|---|---|---|---|
| claude-remote-approver (yuuichieguchi) | PermissionRequest | 120초 후(계획 검토는 300초) 터미널 요청으로 돌아감 | npm install -g claude-remote-approver. 128비트 임의 토픽 생성. 승인 / 항상 승인 / 거부 |
| claude-push (coa00) | PermissionRequest | 90초 후(설정 가능) 터미널로 돌아감 | 셸 설치 스크립트. 허용 / 거부 |
| claude-code-phone-notifications (ssarnecki) | PermissionRequest, PreToolUse, Stop | 약 9분 기다린 뒤 터미널로 돌아감 | 책상 앞에 있을 경우를 대비해 30초 기다린 후 푸시. AskUserQuestion 요청도 푸시(버튼 없음) |
| hookline (tsyche) | Claude는 PreToolUse, Codex는 PermissionRequest | 기본 15분, 늦은 답에는 더 긴 유예 | Codex, Grok, OpenCode도 지원. 자격 증명이 있는 셀프 호스팅 ntfy 지원 |
넷 다 MIT 라이선스입니다. 시간 초과는 각 문서에 적힌 기본값입니다. 원격으로 답할 필요 없이 알림만 원한다면 Claude Code의 Notification 훅으로 충분합니다. permission_prompt 매처는 대화 상자가 나타날 때 실행됩니다.
{
"hooks": {
"Notification": [
{
"matcher": "permission_prompt",
"hooks": [
{ "type": "command",
"command": "curl -s -d 'Claude Code is waiting for approval' https://ntfy.sh/your-long-random-topic" }
]
}
]
}
}
이것을 Claude Code가 실행되는 머신의 ~/.claude/settings.json에 넣으세요. 답하려면 여전히 터미널로 가야 합니다. 위의 프로젝트들은 답하는 경로를 더해 줍니다.
Maude의 받은함
Maude는 첫 번째 방식을 택합니다. 서버의 데몬이 각 에이전트 자체의 프로토콜과 통신하므로, 권한 요청은 훅의 추측이 아니라 실제 요청으로 앱에 도착합니다. 모든 서버의 모든 세션에서 오는 요청이 오류와 완료된 작업 옆의 하나의 받은함에 모입니다. 거기서 바로 답하거나, 허용과 거부가 있는 푸시 알림에서 바로 답할 수 있습니다. 요청은 답할 때까지 기다리며, 세션이 시간 초과되어 나 없이 진행되지 않습니다. Claude Code, Codex, OpenCode, Grok Build에서 작동합니다. 예외는 Antigravity로, 헤드리스 agy는 도구 실행 전에 멈출 수 없으므로 Maude는 거부된 작업을 나중에 보여 주고 허용하면 다시 시도합니다. Maude는 유료 앱이며, 각 에이전트에는 자체 계정이 필요합니다. 받은함과 푸시를 갖춘 앱이 Maude만은 아닙니다. Happier 등에도 둘 다 있습니다.
Codex와 다른 에이전트
- Codex에도 기본으로 켜진 훅이 있습니다.
PermissionRequest훅은"behavior": "allow"나"deny"로 답할 수 있고,PreToolUse는 거부할 수 있습니다.~/.codex/hooks.json이나config.toml의[hooks]에 둡니다. hookline이 Codex에 쓰는 것이 이것입니다. Codex의 예전notify설정은 턴이 끝날 때 프로그램을 실행합니다. 서드파티 글에 따르면 승인 요청에는 실행되지 않으므로, 승인에는 훅을 쓰세요. Codex의 공식 휴대폰 앱 경로와 Linux에서의 한계는 VPS에서 Codex CLI 실행하기를 참고하세요. - Antigravity는 대화형으로 실행하거나 데몬으로 실행할 때 Remote Control 대시보드에서 요청에 답합니다. 헤드리스
agy는 묻지 않고 거부합니다. 서버에서 Antigravity CLI 실행하기를 참고하세요. - OpenCode와 Grok Build는 hookline의 플러그인과 훅 지원, 또는 멀티 에이전트 앱으로 다룰 수 있습니다.
원격 승인의 보안
휴대폰에서의 승인은 요청과 탭 사이의 가장 약한 고리만큼만 강합니다.
- ntfy.sh에서는 토픽이 비밀번호입니다. ntfy 문서도 분명히 말합니다. 가입하지 않으면 토픽 이름을 아는 누구나 그것을 읽고 게시할 수 있습니다. 공용 서버에서 토픽을 추측당하면 다른 사람이 내 에이전트의 명령을 승인할 수 있습니다. 길고 무작위인 토픽을 쓰거나, 인증을 갖춘 ntfy를 셀프 호스팅하세요.
- 제목이 아니라 명령을 읽으세요. 잠금 화면 푸시는 요약을 보여 줍니다. 긴 Bash 줄 속의
rm -rf는 6인치 화면에서 놓치기 쉽습니다. "항상 허용"은 읽기 전용 도구에 쓰고,Bash(*)에는 쓰지 마세요. - 대체 동작을 알아 두세요. 위의 직접 만든 훅들은 시간 초과되면 터미널 요청으로 돌아가므로, 답하지 않은 요청은 자동 승인되지 않고 막힙니다. 직접 훅을 쓸 때도 같은 규칙을 지키세요. Claude Code 문서는 시간 초과된
PreToolUse훅이 도구 호출을 막지 않고 일반 권한 흐름으로 넘어간다고 경고하므로, 멈춘 훅을 관문으로 믿지 마세요. - 경로를 잠그세요. 승인 트래픽은 에이전트가 무엇을 하는지 드러냅니다. Anthropic의 Remote Control은 Anthropic 서버를 거치고, Maude의 릴레이는 종단 간 암호화된 트래픽만 봅니다. 훅이라면 어디로 보낼지 직접 정합니다. Anthropic의 Require trusted devices 설정은 Remote Control을 쓸 수 있는 기기를 제한합니다.
- 승인은 안전망이지 샌드박스가 아닙니다. 어떤 승인 UI보다도, 다시 만들 수 있는 머신에서 에이전트를 root가 아닌 사용자로 실행하는 것이 더 중요합니다. 에이전트를 전체 권한으로 안전하게 실행하기를 참고하세요.
Maude에서 답하기
에이전트가 서버에서 실행되고 모든 요청에 한곳에서 답하고 싶다면, Claude Code나 Codex로 Maude를 써 보세요. 앱에서 서버를 추가하고 내 요금제로 로그인하면, 권한 요청이 허용과 거부가 있는 푸시 알림으로 옵니다. 받은함에는 나를 기다리는 모든 것이 모입니다.
자주 묻는 질문
Claude Code가 푸시 알림을 보낼 수 있나요?
/config에서 Push when actions required(원하면 Push when Claude decides도)를 켜세요. Pro, Max, Team, Enterprise 요금제가 필요하며, API 키 로그인은 지원하지 않습니다.잠금 화면에서 허용이나 거부를 할 수 있나요?
답하지 않으면 어떻게 되나요?
PreToolUse 훅은 도구 호출을 막지 않습니다.Codex에서도 작동하나요?
PermissionRequest 훅을 지원하며, hookline 같은 프로젝트가 이를 이용해 Codex 승인을 ntfy로 보냅니다. 서드파티 보고에 따르면 Codex의 notify 설정은 끝난 턴만 다루므로, 승인에는 훅을 쓰세요.휴대폰에서 명령을 승인해도 안전한가요?
변경 사항
- — 최초 게시. Remote Control과 훅 동작은 Anthropic과 OpenAI 문서로 확인했고, 저장소 정보와 기본값은 이 날짜의 각 프로젝트 README를 따랐습니다.