{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "permissions": {
    "deny": [
      "Bash(rm -rf *)",
      "Bash(curl * | bash)",
      "Bash(wget * | sh)",
      "Edit(/vendor/**)",
      "Edit(/node_modules/**)"
    ],
    "ask": [
      "Bash(git push *)",
      "Bash(git reset *)",
      "Bash(docker *)",
      "Bash(npm publish *)",
      "Bash(npx * deploy *)"
    ],
    "allow": [
      "Read",
      "Glob",
      "Grep",
      "Edit",
      "Write",
      "Bash(npm run *)",
      "Bash(pnpm *)",
      "Bash(git status)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "Bash(git branch *)",
      "Bash(git checkout *)",
      "Bash(git add *)",
      "Bash(git commit *)",
      "Bash(ls *)",
      "Bash(cat *)",
      "Bash(head *)",
      "Bash(tail *)",
      "Bash(wc *)",
      "Bash(find *)",
      "Bash(grep *)",
      "Bash(node *)",
      "Bash(npx jest *)",
      "Bash(npx vitest *)",
      "Bash(npx tsc *)",
      "Bash(npx eslint *)",
      "MCP(github:*)",
      "MCP(context7:*)",
      "Task(*)",
      "Agent(*)"
    ]
  },
  "outputStyle": "Explanatory",
  "statusLine": "model branch tokens",
  "plansDirectory": ".claude/plans",
  "enableAllProjectMcpServers": false,
  "attribution": {
    "commitMessage": "",
    "prDescription": ""
  },
  "env": {
    "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "80"
  },
  "spinnerVerbs": [
    "Thinking",
    "Analyzing",
    "Exploring",
    "Investigating",
    "Crafting",
    "Reviewing"
  ],
  "spinnerTipsOverride": [
    "Use /compact at task boundaries to keep context fresh",
    "Shift+Tab cycles modes: Normal > Auto > Plan",
    "Ctrl+B sends the current task to background",
    "Use subagents for parallel exploration",
    "claude -w creates an instant parallel worktree session",
    "Voice mode: /voice then hold spacebar to talk",
    "Esc Esc rewinds to the last checkpoint",
    "Write tests alongside code for better AI output",
    "/doctor diagnoses configuration issues"
  ]
}
