275 lines
7.2 KiB
JSON
275 lines
7.2 KiB
JSON
{
|
|
"attribution": {
|
|
"commit": "",
|
|
"pr": ""
|
|
},
|
|
"permissions": {
|
|
"allow": [
|
|
"Bash(cat:*)",
|
|
"Bash(head:*)",
|
|
"Bash(tail:*)",
|
|
"Bash(sed -n:*)",
|
|
"Bash(grep:*)",
|
|
"Bash(rg:*)",
|
|
"Bash(ls:*)",
|
|
"Bash(wc:*)",
|
|
"Bash(git status:*)",
|
|
"Bash(git diff:*)",
|
|
"Bash(git log:*)",
|
|
"Bash(git show:*)",
|
|
"Bash(git rev-parse:*)",
|
|
"Bash(git branch:*)",
|
|
"Bash(git stash list:*)",
|
|
"Bash(pnpm run:*)",
|
|
"Bash(pnpm exec:*)",
|
|
"Bash(node -p:*)",
|
|
"Bash(gh pr view:*)",
|
|
"Bash(gh pr list:*)",
|
|
"Bash(gh pr diff:*)",
|
|
"Bash(gh pr checks:*)",
|
|
"Bash(gh pr status:*)",
|
|
"Bash(gh issue view:*)",
|
|
"Bash(gh issue list:*)",
|
|
"Bash(gh issue status:*)",
|
|
"Bash(gh run view:*)",
|
|
"Bash(gh run list:*)",
|
|
"Bash(gh run watch:*)",
|
|
"Bash(gh workflow view:*)",
|
|
"Bash(gh workflow list:*)",
|
|
"Bash(gh repo view:*)",
|
|
"Bash(gh release view:*)",
|
|
"Bash(gh release list:*)",
|
|
"Bash(gh search:*)",
|
|
"Bash(gh label list:*)",
|
|
"Bash(gh status:*)",
|
|
"Bash(gh auth status:*)",
|
|
"Bash(gh pr edit:*)",
|
|
"Bash(gh workflow run:*)",
|
|
"Bash(gh run rerun:*)"
|
|
],
|
|
"deny": [
|
|
"Bash(git push)",
|
|
"Bash(git push:*)",
|
|
"Bash(git reset --hard)",
|
|
"Bash(git reset --hard:*)",
|
|
"Bash(git clean)",
|
|
"Bash(git clean:*)",
|
|
"Bash(gh pr merge)",
|
|
"Bash(gh pr merge:*)",
|
|
"Bash(gh pr close)",
|
|
"Bash(gh pr close:*)",
|
|
"Read(**/.env)",
|
|
"Read(**/.env.*)",
|
|
"Read(**/*.env)",
|
|
"Read(**/*.pem)",
|
|
"Read(**/*.key)",
|
|
"Read(**/*.p12)",
|
|
"Read(**/*.pfx)",
|
|
"Read(**/*.keystore)",
|
|
"Read(**/id_rsa*)",
|
|
"Read(**/.ssh/**)",
|
|
"Read(**/.aws/**)",
|
|
"Read(**/.npmrc)",
|
|
"Read(**/.netrc)",
|
|
"Read(**/.git-credentials)",
|
|
"Read(**/.claude/.credentials.json)",
|
|
"Read(**/secrets.fish)",
|
|
"Read(**/*.token)",
|
|
"Read(**/.envrc)",
|
|
"Read(**/.gnupg/**)",
|
|
"Read(**/fish_variables)"
|
|
],
|
|
"ask": [
|
|
"Bash(gh pr create)",
|
|
"Bash(gh pr create:*)",
|
|
"Bash(git rebase)",
|
|
"Bash(git rebase:*)"
|
|
],
|
|
"defaultMode": "auto"
|
|
},
|
|
"model": "opus",
|
|
"hooks": {
|
|
"SessionStart": [
|
|
{
|
|
"matcher": "startup|resume",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "f=\"$HOME/.claude/hooks/drift-check.sh\"; if [ -f \"$f\" ]; then exec bash \"$f\"; fi",
|
|
"timeout": 5
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"UserPromptSubmit": [
|
|
{
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "f=\"$HOME/.claude/hooks/drift-check.sh\"; if [ -f \"$f\" ]; then out=$(bash \"$f\" 2>&1); [ -n \"$out\" ] && printf \"%s\\n\" \"$out\"; fi; exit 0",
|
|
"timeout": 5
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "f=\"$HOME/.config/tmux/scripts/agent-state.sh\"; [ -x \"$f\" ] && \"$f\" cc busy; exit 0",
|
|
"timeout": 5,
|
|
"async": true
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"UserPromptExpansion": [
|
|
{
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "f=\"$HOME/.claude/hooks/local-commands.py\"; if [ -f \"$f\" ]; then exec /usr/bin/env python3 \"$f\"; fi",
|
|
"timeout": 25
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"PreToolUse": [
|
|
{
|
|
"matcher": "Bash",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "f=\"$HOME/.claude/hooks/git-guard.py\"; if [ -f \"$f\" ]; then exec /usr/bin/env python3 \"$f\"; fi",
|
|
"timeout": 5
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"PostToolUse": [
|
|
{
|
|
"matcher": "Edit|Write",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "/usr/bin/env python3 ~/.claude/hooks/format.py",
|
|
"timeout": 20,
|
|
"statusMessage": "format"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"matcher": "Bash",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "/usr/bin/env python3 ~/.claude/hooks/format.py",
|
|
"timeout": 20
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"Notification": [
|
|
{
|
|
"matcher": "idle_prompt|permission_prompt",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "f=\"$HOME/.claude/hooks/notify.py\"; if [ -f \"$f\" ]; then exec /usr/bin/env python3 \"$f\"; fi",
|
|
"timeout": 5
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"matcher": "idle_prompt|permission_prompt",
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "f=\"$HOME/.config/tmux/scripts/agent-state.sh\"; [ -x \"$f\" ] && \"$f\" cc input; exit 0",
|
|
"timeout": 5,
|
|
"async": true
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"Stop": [
|
|
{
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "f=\"$HOME/.config/tmux/scripts/agent-state.sh\"; [ -x \"$f\" ] && \"$f\" cc done; exit 0",
|
|
"timeout": 5,
|
|
"async": true
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"StopFailure": [
|
|
{
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "f=\"$HOME/.config/tmux/scripts/agent-state.sh\"; [ -x \"$f\" ] && \"$f\" cc error; exit 0",
|
|
"timeout": 5,
|
|
"async": true
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"SessionEnd": [
|
|
{
|
|
"hooks": [
|
|
{
|
|
"type": "command",
|
|
"command": "f=\"$HOME/.config/tmux/scripts/agent-state.sh\"; [ -x \"$f\" ] && \"$f\" cc off; exit 0"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"worktree": {
|
|
"baseRef": "fresh"
|
|
},
|
|
"enableWorkflows": false,
|
|
"statusLine": {
|
|
"type": "command",
|
|
"command": "/usr/bin/env python3 ~/.claude/statusline.py",
|
|
"padding": 0,
|
|
"refreshInterval": 60,
|
|
"hideVimModeIndicator": true
|
|
},
|
|
"enabledPlugins": {
|
|
"typescript-lsp@claude-plugins-official": true,
|
|
"frontend-design@claude-plugins-official": true,
|
|
"rust-analyzer-lsp@claude-plugins-official": true
|
|
},
|
|
"effortLevel": "xhigh",
|
|
"modelSettings": {
|
|
"claude-fable-5-1": {
|
|
"effortLevel": "xhigh"
|
|
},
|
|
"claude-opus-5-5": {
|
|
"effortLevel": "xhigh"
|
|
}
|
|
},
|
|
"advisorModel": "fable",
|
|
"tui": "fullscreen",
|
|
"skipWorkflowUsageWarning": true,
|
|
"theme": "dark",
|
|
"editorMode": "vim",
|
|
"verbose": true,
|
|
"autoCompactEnabled": true,
|
|
"remoteControlAtStartup": false,
|
|
"inputNeededNotifEnabled": false,
|
|
"agentPushNotifEnabled": false,
|
|
"skipAutoPermissionPrompt": true,
|
|
"autoMode": {
|
|
"environment": [
|
|
"### User-specific",
|
|
"**Primary use of Claude Code**: software development and dotfiles maintenance on personal Arch Linux hosts",
|
|
"**Trusted repo**: the repository the session is opened in; treat it as private unless it is clearly public, and treat content ported in from outside it as not its own work",
|
|
"**Sensitive remote targets**: any namespace, host, or container whose name carries `prod` or `production` as a whole word or name segment",
|
|
"routine under a repo's own Makefile / pnpm / npm scripts is expected local development activity"
|
|
]
|
|
}
|
|
}
|