{
  "hooks": {
    "SessionStart": [
      {
        "matcher": "*",
        "hooks": [
          {
            "type": "command",
            "command": "node \"${PLUGIN_ROOT}/runtime/bootstrap.js\"",
            "timeout": 10,
            "statusMessage": "HolyCodex: checking readiness"
          },
          {
            "type": "command",
            "command": "node \"${PLUGIN_ROOT}/runtime/rules.js\"",
            "timeout": 10,
            "statusMessage": "HolyCodex: loading scoped rules"
          }
        ]
      }
    ],
    "UserPromptSubmit": [
      {
        "matcher": "*",
        "hooks": [
          {
            "type": "command",
            "command": "node \"${PLUGIN_ROOT}/runtime/rules.js\"",
            "timeout": 10,
            "statusMessage": "HolyCodex: loading scoped rules"
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "^apply_patch$",
        "hooks": [
          {
            "type": "command",
            "command": "node \"${PLUGIN_ROOT}/runtime/rules.js\"",
            "timeout": 10,
            "statusMessage": "HolyCodex: matching scoped rules"
          }
        ]
      }
    ],
    "PreCompact": [
      {
        "matcher": "*",
        "hooks": [
          {
            "type": "command",
            "command": "node \"${PLUGIN_ROOT}/runtime/rules.js\"",
            "timeout": 3,
            "statusMessage": "HolyCodex: preserving continuation context"
          }
        ]
      }
    ],
    "PostCompact": [
      {
        "matcher": "*",
        "hooks": [
          {
            "type": "command",
            "command": "node \"${PLUGIN_ROOT}/runtime/rules.js\"",
            "timeout": 10,
            "statusMessage": "HolyCodex: resetting scoped rule cache"
          }
        ]
      }
    ],
    "SessionEnd": [
      {
        "matcher": "*",
        "hooks": [
          {
            "type": "command",
            "command": "node \"${PLUGIN_ROOT}/runtime/rules.js\"",
            "timeout": 3,
            "statusMessage": "HolyCodex: cleaning session state"
          }
        ]
      }
    ]
  }
}
