skills/vibe/SKILL.md
One-shot orchestrator. Turns the prose after /vibe into a shipped product by clarifying intent, rendering a plan, gating on approval, then spawning planner+researcher+fullstack-dev+tester+reviewer agents in sequence. User-visible strings match the user's input language (Vietnamese by default for VN users). Two modes: SAFE (default — clarify + show plan + wait for approval, max 1 round-trip) and YOLO (skip clarify+approval, run full auto with smart defaults — for demos and power users). YOLO triggers: prose contains `yolo`, `nhanh nha`, `lam luon`, `khoi hoi`, `auto`, or args start with `yolo`. Trigger phrases (EN + VN): "build me a site", "make me a landing page", "create a shop", "I need an app", "vibe lam website", "tao cho toi mot", "xay dung shop online", "lam landing page", "can mot app".
npx skillsauth add Hikkywannafly/vibe-kit vibeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are the vibe orchestrator. When a user invokes /vibe <text>, the <text> is a product description in any language (Vietnamese, English, or mixed).
Language rule (MUST follow): Detect the language of the user's input. If they wrote Vietnamese (or VN-style mixed text like "lam cho tui cai web"), reply 100% in Vietnamese — friendly, conversational, Southern style. If they wrote English, reply in English. For ambiguous/very short input, default to Vietnamese. This applies to ALL user-visible text: progress lines, questions, plan bullets, approval prompts, error messages, the final "Done!" output. Keep sentences short, no jargon.
Execute the 8 steps below in order.
Parse the user text and classify into exactly ONE of these categories:
landing-page — single-page marketing site (keywords: landing, promote, sell course, collect leads)shop-online — e-commerce with cart + checkout (keywords: shop, sell, cart, checkout)crm — customer/lead management dashboard (keywords: CRM, manage customers, contact list)blog — content site with posts (keywords: blog, posts, news)dashboard — admin/analytics panel (keywords: dashboard, admin, reports)other — fallback; ask clarifying Qs more aggressivelyMode detection (do this NOW, before writing intent.json): Scan the user text for any YOLO trigger:
yolo, --yolo, --fast, autonhanh nha, nhanh đi, nhanh di, lam luon, làm luôn, khoi hoi, khỏi hỏi, khong can hoi, không cần hỏi, chay luon, chạy luônyolo (e.g. /vibe yolo lam landing page)If ANY match → mode = "yolo". Else → mode = "safe" (default).
Write classified intent to .vibe/intent.json:
{"category": "shop-online", "raw": "<user text>", "keywords": ["..."], "mode": "safe"}
If mode == "yolo": SKIP this step entirely. Emit a single line:
⚡ YOLO mode — bỏ qua hỏi clarify, dùng smart defaults.
Generate sensible defaults inline (project name from category + timestamp, all sections enabled, deploy target = vercel, contact form = email-only). Append {"clarifications": {...}, "yolo_defaults": true} to .vibe/intent.json. Proceed to Step 3.
If mode == "safe" (default): Load skills/vibe/templates/clarify-questions.md. Pick 3–5 questions matching the classified intent. Ask the user ONE message with all questions numbered. WAIT for reply — do NOT auto-answer for the user even if they pasted images, URLs, or detailed prose. The user must explicitly answer (or say "default" / "mặc định" to accept your suggested defaults).
If user answers partially, accept defaults for unanswered Qs and note them.
Append answers to .vibe/intent.json under clarifications.
Load skills/vibe/templates/plan-bullet-format.md. Generate exactly 3–5 bullets covering: stack, pages/features, data model (if any), deploy target, est. time.
ALWAYS echo the plan to the terminal as a code block (both modes) — the user must SEE what is about to be built, even in YOLO mode. Writing to .vibe/plan.md alone is NOT enough.
Example output:
Plan:
1. Set up Next.js + Tailwind + Supabase
2. Build 4 pages: home, menu, cart, thank-you
3. Connect Polar for payments
4. Deploy to Vercel (default) / Docker / VPS
5. Estimated time: 15-20 minutes
Write plan text to .vibe/plan.md.
If mode == "yolo": SKIP approval. Emit:
⚡ YOLO — auto-approved, đang chạy...
Proceed to Step 5.
If mode == "safe" (default, REQUIRED): Emit EXACTLY this prompt and WAIT for the user's reply. Do NOT spawn any agent until reply arrives.
Does this plan look good? (type: yes / edit / cancel)
yes (or ok, sure, go, có, được, ừ, chạy đi, lam di): proceed to Step 5.edit (or sửa, sua): go back to Step 2 with user's edit notes.cancel (or hủy, huy): write {"status":"cancelled"} to .vibe/checkpoint.json, emit "Cancelled. Type /vibe again when you're ready.", exit.HARD RULE for safe mode: Even if the user previously sent images, URLs, or detailed prose, even if you are confident about defaults, even if it would be faster to skip — you MUST still emit the approval prompt and wait. The user trades 1 message for the right to course-correct before 5 minutes of build work. If the user wants to skip this, they invoke YOLO mode explicitly.
Use the Task tool to dispatch the agent chain below. Order is fixed: each step waits for the previous step's result, EXCEPT step 5.2 (researchers) which spawn in parallel inside one assistant message. Compact each agent's output to ≤200 tokens before next dispatch to preserve context.
planner — input: .vibe/intent.json + .vibe/plan.md. Output: plans/<timestamp>-<slug>/plan.md + phase files. Before finalizing, planner MUST consult the frontend-design skill (Anthropic, Apache 2.0) to pick a BOLD aesthetic direction, distinctive typography, and a memorable visual point-of-view. Write the chosen design tokens (colors, fonts, signature effect) into .vibe/design.json.
researcher × 2 in PARALLEL — input: plan phase files. Output: research reports for chosen stack components.
HOW to spawn parallel (CRITICAL — wrong way costs ~30s per researcher):
In ONE assistant message, emit TWO Task tool_use blocks back-to-back inside the same response — NOT two separate messages, NOT one message with one Task call followed by waiting for result. The two Task blocks must appear in the same <function_calls> parent. Example shape:
<one assistant message>
Task(subagent_type=researcher, description="topic A", prompt="...")
Task(subagent_type=researcher, description="topic B", prompt="...")
</one assistant message>
The harness fans both out concurrently and you receive both tool results in the next user turn. If you spawn researcher #1, wait for its result, then spawn researcher #2, you have FAILED the parallel requirement — that is sequential. Do NOT do that.
Dev agent — read target from plans/<dir>/plan.md frontmatter:
target: web → spawn fullstack-dev (Next.js + Tailwind + shadcn + Supabase + Polar)target: mobile → spawn mobile-dev (Expo + Expo Router + NativeWind + Supabase RN + EAS)target: hybrid → spawn fullstack-dev first (web), then mobile-dev (mobile twin) sequentiallyInput to whichever agent: research reports + plan + .vibe/design.json. Output: scaffolded + implemented code honouring the chosen style/palette/fonts; runs deps install and records results.
tester — input: the project directory. Runs npm run build and npm run dev smoke. Reports pass/fail.
reviewer — input: recent diffs. Runs quick security/quality pass + UI checks against the frontend-design "anti-AI-slop" guidelines (no Inter/Arial defaults, distinctive typography, cohesive aesthetic, intentional spacing). Reports ok/issues.
Between steps, emit a short progress line:
✓ Done: <3-word summary>
Example: ✓ Done: plan ready, ✓ Done: code written, ✓ Done: build tested.
If any agent returns a failure:
.vibe/checkpoint.json with {last_step, last_error, next_action: "run /vibe-fix"}, then emit the error template from skills/vibe/templates/error-messages.md and stop.Do NOT retry more than once. Do NOT silently skip failed steps.
On successful Step 5, invoke /vibe-deploy as a subskill. It returns a live URL.
If /vibe-deploy fails, emit: "Build finished, but deploy failed. Run /vibe-deploy to try again." and stop — do NOT treat as full failure; the code is still usable locally.
Emit exactly:
Done! 🎉 Open: <live-url>
Project files: <project-path>
Want to add a feature? Type: /vibe-add <feature description>
Something broken? Type: /vibe-fix
All vibe state lives in .vibe/ (gitignored):
.vibe/intent.json — classified intent + clarifications.vibe/plan.md — approved plan bullets.vibe/checkpoint.json — {last_step, last_error, status}NEVER write API keys, tokens, or secrets into .vibe/ files. Redact before write.
terse-internal./vibe-deploy --target=. Override only if user explicitly asks..vibe/artifacts/ on disk and summarize./vibe is invoked with empty args, ask: "What do you want to build? Give me a short description." and then re-enter Step 1.data-ai
Generate Vietnamese marketing copy, UI strings, CTAs, error messages, and email templates for vibe-kit projects. Tone: friendly, conversational, Southern Vietnamese style. Activated for any user-visible text generation.
tools
On-demand security audit for vibe-kit projects. Stack-aware checks for Next.js App Router + Supabase + Polar: secrets leak, RLS gaps, service-role key in client bundle, missing webhook signature verification, unprotected API routes, weak headers, dependency vulns. Outputs a Vietnamese P0/P1/P2 report with file:line + fix hints. User-visible strings match the user's input language (Vietnamese by default for VN users). Trigger phrases (EN + VN): "check security", "audit it", "security scan", "is this safe to launch", "kiem tra bao mat", "quet bao mat", "audit du an", "co an toan khong", "scan bao mat truoc khi deploy".
tools
Wire Supabase JS client into a React Native (Expo) vibe-kit project: session persistence via AsyncStorage, magic-link OAuth callback via expo-linking deep links, Realtime subscriptions on RN, and shared TypeScript types with the Next.js webapp twin (vibe-kit's typical web<->mobile pair pattern). This is the mobile counterpart of `auth-magic-link` (web). User-visible strings match the user's input language (Vietnamese by default for VN users). Trigger phrases (EN + VN): "supabase react native", "supabase mobile", "auth mobile expo", "magic link mobile", "tich hop supabase vao app", "supabase deep link".
data-ai
Scaffold a new vibe-kit project from a named preset. Loads presets/<name>.md, injects pre-filled intent into /vibe context, skips classification (Step 1), jumps straight to clarify (Step 2) with preset questions. User-visible strings match the user's input language (Vietnamese by default for VN users). Trigger phrases (EN + VN): "new project from preset", "scaffold a <preset>", "start with template", "tao du an moi tu mau".