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:
- You sit at the terminal, half-attention, waiting for the prompt.
- You pre-approve broad permissions to avoid the interruptions, and give up some of the safety the prompts were there for.
- You walk away, come back an hour later, and the agent has been idle the
whole time waiting on a
y/nyou never saw.
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
curl -fsSL chime.sh | shThis 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:
chime pairYou’ll get a 6-digit code, a backlink, and this machine’s name:
Pairing code: 742913Or open: https://chime.sh/p/742913Machine name: wry-otter-42Enter 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):
claude mcp add chime -- chime mcp serveThis 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:
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
- Quickstart — the fast path, no explanation.
- CLI — every real
chimesubcommand. - MCP — the six MCP tools, config snippets per host.