Approval emails
When an agent needs permission, the task pauses and you get an email with the exact action. You approve or deny it by reply.
Turn it on
Add these lines to your config, then restart the runner while no task is running:
"approvals": "email", "approval_timeout_seconds": 900
The timeout can be 30 to 86400 seconds. Existing configs stay on off.
Answer an approval
The email shows the full action, the working folder, the reason, the task and a SHA256 digest. Reply directly to that email with exactly one word:
approve
or deny. In the task thread, reply with the token from the email instead: approve TOKEN or deny TOKEN.
One reply approves one action.
A grant never covers a session or a later command. approve all is not supported. A new thread, a plain "yes", extra text, a quoted approval or a reused token does not count.
No answer means deny.
When the timeout passes, the action is denied. stop, a shutdown or a restart also cancels every open approval.
What each agent supports
Codex runs through its app-server with the on-request policy. It asks about commands and file changes with a full diff. The configured sandbox still covers actions that need no approval. Requests for session-wide grants or terminal input are refused.
Claude Code runs through its native permission channel in default mode. Your existing allow rules still apply without an email, and hard deny rules still win. No plugin or phone app is needed.
A missing channel, an incomplete action or an action over 24,000 characters is denied. It is never shown in part.
Requirements
Claude Code 2.1.259 or later and a Codex CLI with app-server. Keep your computer's clock accurate, because expiry uses wall-clock time.