{ "$schema": "https://json.schemastore.org/claude-code-settings.json", "cleanupPeriodDays": 365, "env": { "DISABLE_TELEMETRY": "1", "DISABLE_ERROR_REPORTING": "1", "CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY": "1", "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" }, "enableAllProjectMcpServers": false, "alwaysThinkingEnabled": true, "permissions": { "deny": [ "Bash(rm -rf *)", "Bash(rm -fr *)", "Bash(sudo *)", "Bash(mkfs *)", "Bash(dd *)", "Bash(wget *|bash*)", "Bash(wget *| bash*)", "Bash(git push --force*)", "Bash(git push *--force*)", "Bash(git reset --hard*)", "Edit(~/.bashrc)", "Edit(~/.zshrc)", "Edit(~/.ssh/**)", "Read(~/.ssh/**)", "Read(~/.gnupg/**)", "Read(~/.aws/**)", "Read(~/.azure/**)", "Read(~/.config/gh/**)", "Read(~/.git-credentials)", "Read(~/.docker/config.json)", "Read(~/.kube/**)", "Read(~/.npmrc)", "Read(~/.npm/**)", "Read(~/.pypirc)", "Read(~/.gem/credentials)", "Read(~/Library/Keychains/**)", "Read(~/Library/Application Support/**/metamask*/**)", "Read(~/Library/Application Support/**/electrum*/**)", "Read(~/Library/Application Support/**/exodus*/**)", "Read(~/Library/Application Support/**/phantom*/**)", "Read(~/Library/Application Support/**/solflare*/**)" ] }, "hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": "CMD=$(jq -r '.tool_input.command'); if echo \"$CMD\" | grep -qiE '(^|;[[:space:]]*|&&[[:space:]]*|[|][|][[:space:]]*|[|][[:space:]]*)rm[[:space:]]' && echo \"$CMD\" | grep -qiE '(^|[[:space:]])-[a-zA-Z]*[rR]|--recursive' && echo \"$CMD\" | grep -qiE '(^|[[:space:]])-[a-zA-Z]*[fF]|--force'; then echo 'BLOCKED: Use trash instead of rm -rf' >&2; exit 2; fi" }, { "type": "command", "command": "CMD=$(jq -r '.tool_input.command'); if echo \"$CMD\" | grep -qE 'git[[:space:]]+push.*(main|master)'; then echo 'BLOCKED: Use feature branches, not direct push to main' >&2; exit 2; fi" } ] } ] }, "statusLine": { "type": "command", "command": "~/.claude/statusline.sh" } }