We Don't Reject AI. We Use It Like Surgeons.

We write production code with Claude Code every day. We've written up how that works, down to how we structure the prompts. We also get hired to take over codebases that AI agents wrote with nobody steering. One we can talk about is Oria, an oral history platform that now runs with 12 partner institutions.
That isn't a contradiction. The tool is the same in both stories. What differs is who makes the decisions the tool can't take back.
A power tool in the wrong hands
A surgeon's saw and a hardware-store saw cut the same way. What makes one of them surgery is everything around the cut: a plan made beforehand, and a person who knows what not to touch.
Vibe coding is the saw without the surgeon. The model writes the code and the founder commits it without reading the diff. That holds up for a demo. It stops holding up the day a second organization signs up, or a customer sends over a security questionnaire.
Where we draw the line
Kent Beck calls the alternative augmented coding. You still use the agent for most of the typing, but you care about the code, its complexity, the tests and their coverage.
We put the line in one place. A human owns every decision that's expensive to reverse or that touches trust: the schema, authorization, money and what reaches production. Everything else is fair game.
What we hand the agent
- Boilerplate. CRUD endpoints, form wiring, API clients, types that mirror the schema.
- Test scaffolding. We write the assertions that say what should happen. The agent writes the setup around them.
- Refactors under green tests. The agent moves code around. The tests tell us whether it broke something.
- First drafts of docs and changelogs. The agent drafts, we edit.
What the agent never does alone
- Migrations. A human reads every line, and the migration runs against a copy of production data before it runs anywhere real.
- Auth and permission code. Read top to bottom by someone who could explain every branch.
- Anything that moves money, including every call to Stripe or any other API that bills the client.
- Production deploys. The agent can open the pull request. A human merges it.
- Security headers and CORS. Agents write config here that looks right and quietly allows far more than it should.
Check your own AI workflow
List what your team hands to the agent today. ChatGPT will sort each item into agent work or human-owned work and name the review step it's missing.
“|”
The rule we hold ourselves to
If we can't say what a piece of code does without reading it again, it doesn't merge.
That sounds slow. It is slower than letting the agent run, and that's the point. A model writes code faster than anyone can read it, and reading is the only step that catches a wrong assumption. So when review can't keep up with generation, we slow the agent down. We don't start skimming.
In practice it looks like this: a short spec before any prompt, prompts fenced to the files they may touch, a commit before anything that edits more than one file, and a human pass on the cases the model never sees, like the error states and the second user. I'd rather ship one feature that works than five that demo well.
What this means when we take over an AI-built codebase
We don't throw the AI's work away. We filter it. Code we can read and trust stays. Code we can't gets rewritten.
In AI-built products the split tends to fall the same way: the screens and flows survive, the foundation doesn't. That's how it went at Oria. The institution platform had been built fast with AI coding agents, and institutions liked what it did. Underneath, authorization was broken, organizations could see each other's data, uploads and transcription failed, and there was no deploy process. We rebuilt the foundation so the product on top could keep doing what institutions were paying for. The full write-up has the details.
Want to know what survives in your codebase?
We sort AI-built codebases into keep, fix and replace, then do the work at a flat price. Rescue audit and plan from $500: a written audit in 48 hours and a flat-price plan for the fix. Send your email and we'll set up a 30-minute call within 24 hours.
Five questions for your own team
Two "no" or "not sure" answers mean the agent is making decisions nobody signed off on.
- Does a human read every migration before it runs in production?
- Could someone on the team explain every branch of your authorization code without opening it?
- Is there a test for the path where money moves, with assertions a person wrote?
- Does anything reach production without a human merging it?
- When the agent adds a dependency, does anyone ask why?
Related reading
- Burning tokens is not shipping: why token usage is the wrong way to measure AI-assisted engineering
- How we use Claude Code in production: the daily workflow behind the rule above
- We inherited an AI-generated codebase. Here is what we found: the Oria rebuild in full
How we build with AI for clients: AI-Native Development. Cleaning up after it: Vibe Code Rescue, or the page for Claude Code projects.
Enjoyed this article? Share it with others
Related Posts

The 30-Minute Vibe-Coded App Audit: Run It Yourself First
Twenty-five yes-or-no questions about your repo, logins, data, payments, secrets and error tracking. Most need a dashboard, not a terminal. Thirty minutes and one score tell you whether you need help.

What a $500 Code Audit Report Looks Like (Sample Inside)
Before you pay $500 for an audit, you should see what comes back. Here's a sample built from a real AI-built codebase, details changed: six findings with severity, a keep, fix or replace verdict for each, and a plan with one fixed price per phase.

Anatomy of a Vibe-Coded SaaS: Eleven Things You Can Grep For Before Lunch
You don't need to read every file of a vibe-coded SaaS to know how it was built. Eleven greps, about thirty minutes: six show how the project was run, five find damage that breaks production or leaks data. Commands included.