DoneWhen
Open source · AGPL-3.0Track what your AI built, review it at a gate, check it again later
No tracker kept enough of what AI agents built to review it properly before approving it.
A self-hosted tracker whose server refuses to move unfinished work to review. I run my own backlog on it.
The problem I had
I build backend systems with AI agents every day, and they work at lightspeed, often overnight. By morning I could not tell what they had built, why, or whether it was really done. The chat was gone, the commits said “fix”, and a task was “done” because the AI said so. I did not want to read every line of code. I wanted a record I can read in minutes, a rule the AI cannot skip, and a human gate on quality.
I could not find a tool that did that, so I built one. It started in July under the name Raenil, and I run my own projects on it. It is open source.
How I work with it
- I research, propose and plan with the AI until the spec is clear.
- The agent writes the tickets in DoneWhen: full execution specs (goal, parts, implementation notes, acceptance tests, what is out of scope), each with a done-when checklist. Big features become an epic of tickets with blockers.
- I start the agents with
/goaland leave. - They build on a branch, test, and tick each item the moment it is met. They link the commits and write an engineering document with a Mermaid diagram.
- The gate. A ticket cannot move to In Review while one item is open. The server refuses it. If an agent is stuck, it marks the ticket Blocked and says why.
- In the morning I open the review inbox. I read tickets, documents and diagrams, open the code only where it matters, then approve or send the ticket back.
- Weeks later I can check again: the commits, specs and checklists stay, and reopening one item sends the ticket back to review.
Architecture
A single Go binary serves a SvelteKit app and talks to PostgreSQL. SQL migrations are
embedded and run on start, so deployment is one container. The distinctive piece is a
built-in MCP server: any MCP client, including Claude Code, connects with a bearer
token and drives the board: create tickets, set criteria, tick them with evidence, link
commits, write documents, move work through states. A small Claude Code plugin gives an
interactive /tasks browser over the same API.
Every action is attributed (a human through a session, an AI through a token) and written to an activity log that the rest of the product reads from.
Engineering highlights
- The gate lives in the database transaction. A move to In Review or Done checks the checklist in the same transaction as the state change, with the criteria rows locked, so a concurrent un-tick cannot slip past. An AI caller can never force it.
- Migrations are safe to run twice and safe to run once. They run under a Postgres advisory lock, and a migration marked destructive refuses to start until a backup is confirmed by name.
- Hardened for the public. Workspace-scoped everything, per-workspace token pins, bearer tokens that cannot manage tokens, safe-URL validation on stored links, and push endpoints checked against private address ranges, including at connect time.
- A record that survives. Commits, branch, engineering document and the full checklist stay on the ticket after it is done, so the work can be checked again.
- Easy to try. One command seeds a demo workspace; the README, a self-hosting guide and a 39-second tour are in the repo.
DoneWhen is open source under AGPL-3.0. I run it privately on my own server behind Caddy and Tailscale.