Tools: Approve Claude Code Permission Requests from Your Phone

Tools: Approve Claude Code Permission Requests from Your Phone

Source: Dev.to

The Problem ## The Solution ## How It Works ## Setup (3 Steps) ## 1. Install the ntfy app on your phone ## 2. Install and run setup on your PC ## 3. Scan the QR code ## How It Feels ## Sample notification ## Other Commands ## Security Claude Code asks for permission before running tools like Bash, Write, and Edit. This is a great safety feature — but it means you have to be sitting at your terminal to press "y". Step away for coffee? Claude Code stalls until you get back. claude-remote-approver sends each permission request as a push notification to your phone via ntfy.sh. Tap Approve or Deny, and Claude Code continues immediately — no terminal required. It uses ntfy.sh, an open-source HTTP-based pub-sub notification service. No account required. The topic name is a 128-bit random string, so only you can receive the notifications. The setup command prints a QR code in your terminal. Scan it with the ntfy app to subscribe. Important: Start a new Claude Code session after setup. The hook is loaded at session startup, so existing sessions won't pick it up. Once set up, just use Claude Code normally. When a permission request fires: If you don't respond within the timeout (default: 120 seconds), the request is automatically denied. Fail-closed by design. Give it a try and let me know what you think! Templates let you quickly answer FAQs or store snippets for re-use. Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse CODE_BLOCK: Claude Code │ │ PermissionRequest hook (stdin JSON) ▼ claude-remote-approver hook │ ├──POST──▶ ntfy.sh/ ──push──▶ Phone (ntfy app) │ │ │ Approve / Deny tap │ │ └──SSE───▶ ntfy.sh/-response ◀──POST──┘ │ │ stdout JSON: { "behavior": "allow" } or { "behavior": "deny" } ▼ Claude Code continues or stops Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: Claude Code │ │ PermissionRequest hook (stdin JSON) ▼ claude-remote-approver hook │ ├──POST──▶ ntfy.sh/ ──push──▶ Phone (ntfy app) │ │ │ Approve / Deny tap │ │ └──SSE───▶ ntfy.sh/-response ◀──POST──┘ │ │ stdout JSON: { "behavior": "allow" } or { "behavior": "deny" } ▼ Claude Code continues or stops CODE_BLOCK: Claude Code │ │ PermissionRequest hook (stdin JSON) ▼ claude-remote-approver hook │ ├──POST──▶ ntfy.sh/ ──push──▶ Phone (ntfy app) │ │ │ Approve / Deny tap │ │ └──SSE───▶ ntfy.sh/-response ◀──POST──┘ │ │ stdout JSON: { "behavior": "allow" } or { "behavior": "deny" } ▼ Claude Code continues or stops COMMAND_BLOCK: npm install -g claude-remote-approver claude-remote-approver setup Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: npm install -g claude-remote-approver claude-remote-approver setup COMMAND_BLOCK: npm install -g claude-remote-approver claude-remote-approver setup COMMAND_BLOCK: claude-remote-approver test # Send a test notification claude-remote-approver status # Show current config claude-remote-approver disable # Temporarily disable claude-remote-approver enable # Re-enable claude-remote-approver uninstall # Remove everything Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: claude-remote-approver test # Send a test notification claude-remote-approver status # Show current config claude-remote-approver disable # Temporarily disable claude-remote-approver enable # Re-enable claude-remote-approver uninstall # Remove everything COMMAND_BLOCK: claude-remote-approver test # Send a test notification claude-remote-approver status # Show current config claude-remote-approver disable # Temporarily disable claude-remote-approver enable # Re-enable claude-remote-approver uninstall # Remove everything - Android (Google Play) - iOS (App Store) - Your phone buzzes with a notification showing the tool name and a summary (e.g., Bash: npm install express) - Tap Approve or Deny - Claude Code continues instantly - Topic names are generated with crypto.randomBytes(16) (128 bits of entropy) - Config file is created with permission 0600 (owner-only) - For sensitive work, you can self-host ntfy instead of using the public server - GitHub: https://github.com/yuuichieguchi/claude-remote-approver - npm: https://npmjs.com/package/claude-remote-approver