Vibe coding is the term for building software by describing what you want in plain English and letting an AI write the code. You stay in the loop β directing, testing, evaluating β but you don't write the syntax yourself.
The term was coined by Andrej Karpathy in early 2025. The idea: instead of writing code, you describe intent, review output, describe corrections, and iterate. The "vibe" refers to staying in creative flow β describing what you want next instead of context-switching into implementation details.
It's not magic and it's not hype. It's a real shift in how software gets built, with real limits. This guide explains both.
What vibe coding actually looks like
Here's a real vibe coding session in Claude Code:
You: Build me a web app that lets me paste in a job description and my resume,
and uses the Claude API to generate a tailored cover letter.
Claude Code: [creates index.html, styles.css, server.js, reads your file structure,
installs express and anthropic packages, wires up the API call]
You: The output is too formal. Make the tone more conversational and add a
"Copy to clipboard" button.
Claude Code: [edits the prompt in server.js, adds clipboard button to HTML]
You: The copy button isn't working on Safari.
Claude Code: [diagnoses the Clipboard API issue, adds a fallback using
document.execCommand, tests the fix]
That session produces a working tool. No code was written by the human. Every input was a description of what the next thing should be.
The tools
Cursor
Cursor is an AI-native code editor β VS Code with AI built in. The key modes:
- Composer (
Cmd/Ctrl + I) β describe a feature or file to create; the AI writes and edits files - Chat (
Cmd/Ctrl + L) β ask questions about your code; understands the whole codebase - Inline edit (
Cmd/Ctrl + K) β select a piece of code and describe the change
Best for: visual builders who want to see the code they're generating. If you want to understand what's being built as you go, Cursor is better than working in a terminal.
Claude Code
Claude Code is Anthropic's terminal-based coding agent. It reads your entire project, writes files, runs commands, and iterates.
npm install -g @anthropic-ai/claude-code
claude
Best for: builders who want more autonomous runs. Claude Code can be given a large task ("build the whole authentication flow") and left to work through it.
The underlying model
Both Cursor and Claude Code can use Claude Sonnet or Opus. The model matters β Claude Sonnet 4.6 and Opus 4.8 are significantly better at multi-file edits and catching their own mistakes than earlier versions. Always use the latest available model.
How to vibe code well
1. Start with the whole context
Before asking for anything, give the AI a complete picture:
I'm building a job application tracker. It's a web app where I can add jobs
I've applied to, track their status (applied/interview/offer/rejected),
add notes, and see a dashboard of my pipeline.
Tech: Next.js App Router, Tailwind, SQLite via better-sqlite3.
No authentication needed β it's local only.
This one message replaces dozens of clarifying questions. The more context up front, the fewer corrections after.
2. One feature at a time
Don't say "build the whole app." Break it down:
Step 1: Create the database schema and seed it with 3 example jobs
Step 2: Build the job list page with status badges
Step 3: Add the form to create a new job
Step 4: Add the ability to edit status from the list view
Each step should be completable in one session. Smaller scope = fewer errors = faster iteration.
3. Describe the result, not the implementation
Wrong:
Add a useEffect that fetches from /api/jobs and stores the result in useState
Right:
When the page loads, show the list of jobs from the database.
Show a loading spinner while they load.
The AI knows how to implement it. You should describe what you want the user to experience.
4. Test immediately after each change
Vibe coding produces errors. The loop is:
- Describe what you want
- AI writes/edits code
- Run it in the browser or terminal
- If it works β great, next feature
- If it errors β paste the exact error back: "Got this error: [paste]"
The AI can fix most errors from the error message alone. Don't try to fix them yourself β describe what happened.
5. Be specific about what's wrong
Vague:
It doesn't look right
Specific:
The status badge is overlapping the job title on mobile screens under 375px wide.
The badge should wrap below the title on small screens.
Specific = faster fix. Vague = multiple rounds of guessing.
What you can realistically build
| Build this | Realistic? |
|---|---|
| Landing page or marketing site | Yes β under an hour |
| Internal tool (dashboard, tracker, admin panel) | Yes β a day or two |
| Browser extension | Yes |
| REST API with a database | Yes |
| MVP of a SaaS product | Yes β days to weeks |
| Mobile app | Partial β Expo/React Native works, but more errors |
| Complex real-time systems (chat, multiplayer) | Harder β requires more architectural knowledge |
| Large existing codebase additions | Harder β context limits and interdependencies cause drift |
Where vibe coding breaks
Long sessions drift. After 10+ back-and-forth edits, the AI starts losing track of earlier decisions. The fix: start a fresh session and re-paste the current state of the key files.
Security holes. AI-generated code often skips input validation, SQL injection prevention, and authentication checks unless you explicitly ask. Always review auth and data handling code.
It doesn't know what it doesn't know. If you ask for a payment integration and don't mention Stripe's specific API version, the AI might generate code for a deprecated version. Always mention library versions for integrations.
Large codebases. Cursor and Claude Code work best on projects under ~100 files. Beyond that, context limits mean the AI can't see the whole codebase at once and may generate code that conflicts with existing patterns.
Debugging complex state. If something breaks after 5 layers of change, it can be hard to describe the problem clearly enough for the AI to pinpoint it. Sometimes reading the code yourself is faster.
The skill that matters most
Vibe coding doesn't eliminate the need for judgment β it shifts where you apply it.
The highest-value skill in vibe coding is knowing what to build and breaking it into describable pieces. You need to be able to say clearly:
- What the user should see
- What happens when they click something
- What data is stored and where
- What the edge cases are
If you can describe a feature precisely, an AI can build it. If you can't describe it precisely, the AI will guess β and guess wrong.
The people who get the most out of vibe coding are people who think clearly about product and can describe behaviour exactly. That's a product skill, not a coding skill.
Getting started today
- Install Cursor β free tier is enough to start
- Create a new folder for a small project you actually want
- Open Cursor's Composer (
Cmd/Ctrl + I) - Describe your project in 3-5 sentences including tech stack preferences
- Ask it to build the first screen
Your first vibe coding session will be messy. That's fine. The second one is better. By the fifth you'll have a workflow.
Related guides
- What is Cursor? How to build your first HTML project β set up your vibe coding environment
- What is Claude Code? β terminal-based AI coding
- What is Git? β save and version your vibe-coded projects
- AI Skills registry β pre-built skills for your AI coding workflow