← Blog

Approve Claude Code permission requests from your phone

You start a big refactor, Claude Code asks to run a shell command, and now you’re standing at the coffee machine wondering whether it’s still sitting there waiting for you to type y. This is the most common way agent work actually gets slower, not faster: the agent is capable of running unsupervised, but every permission prompt tethers you back to the keyboard.

Chime pairs your phone with your machine once, then every “may I run this?” moment shows up as a message you can act on from anywhere — approve, deny, or write back a free-text answer. This is the setup guide: install, pair, first approval card, in about two minutes, verified against the real CLI. If you just want the fastest path with no explanation, start at the Quickstart.

The problem: babysitting the terminal

Claude Code’s permission system is the right default — it asks before it runs a shell command, writes outside the project, or touches anything with side effects. But “ask before doing” only works if someone is watching. In practice that means one of three things happens:

None of those are great. The fix isn’t “fewer prompts” — it’s “prompts that can reach you when you’re not at the keyboard.”

Setup: install → pair → your agent is reachable

Run this on the machine Claude Code runs on.

1. Install

Terminal window
curl -fsSL chime.sh | sh

This downloads the chime binary for your OS/architecture, verifies its checksum against the release’s checksums.txt, and installs it to /usr/local/bin (or ~/.local/bin if that’s not writable without sudo). Prefer a supply-chain-verifiable install? npm i -g @chime-sh/cli is rolling out with v0.7.0, published with npm provenance so npm audit signatures can prove the tarball came from CI, not a hand-upload. Until it’s live on the registry, use the install script above or grab a binary from the GitHub release (see Install for every option, including building from source).

2. Pair your phone

Install the Chime app (Android, iOS, or as a PWA), then run:

Terminal window
chime pair

You’ll get a 6-digit code, a backlink, and this machine’s name:

Pairing code: 742913
Or open: https://chime.sh/p/742913
Machine name: wry-otter-42
Enter the code in the Chime app — then verify this machine name matches the one shown on your phone.

Enter the code in the app (or open the chime.sh/p/<code> link on your phone). It shows the same machine name your terminal printed — check the two match before tapping Accept. That match is the whole point: it’s a man-in-the-middle check, confirming the phone paired with your machine and not something sitting in between. You pair once per machine, not once per agent session, and keys are generated locally — no account, no phone number.

3. Wire it into Claude Code

Two ways to do this, and you only need one.

MCP (recommended — zero-build):

Terminal window
claude mcp add chime -- chime mcp serve

This registers chime mcp serve as an MCP server Claude Code can call directly — the six tools (chime_status, chime_setup, chime_notify, chime_receive, chime_wait, chime_reply) show up as regular tool calls. See MCP for the full schema if you’re wiring a different host.

Plain language (works even without MCP configured): just tell the agent

Send me a Chime when you need my approval on something.

Claude Code’s Chime skill (bundled with the plugin, or loadable from SKILL.md) picks this up and runs the same setup flow autonomously — the only manual step stays the 6-digit code above. Either path ends the same way: the agent’s shell commands and edits still ask permission exactly like today, except the prompt can now also reach your phone.

What an approval card actually looks like

When Claude Code hits a permission request wired through Chime, you get a message with the request and one or more tappable choices — not a plain-text “reply YES to continue.” The card renders on the lock screen and in the thread, with buttons for whatever the agent offered (typically Approve and Deny, sometimes a middle option like “approve for this session only”). Tapping one sends your choice straight back to the waiting agent, which picks up exactly where it left off.

You’re not limited to the buttons on the card, either — the thread is a real two-way chat. If the agent’s approval card doesn’t cover what you want to say, skip the buttons and type a free-text reply instead — “deny, but try the read-only version first” instead of a flat no. The agent reads that reply the same way it reads a button tap.

Under the hood this is one command on the agent side:

Terminal window
chime notify --kind approval --option Approve --option Deny "Run \`terraform apply\`?"

(chime_notify if you’re calling it as an MCP tool instead of shell — same shape, called by the agent, not you.) The agent then blocks on chime_wait (MCP) or chime receive --watch (CLI) until your reply comes back.

Honest alternatives

Chime isn’t the only way to get Claude Code out of “stuck waiting for you” mode. In the interest of the hard rule we hold ourselves to — no snark, cite real docs — here’s where the others actually fit.

Claude Code Remote Control. Anthropic ships this directly: claude.ai/mobile drives a local Claude Code session from your phone, with push notifications and approval flows of its own. It’s a strong option if you’re already on a Claude Pro/Max plan and only run Claude Code. Where Chime differs: Remote Control’s traffic transits Anthropic’s own infrastructure and needs claude.ai OAuth (no API keys, Bedrock, or Vertex); Chime end-to-end encrypts every message so the relay only ever sees ciphertext, works with any agent that can run MCP or a shell (Claude Code, Codex, Cursor, aider, and more — see VERIFIED-AGENTS.md for what’s actually been tested versus what’s expected to work), and you can run the relay yourself instead of trusting ours. See the full breakdown at /compare/claude-code-remote-control.

DIY: shell hooks + ntfy.sh. You can absolutely wire Claude Code’s PreToolUse/Stop hooks to curl a push notification to ntfy.sh yourself — plenty of people do, and it’s a fine weekend project if you only need a one-way “hey, look at your terminal” buzz. Where it breaks down: ntfy notifications are one-way, so there’s no reply path back into the agent — you still have to walk back to the keyboard to actually type y. There’s no E2EE (ntfy’s free tier is plaintext on their server), and there’s no approve-and-resume — the agent has no way to receive your decision, only to tell you it’s waiting. It solves the alert half of the problem and leaves the reply half exactly where it was.

Pricing, up front

Free forever — chatting with your agents will never cost money, and self-hosting everything stays free. There’s nothing to buy to use any of the above.

Next

claude-codeapprovalssetup