Feature Request: Add 'Allow always (save to settings)' permission option

Status Fixed / completed
Maintainer reply None cached
Activity 12 comments · opened Jan 16, 2026 · closed Aug 17, 2026

Problem

Currently, when Claude Code prompts for permission to execute a command, the available options are:

  • Allow once
  • Allow for session

There is no option to permanently save the permission to the user's settings file (~/.claude/settings.json).

This becomes frustrating as users must repeatedly grant the same permissions across sessions.

Current Workaround

Users must manually edit ~/.claude/settings.json to add permissions, which is tedious and requires knowledge of the file structure.

Proposed Solution

Add a third option when prompting for permissions:

  • "Allow always (save to settings)"

This option would:

  1. Allow the current action
  2. Automatically append the permission pattern to ~/.claude/settings.json under permissions.allow

Additional Issue

Even with permissions already configured in the settings file, Claude Code sometimes prompts again at the start of a new session. The system should better respect already-saved permissions.

Benefits

  • Better UX - users don't have to repeatedly grant the same permissions across sessions
  • Reduces friction for power users
  • Eliminates the need to manually edit config files
  • Follows the principle of progressive permission granting

Example Flow

Claude wants to run: rm -rf node_modules

[Allow once] [Allow for session] [Allow always (save to settings)] [Deny]

Selecting "Allow always" would add "Bash(rm *)" to the user's settings file permanently.

View original on GitHub ↗

11 Comments

github-actions[bot] · 7 months ago

Found 3 possible duplicate issues:

  1. https://github.com/anthropics/claude-code/issues/17507
  2. https://github.com/anthropics/claude-code/issues/16762
  3. https://github.com/anthropics/claude-code/issues/16735

This issue will be automatically closed as a duplicate in 3 days.

  • If your issue is a duplicate, please close it and 👍 the existing issue instead
  • To prevent auto-closure, add a comment or 👎 this comment

🤖 Generated with Claude Code

obott9 · 7 months ago

On the Windows Desktop App (version 1.1.381), there is no "Allow for session" option at all. We only have "Deny" and "Allow once".

It would be great to have both:

  1. "Allow for session"
  2. "Allow always (save to settings)"

as proposed in this issue.

obott9 · 7 months ago

Here is a screenshot showing the permission prompt on Windows Desktop App. As you can see, only "Deny" and "Allow once" options are available:

<img width="816" height="358" alt="Image" src="https://github.com/user-attachments/assets/2f0771b5-e07f-42b7-83f6-ce10b81cc5e9" />

HossyWorlds · 6 months ago

+1 for this feature. I've been experiencing the exact same friction.

My workflow pain point:
During a session, I approve commands like npm test, npm run build, git diff etc. multiple times. Each time, I think "I should add this to my allow list later" — but by the end of the session, I've forgotten.
Next session, the cycle repeats.

The core issue is that the moment of approval (mid-flow, focused on the task) is disconnected from the moment of configuration (editing settings.json, which requires context-switching).

Adding an "Allow always (save to settings)" option directly in the permission prompt would solve this perfectly — the decision happens right when the context is fresh.

This has 5+ duplicate issues, which shows clear community demand.
Would love to see this prioritized.

ccoonen · 5 months ago

+1 for this feature!

bigfnj · 5 months ago

OMG, been looking for a solution to this and this is the first google search. +1 bump for the feature.

elias-io · 5 months ago

+1 Still, we want this !!!!

Maybe claude is running on a isolated machine doing some isolated task where just the final result is relevant!

yurukusa · 5 months ago

Until "Allow always (save to settings)" is built in, a PermissionRequest hook can implement auto-save:

INPUT=$(cat)
TOOL=$(echo "$INPUT" | jq -r '.tool_name // empty' 2>/dev/null)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty' 2>/dev/null)
ALWAYS_FILE="$HOME/.claude/.always-allow"
[ ! -f "$ALWAYS_FILE" ] && exit 0
BASE=$(echo "$COMMAND" | sed 's/^\s*//' | awk '{print $1}')
if grep -q "^$BASE$" "$ALWAYS_FILE" 2>/dev/null; then
    jq -n '{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow",permissionDecisionReason:"Saved always-allow rule"}}'
fi
exit 0
INPUT=$(cat)
PROMPT=$(echo "$INPUT" | jq -r '.user_prompt // empty' 2>/dev/null)
if echo "$PROMPT" | grep -qiE '^always allow\s+'; then
    CMD=$(echo "$PROMPT" | sed 's/^always allow\s*//i')
    ALWAYS_FILE="$HOME/.claude/.always-allow"
    echo "$CMD" >> "$ALWAYS_FILE"
    echo '{"hookSpecificOutput":{"additionalContext":"Saved always-allow rule: '"$CMD"'. This command will be auto-approved in future sessions."}}'
fi
exit 0

Type always allow git to permanently auto-approve all git commands. The rule is saved to ~/.claude/.always-allow and persists across sessions.

{
  "hooks": {
    "PermissionRequest": [{"hooks": [{"type": "command", "command": "bash ~/.claude/hooks/auto-save-permission.sh"}]}],
    "UserPromptSubmit": [{"hooks": [{"type": "command", "command": "bash ~/.claude/hooks/save-always-allow.sh"}]}]
  }
}

This gives you the missing "Allow always (save to settings)" option — but saved to a hook-managed file instead of settings.json.

antoinetissier · 4 months ago

I would also add [Allow always for this project]: [Allow once] [Allow for session] [Allow always in this project] [Allow always in all projects (save to settings)] [Deny]

hxiongg · 4 months ago

OMG pls, why is still not shipped!

PaulOmta-TomTom · 2 months ago

Not trying to be annoying here, but Copilot has this and it's the first feature I'm missing after switching from Copilot CLI to Claude Code.
Currently saving to project settings and then manually copy-pasting the rules into my user claude properties. Doable, but it could be easier.

Showing cached comments. Read the full discussion on GitHub ↗