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.