Install
openclaw skills install vibe-codeDiscipline skill for vibe-driven development — turns mood, feel, and outcome-shaped requests into shippable code without the usual drift, hallucinated APIs, and silent scope creep. Use when a collaborator describes software by feel rather than spec ("make it feel snappy", "vibe-code a dashboard", "like Linear but cozy", "build me something that does X, you figure out the rest"), when a prototype is being built from a vibe instead of a ticket, or when the request mixes aesthetic intent with vague behavior. Enforces a four-line Vibe Lock before any code is generated, names the specific failure modes of vibe coding, and gives concrete patterns for translating a vibe into a runnable slice. Keywords: vibe coding, vibe code, build me, make it feel, aesthetic, mood, taste, prototype, scaffold from idea, natural-language to code, intent-driven, ambient spec, Karpathy.
openclaw skills install vibe-codeA standalone discipline for vibe-driven coding. The job is not to refuse a vibey request — it is to keep one from collapsing into hallucinated APIs, taste drift, and undocumented surface area on the way to running code.
If the request is already a concrete, well-typed spec, do not load this skill. Defer to the default agent.
A frontier model, handed a vibe, will run straight to a 500-line file and silently rewrite the goal three times on the way. This skill exists to stop that. It adds four things the base model does not do by default:
Before any code is written, produce this exact block and wait for confirmation:
Vibe Lock
---------
Feel: <one adjective phrase — "calm, dense, keyboard-first">
Outcome: <one user-visible result — "log a habit in <1s without a mouse">
Out of scope: <one explicit exclusion — "no auth, no cloud sync">
Stack: <chosen stack OR "TBD — recommend?">
Rules:
Feel is taste, not behavior. "Fast" is not a feel; "calm and dense" is. If Feel contains a verb, it belongs in Outcome.Out of scope is mandatory. Vibe coding without an explicit exclusion expands forever.Stack: TBD is acceptable. Recommend one option with a one-line reason. Do not list five.If the collaborator says "just build it, stop asking", produce the Vibe Lock anyway as a single block, label the top line # assumed — say "wrong" to correct, and proceed. The lock still exists; it is just provisional.
Collaborator says:
"vibe-code me a little habit tracker, cozy, keyboard-only, local-first, you pick the stack"
Respond with the lock first:
Vibe Lock
---------
Feel: cozy, low-contrast, keyboard-only
Outcome: log or undo a habit in <1s with a single keystroke
Out of scope: accounts, sync, mobile, analytics
Stack: TBD — recommend Vite + React + TypeScript + localStorage (single-file UI, zero backend)
Wait for "lock it". Only then write the first runnable slice — one file, one keystroke handler, persistence to localStorage, no styling beyond what Feel demands. Stop. Confirm the slice matches Feel before adding anything.
Collaborator pastes:
// start-shorthand
()=> grab habits from storage, default []
()=> render each as a row, today's row glows
()=> press space = toggle today, press z = undo last
// end-shorthand
Translate against the locked stack, not against the syntax of the shorthand. The ()=> lines are intent, not JavaScript arrow functions — remove them. The output must match Feel: if the locked feel is "cozy, low-contrast", "today's row glows" is a soft warm tint, not a saturated highlight.
Collaborator says: "make it feel like Raycast but for git branches".
Translate the comparison into the lock before any code:
Vibe Lock
---------
Feel: fast modal palette, monospace, dark, single-purpose
Outcome: fuzzy-pick a branch and checkout in <300ms
Out of scope: branch creation, remote ops, multi-repo
Stack: TBD — recommend a single Go binary using bubbletea (static binary, instant startup)
The comparison ("like Raycast") is a Feel input, not a feature list. Never copy a real product's behavior wholesale — extract the vibe, re-derive the features from Outcome.
After the lock is confirmed, ship exactly one runnable slice before adding anything else.
Outcome works end-to-end with a real keystroke, click, or command — not a stub, not a test, not a mock.Outcome is "log a habit in <1s", the slice is the keystroke handler plus persistence. Not the settings page. Not the streak counter. Not the export feature.Feel, fix that before adding feature two.This rhythm is the entire reason vibe coding works as a methodology rather than as a way to generate plausible-looking junk.
bubbletea, ink, textual, ratatui. Hallucinated dependencies are the number-one vibe-coding failure.Feel is not a feature. If Feel contains a verb ("logs habits fast"), it belongs in Outcome. Rewrite before locking.Out of scope is non-negotiable. When the collaborator later asks for an excluded item, return to the lock and amend it explicitly. Do not silently expand scope.Outcome.jane.doe@example.com, Acme Corp, 123 Main St. Vibe coding pulls real names from prompt context constantly; strip them before committing.Feel carries the weight; build logic first when Outcome carries the weight.| Symptom | Fix |
|---|---|
| Output drifted from the stated feel | Re-read the lock; diff it against the output line by line; rewrite the deltas, do not patch |
| Generated code references a package that may not exist | Stop. Replace with a package you can name with confidence, or ask the collaborator to confirm |
| Collaborator keeps adding features mid-build | Pause, amend Out of scope in the lock, re-confirm before continuing |
| The UI looks calm but the code feels loud (or vice versa) | One side ignored the lock. Re-derive that side from the lock verbatim |
| Docs contain a real name or email from the prompt | Replace with placeholder data — jane.doe@example.com, Acme Corp — and regenerate the affected sections |
| The first slice grew to four features before running | Throw it out. Start the slice over with one feature only. This is faster than untangling it |
Vibe-code is standalone. The following skills, when present, pair well with it but are not required:
Feel()=> notation, mixed-language fragments, or pseudo-code at scaleWhen those exist, hand off the matching work after the lock is confirmed. When they do not, the patterns in this skill are sufficient on their own.