Vibe Coding: A Practical Guide
The term “vibe coding” has taken the software development world by storm. It represents a paradigm shift in how applications are built, leveraging advanced AI models to generate code based on natural language descriptions.
What Is Vibe Coding?
Vibe coding is coding without actually coding. You describe what you want in plain English. An AI builds it. You accept the result without reading every line. That’s it.
The term comes from Andrej Karpathy, former OpenAI co-founder and Tesla’s AI director. In February 2025, he defined it perfectly: “There’s a new kind of coding I call ‘vibe coding’, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists.”
The tweet went viral. Within weeks, it entered Merriam-Webster as a trending term. Collins Dictionary named it Word of the Year. Y Combinator reported that 25% of startups in their Winter 2025 batch had codebases that were 95% AI-generated.
This isn’t hype. It’s a fundamental shift in how software gets made.
How It Actually Works
The workflow is deceptively simple. Describe your goal. Let the AI generate code. Run it. Provide feedback. Repeat.
Karpathy’s description captures the vibe: “I just see stuff, say stuff, run stuff, and copy-paste stuff, and it mostly works. I ‘Accept All’ always, I don’t read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it.”
No documentation. No line-by-line debugging. No memorising syntax. You’re having a conversation with an AI that translates intent into working code.
This stands in stark contrast to traditional development. You’re not writing code—you’re directing it.
The Tools That Make It Possible
Claude Code (My Personal Favourite)
Claude Code is Anthropic’s command-line tool for agentic coding. It’s intentionally low-level and unopinionated, providing close to raw model access without forcing specific workflows.
What makes it stand out is flexibility. You customise it with CLAUDE.md files that document your project’s conventions, common commands, and coding style. Claude reads these automatically and follows your preferences. You can place these files in your repo root, parent directories, or even your home folder for global application.
The tool also supports MCP (Model Context Protocol), which gives Claude direct access to your filesystem and development environment. No more copy-paste friction. Claude reads your codebase, makes changes directly, and verifies its own work.
Other Notable Tools
- Cursor: Popular IDE with built-in AI assistance. Karpathy’s original tweet referenced Cursor Composer.
- GitHub Copilot: Microsoft’s code completion tool, now with chat and agent capabilities.
- Replit: Browser-based development environment with AI agents.
- Lovable: Dedicated vibe coding platform for non-programmers.
Best Practices from Anthropic’s Engineering Team
Anthropic has published detailed guidance on getting the most out of Claude Code. These practices apply broadly to any vibe coding workflow.
Customise Your Setup
Create a CLAUDE.md file in your project root. Document your bash commands, core files, code style guidelines, testing instructions, and repository etiquette. Keep it concise and human-readable.
Example:
# Bash commands
- npm run build: Build the project
- npm run typecheck: Run the typechecker
# Code style
- Use ES modules (import/export) syntax, not CommonJS (require)
- Destructure imports when possible
# Workflow
- Be sure to typecheck when you're done making changes
- Prefer running single tests, not the whole suite
This isn’t optional setup. It’s the difference between vague AI guesses and precise, project-aware assistance.
Explore, Plan, Code, Commit
This workflow suits most problems:
- Explore: Ask Claude to read relevant files. Tell it not to write code yet. Use subagents for complex investigations.
- Plan: Ask Claude to make a plan. Use the word “think” to trigger extended thinking mode. “Think hard” and “ultrathink” allocate progressively more reasoning budget.
- Code: Ask Claude to implement the solution. Have it verify reasonableness as it goes.
- Commit: Ask Claude to commit and create a pull request.
Steps 1 and 2 are crucial. Without them, Claude jumps straight to coding. Research and planning first dramatically improves results for complex problems.
Use Test-Driven Development
This is where vibe coding gets powerful. Write tests first, then let the AI implement code that passes them.
- Ask Claude to write tests based on expected input/output pairs. Be explicit that you’re doing TDD.
- Tell Claude to run the tests and confirm they fail. No implementation yet.
- Commit the tests.
- Ask Claude to write code that passes the tests. Tell it not to modify the tests.
- Commit when satisfied.
Claude performs best with a clear target. Tests provide that target. The AI can make changes, evaluate results, and iterate until it succeeds.
Be Specific in Your Instructions
Vague prompts produce vague results. Specificity leads to better alignment.
| Poor | Good |
|---|---|
| ”add tests for foo.py" | "write a new test case for foo.py, covering the edge case where the user is logged out, avoid mocks" |
| "why does ExecutionFactory have such a weird api?" | "look through ExecutionFactory’s git history and summarize how its api came to be" |
| "add a calendar widget" | "look at how existing widgets are implemented on the home page. HotDogWidget.php is a good example. follow that pattern to implement a calendar widget that lets users select a month and paginate. build from scratch, no new libraries.” |
The difference isn’t subtle. Specific instructions reduce course corrections and produce better first attempts.
Course Correct Early and Often
Don’t let Claude run wild. Stay engaged.
- Ask for a plan first: Explicitly tell it not to code until you’ve confirmed the approach.
- Press Escape to interrupt: Stop Claude during any phase. Context is preserved so you can redirect.
- Double-tap Escape to go back: Edit a previous prompt and explore different directions.
- Ask Claude to undo changes: Then take a different approach.
Active collaboration beats passive acceptance. Every time.
Use clear Frequently
Long sessions fill Claude’s context with irrelevant conversation and old file contents. This degrades performance. Reset between tasks with /clear to keep context focused.
Use Checklists for Complex Work
For large tasks—code migrations, fixing dozens of lint errors, complex build scripts—have Claude use a markdown file as a checklist:
- Tell Claude to run the lint command and write all errors to a markdown checklist.
- Instruct Claude to address each issue one by one, checking them off as it goes.
This prevents Claude from losing track mid-task.
Vibe Coding Is Not Everything
Here’s the uncomfortable truth: vibe coding works brilliantly for some things and fails catastrophically for others. Understanding the difference is non-negotiable.
You Still Need to Know What to Build
AI translates intent into code. It cannot tell you what problems are worth solving.
Product sense. User empathy. Strategic thinking. These remain entirely human skills. No amount of vibe coding will save a bad idea. The startup graveyard is full of technically competent products nobody wanted.
Faster code generation just means you’ll build the wrong thing faster.
You Still Need to Know How to Build
Simon Willison draws a crucial distinction: “If an LLM wrote every line of your code, but you’ve reviewed, tested, and understood it all, that’s not vibe coding in my book—that’s using an LLM as a typing assistant.”
Professional software development isn’t just churning out code. It’s creating systems that demonstrably work, can be understood by others, and will support continued development. Security, performance, maintainability—these require human judgment.
Even Karpathy doesn’t use vibe coding for everything. His latest project, Nanochat, was hand-written. Why? “I tried to use Claude/Codex agents a few times but they just didn’t work well enough at all.”
The inventor of vibe coding admits it doesn’t always work.
The Security Problem Is Real
AI-generated code can contain bugs and vulnerabilities you never see. In May 2025, Lovable had security issues in 170 out of 1,645 applications—exposing personal information.
One security researcher’s warning: “Not only will we have masses of broken code, full of security vulnerabilities, but we’ll have a new generation of programmers incapable of dealing with those vulnerabilities.”
This isn’t theoretical risk. It’s happening now.
When Vibe Coding Makes Sense
Vibe coding excels in specific contexts:
- Prototypes and MVPs: When you need to test an idea quickly, perfect code doesn’t matter.
- “Software for one”: Personal tools and automation scripts you’ll use yourself.
- Learning new technologies: Exploring unfamiliar languages and frameworks with AI guidance.
- Boilerplate generation: Scaffolding, configuration files, repetitive patterns.
- Codebase exploration: Understanding unfamiliar projects by asking questions.
For these use cases, vibe coding is a superpower.
When to Be Cautious
Think twice before pure vibe coding in these situations:
- Production systems: Code that handles real users, real data, real money.
- Security-sensitive applications: Authentication, payments, personal data.
- Complex business logic: Edge cases and regulatory requirements need human attention.
- Team codebases: Code others will maintain needs to be understandable.
- Performance-critical paths: AI-generated code may not be optimised for your constraints.
The risk isn’t that the code won’t work. It’s that it’ll work until it doesn’t—at the worst possible moment.
The Bottom Line
Vibe coding is a powerful tool, not a replacement for skill. It democratises software creation for non-programmers. It accelerates development for experienced engineers. But it works best when paired with human judgment about what to build, how to architect systems, and when to step in and take control.
Think of it like GPS navigation. It gets you where you’re going faster. But you still need to know your destination. And sometimes, you need to recognise when it’s sending you off a cliff.
The developers who will thrive aren’t those who blindly accept AI output or those who reject it entirely. They’re the ones who learn when to vibe and when to verify.
Further Reading
- Anthropic: Claude Code Best Practices
- Matt Geiger: A Practical Guide to Vibe Coding with Claude and MCP Tools
- Simon Willison: Not All AI-Assisted Programming Is Vibe Coding
- Wikipedia: Vibe Coding
How we can help
At LiberateWeb, we specialise in helping businesses harness the power of vibe coding to accelerate their development processes. Whether you’re looking to implement vibe coding in your existing projects or need guidance on best practices, our team of experts is here to assist you. Contact us today to learn how we can help you embrace the future of software development.