TL;DR - Most developers use AI as fancy autocomplete and get mediocre results. I set up my projects so the agent has everything a real teammate needs - context, a plan, hands, a work queue, a way to verify, and help. That's the difference between AI that suggests and AI that ships production code.
The problem
AI coding tools are powerful, but most devs get underwhelming output and then blame the model. The real issue is that the agent is working blind.
- No context about the codebase
- No clear plan
- No way to run the thing or check its own work
Give a brilliant developer none of those and they'd fail too.
So I stopped thinking about "prompts" and started thinking about the environment I put the agent in.
The system
On disk, the setup looks like this.
my-project/
├── CLAUDE.md # context - how the codebase works
├── .claude/
│ └── commands/ # custom slash commands + hooks
├── specs/ # the plan - one file per feature
├── src/ # the app, running on localhost
└── tests/
└── e2e/ # AI-written Playwright testsSix pieces, each one closing a gap.
- Context -
CLAUDE.md/.claude. A project-root file that tells the agent how the codebase works - conventions, commands, gotchas. Plus custom slash commands and hooks. Set once, every session starts smart instead of re-explaining the project every time. - A plan - specs. I turn the idea into a concise spec before any code. The spec is where the understanding happens; skipping it just converts understanding into technical debt you pay off later.
- Hands - MCPs. MCP servers (Playwright, Linear, GitHub) let the agent actually interact with my tools and my app. It drives the browser and opens PRs instead of writing code and hoping.
- Verification - localhost + e2e. The app runs locally so the agent can execute it and read real behavior, and AI-written end-to-end tests catch regressions. It verifies instead of guessing.
- A work queue - Linear. Tickets (via Linear MCP) give the agent scoped, "agent-ready" tasks. That's the path toward work happening while I sleep.
- Help - subagents. One agent codes; a fleet explores, plans, and builds in parallel. Specialized agents for specialized jobs.
The result
The agent stops being a suggestion box and starts doing real work.
- Shipping features
- Writing tests
- Catching bugs against the running system
I move faster and more stably. Not because the model is magic, but because the system around it removes every reason for it to fail.
The lesson
The tool isn't the leverage. The system around the tool is. A "boring" editor with a great workflow beats the shiniest AI setup with no system, every time.
Stack - Claude Code, MCP (Playwright / Linear / GitHub), Playwright, Linear.