I loved Beads, but kept running into issues because it is so git heavy. One: not every system and project I work on uses git. Two: Sometimes I'd switch branches, and that would screw up Beads state entirely. Three: And this is at least last I used it, there's no safety net, Claude would close a Bead, without validating anything.
I wound up building my own with Claude, I made it SQLite first, syncs to GitHub, can pull down from GitHub, and I added "Gates" to stopgap Claude or whatever agent from marking things complete if they've not been: compiled, unit tests run, or simple human testing / confirmation. The Gates concept improved my experience with Claude, all too often it says it finished something, when in fact it did not. Every task must have a gate, and gates must pass before you can close a task. Gates can be reused across tasks, so if "Run unit tests" is one gate, you can reuse it for every task, when it passes, it passes for that one task <-> gate combination.
Anyway, I'm happy for Beads, Gas Town not so much my wheelhouse on the other hand.
Love this.
How did you implement gates? Are they simply tasks Claude itself has to confirm it ran, or are they scripts that run to check that the thing in question actually happened, or do they spawn a separate AI agent to check that the thing happened, or what?