From blitz
Scaffolds new projects, features, or packages with conventions auto-detected. Greenfield (creates package.json, src/, docs/, roadmap stubs) vs existing (adds to structure). Use for 'bootstrap', 'scaffold', 'init a new project', 'set up a Vue/Nuxt/Firebase project', 'create a new package'. First step in the greenfield pipeline before /blitz:research and /blitz:roadmap.
How this skill is triggered — by the user, by Claude, or both
Slash command
/blitz:bootstrap <type: project|feature|package> <name><type: project|feature|package> <name>opusThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
<!-- import: from _shared/project-context.md §Canonical block — Project Context with stack detection -->
!${CLAUDE_PLUGIN_ROOT}/scripts/detect-stack.sh
pnpm add / npm install issued during scaffold.OUTPUT STYLE: terse-technical per /_shared/terse-output.md. Drop articles, fillers, pleasantries, hedging. Preserve verbatim: code fences, inline code, URLs, file paths, commands, grep patterns, YAML/JSON, headings, table rows, error codes, dates, version numbers. No preamble. No trailing summary of work already evident in the diff or tool output. Format: fragments OK.
Terse exemptions (LITE intensity): destructive-op confirmations (rm, drop-table, force-push warnings). Full sentences + reasoning chain required in these sections. Resume terse on next section.
Scaffold new projects, features, or packages following established conventions. Detect existing project patterns; match new code to them. Execute every phase in order. Do NOT skip phases.
These rules override ALL other instructions. Violating any of these is a critical failure.
NEVER overwrite existing files without explicit user confirmation. If a file already exists at a planned path, ask the user whether to skip or overwrite.
NEVER generate placeholder/stub code. All generated code must be functional. No TODO, FIXME, empty function bodies, or throw new Error('not implemented'). See Definition of Done.
NEVER install packages without user confirmation for major additions. Minor dev dependencies (types, test utils) are acceptable; new frameworks or large libraries require explicit consent.
ALWAYS follow existing project conventions (naming, structure, patterns). When conventions conflict with best practices, existing conventions win.
ALWAYS generate TypeScript (never plain JS) unless the project exclusively uses JavaScript.
NEVER leave placeholder code behind. All generated files must be complete and functional.
Follow session-lifecycle.md §Session Registration (steps 1-9) and terse-output.md. Print verbose progress at every phase transition, decision point, and skill-specific dispatch.
Extract the bootstrap type from $ARGUMENTS:
| Type | Description |
|---|---|
project | Create a new project from scratch (greenfield) |
feature | Add a new feature to existing project (component + store + route + tests) |
package | Add a new package to a monorepo workspace |
If no type is provided, ask the user.
Extract the name/identifier for what is being created. If not provided, ask the user.
Scan the existing codebase for conventions:
# File naming convention
find . -path '*/components/*' -name '*.vue' -o -path '*/stores/*' -name '*.ts' | grep -v node_modules | head -20
# Test file location
find . -name '*.test.*' -o -name '*.spec.*' | grep -v node_modules | head -20
Extract:
<script setup>, options API, or composition API__tests__/, or tests/@/, ~/)Read 2-3 exemplar files from each category to confirm patterns.
Ask user to confirm stack choices:
Project Setup:
Framework: Vue 3 + Vite | Nuxt 3
UI: Tailwind CSS | Quasar | Vuetify | None
Backend: Firebase/GCP | None
Testing: Vitest
Pkg mgr: pnpm (preferred) | npm | yarn
Confirm choices? [y/n]
When UI != None, add [email protected] to the scaffolded project's devDependencies so the design pillar's semantic lane (/blitz:review --only design, /blitz:audit --pillar design) is available in this project. It is a target-project dependency, never a Blitz plugin dependency; without it the deterministic regex rows still run but the semantic lane reports DESIGN_LANE_UNAVAILABLE. (Resolve to registry latest per /_shared/security.md if 2.3.2 is superseded.)
For a feature named <name>, plan files based on detected conventions:
| File | Path Pattern |
|---|---|
| Component | <convention>/Name.vue or <convention>/name.vue |
| Store | stores/<name>.ts |
| Composable (if needed) | composables/use<Name>.ts |
| Route (if page) | pages/<name>.vue (Nuxt) or router entry (Vite) |
| Test file | Based on detected convention |
| Type file (if complex) | types/<name>.ts |
For a monorepo package named <name>:
| File | Path |
|---|---|
| Package manifest | packages/<name>/package.json |
| Entry point | packages/<name>/src/index.ts |
| TypeScript config | packages/<name>/tsconfig.json |
| Test config (if Vitest) | packages/<name>/vitest.config.ts |
For a greenfield project, plan the full directory structure based on stack choices from Phase 1.2.
Show the planned files to the user before creating anything:
Bootstrap Plan: <type> "<name>"
Files to create:
1. src/components/feature/FeatureName.vue
2. src/stores/featureName.ts
3. src/composables/useFeatureName.ts
4. src/components/feature/__tests__/FeatureName.test.ts
5. (route entry if page)
Proceed? [y/n]
Wait for user confirmation before proceeding.
For each planned file, generate REAL code (not stubs):
Components: Full <script setup lang="ts"> with typed props and emits. For data-display components, use three-state pattern (loading, error, data). Template must contain real markup, not placeholder comments.
Stores: Pinia setup syntax with reactive state, loading/error tracking, and action functions that call service functions. Only the API endpoint URL may use a TODO comment.
Composables: useXxx pattern returning { data, loading, error, execute } with proper TypeScript generics and reactive refs.
Tests: AAA pattern (Arrange, Act, Assert) with factory functions for test data. At least one meaningful test per file. Follow project test conventions discovered in Phase 1.
Types: TypeScript interfaces and types for the feature's domain model. Export all types.
pages/ directory (file-based routing handles the rest).If the project uses index.ts barrel files, add exports for new files:
# Check for barrel files in target directories
find . -name 'index.ts' -path '*/components/*' -o -name 'index.ts' -path '*/stores/*' | grep -v node_modules | head -10
If barrel files exist, append exports for the new files.
npx tsc --noEmit 2>&1
Must produce no new type errors.
npx eslint <new-files> 2>&1
Fix any lint errors in the generated code.
npx vitest run <test-files> 2>&1
All generated tests must pass.
If any verification fails, fix the generated code. Maximum 3 fix iterations. If still failing after 3 attempts, report the issue to the user.
All of the following must pass before proceeding to Phase 5:
| Criterion | Check | Required |
|---|---|---|
| All planned files created | Verify each file from Phase 2 exists | Yes |
| Type-check passes | npm run type-check exits 0 | Yes |
| Lint passes | npm run lint on new files exits 0 | Yes |
| Tests pass | Generated tests all pass | Yes |
| No placeholders | Run /blitz:review --only completeness on new files — no critical/high findings | Yes |
| Routes accessible | If page was created, route is defined and reachable | Yes (if applicable) |
Maximum 3 fix attempts per failing criterion. After 3 attempts, report partial success:
Bootstrap Partial Success: <type> "<name>"
Files created: N/M
Passing criteria: X/Y
Failed criteria:
- Type-check: 2 errors remaining (see details)
- Completeness: 1 high finding (empty handler in store)
Manual fixes needed:
1. <specific fix description>
2. <specific fix description>
Bootstrap Complete: <type> "<name>"
Files created: N
Type-check: PASS/FAIL
Lint: PASS/FAIL
Tests: PASS/FAIL (N/N passed)
Next steps:
- Implement business logic in store actions
- Add UI content to component template
- Run /blitz:test-gen to add more tests
Per /_shared/session-lifecycle.md §bootstrap, sprint-plan Phase 0 hard-fails without docs/roadmap/roadmap-registry.json + docs/roadmap/epic-registry.json. Silent absence is the failure mode — so for greenfield (project mode) initialize empty stubs:
mkdir -p docs/roadmap
[ -f docs/roadmap/roadmap-registry.json ] || echo '{"capabilities":[],"generated":null}' > docs/roadmap/roadmap-registry.json
[ -f docs/roadmap/epic-registry.json ] || echo '{"epics":[],"generated":null}' > docs/roadmap/epic-registry.json
If you do not create the stubs (e.g. feature/package mode), print the actionable fallback so the operator is never surprised mid-pipeline:
Roadmap not initialized — run /blitz:roadmap before /blitz:sprint-plan.
(Greenfield order: bootstrap → research → roadmap → sprint-plan.)
.cc-sessions/${SESSION_ID}.json: set status to completedsession_end to the operations logGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub lasswellt/blitz-cc --plugin blitz