From claude-code-expert
Provides reference for Claude Code permission modes (default, acceptEdits, plan, dontAsk, bypass), allow/deny lists, pattern matching, and tool categories. Use to configure secure tool access and switch modes runtime.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-code-expert:permissions-securityThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Complete reference for the permission model and security features.
Complete reference for the permission model and security features.
Claude Code operates in one of several permission modes:
default)acceptEdits)plan)Shift+Tab or --permission-mode plandontAsk)bypassPermissions)--dangerously-skip-permissions flagShift+Tab — Cycle through permission modes interactively--permission-mode <mode> — Set mode at startupIn settings.json or .claude/settings.json:
{
"permissions": {
"allow": [
"Read",
"Write",
"Edit",
"Glob",
"Grep",
"Bash(npm test)",
"Bash(npm run *)",
"Bash(npx tsc *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(git add *)",
"Bash(git commit *)",
"Bash(ls *)",
"Bash(mkdir *)",
"Bash(cat *)",
"Bash(head *)",
"Bash(tail *)",
"Bash(wc *)",
"Bash(echo *)",
"Bash(pwd)",
"Bash(which *)",
"Bash(node *)",
"Bash(python3 *)",
"WebFetch",
"WebSearch",
"TodoWrite",
"NotebookEdit",
"Agent"
]
}
}
{
"permissions": {
"deny": [
"Bash(rm -rf /)",
"Bash(sudo *)",
"Bash(curl * | bash)",
"Bash(wget * | bash)",
"Bash(chmod 777 *)",
"Bash(> /dev/sda)",
"Bash(mkfs *)",
"Bash(dd if=*)",
"Bash(:(){ :|:& };:)"
]
}
}
| Pattern | Example | Matches |
|---|---|---|
| Exact tool | "Read" | All Read calls |
| Bash prefix | "Bash(npm test)" | Exactly npm test |
| Bash glob | "Bash(npm *)" | Any npm command |
| MCP wildcard | "mcp__server__*" | All tools from server |
| MCP specific | "mcp__fs__read_file" | Specific MCP tool |
Read — Read file contentsGlob — Find files by patternGrep — Search file contentsTodoWrite — Manage todo listWrite — Create/overwrite filesEdit — Modify existing filesBash — Execute shell commandsWebFetch — Fetch web contentWebSearch — Search the webNotebookEdit — Edit Jupyter notebooksAgent — Spawn sub-agents (inherits parent permissions)AskUserQuestion — Always allowed (asks user questions)Skill — Invoke slash commands{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep",
"Bash(npm test)",
"Bash(npx tsc --noEmit)"
]
}
}
Use hooks to guard sensitive paths:
#!/bin/bash
# PreToolUse hook
INPUT=$(cat)
TOOL=$(echo "$INPUT" | jq -r '.tool_name')
PATH_ARG=$(echo "$INPUT" | jq -r '.tool_input.file_path // .tool_input.path // ""')
# Block access to secrets
if echo "$PATH_ARG" | grep -qE '\.(env|pem|key|secret)$'; then
echo '{"decision": "deny", "reason": "Access to secret files is blocked"}'
exit 0
fi
echo '{"decision": "approve"}'
{
"permissions": {
"allow": [
"Bash(npm *)",
"Bash(npx *)",
"Bash(git *)",
"Bash(ls *)",
"Bash(cat *)"
],
"deny": [
"Bash(rm *)",
"Bash(sudo *)",
"Bash(curl *)",
"Bash(wget *)"
]
}
}
{
"permissions": {
"allow": [
"mcp__filesystem__read_file",
"mcp__filesystem__list_directory"
],
"deny": [
"mcp__filesystem__write_file",
"mcp__filesystem__delete_file"
]
}
}
During a session, when Claude requests a tool:
Session permissions reset when Claude Code restarts. For persistent permissions, add them to settings.json.
Enterprise admins can push managed settings that users cannot override:
{
"managedSettings": {
"permissions": {
"deny": [
"Bash(curl *)",
"Bash(wget *)",
"WebFetch",
"WebSearch"
]
},
"model": "claude-sonnet-4-6",
"hooks": {
"PostToolUse": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "bash /opt/audit/log-tool-use.sh"
}
]
}
]
}
}
}
.mcp.json (use env vars).env files in .gitignorenpx claudepluginhub markus41/claude --plugin claude-code-expertConfigures Claude Code permissions: tool rules (allow/deny/ask), modes (plan/dontAsk/bypass), sandboxing. Use for Bash/Edit/WebFetch policies, debugging prompts, org managed settings.
Configures Claude Code security settings with permission wildcards, shell operator protections, and project-level access controls. Use for securing tools like Bash and workflows.
Explains Claude Code settings hierarchy, permission wildcards, allow/deny patterns, and tool configurations. Use for setting up project permissions, debugging access issues, or understanding tool blocks.