thread_begin/run_begin/run_end itself (install agent instructions so it does):
/mcp, pick slaunt, and choose Authenticate.
What the hooks do
Claude Code fires the first
SessionStart before MCP servers connect, which is why UserPromptSubmit handles initial binding.
Because the hook owns the run, a model-issued run_begin while it’s RUNNING fails with -32602. Agent instructions written for hook-less clients can trigger this; it’s harmless but noisy.
tool_authorize decisions
ThePreToolUse guard is how stops take effect mid-turn. If a tool call is unexpectedly blocked, the reason tells you why: