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

Notes for agents

Plugin tests need the real claude binary, not a wrapper that adds options. claude plugin test refuses options before plugin, so a claude that is a wrapper putting --settings (or anything else) before every command cannot run it. Follow the wrapper's exec lines to the claude-code-<version> install and run that: <path>/bin/claude plugin test plugin.

In a test, a hook that answers a $ call returning a plain value must return { value: … }. env.get, session.id and http.fetch in host() all do; a bare value is not what the engine expects.

Run just mod before trusting a pass after a Rust change. These tests load the committed ../hooks/jevhooks.js, not the crate; stale JavaScript tests stale routing.