with one click
Convert brainstorm sessions into executable artifacts
npx skills add https://github.com/0-CODE/viepilot --skill vp-crystallizeCopy and paste this command into Claude Code to install the skill
Convert brainstorm sessions into executable artifacts
npx skills add https://github.com/0-CODE/viepilot --skill vp-crystallizeCopy and paste this command into Claude Code to install the skill
LLM-driven QA agent team generator — research codebase, generate context-aware QA scanning agents
Autonomous execution loop with control points and recovery
Brainstorm session to collect ideas and decisions for the project
Import and triage tickets from Excel/M365 Online, Google Sheets, or CSV/TSV files — classify as BUG/ENH, accept/decline via AskUserQuestion, write back to source, generate TRIAGE report
Audit state, docs drift, and stack best-practice compliance — works on any project
Create new request: feature, bug fix, enhancement, or brainstorm continuation
| name | vp-crystallize |
| description | Convert brainstorm sessions into executable artifacts |
| version | 0.8.0 |
Output this banner as the first thing on every invocation — before questions, work, or any other output:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
VIEPILOT ► VP-CRYSTALLIZE v0.8.0 (fw 2.19.0)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
## Version Update Check (ENH-072)
After displaying the greeting banner, run:
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" check-update --silent
If exit code = 1 (update available — new version printed to stdout): Display notice banner before any other output:
┌──────────────────────────────────────────────────────────────────┐
│ ✨ ViePilot {latest_version} available (installed: {current}) │
│ npm i -g viepilot && vp-tools install --target {adapter_id} │
└──────────────────────────────────────────────────────────────────┘
Replace {latest_version} with stdout from the command, {current} with the installed
version, {adapter_id} with the active adapter (claude-code / cursor / antigravity / codex / copilot).
If exit code = 0 or command unavailable: silent, continue.
Suppression rules:
--no-update-check flag on skill invocation → skip this step entirelyconfig.json → update.check: false → skip this step entirelyupdate_check_done session guard)
</version_check>
<persona_context>At skill start, run:
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
Inject the output as ## User Persona context before any task execution.
Silent if command unavailable or errors.
</persona_context>
Flags:
--no-stakeholders : Skip the Step 1G Stakeholder Review Gate (ENH-098)Prompt user conversationally with numbered list options.
Use Claude Code tools: Bash (shell), Read (file), Edit + Write (file write/patch),
Grep (search), Glob (file patterns), LS, WebSearch, WebFetch,
Agent (spawn subagent — multi-level nesting supported)
Interactive: AskUserQuestion (deferred — preload via ToolSearch before first call)
Use Cursor tools: run_terminal_cmd (shell), read_file (read), edit_file (write/edit),
grep_search (search), web_search, codebase_search, list_dir, file_search
Interactive: text list fallback (AskQuestion available in Plan Mode only; Agent Mode = text)
Subagent: /multitask (user command, single-level only — not a callable tool)
MCP limit: 40 tools
Use Antigravity tools: shell (cmd), file_read, file_write, MCP plugins
Interactive: text fallback (TUI-based; no formal AskUserQuestion)
Skill path: .agents/skills/<skill>/SKILL.md (project) or ~/.gemini/antigravity/skills/ (global)
Note: Gemini CLI deprecated June 18, 2026 — use Antigravity CLI.
Use Codex tools: container.exec (sandboxed shell), apply_patch (file write), web_search
Interactive: text fallback (TUI Tab/Enter injection)
Config: ~/.codex/config.toml
Use Copilot tools: runCommands (shell), read/readfile (read), edit/editFiles (write),
code_search, find_references
Interactive: askQuestions (main agent only — NOT available in subagents; VS Code issue #293745)
Skill path: .github/agents/<name>.agent.md
<scope_policy>
vp-* skills in ViePilot workflows.non vp-*) are out of framework scope unless user explicitly opts in.vp-* skill.
</scope_policy><implementation_routing_guard>
.viepilot/ (and template copy) from brainstorm — does not replace /vp-auto for implementing application code / framework shipping. Backlog feature code: /vp-evolve + /vp-auto. See workflows/request.md.
</implementation_routing_guard>Creates:
.viepilot/
├── AI-GUIDE.md # AI navigation guide
├── PROJECT-META.md # Project metadata
├── ARCHITECTURE.md # System design
├── architecture/ # ENH-022: *.mermaid sidecars (mirror fenced diagrams)
├── PROJECT-CONTEXT.md # Domain knowledge + `<product_vision>` (phased scope)
├── SYSTEM-RULES.md # Coding rules & standards
├── ROADMAP.md # Phases & tasks in order from phases_inventory
├── TRACKER.md # Progress tracking
├── HANDOFF.json # Machine-readable state
└── schemas/ # Database, API, Kafka schemas
Also creates:
CHANGELOG.mdCONTRIBUTING.mdCONTRIBUTORS.mdLICENSEREADME.mdViePilot profile (FEAT-009):
.viepilot/META.md → file ~/.viepilot/profiles/<slug>.md (contract: docs/dev/global-profiles.md); pre-fills Step 0; merges into ARCHITECTURE (## ViePilot organization context), PROJECT-CONTEXT (## ViePilot active profile), AI-GUIDE quick context.Stack intelligence (global cache):
~/.viepilot/stacks/{stack}/SUMMARY.md~/.viepilot/stacks/{stack}/BEST-PRACTICES.md~/.viepilot/stacks/{stack}/ANTI-PATTERNS.md~/.viepilot/stacks/{stack}/SOURCES.md.viepilot/STACKS.md (project-local index to global cache)After: Ready for /vp-auto
UI direction hard gate (ENH-026):
Architect artifacts consumption (FEAT-011):
.viepilot/architect/{session}/notes.md YAML — imports decisions[] → ARCHITECTURE.md, uses tech_stack{} as authoritative stack (conflict → ask user), surfaces open_questions[] with status: open. Soft suggestion (not hard block) when architect dir missing but ≥5 services detected.Admin & Governance Export (ENH-063):
admin.html or notes.md ## admin exists in architect workspace → append ## Admin & Governance table to .viepilot/PROJECT-CONTEXT.md (columns: Capability | Required | Phase | Notes) + Admin Personas table. Records admin_imported and admin_capabilities_count in working notes.Content Management Export (ENH-065):
content.html or notes.md ## content exists in architect workspace → append ## Content Management table to .viepilot/PROJECT-CONTEXT.md (columns: Content Type | Created By | Lifecycle | Key Fields | Phase) + Media/Storage and Localization sub-tables. Records content_imported and content_types_count in working notes.Admin Entity Management Export (ENH-068):
entity-mgmt.html or notes.md ## entity_mgmt exists in architect workspace → append ## Admin Entity Management table to .viepilot/PROJECT-CONTEXT.md (columns: Entity | CRUD Ops | Soft Delete | Bulk Actions | Audit Trail | Scope) + Import/Export sub-table. Records entity_mgmt_imported and entity_mgmt_entity_count in working notes.User Data Management Export (ENH-066):
user-data.html or notes.md ## user_data exists in architect workspace → append ## User Data Management table to .viepilot/PROJECT-CONTEXT.md (columns: Capability | Supported | Notes) with 8 capability rows (profile editing, notification prefs, privacy settings, data export, right to erasure, connected accounts, session management, 2FA). Records user_data_imported and user_data_capabilities_count in working notes.Crystallize version stamps (ENH-067):
PROJECT-CONTEXT.md includes <!-- crystallize_version: {semver} --> as its first line.HANDOFF.json records crystallize_version and crystallized_at fields.--upgrade re-scan mode to compute delta on future runs.Upgrade re-scan mode (--upgrade) (ENH-067):
crystallize_version delta; lists missing PROJECT-CONTEXT.md sections.crystallize_version..viepilot/ → regenerates all artifacts using existing sessions.## Upgrade supplement sections when present.Mandatory Workspace Read Gates (ENH-064):
.viepilot/architect/ exists → reads ALL 12 pages front-to-back before any extraction. architect_read_complete: true required. Missing notes.md → STOP..viepilot/ui-direction/ exists → reads ALL pages/*.html + ALL notes.md sections. ui_direction_read_complete: true required. Pages inventory mismatch → STOP.Language configuration (ENH-032):
~/.viepilot/config.json → DOCUMENT_LANG (default: en) and COMMUNICATION_LANG (default: en).DOCUMENT_LANG controls content language for all generated files (ROADMAP, TRACKER, ARCHITECTURE, etc.).COMMUNICATION_LANG controls prompt/confirmation language for this session.vp-tools config set language.document viBrownfield Mode (--brownfield) — FEAT-018:
Use when adopting ViePilot on an existing project (no brainstorm session required).
Flags:
--brownfield : Explicit brownfield modedocs/brainstorm/ is absent/empty AND .viepilot/ does not existScanner runs 12 signal categories across the existing codebase:
package.json, pom.xml, pyproject.toml, Cargo.toml, go.mod, etc. (11 platforms) → infers project_name, version, language, deps.proto, GraphQL schemas.env.example key names (never reads .env)Multi-repo / monorepo support (ENH-047):
.gitmodules; scans each initialized submodule path (Signal Cat 1+2+4); records uninitialized paths as primary_language: MISSING. Never runs git submodule update — read-only.../ build contexts, file:../ deps, CI cross-repo clones, README external links, Makefile cd ../ targets; outputs polyrepo_hints[]; prompts user to supply related_repos[] (optional).modules[] entry carries gap_tier (DETECTED/ASSUMED/MISSING), must_detect_status{} (evidence per field: value + source + tier), and open_questions[]. A module with gap_tier: MISSING blocks artifact generation with a targeted per-field prompt.Scan Report contains:
gap_tier (= worst tier across all modules: MISSING > ASSUMED > DETECTED)modules[] — one entry per workspace/submodule/root with gap_tier, must_detect_status{}, open_questions[]polyrepo_hints[] — polyrepo signals (omitted when empty, no empty arrays)related_repos[] — user-supplied sibling repos (omitted when empty)open_questions[] — includes rollup from all modulesProduces Scan Report (YAML) with DETECTED / ASSUMED / MISSING classification.
MUST-DETECT gaps (root: project_name, primary_language, ≥1 framework, current_version; per-module: primary_language, framework, module_purpose, entry_point) block artifact generation until user fills interactively.
Generates docs/brainstorm/session-brownfield-import.md stub for vp-audit compatibility.
Safety: never reads .env; skips node_modules/, .git/, target/, build/, dist/.
<execution_context> @$HOME/{envToolDir}/workflows/crystallize.md @$HOME/{envToolDir}/templates/project/ </execution_context>
Execute workflow from `@$HOME/{envToolDir}/workflows/crystallize.md`Key steps:
.viepilot/META.md + global profile file first (workflows/crystallize.md); set profile_resolved or none; pre-fill org/website when profile is present.
Ask user for (confirm proposals from profile if present):## Phases from brainstorm sessions; build phases_inventory; run phase assignment gate (all features must have a phase — full contract: workflows/crystallize.md Step 1).viepilot/ui-direction/{session-id}/notes.md first, then style.css, then HTML:
pages/*.html exists → require ## Pages inventory in notes.md, validate it lists every page file, read each pages/*.html plus hub index.html for navigation.pages/ → read index.html + style.css as before.WebSearch to discover candidate sourcesWebFetch to read source content before extracting guidanceSOURCES.md~/.viepilot/stacks/{stack}/....viepilot/STACKS.md for lookup mappingprofile_id + profile path when resolved## ViePilot organization context when profile is present (or none line)system-overview, data-flow, event-flows, module-dependencies, deployment, user-use-caserequired | optional | N/Arequired => include concrete Mermaid blockoptional => allow lightweight/merged representationN/A => keep section heading + one-line rationale.viepilot/architecture/<type>.mermaid (raw source) and keep it identical to the body inside the fenced ```mermaid block in ARCHITECTURE.md; omit files for N/A or no diagram — see workflows/crystallize.md Step 4.## ViePilot active profile (FEAT-009) when binding is present<product_vision> from template (templates/project/PROJECT-CONTEXT.md): Project scope, Phase overview, anti-goals — aligned with brainstorm ## Phases + Step 1 phases_inventorytemplates/project/ROADMAP.md — phases in order (Phase 1, Phase 2...) from phases_inventory; no Post-MVP blockworkflows/crystallize.md Step 7/vp-auto
<success_criteria>
.viepilot/STACKS.md) created<product_vision> (template placeholders filled from brainstorm)required|optional|N/A).viepilot/architecture/<canonical-name>.mermaid file in sync with ARCHITECTURE.md (no extra files created for N/A)This skill uses adapter-aware interactive prompts. Behavior depends on your adapter:
| Adapter | Interactive Prompts | Notes |
|---|---|---|
| Claude Code (terminal) | ✅ AskUserQuestion tool — REQUIRED | Must call AUQ; plain-text only if tool errors or is unavailable |
| Claude Code (VS Code ext) | ⚠️ Partial | Terminal yes; VS Code UI pending anthropics/claude-code#12609 |
| Cursor (Plan Mode) | ⚠️ Partial | AskQuestion in Plan Mode only — not in Agent/Skills Mode |
| Cursor (Agent/Skills) | ❌ Text fallback | AskQuestion not available in Agent Mode |
| Codex CLI | ❌ Text fallback | Native tool N/A; community MCP available |
| Antigravity (native agent) | ❌ Text fallback | Artifact model, no raw tool calls |
| GitHub Copilot | ✅ /skill-name in Chat | Via .agent.md custom agent; AUQ not available — text fallback |
Claude Code (terminal) — AUQ preload required (ENH-059):
Before the first interactive prompt, call ToolSearch with query: "select:AskUserQuestion" to load the deferred tool schema. Only after ToolSearch succeeds can AskUserQuestion be invoked. If ToolSearch returns an error, fall back to plain-text numbered list for that session.
When AskUserQuestion is not available on other adapters, the skill automatically falls back to
plain-text numbered list prompts — no configuration required.
Prompts using AskUserQuestion in this skill:
After scope lock, before SPEC generation, crystallize checks for ## skills_used
in the brainstorm session's notes.md:
PROJECT-CONTEXT.md ## SkillsThe ## Skills decision is final — /vp-auto reads it at execution time
and injects skill best practices per task without re-prompting.
Install skills: vp-tools install-skill <source>
Registry: vp-tools scan-skills
Docs: docs/user/features/skill-registry.md
Validates coverage matrix when both Architect and UI Direction workspaces are present. Warns on Phase 1 features with no architect OR UI coverage (non-blocking).
After scope lock, spawns .claude/agents/ stakeholder agents in parallel fan-out,
collects gap analysis (Gaps/Risks/Suggestions), synthesizes feedback to enrich
PROJECT-CONTEXT.md before ROADMAP generation. Can be skipped with --no-stakeholders flag.