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
tools
--- name: deep-review description: Performs deep code review via an isolated fresh agent (triple perspective, anti-bias). Use when the user asks for an in-depth review of current branch changes, or when invoked by /resolve step 08. Do NOT use for reviewing PRs from GitHub (use review-pr skill instead) or for a quick correctness scan with effort levels (use bundled /code-review instead). argument-hint: [--ticket <id>] [--base <branch>] [--fix] [--severity <level>] allowed-tools: Read, Glob, Grep,
tools
Resolve git rebase conflicts methodically. Classifies each conflict (imports/namespace cleanup vs real logic clash), analyzes the commit introducing the change against the current ticket context, auto-fixes only trivial cases with a per-file summary, and asks the user when ambiguous. Verifies static analysis tools pass at the end and optionally runs functional tests. Use after `git rebase` triggers conflicts, or when the user asks to "resolve conflicts", "fix rebase", "j'ai des conflits", "aide-moi sur ce rebase".
development
Synchronize the markdown test plan in docs/qa/ with the current state of the codebase. Use after adding or modifying features to keep the plan up to date, or to bootstrap a test plan for the first time. Do NOT use to execute tests (use /qa-run instead) and do NOT use to design product specs (use /express-need instead).
tools
Execute the markdown test plan in docs/qa/ via Playwright MCP and create a ticket on each failing scenario. Use after /qa-sync, before a release, or to validate a feature end-to-end. Do NOT use to design or update scenarios (use /qa-sync instead) and do NOT use for visual regression (use visual-verify agent instead).