For agents, on top of README.md, which they read first.

Notes for agents

A new event goes in three places: the enum, ALL, and role. The compiler forces role, because it has no catch-all; keep it that way. Nothing forces ALL: its length is written out ([HookEvent; 33]) and every_event_is_listed_once checks it against 33, so extend the array, its length and the test's count together.

Variant names are the wire format. HookEvent serialises by variant name, which must equal Claude Code's hook name; the mod sends next.event minus classic., and the daemon matches on it. Never rename one to suit Rust style.

Giving an event Decide or Observe is not enough on its own. The daemon's decide and observe in crates/jevhooks-daemon/src/serve.rs refuse an event they have no arm for, and the mod's classic.* hook only forwards prompt, source and tool_use_id. Wire both ends, or the new role does nothing.