SessionStart fires when a session begins, resumes, or clears. Stdout from this hook gets injected into Claude's context window.
This is most useful after context compaction. When Claude compacts, it summarizes the conversation and may lose specific details. A SessionStart hook can re-inject things like the current sprint goal, open tickets, or environment state. I find this pattern useful on long-running projects where context loss costs real time.
The matcher field filters when it fires: startup for new sessions, resume for resumed ones, compact right after compaction.
Notification hooks fire when Claude needs your attention: a permission prompt is waiting, or Claude has been idle. Use this to send a desktop notification so you're not watching the terminal.