A single HTML file per project that tracks epic progress in plain sight (what is done, what is next, who is stuck), readable by humans and agents alike.
The single biggest source of project drift is what is the actual status. If three people need to ask each other to find out where things are, you have lost the project. If the answer to what is shipped requires reading Slack history, you do not have a project; you have a chat group.
The fix is a single file, in the project, read by both humans and agents, that always tells the truth. One file. Always current. Always honest.
The single biggest source of project drift is what-is-the-actual-status. If three people need to ask each other to find out where things are, you have lost the project. If the answer to what is shipped requires reading Slack history, you do not have a project; you have a chat group.
The fix is a single file, in the project, read by both humans and agents, that always tells the truth. One file. Always current. Always honest.
Three jobs. Done well, this file is the heartbeat of the project.
Markdown is for humans. HTML can be styled, scanned visually at a glance, and rendered in a browser tab you keep open all day. It is also still trivial for agents to parse and update.
The trick: a single self-contained HTML file with inline styles. No build step. Open it locally, host it on Vercel, link it from your wiki. One artefact, many places.
Three rules. Easy to follow. Hard to start.
Use a real project (the Hello World counts). You will create the file, populate it with your epics from Protocol 12, then have the developer agent update it as part of a commit.
In Claude Code: "Create public/project-status.html with these sections: blockers (top), in progress, open, done, cancelled. Style it inline, IL brand. Make it readable in a browser."
Tell Claude: "Read docs/product/epics/. Populate project-status.html with every epic and its status. Use Open for any epic that has not started."
Tell Claude: "Move epic 01 to In Progress. Add today's date and a one-line note: started." Commit and push.
Actually finish one task in epic 01. Tell Claude: "Mark epic 01 as Done in project-status.html. Note: lead capture shipped to prod." Commit.
Update CLAUDE.md or AGENTS.md: "Always update public/project-status.html when an epic changes state. Same commit as the work." Every agent now keeps the file honest by default.
A live project-status.html for your real project, walked through three states, with an agent committed to keeping it current. You never have to write a weekly update again.
You watch your developer agent ship an epic and update your status file on its own. After that, you never write a weekly update again.