Use when adding allow/deny rules to Claude Code, granting project permissions, troubleshooting "permission denied" errors, or setting up shared team permissions. Also use when working with git worktrees and permissions aren't being inherited.
Manages Claude Code permissions for tools, skills, and file access across user and project scopes.
/plugin marketplace add jasonkuhrt/claude-marketplace/plugin install claude-code@jasonkuhrtThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Claude Code permissions control which tools/skills can run without prompting. Core principle: prompt grants update memory immediately; manual edits require restart.
| File | Scope | Committed? | Precedence |
|---|---|---|---|
~/.claude/settings.json | User (global) | No | Lowest |
.claude/settings.json | Project | Yes | Middle |
.claude/settings.local.json | Project local | Usually no | Highest |
| Method | Restart? | Why |
|---|---|---|
| Prompt grant | No | Updates file AND in-memory simultaneously |
| Manual settings.json edit | Yes | File only read at startup |
When manually editing ~/.claude/settings.json, tell user:
Restart Claude Code for the new permission to take effect.
Select "Yes, and don't ask again" → adds to appropriate settings file, no restart needed.
{
"permissions": {
"allow": ["Bash", "Skill(plugin:*)"],
"deny": []
}
}
digraph team_permissions {
"User wants project permission" [shape=box];
"Check: is settings.local.json committed?" [shape=diamond];
"Permission works for user only" [shape=box];
"Ask: Share with team?" [shape=diamond];
"Add to settings.local.json" [shape=box];
"Override gitignore + commit" [shape=box];
"Done" [shape=box];
"User wants project permission" -> "Check: is settings.local.json committed?";
"Check: is settings.local.json committed?" -> "Add to settings.local.json" [label="yes"];
"Check: is settings.local.json committed?" -> "Permission works for user only" [label="no"];
"Permission works for user only" -> "Ask: Share with team?";
"Ask: Share with team?" -> "Override gitignore + commit" [label="yes"];
"Ask: Share with team?" -> "Add to settings.local.json" [label="no"];
"Override gitignore + commit" -> "Add to settings.local.json";
"Add to settings.local.json" -> "Done";
}
Check if committed:
git ls-files .claude/settings.local.json
If not committed, ask user:
This permission will only work for you. Want to share it with the team?
This requires overriding gitignore:
.claude/ !.claude/settings.local.json
Motivations for committing:
Git worktrees create separate directory trees. Uncommitted .claude/settings.local.json from main worktree is NOT available in new worktrees.
Solutions:
Warn users relying on local permissions when setting up worktree workflows.
Bash # All bash commands
Bash(npm run build) # Specific command
Edit # All file edits
Read(~/**) # Read files in home
Skill(plugin:*) # All skills from plugin
Skill(plugin:skill-name) # Specific skill
mcp__* # All MCP tools
mcp__server__* # All tools from MCP server
WebFetch(domain:example.com) # Specific domain
* matches any characters; ** matches directory depthSkill(*) glob not supported in project settings — list individually (#6881)This skill should be used when the user asks to "create a hookify rule", "write a hook rule", "configure hookify", "add a hookify rule", or needs guidance on hookify rule syntax and patterns.
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.