The "what's here" vs "what happened" framing is exactly right. HAM's CLAUDE.md files handle the first — conventions, stack decisions, patterns. We have a .memory/ layer (decisions.md, session logs) for the second, but your ledger approach sounds like it handles "what happened" more cleanly than what we're doing. 40k down to 3k cold-start is a serious number. Would love to hear more about your NDJSON setup if you're open to sharing.
The governance point is the one that sticks with me most. Right now HAM is permissive — the agent reads context files but nothing constrains what it can scan beyond that. Your 3-hook pipeline that scopes the context window before the agent starts is a stronger guarantee. Curious what the three hooks are and how you handle edge cases where the agent needs context outside its scoped window mid-task.
On multi-agent conflict — context files are read-only during sessions. The agent never writes to them. Conflicts happen when two developers update the same CLAUDE.md, which resolves at the git/PR layer.
Our approaches seem complementary more than competing. The ledger and directory-scoped files could work together well. Down to compare notes if you're interested.
I took a different angle than directory-scoped files. Every agent action gets logged to an append-only NDJSON ledger — what was done, why, what it affected. New sessions load a compressed summary from the ledger instead of re-scanning source. After 6 months and 1100+ entries, cold-start context dropped from ~40k tokens to under 3k.
The key insight was separating "what's here" (which changes slowly) from "what happened" (which changes constantly). Directory-level memory handles the first well but can drift on the second. A receipt-based approach lets you reconstruct both, plus you get an audit trail for free.
One thing I'd add: governance matters as much as memory. Without constraints on what agents can read/write per session, memory files become a dumping ground. I use a 3-hook pipeline that scopes each agent's context window before it even starts
Curious how HAM handles conflict when two agents modify overlapping directory scopes.