The division of labor
The word "vibe coding" suggests chaos. My version is the opposite: a strict split of responsibilities that never changes.
Always mine: architecture and key decisions, technology choices, business logic, security, reading every diff before it's committed, and pushing to remote. Always the agent's: boilerplate, refactoring, tests (I describe the scenarios), first drafts of documentation, CI/CD configs, and styling.
Guardrails, not trust
An agent can change 20-30 files in one session, and it will sometimes confidently break working code. So the system assumes failure:
git push,git reset --hardandrm -rfare blocked for the agent at the permissions level. Pushing is always a deliberate human act.- Every logical block is a separate commit (Conventional Commits), so I can read exactly what the agent changed - and roll it back.
- CI runs lint, type-check and build on every push; deploys end with an automated smoke test.
Context is the real work
Output quality is set by context quality, not by model choice. Even with million-token windows, models lose focus - more context is not better context.
My setup is a hierarchy: global coding standards and a planning protocol at the machine level, then a per-project entry file under 200 lines (compliance drops sharply past that), then modular per-topic rules, plans, and custom commands. For specialized work I route tasks to purpose-built subagents - a backend architect, a code reviewer, a security auditor - each with its own expert prompt.
ADRs: the secret weapon
The single highest-leverage habit: Architecture Decision Records. My most mature project has 40 of them across 141 commits - context, options considered, the decision, and crucially the rejected alternatives. That last section is what stops an agent from re-proposing ideas that were already rejected for good reasons three weeks ago.
What I deliberately keep out of AI-facing docs: style rules (linters do that), volatile file paths, anything derivable from the code, and secrets.
What the agent is actually good at
From shipping three production projects with this system: TypeScript, React and Tailwind are where agents are strongest - huge training base, few hallucinations. Python with FastAPI and typed schemas is excellent, because the contracts are machine-readable. Vue is noticeably weaker than React; fresh frameworks get their APIs hallucinated unless you feed the docs; complex SQL and raw CSS still need more human iterations.
Takeaways
- Git is non-negotiable. AI development without version control is Russian roulette.
- Context beats prompting. An hour invested in documentation saves ten hours of agent work.
- Never use the agent for work you couldn't review yourself. The code got cheap; knowing what "correct" means didn't. That part is still the job.