{
  "version": 1,
  "_comment_react_doctor": "React Doctor is intentionally absent from postToolUse. Running it per edit cost ~1.5s and re-scanned every changed file in the tree, with dead-code analysis and a Socket.dev supply-chain network call enabled by default, so a slow network stalled edits behind a 120s timeout. It already runs at pre-commit (`react-doctor:changed`) and pre-push (`react-doctor:gate`, workspace-wide, errors only). Re-adding it here puts a network round trip back in the interactive edit path.",
  "hooks": {
    "sessionStart": [
      {
        "command": ".cursor/hooks/exxat-session-status.mjs"
      }
    ],
    "beforeSubmitPrompt": [
      {
        "command": ".cursor/hooks/exxat-image-ia-gate.mjs"
      }
    ],
    "preToolUse": [
      {
        "_comment": "Matcher covers BOTH Claude-native tool names (Write, StrReplace, EditNotebook) AND Cursor's edit tools (write/Write, edit_file, search_replace, create_file, MultiEdit). Missing a name here = silent bypass; the brief-gate fires on the path AFTER this matcher gates the tool, so adding names is safe (the hook itself validates the path).",
        "command": ".cursor/hooks/exxat-brief-gate.mjs",
        "matcher": "^(Write|write|StrReplace|Edit|EditNotebook|MultiEdit|write_file|edit_file|search_replace|create_file|multi_edit|multi_edit_file)$"
      },
      {
        "_comment": "Graphify floor. graphify.mdc cannot be alwaysApply (5-rule cap) and Glob cannot see gitignored graphify-out/, so agents skip the constitution one-liner. This injects a query-first reminder on broad search tools. Never denies.",
        "command": ".cursor/hooks/exxat-graphify-gate.mjs",
        "matcher": "^(Grep|Glob|Task|SemanticSearch|Agent|grep|glob|task|semantic_search|codebase_search)$"
      }
    ],
    "postToolUse": [
      {
        "_comment": "Exxat-DS-specific content check (raw Badge vs StatusBadge/PillCell, duplicate favorite-star components, tabs-in-tabs nesting, double table padding) — the automated floor for rules that were previously prose-only. See exxat-ds-check.mjs header for why this exists.",
        "command": ".cursor/hooks/exxat-ds-check.mjs",
        "matcher": "Write|Edit|MultiEdit|ApplyPatch",
        "timeout": 15
      }
    ]
  }
}
