{ "$schema": "https://json.schemastore.org/claude-code-settings.json", "statusLine": { "type": "command", "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/statusline.sh\"" }, "worktree": { "baseRef": "head" }, "permissions": { "defaultMode": "default", "allow": [ "Bash(dir *)", "Bash(python -m pytest *)", "Bash(py -m pytest *)", "Bash(bash .claude/scripts/artifact-check.sh *)", "Bash(bash .claude/scripts/adr-status.sh *)", "Bash(bash .claude/scripts/adr-dep-graph.sh *)", "Bash(bash .claude/scripts/agent-check.sh *)", "Bash(bash .claude/scripts/compat-inventory.sh *)", "Bash(bash .claude/scripts/cut-read.sh *)", "Bash(bash .claude/scripts/game-read.sh *)", "Bash(bash .claude/scripts/gdd-structure-check.sh *)", "Bash(bash .claude/scripts/md-section.sh list *)", "Bash(bash .claude/scripts/md-section.sh extract *)", "Bash(bash .claude/scripts/md-section.sh status *)", "Bash(bash .claude/scripts/project-coherence.sh *)", "Bash(bash .claude/scripts/project-state.sh *)", "Bash(bash .claude/scripts/registry.sh *)", "Bash(bash .claude/scripts/review-receipts.sh check *)", "Bash(bash .claude/scripts/review-receipts.sh hash *)", "Bash(bash .claude/scripts/review-scope.sh *)", "Bash(bash .claude/scripts/story-facts.sh *)", "Bash(bash .claude/scripts/story-status.sh *)", "Bash(bash .claude/scripts/web-detect.sh *)", "Bash(bash .claude/scripts/write-guard.sh *)", "Bash(bash .claude/hooks/yaml-helper.sh resolve_config *)", "Bash(bash .claude/hooks/yaml-helper.sh get_yaml_key *)", "Bash(bash .claude/hooks/yaml-helper.sh get_effective_yaml_key *)", "Bash(bash .claude/hooks/yaml-helper.sh resolve_setting *)", "Bash(bash .claude/hooks/yaml-helper.sh is_locally_overridable *)", "Bash(bash .claude/hooks/yaml-helper.sh validate_enum_value *)", "Bash(bash .claude/hooks/yaml-helper.sh validate_yaml_enum *)" ], "deny": [ "Bash(rm -rf *)", "Bash(rm -fr *)", "Bash(rm -r -f *)", "Bash(rm -f -r *)", "Bash(rm -Rf *)", "Bash(rm -fR *)", "Bash(rm -rf*)", "Bash(rm -fr*)", "Bash(rm -Rf*)", "Bash(rm -fR*)", "Bash(rm -R -f *)", "Bash(rm -f -R *)", "Bash(rm --recursive --force*)", "Bash(rm --force --recursive*)", "Bash(rm -r --force*)", "Bash(rm -R --force*)", "Bash(rm --force -r*)", "Bash(rm --force -R*)", "Bash(rm --recursive -f*)", "Bash(rm -f --recursive*)", "Bash(git push --force*)", "Bash(git push -f *)", "Bash(git push *--force*)", "Bash(git push * -f*)", "Bash(git push * +*)", "Bash(git * push *--force*)", "Bash(git *push* -f*)", "Bash(git *push* -uf*)", "Bash(git *push* +*)", "Bash(git reset --hard*)", "Bash(git *reset *--hard*)", "Bash(git clean* -f*)", "Bash(git clean* --force*)", "Bash(git clean* -df*)", "Bash(git clean* -dxf*)", "Bash(git clean* -dXf*)", "Bash(git clean* -xf*)", "Bash(git clean* -xdf*)", "Bash(git clean* -Xf*)", "Bash(git clean* -Xdf*)", "Bash(git clean* -qf*)", "Bash(git clean* -qdf*)", "Bash(git *clean* -f*)", "Bash(git *clean* --force*)", "Bash(git *clean* -df*)", "Bash(git *clean* -qf*)", "Bash(git *clean* -xf*)", "Bash(git *clean* -Xf*)", "Bash(git *clean* -dqf*)", "Bash(git *clean* -qdf*)", "Bash(git *clean* -dxf*)", "Bash(git *clean* -xdf*)", "Bash(git *clean* -dXf*)", "Bash(git *clean* -Xdf*)", "Bash(git *clean* -qxf*)", "Bash(git *clean* -xqf*)", "Bash(git *clean* -qXf*)", "Bash(git *clean* -Xqf*)", "Bash(git *clean* -dqxf*)", "Bash(git *clean* -dxqf*)", "Bash(git *clean* -qdxf*)", "Bash(git *clean* -qxdf*)", "Bash(git *clean* -xdqf*)", "Bash(git *clean* -xqdf*)", "Bash(git *clean* -dqXf*)", "Bash(git *clean* -dXqf*)", "Bash(git *clean* -qdXf*)", "Bash(git *clean* -qXdf*)", "Bash(git *clean* -Xdqf*)", "Bash(git *clean* -Xqdf*)", "Bash(sudo *)", "Bash(chmod 777*)", "Read(**/.env*)", "Edit(**/.env*)", "Edit(**/*.uasset)", "Edit(**/*.umap)", "PowerShell(Remove-Item *-Recurse*)", "PowerShell(Remove-Item * -r*)", "PowerShell(Remove-Item -r*)", "PowerShell(git push *--force*)", "PowerShell(git push -f *)", "PowerShell(git push * -f*)", "PowerShell(git push * +*)", "PowerShell(git * push *--force*)", "PowerShell(git *push* -f*)", "PowerShell(git *push* -uf*)", "PowerShell(git *push* +*)", "PowerShell(git reset --hard*)", "PowerShell(git *reset *--hard*)", "PowerShell(git clean* -f*)", "PowerShell(git clean* --force*)", "PowerShell(git clean* -df*)", "PowerShell(git clean* -dxf*)", "PowerShell(git clean* -dXf*)", "PowerShell(git clean* -xf*)", "PowerShell(git clean* -xdf*)", "PowerShell(git clean* -Xf*)", "PowerShell(git clean* -Xdf*)", "PowerShell(git clean* -qf*)", "PowerShell(git clean* -qdf*)", "PowerShell(git *clean* -f*)", "PowerShell(git *clean* --force*)", "PowerShell(git *clean* -df*)", "PowerShell(git *clean* -qf*)", "PowerShell(git *clean* -xf*)", "PowerShell(git *clean* -Xf*)", "PowerShell(git *clean* -dqf*)", "PowerShell(git *clean* -qdf*)", "PowerShell(git *clean* -dxf*)", "PowerShell(git *clean* -xdf*)", "PowerShell(git *clean* -dXf*)", "PowerShell(git *clean* -Xdf*)", "PowerShell(git *clean* -qxf*)", "PowerShell(git *clean* -xqf*)", "PowerShell(git *clean* -qXf*)", "PowerShell(git *clean* -Xqf*)", "PowerShell(git *clean* -dqxf*)", "PowerShell(git *clean* -dxqf*)", "PowerShell(git *clean* -qdxf*)", "PowerShell(git *clean* -qxdf*)", "PowerShell(git *clean* -xdqf*)", "PowerShell(git *clean* -xqdf*)", "PowerShell(git *clean* -dqXf*)", "PowerShell(git *clean* -dXqf*)", "PowerShell(git *clean* -qdXf*)", "PowerShell(git *clean* -qXdf*)", "PowerShell(git *clean* -Xdqf*)", "PowerShell(git *clean* -Xqdf*)", "PowerShell(Get-Content *.env*)", "PowerShell(*>.env*)" ] }, "hooks": { "SessionStart": [ { "matcher": "", "hooks": [ { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/session-start.sh\"; exit $? #> ; echo 'Claude Code Game Studios hooks are off: Claude Code found no Git Bash, so the checks on reads, writes and commits are skipped this session. Install Git for Windows (https://git-scm.com/download/win) and restart Claude Code. See .claude/docs/setup-requirements.md.'; exit 0", "timeout": 20 }, { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/detect-gaps.sh\"; exit $? #> ; exit 0", "timeout": 10 } ] } ], "PreToolUse": [ { "matcher": "Bash|PowerShell", "hooks": [ { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/validate-commit.sh\"; exit $? #> ; exit 0", "timeout": 15 }, { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/validate-push.sh\"; exit $? #> ; exit 0", "timeout": 10 } ] }, { "matcher": "Write|Edit", "hooks": [ { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/validate-registry.sh\"; exit $? #> ; exit 0", "timeout": 15 }, { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/validate-write.sh\"; exit $? #> ; exit 0", "timeout": 15 } ] }, { "matcher": "Read", "hooks": [ { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/validate-read.sh\"; exit $? #> ; exit 0", "timeout": 10 } ] } ], "PostToolUse": [ { "matcher": "Write|Edit", "hooks": [ { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/validate-assets.sh\"; exit $? #> ; exit 0", "timeout": 10 }, { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/validate-skill-change.sh\"; exit $? #> ; exit 0", "timeout": 5 } ] } ], "Notification": [ { "matcher": "permission_prompt|idle_prompt", "hooks": [ { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/notify.sh\"; exit $? #> ; exit 0", "timeout": 10 } ] } ], "PreCompact": [ { "matcher": "", "hooks": [ { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/pre-compact.sh\"; exit $? #> ; exit 0", "timeout": 10 } ] } ], "Stop": [ { "matcher": "", "hooks": [ { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/session-stop.sh\"; exit $? #> ; exit 0", "timeout": 10, "async": true } ] } ], "SubagentStart": [ { "matcher": "", "hooks": [ { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/log-agent.sh\"; exit $? #> ; exit 0", "timeout": 5 } ] } ], "SubagentStop": [ { "matcher": "", "hooks": [ { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/log-agent-stop.sh\"; exit $? #> ; exit 0", "timeout": 5 }, { "type": "command", "command": "echo `# <#` >/dev/null; bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/validate-agent-artifact.sh\"; exit $? #> ; exit 0", "timeout": 10 } ] } ] } }