The Problem
You're vibe coding. AI writes code fast. Everything feels great — until you look at the repo a week later.
What goes wrong
AI coding agents are trained to look comprehensive, not minimal. Without guardrails, your repo turns into:
- Abstract base classes for one implementation
utils/folders that grow forever with unrelated helpers- Features you never asked for — rate limiters, analytics, retry policies
- Drive-by refactors in files you didn't mention
- Code that was never run — plausible but broken
Real example
You ask: "Add email notification when a user signs up."
AI delivers:
BaseNotificationHandlerabstract classEmailNotificationHandler,WebhookNotificationHandlerutils/notification_helpers.pywith 12 functions- Rate limiter, retry policy, analytics tracking
- Config file for notification providers
You wanted: a function that sends an email.
Why prompts don't fix it
You can say "keep it simple" in every message. It helps for one task. Then:
- A new chat session forgets
- A different agent tool ignores it
- The model defaults back to "comprehensive" on the next task
- You get tired of repeating yourself
Prompts are suggestions. Guardrails are enforcement.
What you actually need
Two things working together:
- Behavioral rules — files the agent reads every session (
AGENTS.md, rules, skills) - Mechanical gates — tools that catch bloat before it merges (linters, pre-commit, CI)
Think of it like a speed bump vs a wall. Prompts are asking nicely. Guardrails are infrastructure.
Who this is for
- Vibe coders: you ship fast with AI and don't want to babysit every line
- Solo devs: no code review team to catch AI slop
- Anyone who's opened a PR and thought "I didn't ask for half of this"
Next step
Learn the three-layer system that fixes this.