Htet Wai Yan SoeSOFTWARE · DEVOPS · INFRASTRUCTURECHIANG MAI --:--Book a call
Sheet D · Case studyDoneWhen2026
← Work

DoneWhen

Open source · AGPL-3.0

Track what your AI built, review it at a gate, check it again later

65 ★on GitHub
19forks
AGPL-3.0open source
Before

No tracker kept enough of what AI agents built to review it properly before approving it.

After

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.

The 39-second tour: track the work, understand it at a glance, a human holds the gate, check it again later.

How I work with it

  1. I research, propose and plan with the AI until the spec is clear.
  2. 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.
  3. I start the agents with /goal and leave.
  4. 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.
  5. 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.
  6. 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.
  7. 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.