{
  "hooks": {
    "sessionStart": [
      {
        "command": "node .cursor/hooks/session-start.js",
        "event": "sessionStart",
        "description": "Load previous context and detect environment"
      }
    ],
    "sessionEnd": [
      {
        "command": "node .cursor/hooks/session-end.js",
        "event": "sessionEnd",
        "description": "Persist session state and evaluate patterns"
      }
    ],
    "beforeShellExecution": [
      {
        "command": "node .cursor/hooks/before-shell-execution.js",
        "event": "beforeShellExecution",
        "description": "Tmux dev server blocker, tmux reminder, git push review"
      }
    ],
    "afterShellExecution": [
      {
        "command": "node .cursor/hooks/after-shell-execution.js",
        "event": "afterShellExecution",
        "description": "PR URL logging, build analysis"
      }
    ],
    "afterFileEdit": [
      {
        "command": "node .cursor/hooks/after-file-edit.js",
        "event": "afterFileEdit",
        "description": "Auto-format, TypeScript check, console.log warning"
      }
    ],
    "beforeMCPExecution": [
      {
        "command": "node .cursor/hooks/before-mcp-execution.js",
        "event": "beforeMCPExecution",
        "description": "MCP audit logging and untrusted server warning"
      }
    ],
    "afterMCPExecution": [
      {
        "command": "node .cursor/hooks/after-mcp-execution.js",
        "event": "afterMCPExecution",
        "description": "MCP result logging"
      }
    ],
    "beforeReadFile": [
      {
        "command": "node .cursor/hooks/before-read-file.js",
        "event": "beforeReadFile",
        "description": "Warn when reading sensitive files (.env, .key, .pem)"
      }
    ],
    "beforeSubmitPrompt": [
      {
        "command": "node .cursor/hooks/before-submit-prompt.js",
        "event": "beforeSubmitPrompt",
        "description": "Detect secrets in prompts (sk-, ghp_, AKIA patterns)"
      }
    ],
    "subagentStart": [
      {
        "command": "node .cursor/hooks/subagent-start.js",
        "event": "subagentStart",
        "description": "Log agent spawning for observability"
      }
    ],
    "subagentStop": [
      {
        "command": "node .cursor/hooks/subagent-stop.js",
        "event": "subagentStop",
        "description": "Log agent completion"
      }
    ],
    "beforeTabFileRead": [
      {
        "command": "node .cursor/hooks/before-tab-file-read.js",
        "event": "beforeTabFileRead",
        "description": "Block Tab from reading secrets (.env, .key, .pem, credentials)"
      }
    ],
    "afterTabFileEdit": [
      {
        "command": "node .cursor/hooks/after-tab-file-edit.js",
        "event": "afterTabFileEdit",
        "description": "Auto-format Tab edits"
      }
    ],
    "preCompact": [
      {
        "command": "node .cursor/hooks/pre-compact.js",
        "event": "preCompact",
        "description": "Save state before context compaction"
      }
    ],
    "stop": [
      {
        "command": "node .cursor/hooks/stop.js",
        "event": "stop",
        "description": "Console.log audit on all modified files"
      }
    ]
  }
}
