1@README.md 2 3## Notes for agents 4 5**Run `just daemon` after any change here.** It copies the release binary to 6`plugin/bin/jevhooks` with `install`; the next session replaces the running daemon 7because the identity (device, inode, size, mtime) changed. To do it by hand, 8`plugin/bin/jevhooks stop` and start a session, or `op-env-run -- plugin/bin/jevhooks serve`. 9 10**Check memory before a release build.** It uses several gigabytes: `free -m` first. 11 12**The MCP server must not wait for the daemon.** `mcp::serve` spawns `client::ensure` 13and serves at once; awaiting it would hold the session's tool list on a key fetch 14measured at 3 to 15 seconds. 15 16**`client::spawn` is the one place a daemon is started.** Keep it detached 17(`process_group(0)`, stdin and stdout null, stderr to `daemon.log`) and keep the key 18out of its arguments. 19 20**A config file that cannot be used must never disable a gate.** `serve` falls back to 21`Config::default()` and reports the error in `status`; keep `deny_unknown_fields` so a 22misspelt key is an error rather than silently ignored. 23 24**`SIGPIPE` is reset only for the printing commands.** `print` in `main.rs` restores 25the default so `| head` ends quietly; the daemon itself must survive a peer closing 26its socket.