Complete reference for every settings option, configuration key, and customization.
From claude-code-expertnpx claudepluginhub markus41/claude --plugin claude-code-expertThis skill uses the workspace's default tool permissions.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Implements structured self-debugging workflow for AI agent failures: capture errors, diagnose patterns like loops or context overflow, apply contained recoveries, and generate introspection reports.
Complete reference for every settings option, configuration key, and customization.
| Location | Scope | Git Tracked |
|---|---|---|
| Managed (system-level) | Organization | /Library/... (macOS), /etc/claude-code/ (Linux), C:\Program Files\... (Win) |
~/.claude/settings.json | User (all projects) | N/A |
.claude/settings.json | Project (shared) | Yes |
.claude/settings.local.json | Project (personal) | No (gitignored) |
{
// === PERMISSIONS ===
"permissions": {
"allow": ["Tool(pattern)"],
"ask": ["Tool(pattern)"],
"deny": ["Tool(pattern)"],
"defaultMode": "default"
},
// === HOOKS ===
"hooks": {
"PreToolUse": [
{
"matcher": "ToolName",
"hooks": [
{
"type": "command",
"command": "bash script.sh",
"timeout": 10000
}
]
}
],
"PostToolUse": [],
"Notification": [],
"Stop": [],
"SubagentStop": []
},
// === ENVIRONMENT ===
"env": {
"VARIABLE_NAME": "value"
},
// === MODEL ===
"model": "claude-sonnet-4-6",
"smallFastModel": "claude-haiku-4-5-20251001",
// === BEHAVIOR ===
"autoMemory": true,
"autoCompact": true,
"language": "en",
"outputStyle": "Explanatory",
"spinnerVerbs": true,
"spinnerTipsEnabled": true,
"showTurnDuration": false,
"respectGitignore": true,
"cleanupPeriodDays": 30,
"fastModePerSessionOptIn": false,
"autoUpdatesChannel": "stable",
// === STATUS LINE ===
"statusLine": {
"enabled": true,
"showModel": true,
"showTokens": true,
"showCost": true
},
// === FILE SUGGESTIONS ===
"fileSuggestion": true,
// === CONTEXT WINDOW ===
"contextWindow": {
"compactThreshold": 0.8,
"warningThreshold": 0.9
},
// === MCP ===
"enableAllProjectMcpServers": false,
"enabledMcpjsonServers": [],
"allowedMcpServers": [],
// === SANDBOX ===
"sandbox": {
"enabled": true,
"filesystem": {
"allowWrite": ["//tmp/build"],
"denyRead": ["~/.aws/credentials"]
},
"network": {
"allowedDomains": ["github.com", "*.npmjs.org"]
}
},
// === HOOKS ===
"disableAllHooks": false,
"allowManagedHooksOnly": false,
"allowedHttpHookUrls": [],
"httpHookAllowedEnvVars": [],
// === AUTH & LOGIN ===
"forceLoginMethod": null,
// === PLUGINS ===
"pluginTrustMessage": "",
"extraKnownMarketplaces": [],
"strictKnownMarketplaces": false,
"blockedMarketplaces": [],
// === CLAUDE.md ===
"claudeMdExcludes": [],
// === MODELS ===
"availableModels": [],
// === ATTRIBUTION ===
"attribution": {
"commit": "Generated with AI\n\nCo-Authored-By: AI <ai@example.com>",
"pr": ""
},
"includeCoAuthoredBy": true, // DEPRECATED: use attribution instead
// === CHANNELS (v2.1.80+) ===
"channelsEnabled": true, // Managed only - master switch for Team/Enterprise
"allowedChannelPlugins": [ // Managed only - restrict which channel plugins
{ "marketplace": "claude-plugins-official", "plugin": "telegram" }
],
// === AGENT TEAMS (experimental) ===
"teammateMode": "auto", // "auto" | "in-process" | "tmux"
// === WORKTREE ===
"worktree": {
"symlinkDirectories": ["node_modules", ".cache"],
"sparsePaths": ["packages/my-app", "shared/utils"]
},
// === AUTO MODE ===
"autoMode": {
"environment": ["Trusted repo: github.example.com/acme"],
"allow": ["Read any file in the project"],
"soft_deny": ["Never delete production databases"]
},
"disableAutoMode": "disable", // Set to "disable" to block auto mode; omit or remove key to allow
"useAutoModeDuringPlan": true,
// === EFFORT & VOICE ===
"effortLevel": "high", // "low" | "medium" | "high" (Opus 4.6, Sonnet 4.6)
"voiceEnabled": false,
"alwaysThinkingEnabled": false,
// === UI CUSTOMIZATION ===
"spinnerTipsOverride": {
"excludeDefault": true,
"tips": ["Use our internal tool X"]
},
"prefersReducedMotion": false,
"terminalProgressBarEnabled": true,
"showClearContextOnPlanAccept": false,
"plansDirectory": "~/.claude/plans",
// === MODELS ===
"availableModels": ["sonnet", "haiku", "opus"],
"modelOverrides": {
"claude-opus-4-6": "arn:aws:bedrock:us-east-1:..."
}
}
Read — File reading
Write — File creation/overwriting
Edit — File modification
Glob — File pattern search
Grep — Content search
Bash — Shell command execution
WebFetch — Web content fetching
WebSearch — Web searching
Agent — Sub-agent spawning
TodoWrite — Task tracking
NotebookEdit — Jupyter notebook editing
AskUserQuestion — User interaction (always allowed)
Skill — Slash command invocation
ExitPlanMode — Plan mode completion
{
"permissions": {
"allow": [
"Bash(npm test)", // Exact match
"Bash(npm run *)", // npm run anything
"Bash(npx *)", // Any npx command
"Bash(git status)", // Exact git status
"Bash(git diff *)", // git diff with any args
"Bash(git log *)", // git log with any args
"Bash(git add *)", // git add specific files
"Bash(git commit *)", // git commit
"Bash(ls *)", // Any ls command
"Bash(cat *)", // Any cat command
"Bash(head *)", // Any head command
"Bash(tail *)", // Any tail command
"Bash(wc *)", // Word count
"Bash(mkdir *)", // Create directories
"Bash(pwd)", // Print working directory
"Bash(echo *)", // Echo commands
"Bash(which *)", // Find executables
"Bash(python3 *)", // Python execution
"Bash(node *)" // Node execution
],
"deny": [
"Bash(rm -rf /)", // Block root delete
"Bash(rm -rf ~)", // Block home delete
"Bash(sudo *)", // Block sudo
"Bash(chmod 777 *)", // Block world-writable
"Bash(curl * | sh)", // Block pipe to shell
"Bash(curl * | bash)", // Block pipe to bash
"Bash(wget * | sh)", // Block wget pipe
"Bash(eval *)", // Block eval
"Bash(> /dev/*)", // Block device writes
"Bash(dd *)" // Block disk operations
]
}
}
{
"permissions": {
"allow": [
"mcp__filesystem__read_file", // Specific tool
"mcp__filesystem__list_directory", // Specific tool
"mcp__postgres__*", // All postgres tools
"mcp__*" // All MCP tools
],
"deny": [
"mcp__filesystem__write_file", // Block writes
"mcp__filesystem__delete_file" // Block deletes
]
}
}
| Pattern | Scope |
|---|---|
"Bash" | Only Bash tool |
"Read" | Only Read tool |
"Write" | Only Write tool |
"Edit" | Only Edit tool |
"Glob" | Only Glob tool |
"Grep" | Only Grep tool |
"WebFetch" | Only WebFetch tool |
"Agent" | Only Agent tool |
"mcp__*" | All MCP tools |
"mcp__server__*" | Specific MCP server |
"*" | ALL tools |
"" | Default/all (for non-tool hooks) |
Input (stdin): JSON object
PreToolUse:
{
"tool_name": "string",
"tool_input": { /* tool-specific */ },
"session_id": "string"
}
PostToolUse:
{
"tool_name": "string",
"tool_input": { /* tool-specific */ },
"tool_output": { /* tool-specific */ },
"session_id": "string"
}
Output (stdout): JSON object
PreToolUse responses:
{ "decision": "approve" }
{ "decision": "deny", "reason": "explanation" }
{ "decision": "approve", "tool_input": { /* modified input */ } }
Stop responses:
{ "decision": "stop" }
{ "decision": "continue", "message": "additional instructions" }
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash hook.sh",
"timeout": 5000
}
]
}
]
}
}
{
"env": {
"DATABASE_URL": "postgresql://localhost:5432/mydb",
"REDIS_URL": "redis://localhost:6379",
"NODE_ENV": "development",
"LOG_LEVEL": "debug",
"CUSTOM_API_KEY": "key-value"
}
}
These env vars are available to:
.claude/settings.local.json — never committed to git:
{
"permissions": {
"allow": [
"Bash(docker *)",
"Bash(kubectl *)"
]
},
"env": {
"DATABASE_URL": "postgresql://localhost:5432/my_local_db",
"ANTHROPIC_API_KEY": "sk-ant-my-personal-key"
},
"model": "claude-opus-4-6"
}
permissions.allow: Arrays concatenated (local + project)permissions.deny: Arrays concatenatedenv: Objects deep-merged (local overrides project)model: Local overrides projecthooks: Deep-merged (local hooks added to project hooks){
"autoMemory": true, // Auto-save memories
"autoCompact": true // Auto-compact at threshold
}
DISABLE_AUTOMEMORY=1 # Disable auto-memory
DISABLE_BUG_COMMAND=1 # Disable /bug command
CLAUDE_CODE_SKIP_DOCTOR=1 # Skip doctor checks
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 # Disable telemetry
python3 -c "
import json
try:
data = json.load(open('.claude/settings.json'))
print('Valid JSON')
print('Keys:', list(data.keys()))
except json.JSONDecodeError as e:
print(f'Invalid JSON: {e}')
"
python3 -c "
import json
try:
data = json.load(open('.mcp.json'))
for name, config in data.get('mcpServers', {}).items():
cmd = config.get('command', 'N/A')
disabled = config.get('disabled', False)
status = 'DISABLED' if disabled else 'OK'
print(f' {name}: {cmd} [{status}]')
except Exception as e:
print(f'Error: {e}')
"
python3 -c "
import json, glob
for f in glob.glob('plugins/*/. claude-plugin/plugin.json'):
try:
data = json.load(open(f))
print(f'OK: {data[\"name\"]} v{data[\"version\"]}')
except Exception as e:
print(f'ERROR: {f}: {e}')
"
{
"permissions": {
"allow": [
"Read", "Write", "Edit", "Glob", "Grep",
"Bash(npm *)", "Bash(npx *)", "Bash(pnpm *)",
"Bash(git *)", "Bash(ls *)", "Bash(cat *)",
"Bash(mkdir *)", "Bash(node *)", "Bash(python3 *)",
"WebFetch", "WebSearch", "Agent", "TodoWrite"
],
"deny": [
"Bash(rm -rf /)", "Bash(sudo *)"
]
},
"model": "claude-sonnet-4-6",
"autoMemory": true,
"autoCompact": true
}
{
"permissions": {
"allow": [
"Read", "Glob", "Grep",
"Bash(npm test)", "Bash(npm run build)",
"Bash(git diff *)", "Bash(git log *)"
],
"deny": [
"Write", "Edit",
"Bash(git push *)", "Bash(git commit *)"
]
},
"model": "claude-haiku-4-5-20251001",
"autoMemory": false
}
Default commit attribution:
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Default PR attribution:
🤖 Generated with [Claude Code](https://claude.com/claude-code)
{
"attribution": {
"commit": "AI-assisted development\n\nCo-Authored-By: AI Assistant <ai@company.com>",
"pr": "AI-assisted development"
}
}
{
"attribution": {
"commit": "",
"pr": ""
}
}
{
"attribution": {
"commit": "",
"pr": "[](https://github.com/markus41)"
}
}
Channels push events into running sessions. Team/Enterprise require admin enablement.
{
"channelsEnabled": true,
"allowedChannelPlugins": [
{ "marketplace": "claude-plugins-official", "plugin": "telegram" },
{ "marketplace": "claude-plugins-official", "plugin": "discord" },
{ "marketplace": "acme-corp-plugins", "plugin": "internal-ci-alerts" }
]
}
# Start with channels
claude --channels plugin:telegram@claude-plugins-official
# Multiple channels
claude --channels plugin:telegram@claude-plugins-official plugin:discord@claude-plugins-official
# Development channels (custom/local)
claude --dangerously-load-development-channels server:my-webhook
{
"env": {
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
},
"teammateMode": "in-process"
}
| Mode | Description |
|---|---|
"auto" | Split panes in tmux/iTerm2, in-process otherwise |
"in-process" | All teammates in main terminal |
"tmux" | Force split panes (requires tmux or iTerm2) |
claude --teammate-mode in-process
Reduce disk usage and startup time in large monorepos:
{
"worktree": {
"symlinkDirectories": ["node_modules", ".cache"],
"sparsePaths": ["packages/my-app", "shared/utils"]
}
}
.claude/settings.local.json) — personal project overrides.claude/settings.json) — team-shared settings~/.claude/settings.json) — personal global (lowest)Array settings (like permissions, sandbox paths) merge across scopes — they concatenate and deduplicate.
{
"permissions": {
"allow": [
"Read", "Glob", "Grep"
],
"deny": [
"Write", "Edit",
"Bash(*)", "WebFetch", "WebSearch",
"Agent", "mcp__*"
]
},
"hooks": {
"PostToolUse": [{
"matcher": "*",
"hooks": [{
"type": "command",
"command": "bash .claude/hooks/audit-all.sh"
}]
}]
}
}