Last week I wrote about being bad at discipline and building a tool to compensate — ArDD, a set of Claude Code skills that push a project through artifacts, plans, and tasks instead of letting an agent freewheel from a one-line prompt straight to code. I ended that post wondering whether it was just a good CLAUDE.md wearing a costume.
I'm the only person who runs ArDD (as of this writing), so what follows is really a decision record with the private parts filed off. But the thing it taught me generalized past my one tool, and the way it generalized is the reason I'm writing it down: it was invisible until I ran the thing and looked at what actually happened, and it was never findable by reading the code longer.
State that lived in the wrong place
ArDD's core loop is plan → tasks → implement, and implement can hand work to a subagent running in its own git worktree, so you're not babysitting a single-threaded agent. The original design tried to be careful about the handoff: before delegating, it committed a bit of coarse state — the plan, the task list — to the main branch, on the theory that the delegated worktree needed a stable, already-landed point to branch from.
That theory was wrong, and I only found out because I ran a live smoke test instead of trusting the design: I committed a throwaway plan and task file, delegated the work to a subagent in a fresh worktree, and then actually looked at what the worktree contained.






