Guide

How to approve Claude Code permission prompts without the terminal

There are two halves to this. Cut the number of prompts with allow rules in settings.json or the /permissions dialog, for commands you always approve such as npm run test. Then answer the prompts that remain from wherever you are, with a PermissionRequest hook or an app that shows them with Allow and Deny buttons, such as a notch app.

Checked against the Claude Code docs on 7 October 2026. Claude Code changes often, so the docs linked below are the final word.

1. Pre-approve what you always allow

Permission rules live in the permissions object of a settings file, as allow, ask and deny lists. A rule is a tool name, optionally with a specifier in brackets:

{
  "permissions": {
    "allow": [
      "Bash(npm run test *)",
      "Bash(npm run build)",
      "WebFetch(domain:docs.python.org)"
    ],
    "deny": [
      "Read(./.env)"
    ]
  }
}

To edit rules without touching JSON, type /permissions in a session. It opens a dialog where you can see rules by scope, add or remove them, and manage working directories.

2. Choose a permission mode

Modes change how much Claude Code asks for. Press Shift+Tab to cycle through them in a session, set permissions.defaultMode in settings, or start with claude --permission-mode <mode>.

ModeWhat it does
default (Manual)Asks before each action that isn't already allowed
acceptEditsAccepts file edits without asking
planPlans without making changes
autoThe starting mode for interactive sessions in recent versions; Claude Code decides which actions to allow
dontAskNever prompts; anything not pre-approved is refused
bypassPermissionsSkips prompts entirely. The docs say to use it only in isolated environments such as containers or VMs without internet access

Rules and modes reduce prompts, but some will always reach you: a new command, a file outside the project, a question Claude asks you directly. Those are the ones worth answering quickly.

3. Answer prompts from a hook

Claude Code's PermissionRequest hook runs when a permission dialog is about to appear. Your command receives the request as JSON on standard input, including tool_name and tool_input, and can answer it by printing a decision:

{
  "hookSpecificOutput": {
    "hookEventName": "PermissionRequest",
    "decision": { "behavior": "allow" }
  }
}

Use "behavior": "deny" with a message to refuse. A hook like this is how you send a prompt to your phone, a chat bot or another app, wait for a tap, and pass the answer back. A few details matter:

Writing this yourself means a script that blocks while it waits, a way to show the prompt somewhere you'll see it, and care to fail safely so a crash never approves anything.

4. Use an app that shows the prompt for you

Notch and menu bar apps package that hook with an interface. Most of the apps in our roundup of notch apps for AI agents can allow or deny Claude Code prompts. They differ in how they fail, which agents they cover, and whether they work for sessions on other machines.

Notchbird's notch showing a Claude Code Bash permission request for npm run test -- --watch=false from the skylark project on This Mac, with Deny and Allow buttons.

In Notchbird, approvals are opt-in per machine in Settings → Machines. Before it changes anything, Notchbird shows you exactly what it will add to Claude Code's settings. After that, permission prompts and Claude's questions appear in the notch with Allow and Deny, and Return or Esc answer them. It works for sessions on this Mac and on the SSH machine you add.

Notchbird's Inbox with a Claude Code permission request for npm run test, with Deny and Allow buttons, and a multiple-choice question from Claude with its answers as buttons.

Which approach fits

ApproachFewer promptsAnswer away from the terminalEffort
Allow rules and /permissionsYesNoMinutes
Permission modesYes, with less oversightNoOne keypress
Your own PermissionRequest hookNoYesA script that waits safely
A notch or menu bar appNoYesInstall and opt in

Most people end up with both: allow rules for the routine, and a quick way to answer the rest. To get alerted when Claude finishes as well as when it asks, see Claude Code notifications.

Sources

Common questions

How do I stop Claude Code asking permission for the same command?

Add an allow rule such as Bash(npm run test *) to the permissions object in ~/.claude/settings.json, use the /permissions dialog, or choose don't ask again at the prompt, which saves the rule to .claude/settings.local.json.

Can a hook approve Claude Code permission prompts?

Yes. A PermissionRequest hook can print a decision with behavior allow or deny. Deny and ask rules still apply, and a hook that times out has its output discarded.

Can I approve Claude Code prompts from my MacBook notch?

Yes, with a notch app. Notchbird shows Claude Code permission prompts and questions with Allow and Deny, falls back to the terminal if you don't answer, and never approves on its own.

Notchbird puts Claude Code's permission prompts in your notch with Allow and Deny, and falls back to the terminal if you're away.

Try Notchbird free