DEV Community

T. Powers
T. Powers

Posted on

Why I built Cadence: I wanted GSD's discipline without GSD's bill

I'll start with the unglamorous truth, because it's the honest one and this whole tool is about honesty.

I did not build Cadence because an AI burned me once and I swore revenge. There's no dramatic origin story where an agent told me something shipped and it hadn't and a customer found out. I've seen agents over-report "done" — everyone who works this way has — but I don't have the war story. What I had was a cost problem.

I'm a 17-year senior staff software engineer and within the last year have started diving heavily into AI Engineering. It's become my new obsession.

The actual reason

I'd been running AI-assisted work through GSD — Get Shit Done. It's good. It produces disciplined output: real plans, real verification, the agent doesn't get to wander off. The problem was what it cost me to get that. Tokens, mostly. And time. Every change, even a small one, went through the full machinery. Lots of back-and-forth. The final straw for me was about a month ago when I was doing some minor improvements for an app that I work on in my spare time. These were simple improvements that should have taken only a few minutes to implement, but with GSD's structured workflow ended up taking quite a bit longer than desired, and using a huge percentage of my usage limit. The next morning, I started the brainstorming and planning for Cadence.

So the question I started with wasn't "how do I stop AI from lying." It was: can I keep this level of rigor and pay a fraction of the price?

The answer turned out to be: Don't run every gate on every change. Let the person decide which checks fire for which kind of work. A typo fix and a database migration should not cost the same. GSD's discipline, but you only pay for the parts a given change actually needs. That's the entire idea. Speed from customization, not from cutting corners.

What it actually does

Cadence is a loop: DRAFT, then BUILD, then SETTLE. You write down what a piece of work is supposed to do — the acceptance criteria — before you build it. You build. Then you try to settle.

Settle is where it earns its keep. It doesn't take the agent's word that the work is done. It re-derives each acceptance criterion from the real task state, runs the tests, checks that every criterion is actually referenced by a test, and — if you've turned it on — hands the diff to a separate verifier that's prompted to be skeptical. If any of that fails, it refuses to settle. Loudly. With a reason.

The line I keep coming back to: The agent isn't believed; the state is.

None of this is magic. It's a state machine over a folder of markdown and JSON. You can read every decision it's ever made because it's all on disk and all in git. That was on purpose. I didn't want a tool you have to trust. I wanted one you can audit.

The part I'm actually proud of

I built Cadence using Cadence.

Once the loop could close — which was around the 37th commit, when settle first worked — I ran the rest of the project through it. Every phase after that got planned, built, and settled the same way any user would do it. By the end that was 44 named phases, and all of them carry their settle artifact in the repo. It's roughly 93% of the commits.

I'm not asking you to take that on faith. That's the point. Clone it, run ls .cadence/phases/*/, and you'll see a SUMMARY file in every phase — that file only exists if the loop actually closed. The tool that refuses to settle unverified work was, itself, settled that way.

What's rough

  • The macOS and Windows CI legs are deferred at the moment. I develop on Linux and that's what's proven right now.
  • The two-commit settle convention (feature commit, then a settle commit for the state files) is something I do by hand. The tool doesn't force it.
  • The structural gate trusts the task statuses it's given. A determined agent that lied about both the task and wrote a fake passing test could get past it. The independent verifier exists exactly because no cooperative check is unforgeable — but I won't pretend it's a guarantee.

Why I'm posting this

This is my first public project. I've worked on several private projects over the years, but never felt the push to open source any of them simply because they were highly customized for me and not the broader audience. However, I want to share Cadence with other developers for a few reasons:

  • I would like to get feedback — positive and/or negative — so I can continue to improve it
  • I believe it offers a balance I hadn't found elsewhere — speed and confidence

If you try Cadence and it breaks, tell me where. That's worth more to me right now than a star.

— T. Powers / https://github.com/manehorizons/cadence

Top comments (0)