skills/bootstrap-project/SKILL.md
Bootstrap a new project through a CPO+CTO interview flow. Produces versioned, dated foundational documents (vision, architecture, constraints, roadmap, mvp-features) in ./docs/project/. Also supports 'review' mode to periodically re-validate hypotheses and decisions. Use when starting a greenfield project or when you want to formalize the vision and architecture of an existing project. Do NOT use for single feature analysis (use /express-need instead).
npx skillsauth add nicolas-codemate/claudecodeconfig bootstrap-projectInstall 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.
The skill does NOT modify /express-need. It stands alone. /express-need and bootstrap-project can be used independently; bootstrap-project does not call /express-need.
Four modes:
Each step lives in its own file and declares its next transition. This orchestrator
parses arguments, selects the entry point, loads the first step, tracks state, and follows
transitions until STOP.
Progress is tracked in ./docs/project/.bootstrap-state.json:
{
"version": 1,
"started": "2026-04-07",
"updated": "2026-04-07T15:51:00",
"last_completed": "save",
"steps_done": ["receive-and-check", "vision-phase", "architecture-phase", "roadmap-phase", "save"]
}
This file is updated after each step completes. It enables:
/bootstrap-project without args)Arguments passed from command: $ARGUMENTS
review (case-insensitive) → REVIEW mode
review/R1-read-existing.mdtickets (case-insensitive) → TICKETS mode
./docs/project/.bootstrap-state.json exists AND all 5 core docs exist/bootstrap-project pour générer les documents de projet." → STOPsteps/07-create-tickets.md (skip steps 01-06)$ARGUMENTS is empty AND ./docs/project/.bootstrap-state.json exists → CONTINUE mode
last_completedlast_completed (see state-to-step mapping below)$ARGUMENTS is the raw idea, or emptysteps/01-receive-and-check.mdStore the raw idea (if any) as raw_idea for use by the first step.
Get today's date in ISO format via Bash: date +%Y-%m-%d. Store as today_date.
| last_completed | Next step | What to load |
|---|---|---|
| receive-and-check | steps/02-vision-phase.md | raw_idea from state or vision.md sources |
| vision-phase | steps/03-architecture-phase.md | vision.md |
| architecture-phase | steps/04-roadmap-phase.md | vision.md, architecture.md, constraints.md |
| roadmap-phase | steps/05-save.md | all in-memory content (rare — save usually follows immediately) |
| save | steps/06-next-steps.md | all docs from files |
| next-steps | steps/07-create-tickets.md | all docs from files |
| create-tickets | STOP (workflow complete) | suggest /bootstrap-project review |
When resuming (continue or tickets mode), read each existing doc file, strip the YAML
frontmatter (everything between the opening --- and closing ---), and store the
remaining content as the corresponding variable:
./docs/project/vision.md → vision_content./docs/project/architecture.md → architecture_content./docs/project/constraints.md → constraints_content./docs/project/roadmap.md → roadmap_content./docs/project/mvp-features.md → mvp_features_contentOnly load files that exist. Display: Reprise à l'étape : {step_name}
</instructions>
Execute the step's instructions. </instructions>
Update state file: record the completed step name and timestamp
python3 -c "
import json, datetime, os
f = './docs/project/.bootstrap-state.json'
os.makedirs(os.path.dirname(f), exist_ok=True)
try:
state = json.load(open(f))
except (FileNotFoundError, json.JSONDecodeError):
state = {'version': 1, 'started': '$(date +%Y-%m-%d)', 'steps_done': []}
state['last_completed'] = '{step_name}'
if '{step_name}' not in state['steps_done']:
state['steps_done'].append('{step_name}')
state['updated'] = datetime.datetime.now().isoformat(timespec='seconds')
json.dump(state, open(f, 'w'), indent=2)
print('State updated: {step_name}')
"
Replace {step_name} with the name field from the step's frontmatter.
Read the step file's next field from frontmatter
Resolve the next step file:
${CLAUDE_SKILL_DIR}/steps/{NN}-{next-name}.md (find by frontmatter name field)${CLAUDE_SKILL_DIR}/review/R{N}-{next-name}.mdnext is STOP: end workflowLoad the next step file and execute
Repeat until STOP
Do not skip transitions. Each step file explicitly declares what comes next in its frontmatter — follow the chain until STOP, and update the state file between steps. </workflow>
| Order | File | Name | Description |
|-------|------|------|-------------|
| 01 | steps/01-receive-and-check.md | receive-and-check | Receive raw idea, check for existing docs, handle conflicts |
| 02 | steps/02-vision-phase.md | vision-phase | Product vision scout + interview + synthesis (product-strategist) |
| 03 | steps/03-architecture-phase.md | architecture-phase | Architecture scout + interview + synthesis (tech-architect) |
| 04 | steps/04-roadmap-phase.md | roadmap-phase | MVP interview + roadmap synthesis (product-strategist) |
| 05 | steps/05-save.md | save | Write 5 files to ./docs/project/ with dated frontmatter |
| 06 | steps/06-next-steps.md | next-steps | Display guidance, propose ticket creation |
| 07 | steps/07-create-tickets.md | create-tickets | Break MVP features into atomic tickets and create them |
| Order | File | Name | Description |
|-------|------|------|-------------|
| R1 | review/R1-read-existing.md | review-read-existing | Read existing foundational docs, parse hypotheses and decisions |
| R2 | review/R2-review-loop.md | review-loop | Ask user to re-validate each hypothesis, decision, and MVP feature |
| R3 | review/R3-update-files.md | review-update-files | Append Review Log, update last_reviewed date, flag invalidated items |
${CLAUDE_SKILL_DIR}/references/file-formats.md — frontmatter templates and expected file structures${CLAUDE_SKILL_DIR}/references/scout-parsing.md — how to parse scout agent outputs into AskUserQuestion calls~/.claude/agents/references/cross-cutting-concerns.md — shared trigger table used by both agentsAll user communication in French. Technical content (file paths, command outputs, stack names, constraint text) in English.
Begin workflow for: $ARGUMENTS
development
Method to diagnose and raise the Lighthouse performance score of a public page (landing, marketing, home). Use when asked to improve Lighthouse/PageSpeed scores, when auditing the first uncached paint of a public page, or when a landing embedded in a SPA must reach a top score. Do NOT use for in-app screen performance (data loading, rendering). For a brand-new landing, the first recommendation is static HTML with no framework runtime — most of this skill exists for when that is not an option.
tools
Audits a project's Claude Code setup against real usage — mines the project's conversations (worktrees included), confronts the project's skills/agents/CLAUDE.md with best practices, and proposes adjustments or new skills/agents/rules. Use when the user asks to audit the project config, analyze project conversations, or find automation opportunities for the current project. Do NOT use for the global ~/.claude configuration (use /audit-config instead).
development
Coaching workflow orchestrator. Guides the developer through implementation without writing code.
development
Disciplined methodology for code architecture refactoring. Use when the user asks to refactor architecture, decouple code, restructure a family of classes, redesign an interface, or rename/reorganize a set of related components. Forces a big-picture analysis before any code is written. Do NOT use for simple bug fixes, feature additions, or single-file refactoring.