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.