Approve Claude Code permission prompts from your phone

Claude Code stops and asks before it runs a command or edits a file. With Reins, that question reaches your phone with the exact command, or the diff, and your answer goes straight back to the terminal. Here is the whole setup, in about five minutes.

1. Install the daemon on the machine Claude Code runs on

One static binary for macOS, Linux and WSL2. With Homebrew:

brew install enraio/tap/reins
brew services start reins

Or with the install script, which checks the download against the release checksums:

curl -fsSL https://reins.enraio.com/install.sh | sh

2. Wire Claude Code

reins setup --no-service

Drop --no-service if you used the install script; setup then also starts reins at login. Setup adds hooks to ~/.claude/settings.json, leaves your other hooks alone, and prints a pairing QR. Only one of those hooks blocks: PreToolUse, which waits up to 180 seconds for your answer. The rest run in the background so the phone knows when a session starts, finishes or gets stuck. The full list is in Agents and hooks.

3. Scan the QR from the app

Open Reins on your phone and scan the QR from the pairing screen. The QR carries your machine’s addresses, your username, the SSH host-key fingerprints and a key minted for this phone, never a password. Treat it like a key. Get the app from the App Store or Google Play.

4. Ask Claude Code for something it has to check

Restart any Claude Code session that was already running so it reloads its hooks. Then ask it to do something it normally stops for, say a force-push or a file edit outside the working tree. The request arrives on the phone as a card with four things on it:

  • Who asked: the agent, the folder it is working in, and how long ago.
  • What changes: the exact command, or for an edit the diff, line by line.
  • Why it needs you: a warning when the command cannot be undone.
  • What happens if you do nothing: the agent asks at your desk instead, after three minutes.
The Inbox screen: three requests waiting, the first from Claude Code in storefront, with Deny and Approve buttons.
The Inbox, with three requests waiting.
The Review screen for a database migration command, with a warning that it changes the schema and what Approve, Deny and Ignore each do.
Review: the command, the risk, and what each answer does.

An edit is one tap to approve. A command that cannot be undone, such as rm -rf, a force-push or DROP TABLE, takes a press-and-hold. Deny is one tap, and Deny all clears the queue. The answer goes back over your paired connection and Claude Code carries on in the terminal.

If you do not answer

Nothing is approved on your behalf. After three minutes the hook gives up and Claude Code shows its own prompt in the terminal, exactly as it would without Reins. The same happens if the daemon is not running or no phone is attached: the hook returns at once. An unanswered request is never a denial, and a late tap is never a live approval. The full table is on the security page.

Headless runs and the other hook

Approvals ride on PreToolUse because it fires everywhere, including claude -p. Claude Code also has a PermissionRequest hook that saves a process per tool call, and you can switch to it with reins install-hooks --approvals permission-request, but it never fires for headless runs, so approvals there would silently stop. Leave the default unless you know you want the trade.

Check it

reins doctor

One line per check: the daemon, sshd, each Claude Code hook with the reason it exists, and the multiplexers. Fix anything marked, then try again.

Next

If you already pay for Claude Max, Claude Code’s own Remote Control also puts prompts on your phone, through Anthropic’s infrastructure. Reins connects your phone to your own machine instead, works with seventeen agents rather than one, and is free on two machines. The FAQ has the comparison.