{ "$schema": "../schemas/hooks-metadata.schema.json", "entries": { "PreToolUse": [ { "id": "pre:bash:dispatcher", "description": "Consolidated Bash preflight dispatcher for quality, tmux, push, and GateGuard checks", "fingerprint": "7cb7b18bf466" }, { "id": "pre:powershell:gateguard-fact-force", "description": "PowerShell fact-forcing gate: inspect destructive commands without running unrelated Bash-only preflight hooks", "fingerprint": "d050a53aacaa" }, { "id": "pre:write:doc-file-warning", "description": "Doc file warning: warn about non-standard documentation files (exit code 0; warns only)", "fingerprint": "b5d423c0a802" }, { "id": "pre:edit-write:suggest-compact", "description": "Suggest manual compaction at logical intervals", "fingerprint": "fe20553467a1" }, { "id": "pre:observe:continuous-learning", "description": "Capture tool use observations for continuous learning", "fingerprint": "50e21a8e420d" }, { "id": "pre:governance-capture", "description": "Capture governance events (secrets, policy violations, approval requests). Enable with ECC_GOVERNANCE_CAPTURE=1", "fingerprint": "59da397f1c62" }, { "id": "pre:config-protection", "description": "Block modifications to linter/formatter config files. Steers agent to fix code instead of weakening configs.", "fingerprint": "a0259d293ded" }, { "id": "pre:mcp-health-check", "description": "Check MCP server health before MCP tool execution and block unhealthy MCP calls", "fingerprint": "d521e2361b09" }, { "id": "pre:edit-write:gateguard-fact-force", "description": "Fact-forcing gate: deny the first Edit/Write/MultiEdit/NotebookEdit of each file with questions chosen by target class and by what the change touches; a completed search naming the file in the current turn, a comment or whitespace-only edit, or a same-turn sibling of a new file already gated passes with a note instead; sensitive targets (secrets, keys, auth/payment code, migrations, CI workflows) and hard-linked files are always gated, also in subagents", "fingerprint": "e29e628410ff" }, { "id": "pre:hookify-runtime", "description": "Evaluate project-local Hookify rules before Bash, PowerShell, and file tools run", "fingerprint": "00070ba8af1f" } ], "UserPromptSubmit": [ { "id": "prompt:hookify-runtime", "description": "Evaluate project-local Hookify prompt rules before a user prompt is processed", "fingerprint": "90a043fa3531" } ], "PreCompact": [ { "id": "pre:compact", "description": "Save state before context compaction", "fingerprint": "19bf2c230878" } ], "SessionStart": [ { "id": "session:start", "description": "Load previous context and detect package manager on new session", "fingerprint": "bba15355d598" }, { "id": "session-start:plan-canvas-sessions", "description": "Surface open Plan Canvas review sessions so a fresh session can resume the loop", "fingerprint": "77c7cba86b78" } ], "PostToolUse": [ { "id": "post:dispatcher:sync", "description": "Run synchronous PostToolUse hooks in one process while preserving per-hook controls", "fingerprint": "c717dcc9b73b" }, { "id": "post:dispatcher:async", "description": "Run background PostToolUse hooks in one process while preserving per-hook controls", "fingerprint": "deb48a18b282" } ], "PostToolUseFailure": [ { "id": "post:mcp-health-check", "description": "Track failed MCP tool calls, mark unhealthy servers, and attempt reconnect", "fingerprint": "3bd2f771b362" }, { "id": "post:skill:track", "description": "Record hard Skill tool failures for skill-health telemetry", "fingerprint": "4faf4e303862" } ], "Stop": [ { "id": "stop:hookify-runtime", "description": "Evaluate project-local Hookify completion rules before Claude stops", "fingerprint": "7c63366a0501" }, { "id": "stop:plan-canvas-pending", "description": "Deliver undelivered Plan Canvas browser feedback before the agent stops", "fingerprint": "39f62c67249a" }, { "id": "stop:format-typecheck", "description": "Batch format (Biome/Prettier) and typecheck (tsc) all JS/TS files edited this response — runs once at Stop instead of after every Edit", "fingerprint": "4d1e44223b8a" }, { "id": "stop:check-console-log", "description": "Check for console.log in modified files after each response", "fingerprint": "1f3b47f79452" }, { "id": "stop:session-end", "description": "Persist session state after each response (Stop carries transcript_path)", "fingerprint": "e6ce566612a8" }, { "id": "stop:evaluate-session", "description": "Evaluate session for extractable patterns", "fingerprint": "5fb61666ab84" }, { "id": "stop:cost-tracker", "description": "Track token and cost metrics per session", "fingerprint": "e9ede0496acc" }, { "id": "stop:desktop-notify", "description": "Send desktop notification (macOS/WSL) with task summary when Claude responds", "fingerprint": "f98005a071bc" } ], "SessionEnd": [ { "id": "session:end:marker", "description": "Session end lifecycle marker (non-blocking)", "fingerprint": "4ab026fcc7fc" } ] } }