Most CLAUDE.md files I see are a folder map and a naming convention. That is close to the least valuable thing you can hand an agent, because it already infers structure from the repo. What it cannot infer are the rules that must never break, and the reasons behind them.
An agent will happily write code that compiles, passes types, and quietly violates a security or data invariant. A file map does nothing to stop that. A list of invariants with reasons does.
Here is the shape that has worked for me on Next.js + SQLite SaaS projects.
Encode invariants, with the reason
Not "put queries in lib/db." Instead:






