Why the model shouldn't be the one that says "done" A developer released Loopsmith, an MIT-licensed open-source tool at v1.0.0 that enforces a rule that the AI model never certifies its own completion. The Rust CLI pairs a plain-text job definition with a deterministic compiled gate that reads files rather than the model's claims, can revoke satisfied goals when required artifacts are deleted, refuses judges running on the same provider as the work, and bounds unattended loops with iteration, time and no-progress caps plus an append-only checkpointed ledger. The accompanying agent skill proposes changes to goals and success criteria for user approval rather than moving its own goalposts. Disclosure: this article was written with AI assistance and reviewed and edited by me, the tool's author. Loopsmith is my own open-source project. I have a few jobs I redo every week and care about getting right: a competitor roundup, a lead list, a research brief. Handing them to an AI agent works up to a point. The part that kept failing for me was the end of the job, not the work itself. The agent finishes, says "done", and I open the output to find a missing section, a citation that points nowhere, or a test it quietly edited so it would pass. So I built a small tool around one rule. The model never gets to say "done". I call it loopsmith https://github.com/bitphill/loopsmith : a skill that creates self-evolving, loop-based, purpose-specific skills, backed by a Rust CLI. It's MIT-licensed, at v1.0.0, and I'm sharing it here to find out whether the idea holds up for other people. 20-second demo: watch it with sound https://github.com/bitphill/loopsmith/blob/main/assets/demo/loopsmith-demo.mp4 . Most agent loops end in one of two ways. The model decides it's finished, or a counter runs out. The first means the thing doing the work also grades the work. The second means you get whatever it had when the budget ended. A model asking itself "is this done?" is not a check. It's an opinion from the party with the most reason to be agreeable. The design rule that follows is simple: whatever certifies completion must not be the thing doing the work. You describe a job once, in one plain text file YAML or Markdown . The file says what you want, what proves it, and every way the run is allowed to end. loopsmith then: That checker is the gate , and it's compiled Rust code. It reads files, not the model's description of them. In the README's words, goal satisfied is written by the deterministic gate and by nothing else. The gate can also revoke . If you delete a required artifact later, a goal that was satisfied flips back to unsatisfied. A system that can only mark things complete is a burndown chart with extra steps, and I didn't want that. A judge running on the same provider as the work it grades is refused, not just warned about. A model shouldn't mark its own homework. An unattended loop needs more than a good definition of done. It needs to be bounded. loopsmith has ceilings on: plus a no-progress cap for the loop that is still busy but no longer changing anything. Every iteration is checkpointed and written to an append-only ledger, so a run that dies at 4am resumes instead of restarting. You can ask the ledger what happened afterwards: loopsmith run ledger