Common Skill Setup
Mirrored from
iblai/vibeΒ·docs/skill-setup.md. This page is generated β edit it in the repository, not here.
Shared setup, conventions, and pre-flight checks referenced by ibl.ai skills. Each skill links here instead of repeating this boilerplate.
Pre-flight (every skill)
If iblai.env does not record ARCHITECTURE= (and PROJECT=, ACCESS=,
DOMAIN_FOCUS=), stop and run /iblai-vibe-start β four questions that
decide new/existing, single-org / multi-org / headless, who signs in, and
what the app is about. Then continue. This is the same in Claude Code,
OpenAI Codex, Cursor, and OpenCode: the answers live in the project, not in
the agent.
Conventions
- Do NOT add custom styles, colors, or CSS overrides to ibl.ai SDK components. They ship with their own styling. Keep components as-is.
- Do NOT implement dark mode unless the user explicitly asks for it.
- Use
pnpmas the default package manager. Fall back tonpmifpnpmis not installed. - The generated app should live in the current directory, not in a subdirectory.
- Project names MUST be all lowercase β npm rejects package names with
capital letters. Convert names like
MyApptomy-appbefore passing tocreate-next-appor--app-name. Allowed characters: lowercase letters, digits,-,_. - When building a navbar or header, do NOT display the platform/organization name. Use the ibl.ai logo instead.
Brand
When building custom UI around SDK components, use the ibl.ai brand:
- Primary:
#0058cc - Gradient:
linear-gradient(135deg, #00b0ef, #0058cc) - Button:
bg-gradient-to-r from-[#2563EB] to-[#93C5FD] text-white - Font: System sans-serif stack
- Style: shadcn/ui new-york variant
Follow the component hierarchy: use ibl.ai SDK components
(@iblai/iblai-js) first, then shadcn/ui for everything else
(npx shadcn@latest add <component>). Do NOT write custom components
when an ibl.ai or shadcn equivalent exists. Both share the same Tailwind
theme and render in ibl.ai brand colors automatically.
Full brand guidelines: BRAND.md.
Environment files
iblai.envis NOT a.env.localreplacement β it holds the platform shorthand (DOMAIN,PLATFORM,TOKEN, optionalIBLAI_USERNAMEfor deploys β theIBLAI_USERNAMEenvironment variable wins when the host exports it) plus theAUTH_*branding values. Next.js still reads its runtime env vars from.env.local.DOMAINis the single host knob: every platform API base is composed from it ashttps://api.$DOMAIN/dm(defaultiblai.app). Inside the ibl.ai desktop app the session guidance states the base domain β write that value. The sign-in (auth SPA) host is the one exception: it is not derivable from the domain, so use it only when the guidance or the user supplies it.- The skills read
iblai.envand derive theNEXT_PUBLIC_*values into.env.local. vibe-starter apps need only the organization key andIBLAI_API_KEYβ URL defaults live inlib/iblai/config.ts.
Two skill families, one set of credentials
iblai-vibe-* skills (kind ui/ops) read iblai.env (DOMAIN,
PLATFORM, TOKEN, IBLAI_USERNAME) and, for Next.js, .env.local.
iblai-api-* skills (kind api, headless) read .env (IBLAI_ORG,
IBLAI_USERNAME, IBLAI_API_KEY). Same three values, family-specific names:
IBLAI_ORG = PLATFORM; IBLAI_API_KEY = TOKEN. /iblai-api-login writes
both files; the loader snippet in
docs/api-skills.md
reads either. Kinds are explained in
docs/skill-kinds.md.
Step 1: Check Environment
Check for an iblai.env in the project root. Look for PLATFORM,
DOMAIN, and TOKEN variables. If the file does not exist or is missing
these variables, tell the user:
"You need an
iblai.envwith your platform configuration. Download the template and fill in your values:curl -o iblai.env https://raw.githubusercontent.com/iblai/vibe/refs/heads/main/iblai.env"
Where the values come from: the org key (PLATFORM) is listed on
https://login.iblai.app/me (no account yet: https://ibl.ai/join); the
Platform API Token (TOKEN) is minted from that signed-in session by
/iblai-api-login (npx skills add iblai/vibe --all), or an org secret works
directly. Make sure iblai.env is gitignored before writing a token into it.
Do NOT ask the user for their platform key directly β guide them to
populate iblai.env instead.
Verification
You MUST run /iblai-vibe-ops-test before telling the user the work is ready:
pnpm buildβ must pass with zero errors.pnpm testβ vitest must pass.- Start a dev server and touch test the route with Playwright:
pnpm dev &
npx playwright screenshot http://localhost:3000/<route> /tmp/<screenshot>.png
After all work is complete, start a dev server (pnpm dev) so the user
can see the result at http://localhost:3000.