> inquirer
Build interactive CLI prompts with Inquirer.js. Use when creating interactive terminal UIs, multi-step wizards, form-like CLI inputs, or configuration generators with user input.
curl "https://skillshub.wtf/TerminalSkills/skills/inquirer?format=md"Inquirer.js
Overview
Inquirer provides interactive prompts for CLIs — text input, confirmations, lists, checkboxes, passwords, and editors. The v2 API is modular (import only what you use) and supports themes, validation, and transformations.
Instructions
Step 1: Prompts
import { input, select, confirm, checkbox, password } from '@inquirer/prompts'
// Text input with validation
const name = await input({
message: 'Project name:',
validate: (v) => v.length >= 2 || 'Name must be at least 2 characters',
})
// Single select
const framework = await select({
message: 'Choose a framework:',
choices: [
{ name: 'Next.js', value: 'nextjs', description: 'Full-stack React' },
{ name: 'Remix', value: 'remix', description: 'Web standards focused' },
{ name: 'Astro', value: 'astro', description: 'Content-first' },
],
})
// Multi-select
const features = await checkbox({
message: 'Select features:',
choices: [
{ name: 'TypeScript', value: 'typescript', checked: true },
{ name: 'ESLint', value: 'eslint', checked: true },
{ name: 'Tailwind CSS', value: 'tailwind' },
{ name: 'Database (Prisma)', value: 'prisma' },
{ name: 'Auth (NextAuth)', value: 'auth' },
],
})
// Confirmation
const proceed = await confirm({ message: 'Create project?', default: true })
// Password (masked)
const apiKey = await password({ message: 'Enter API key:', mask: '*' })
Step 2: Multi-Step Wizard
async function setupWizard() {
console.log('🚀 Project Setup Wizard\n')
const projectName = await input({ message: 'Project name:' })
const template = await select({
message: 'Template:',
choices: [
{ name: 'SaaS Starter', value: 'saas' },
{ name: 'Blog', value: 'blog' },
{ name: 'E-commerce', value: 'ecommerce' },
],
})
const features = await checkbox({
message: 'Features:',
choices: getFeatureChoices(template), // dynamic based on template
})
const useDocker = await confirm({ message: 'Add Docker?', default: false })
console.log('\n📋 Summary:')
console.log(` Name: ${projectName}`)
console.log(` Template: ${template}`)
console.log(` Features: ${features.join(', ')}`)
const ok = await confirm({ message: '\nProceed?', default: true })
if (!ok) { console.log('Cancelled.'); process.exit(0) }
return { projectName, template, features, useDocker }
}
Guidelines
- Import individual prompts (
@inquirer/prompts) not the legacyinquirerpackage. - Use
validatefor input validation — return true or error message string. descriptionin choices shows hint text below the option name.- For non-interactive environments (CI), accept config via flags and skip prompts.
- Pair with Commander for argument parsing + Inquirer for interactive mode.
> related_skills --same-repo
> zustand
You are an expert in Zustand, the small, fast, and scalable state management library for React. You help developers manage global state without boilerplate using Zustand's hook-based stores, selectors for performance, middleware (persist, devtools, immer), computed values, and async actions — replacing Redux complexity with a simple, un-opinionated API in under 1KB.
> zod
You are an expert in Zod, the TypeScript-first schema declaration and validation library. You help developers define schemas that validate data at runtime AND infer TypeScript types at compile time — eliminating the need to write types and validators separately. Used for API input validation, form validation, environment variables, config files, and any data boundary.
> xero-accounting
Integrate with the Xero accounting API to sync invoices, expenses, bank transactions, and contacts — and generate financial reports like P&L and balance sheet. Use when: connecting apps to Xero, automating bookkeeping workflows, syncing accounting data, or pulling financial reports programmatically.
> windsurf-rules
Configure Windsurf AI coding assistant with .windsurfrules and workspace rules. Use when: customizing Windsurf for a project, setting AI coding standards, creating team-shared Windsurf configurations, or tuning Cascade AI behavior.