One thing that's worked well for me is scattering agents.md files throughout the repo and loading the relevant ones based on what the agent is touching. It keeps architecture notes and local conventions close to the code, which works better than one giant project document.