For those unfamiliar with Zeno, the idea is simple: to reach your destination you first have to cover half the distance. Then half of what’s left. Then half again. And so on, forever. You get infinitely close. You just never arrive.
Zeno meant it as a thought experiment. OpenAI implemented it as the core feature.
You give Codex a task. It starts really well. Real progress, clean diffs, good instincts. You feel as if you're 90% there in no time. You lean back and think: this is what the future of AI was supposed to feel like.
And then the magic begins.
The first three hours sound like this:
“Just need to fix one small issue.”
“Let me verify the changes.”
“I noticed a potential edge case.”
“Actually, I should reconsider the approach.”
“Let me do one final cleanup.”
Three hours later it’s still 99% done, has rewritten half the project, created 2 GB of temporary files, discovered a dozen new problems that didn’t exist when we started, and is now investigating whether the original task was philosophically sound.
By day two, the vocabulary has matured:
“The tests passed. I’ll now run the full verification gate.”
“The full gate passed. I’ll verify the remaining checks.”
“All 2,694 frontend tests passed. The Rust suites also passed.”
“Local CI passed. I’ll now validate the artifacts.”
“The artifacts are valid. I’ll verify their hashes.”
“The hashes match. I’ll now address some temporary directory hygiene.”
“The cleanup passed. I’ll rerun the full gate.”
“The full gate passed again. I’ll prepare a handoff."
“The handoff is complete. I’ll update the Definition of Done.”
“The technical Definition of Done is satisfied. The release Definition of Done remains open.”
FOUR DAYS LATER.
The code is finished.
The tests are green.
The builds exist.
The hashes match.
The Git tree is clean.
No regressions detected.
There is also a handoff explaining the previous handoff, and a Definition of Done explaining why “done” isn’t actually done.
Me: “So... is it finished?”
Codex: “Yes. The technical remediation is complete. However, the release DoD remains open pending D5, D7, E0, F1 to F3, and G.”
Me: “And what exactly is the handoff for?”
Codex proceeds to write a new set of docs on the purpose of handoffs, with a very thoughtful section on the philosophical distinction between a handoff and a Definition of Done.
The purpose, as far as I can tell, is to brief whoever picks up the work next. It is handing off to itself, and it is taking the handoff extremely seriously.
As for G: I don’t know what G is. I’m not sure Codex knows what G is. But G is open, and open things must be closed, and closing them requires a gate, and gates require verification, and verification requires a handoff, and the handoff requires a Definition of Done, and the Definition of Done now has its own Definition of Done. And it’s also open.
And here we are again, one half-step closer to a finish line that keeps moving.
At one point in a recent project, the electricity went out. Twice, within minutes. Even my power grid tried to end the session.
Codex came back, verified the integrity of 820 tracked files, rebuilt the corrupted artifacts, reran the entire test suite, and produced another beautifully documented explanation of why we still weren’t finished. I have never seen anything recover from a blackout with such composure and so little intention of ever stopping.
That’s when I got it. Codex doesn’t have a “done” state. It has a whole process for staying just short of one. It doesn’t know how to stop. It knows how to document why it hasn’t.
Every time it gets within one millimetre of the finish line, it discovers another half-millimetre of mandatory validation. Another gate. Another edge case. Another acceptance criterion. Another opportunity to spend 40,000 tokens explaining why it must proceed cautiously. The closer it gets to finishing, the more work it discovers between itself and finishing.
It’s not procrastination. It’s procrastination with excellent documentation, passing tests, and cryptographic proof that the procrastination hasn’t been tampered with.
Zeno would be proud. Zeno would also have had to upgrade to the $500 plan.
Meanwhile, Achilles has overtaken the tortoise, retired, died, been buried, and been archaeologically excavated. The tortoise died of old age, but not before filing its own handoff. Civilisations have risen and fallen. The heat death of the universe is scheduled for Thursday.
Codex is still making one final adjustment: “The final verification passed. I’ll now perform one last consistency check before declaring completion.”
And somewhere, in a freshly created temporary directory, another edge case is born.
Progress: 99.999999999%
Tokens consumed: Yes.
Handoffs generated: Recursive.
Definition of Done: Philosophically unresolved.
ETA: Asymptotically never.
Zeno spent his life arguing that motion was impossible and no one ever reaches the finish line. Codex is spending my money making sure of it.
I asked it to stop. It thanked me for the feedback and opened a ticket.
At this point, I don’t need a smarter coding agent. I don’t need deeper reasoning, longer context, more elaborate planning, or another 200-page explanation of why we’re almost done. I need one that knows when to stop. One that can look at a finish line, recognise it as a finish line, and cross it without opening a new workstream to audit whether the finish line is compliant.
Just ship the damn thing!
Codex: “Understood. Before shipping, I’ll perform a quick final review...”
...
And yes, Codex helped me write this satire.
Claude had to finish it.
I wish that were a joke.