{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Claude Code Hooks Configuration",
  "description": "Configuration for Claude Code hooks. Event types are validated at runtime and must be one of: PreToolUse, PostToolUse, PreCompact, SessionStart, SessionEnd, Stop, Notification, SubagentStop",
  "$defs": {
    "hookItem": {
      "type": "object",
      "required": [
        "type",
        "command"
      ],
      "properties": {
        "type": {
          "type": "string"
        },
        "command": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          ]
        },
        "async": {
          "type": "boolean",
          "description": "Run hook asynchronously in background without blocking"
        },
        "timeout": {
          "type": "number",
          "minimum": 0,
          "description": "Timeout in seconds for async hooks"
        }
      }
    },
    "matcherEntry": {
      "type": "object",
      "required": [
        "matcher",
        "hooks"
      ],
      "properties": {
        "matcher": {
          "type": "string"
        },
        "hooks": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/hookItem"
          }
        },
        "description": {
          "type": "string"
        }
      }
    }
  },
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "$schema": {
          "type": "string"
        },
        "hooks": {
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "$ref": "#/$defs/matcherEntry"
            }
          }
        }
      },
      "required": [
        "hooks"
      ]
    },
    {
      "type": "array",
      "items": {
        "$ref": "#/$defs/matcherEntry"
      }
    }
  ]
}