Specsmaxxing – On overcoming AI psychosis, and why I write specs in YAML

The article explores the transition from 'vibe-coding' to spec-driven development, introducing a structured approach using YAML to manage AI-generated code quality and overcome the limitations of context windows.
Documentation Index
Fetch the complete documentation index at the official repository. Use this file to discover all available pages before exploring further.
Does this look familiar?
Wow. Claude. Mind-blowing. The whole feature works great. But I forgot to mention one very important edge case.
Ah, and I just noticed. You used offset pagination for the table UI. Obviously cursor pagination is a better fit here?
Also, is that an N+1 query? Fetching for every row in the table? Why not do a single round-trip? You’re absolutely right! Let me fix that.
This is why I still have a job, right? You’re absolutely right! Let me fix that.
…
Peak Slop
I’ve watched this scene play out many times, but the frequency is decreasing. Both my tools, and my methods for using them, continue to improve. I think Peak Slop has already come and gone. The sky is not the limit. The context window is the limit. And what happens when I fill the context window? Or kill a session? Switch machines? Hand off the project to someone else? We already know what happens. The agent goes off the rails, or requirements get lost, and critically important detail gets squashed. So we adapt and mitigate. We document. We list requirements. Yes, millions of us are coming to the same realization: we should put more requirements in writing. We should update those requirements when they change. Look! I wrote a spec! Am I doing spec-driven development?
Specifying the plane while we fly it
What’s your favorite flavor of spec? A README.md and AGENTS.md is a good start. Don’t forget a testing-guide.md. Maybe an architecture.md, a PRD.md, and a design doc too. Have you considered md.md (to teach your agents how to write .md)? The more .md the better, right?
Unironically, yes. Docs and unstructured specs can get you very, very far. Much farther than prompts alone. If you aren’t writing any docs yet, you should just stop reading this and start there. And remember, slop in, slop out. Nothing beats an organic, pasture-raised, hand-written spec. Spec-writing is where the act of software engineering really happens. So a few weeks ago, I started asking myself, how far can I take this? How far should I take this?
Dreaming in markdown
As the story goes, I fell into an AI psychosis, I became a “spec maxxi”, and I spent hours and hours writing the most beautiful PRDs and TRDs you’ve ever seen. I drafted templates and skills and roles, thinking that maybe my agents can write specs too! I assembled an army, working together like a mini dark factory, to turn my specs into reality. My tasks grew more ambitious, and at one point I broke the vibe-coding sound barrier: an agent that ran for 1.5 hours unsupervised! Exciting. But what did that army ship for me? Well, it wasn’t slop, in fact it worked, which is more than I can say about the garbage that other companies force me to use every day. But it was still a bit sloppy. I’m far from a perfectionist and I love cutting corners more than most, but this somehow wasn’t good enough. One hallmark symptom of AI psychosis is using AI to build AI harnesses for building products, rather than just using AI to build the damn product. I embraced my illness, threw out the branch, scrapped all my markdown, and started all over again.
Acceptance Criteria for AI (ACAI)
A few days later, I noticed an ambitious little sub-agent doing something unexpected. The little guy just went and numbered my requirements and then referenced them all over my codebase. Why? I did not ask for this! I was disgusted. This is a tight coupling of code to spec, and spec to code, which is bad right? You really expect me to refactor all my code every time I change my spec? Oh. I suppose that’s a good thing? Interesting. I wonder…
- Perhaps these tags can help me navigate these massive PRs?
- Perhaps they can point me to where, exactly, a requirement is satisfied or tested!
- Perhaps I can annotate them with notes and states (todo, assigned, completed)!
- Perhaps I can start tracking acceptance coverage instead of test coverage!
ACIDs (Acceptance Criteria IDs). But a few questions remained. Can my ACIDs number and label themselves? Is it cumbersome to keep them aligned? How do I share specs and progress across sandboxes, branches, features and implementations?
Acai.sh - an open-source toolkit
I built Acai.sh to solve some of these newly invented problems. And I’m very excited about the results.
- A simple and flexible template for feature specs, called
feature.yaml. Feature.yaml makes it possible to reference each requirement by ACID. - Tiny CLI to power your CI and your agent.
- Webapp that serves a dashboard, and a JSON REST API.
How it works
Step 1 - Specify
Start by writing a spec for a feature. Be ambitious— something that adds real value. Don’t put nitpicky UI and nail polish stuff in your specs. Keep the requirements concrete, testable, and focused on what really matters (functional behavior + critical constraints). Rather than markdown, use acai’s feature.yaml format instead.
Step 2 - Ship
Use the structured prompt to guide the AI implementation.
Step 3 - Review
No more file-by-file GitHub PR reviews. Use the Acai.sh dashboard to review requirements instead.
Step 4 - Iterate / repeat
The goal is to work spec-first. Change the spec itself, or use the dashboard to attach notes to the spec. With the right harness, you can get your agents to react and self-assign.
Future Gazing
Even coming out my LLM psychosis, I’m still finding this approach useful and productive. I believe I’ve found the sweet spot between rigour and vibes, structure and flexibility. Maintaining an itemized list of acceptance criteria encourages me to step back and focus on the things that matter, and to rethink how I test and validate my output.
-> From Specsmaxxing to Testmaxxing
When code is generated faster than you can read it, the bottleneck moves to QA and validation and your confidence that the code is to-spec. So investing heavily in QA becomes the next logical step.
Source: Hacker News

















