{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/hook-edit-smoke.sh",
            "timeout": 60
          }
        ]
      },
      {
        "matcher": "Edit|Write|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/prose-guard.sh",
            "timeout": 10
          }
        ]
      },
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/reboot-stamp.sh",
            "timeout": 10
          }
        ]
      },
      {
        "matcher": "Read|Bash|Grep|WebFetch",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/secret-scanner.py"
          }
        ]
      },
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/evidence-recorder.sh"
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/pr-gate-ack-promote.sh"
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/restate-gate.sh --record"
          },
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/goal-pin.py --record",
            "timeout": 5
          }
        ]
      },
      {
        "matcher": "Bash|mcp__claude-in-chrome__javascript_tool|mcp__claude-in-chrome__read_page|mcp__claude-in-chrome__get_page_text|mcp__claude-in-chrome__computer|mcp__claude-in-chrome__browser_batch",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/ui-state-recorder.sh"
          }
        ]
      },
      {
        "matcher": "Bash|WebFetch|mcp__claude-in-chrome__navigate",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/probe-recorder.sh"
          }
        ]
      },
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/leg-scope.sh --record"
          }
        ]
      },
      {
        "matcher": "ArtifactData",
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/goal-pin.py --posted",
            "timeout": 5
          }
        ]
      }
    ],
    "PreCompact": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/precompact-handoff.sh",
            "timeout": 20
          }
        ]
      }
    ],
    "PreToolUse": [
      {
        "matcher": "*",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/run-referee-guard.sh",
            "timeout": 5
          }
        ]
      },
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/firewall.sh",
            "timeout": 5
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/pr-closing-keyword-guard.sh"
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/pr-claim-gate.sh"
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/pr-prior-round-gate.sh"
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/mutation-proof-gate.sh"
          }
        ]
      },
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/research-only-guard.sh",
            "timeout": 5
          }
        ]
      },
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/codex-prepush-review.sh",
            "timeout": 150
          }
        ]
      },
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/auto-simplify.sh",
            "timeout": 60
          }
        ]
      },
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/precommit-format.sh"
          }
        ]
      },
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/pre-commit-verify.sh",
            "timeout": 630,
            "statusMessage": "Pre-commit: verifying TypeScript types..."
          }
        ]
      },
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/protect-paths.sh",
            "timeout": 5
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/no-new-dep.sh",
            "timeout": 5
          }
        ]
      },
      {
        "matcher": "Edit|Write|NotebookEdit",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/research-only-guard.sh",
            "timeout": 5
          }
        ]
      },
      {
        "matcher": "Agent|Task",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/require-agent-model.sh",
            "timeout": 5
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/matcha-offload-gate.sh"
          }
        ]
      },
      {
        "matcher": "Edit|Write|MultiEdit|NotebookEdit",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/secret-scanner.py",
            "timeout": 5,
            "statusMessage": "Scanning for secrets..."
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/worktree-gate.sh",
            "timeout": 10,
            "statusMessage": "worktree-gate: checking isolation..."
          }
        ]
      },
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/tdd-gate.sh",
            "timeout": 5,
            "statusMessage": "Checking for tests..."
          }
        ]
      },
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/plan-gate.sh",
            "timeout": 5,
            "statusMessage": "Checking for active plan..."
          }
        ]
      },
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/verify-gate.sh --auto-arm",
            "timeout": 5
          }
        ]
      },
      {
        "matcher": "Edit|Write|MultiEdit|NotebookEdit|Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/branch-guard.sh",
            "timeout": 15,
            "statusMessage": "branch-guard: confirming target branch..."
          }
        ]
      },
      {
        "matcher": "AskUserQuestion",
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/auto-mode.py --gate",
            "timeout": 10,
            "statusMessage": "auto: deciding instead of asking..."
          }
        ]
      },
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/search-first-nudge.sh",
            "timeout": 5
          }
        ]
      },
      {
        "matcher": "Edit|Write|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/ui-state-gate.sh"
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/restate-gate.sh --gate"
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/explainer-gate.py",
            "timeout": 5
          }
        ]
      },
      {
        "matcher": "Edit|Write|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/probe-gate.sh"
          }
        ]
      },
      {
        "matcher": "Edit|Write|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/leg-scope.sh --gate"
          }
        ]
      },
      {
        "matcher": "mcp__claude-in-chrome__computer|mcp__claude-in-chrome__read_page|mcp__claude-in-chrome__find",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/chrome-ref-first.sh"
          }
        ]
      }
    ],
    "SessionStart": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/sessionstart-handoff.sh",
            "timeout": 10
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/daydream-surface.sh",
            "timeout": 5
          }
        ]
      },
      {
        "matcher": "startup",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/session-load-guard.sh",
            "timeout": 20
          }
        ]
      },
      {
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/tmux-map.sh"
          },
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/goal-pin.py --session",
            "timeout": 5
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/open-question.py --stop"
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/matcha-review.sh"
          },
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/push-gate.py",
            "timeout": 20
          },
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/test-gate.py"
          },
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/goal-pin.py --stop",
            "timeout": 5
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/status-shape-gate.sh",
            "timeout": 10
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/voice-queue.sh stop"
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/register-gate.py",
            "timeout": 10
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/stop-handoff.sh",
            "timeout": 15
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/daydream.sh",
            "timeout": 5
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/verify-gate.sh",
            "timeout": 180,
            "statusMessage": "Verify gate: running tsc + tests..."
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/notify-local-tts.sh",
            "async": true
          }
        ]
      },
      {
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/push-sweep.sh"
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/auto-mode.py --stop",
            "timeout": 10
          }
        ]
      }
    ],
    "UserPromptSubmit": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/paste-guard.py",
            "timeout": 15,
            "statusMessage": "paste-guard: scanning for sensitive content..."
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/restate-gate.sh --arm"
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/voice-queue.sh prompt"
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/factual-guardrail-nudge.sh",
            "timeout": 15
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/babysitting-nudge.sh",
            "timeout": 15
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/canary.sh",
            "timeout": 15
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/answer-shape-nudge.sh",
            "timeout": 15
          }
        ]
      },
      {
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/open-question.py --prompt"
          },
          {
            "type": "command",
            "command": "~/.claude/hooks/matcha-surface.sh"
          },
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/goal-pin.py --prompt",
            "timeout": 5
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/feedback-marker.sh",
            "timeout": 15
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/correction-detect.sh",
            "timeout": 15
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/ui-state-nudge.sh",
            "timeout": 15
          }
        ]
      },
      {
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/shadcn-nudge.sh"
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/context-threshold-nudge.sh",
            "timeout": 15
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/auto-mode.py --prompt",
            "timeout": 10
          }
        ]
      },
      {
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/vault-recall.py"
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/leg-scope.sh --arm"
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/tmux-name-sync.sh",
            "timeout": 5
          }
        ]
      },
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/register-gate.py --prompt",
            "timeout": 5
          }
        ]
      },
      {
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/sofa-nudge.sh"
          }
        ]
      }
    ],
    "Notification": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/voice-queue.sh notification"
          }
        ]
      }
    ]
  }
}
