viepilot 2.41.0 → 2.45.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/bin/viepilot.cjs +32 -0
  3. package/bin/vp-tools.cjs +95 -0
  4. package/docs/brainstorm/session-2026-04-24.md +131 -0
  5. package/docs/brainstorm/session-2026-04-25.md +109 -0
  6. package/lib/domain-packs/ai-product.json +33 -0
  7. package/lib/domain-packs/data-science.json +33 -0
  8. package/lib/domain-packs/devops.json +33 -0
  9. package/lib/domain-packs/mobile.json +33 -0
  10. package/lib/domain-packs/web-saas.json +33 -0
  11. package/lib/viepilot-calibrate.cjs +279 -0
  12. package/lib/viepilot-install.cjs +5 -3
  13. package/lib/viepilot-persona.cjs +446 -0
  14. package/package.json +1 -1
  15. package/skills/vp-audit/SKILL.md +10 -0
  16. package/skills/vp-auto/SKILL.md +10 -0
  17. package/skills/vp-brainstorm/SKILL.md +16 -1
  18. package/skills/vp-crystallize/SKILL.md +10 -0
  19. package/skills/vp-debug/SKILL.md +10 -0
  20. package/skills/vp-design/SKILL.md +219 -0
  21. package/skills/vp-docs/SKILL.md +10 -0
  22. package/skills/vp-evolve/SKILL.md +10 -0
  23. package/skills/vp-info/SKILL.md +10 -0
  24. package/skills/vp-pause/SKILL.md +10 -0
  25. package/skills/vp-persona/SKILL.md +207 -0
  26. package/skills/vp-proposal/SKILL.md +10 -0
  27. package/skills/vp-request/SKILL.md +10 -0
  28. package/skills/vp-resume/SKILL.md +10 -0
  29. package/skills/vp-rollback/SKILL.md +34 -1
  30. package/skills/vp-skills/SKILL.md +10 -0
  31. package/skills/vp-status/SKILL.md +10 -0
  32. package/skills/vp-task/SKILL.md +10 -0
  33. package/skills/vp-ui-components/SKILL.md +10 -0
  34. package/skills/vp-update/SKILL.md +10 -0
  35. package/workflows/autonomous.md +59 -0
  36. package/workflows/brainstorm.md +148 -1
  37. package/workflows/crystallize.md +111 -0
  38. package/workflows/design.md +601 -0
  39. package/workflows/evolve.md +9 -0
  40. package/workflows/rollback.md +79 -10
@@ -0,0 +1,219 @@
1
+ <greeting>
2
+ ## Invocation Banner
3
+
4
+ Output this banner as the **first** thing on every invocation — before questions, work, or any other output:
5
+
6
+ ```
7
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
8
+ VIEPILOT ► VP-DESIGN v1.0.0 (fw 2.45.0)
9
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
10
+ ```
11
+ </greeting>
12
+ <version_check>
13
+ ## Version Update Check (ENH-072)
14
+
15
+ After displaying the greeting banner, run:
16
+ ```bash
17
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" check-update --silent
18
+ ```
19
+
20
+ **If exit code = 1** (update available — new version printed to stdout):
21
+ Display notice banner before any other output:
22
+ ```
23
+ ┌──────────────────────────────────────────────────────────────────┐
24
+ │ ✨ ViePilot {latest_version} available (installed: {current}) │
25
+ │ npm i -g viepilot && vp-tools install --target {adapter_id} │
26
+ └──────────────────────────────────────────────────────────────────┘
27
+ ```
28
+ Replace `{latest_version}` with stdout from the command, `{current}` with the installed
29
+ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigravity / codex / copilot).
30
+
31
+ **If exit code = 0 or command unavailable**: silent, continue.
32
+
33
+ **Suppression rules:**
34
+ - `--no-update-check` flag on skill invocation → skip this step entirely
35
+ - `config.json` → `update.check: false` → skip this step entirely
36
+ - Show at most once per session (`update_check_done` session guard)
37
+ </version_check>
38
+ <persona_context>
39
+ ## Persona Context Injection (ENH-073)
40
+ At skill start, run:
41
+ ```bash
42
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
43
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
44
+ ```
45
+ Inject the output as `## User Persona` context before any task execution.
46
+ Silent if command unavailable or errors.
47
+ </persona_context>
48
+
49
+ <cursor_skill_adapter>
50
+ ## A. Skill Invocation
51
+ - Skill is triggered when user mentions `vp-design`, `/vp-design`, "design system", "design.md", "sync tokens", "audit design"
52
+ - Treat all user text after the skill mention as `{{VP_ARGS}}`
53
+
54
+ ## B. User Prompting
55
+ Prompt user conversationally with numbered list options at control points.
56
+
57
+ ## C. Tool Usage
58
+ Use Cursor tools: `Shell`, `ReadFile`, `Glob`, `rg`, `ApplyPatch`, `WebSearch`, `WebFetch`, `Subagent`
59
+ </cursor_skill_adapter>
60
+
61
+ <scope_policy>
62
+ ## ViePilot Namespace Guard (BUG-004)
63
+ - Default mode: only use and reference `vp-*` skills in ViePilot workflows.
64
+ - External skills (`non vp-*`) are out of framework scope unless user explicitly opts in.
65
+ - If external skills appear in runtime context, ignore them and route with the closest built-in `vp-*` skill.
66
+ </scope_policy>
67
+
68
+ <implementation_routing_guard>
69
+ ## Implementation routing guard (ENH-021)
70
+
71
+ - This skill manages **design system files** (`design.md`, stylesheet token sync, compliance audit).
72
+ - Does **not** implement application features or replace **`/vp-auto`** for shipping code.
73
+ - After creating/updating `design.md`, run **`/vp-design --sync`** to apply tokens, then continue with **`/vp-auto`** for feature work.
74
+ </implementation_routing_guard>
75
+
76
+ <objective>
77
+ Manage Design.MD design system files for the project (ENH-076).
78
+
79
+ Implements the [Design.MD v1 spec](https://github.com/google-labs-code/design.md) —
80
+ a Google Labs open standard (Apache 2.0) for describing visual design systems to AI coding agents.
81
+
82
+ **Commands:**
83
+ - `--init` : Create `design.md` from scratch via Q&A, or import from awesome-design-md community library (55+ brand examples)
84
+ - `--sync` : Sync design.md tokens → Tailwind config / CSS custom properties / SCSS variables
85
+ - `--audit` : Scan project HTML/CSS files for compliance; report deviations (❌ / ⚠️ / ✅)
86
+ - `--import [brand]` : Fetch community template from awesome-design-md (Linear, Notion, Stripe, Vercel, Figma...)
87
+
88
+ **Creates/Updates:**
89
+ - `design.md` (project root)
90
+ - `tailwind.config.js` / `style.css` / `_variables.scss` (via `--sync`)
91
+
92
+ **Reads:**
93
+ - `design.md` (project root or session directory)
94
+ - HTML/CSS/SCSS files (via `--audit`)
95
+
96
+ **After:** `design.md` is ready for `/vp-crystallize` (Step 1D.14 export) and
97
+ `/vp-auto` (Preflight 5.5 token injection into UI tasks)
98
+ </objective>
99
+
100
+ <execution_context>
101
+ @$HOME/.claude/viepilot/workflows/design.md
102
+ </execution_context>
103
+
104
+ <context>
105
+ **Commands:**
106
+ - `--init` : Create new design.md (Q&A or awesome-design-md import)
107
+ - `--sync` : Sync tokens to project stylesheets (auto-detects Tailwind / CSS vars / SCSS)
108
+ - `--audit` : Compliance report — scan all HTML/CSS vs design.md spec
109
+ - `--import [brand]` : Import community template (omit brand for interactive catalog picker)
110
+
111
+ **Examples:**
112
+ ```bash
113
+ /vp-design --init # Q&A flow to create design.md
114
+ /vp-design --init --import # Import from awesome-design-md catalog
115
+ /vp-design --sync # Sync tokens → detected stylesheet target
116
+ /vp-design --audit # Full compliance report
117
+ /vp-design --import linear # Import Linear design system directly
118
+ /vp-design --import notion # Import Notion design system
119
+ ```
120
+ </context>
121
+
122
+ <process>
123
+ Execute workflow from `@$HOME/.claude/viepilot/workflows/design.md`
124
+
125
+ ### --init flow (Q&A from scratch)
126
+
127
+ 1. **Brand identity:**
128
+ - Brand name?
129
+ - Core personality (3 words — AI suggests: minimal/bold/playful/enterprise/warm/technical)
130
+ - Primary color (hex or describe, AI suggests 4 palette options)
131
+
132
+ 2. **Typography:**
133
+ - Font family (AI suggests: Inter / Geist / Plus Jakarta Sans / Custom)
134
+ - Heading scale (tight compact / balanced standard / spacious editorial)
135
+
136
+ 3. **Spacing & Shape:**
137
+ - Spacing base (4px atomic / 8px standard — Recommended / custom)
138
+ - Corner radius (sharp 0px / subtle 4px / rounded 8px / pill 16px+)
139
+
140
+ 4. **Auto-generate semantic colors** from primary (surface, error, success, warning)
141
+ 5. **Write** `design.md` at project root
142
+
143
+ ### --init flow (awesome-design-md import mode)
144
+
145
+ When user says "import" or triggers `--import`:
146
+ 1. AUQ catalog picker by category (Productivity / Developer / Commerce / Enterprise / Creative)
147
+ 2. Preview selected brand tokens (text table)
148
+ 3. AUQ: Apply as-is / Customize tokens / Use as reference only
149
+
150
+ ### --sync flow
151
+
152
+ 1. Parse `design.md` YAML front matter → TOKEN_MAP
153
+ 2. Detect stack:
154
+ - `tailwind.config.js` exists → Tailwind mode
155
+ - `style.css` only → CSS custom properties mode
156
+ - `*.scss` files → SCSS mode
157
+ - Multiple targets found → AUQ: which target?
158
+ 3. Generate/update target with tokens:
159
+ - **Tailwind:** `theme.extend.colors`, `theme.fontFamily`, `theme.spacing`, `theme.borderRadius`
160
+ - **CSS vars:** `:root { --color-primary: {hex}; --font-sans: {font}; --spacing-base: {n}px; }`
161
+ - **SCSS:** `$color-primary: {hex}; $font-sans: '{font}'; $spacing-base: {n}px;`
162
+ 4. Conflict resolution: AUQ per conflicting token (Override / Merge / Skip)
163
+ 5. Report: "Synced N tokens to {target file}"
164
+
165
+ ### --audit flow
166
+
167
+ 1. Discover all `.html` + `.css` + `.scss` files (exclude `node_modules`, `.git`)
168
+ 2. For each file: extract color/font references → compare vs TOKEN_MAP
169
+ 3. Categorize deviations:
170
+ - **❌ Critical:** wrong font-family, wrong primary/surface color hex
171
+ - **⚠️ Minor:** hardcoded value instead of CSS var (e.g. `#6366f1` instead of `var(--color-primary)`)
172
+ - **✅ Compliant:** uses correct var or correct hex
173
+ 4. Generate report table:
174
+ ```
175
+ | File | Colors | Typography | Spacing | Status |
176
+ | index.html | ✅ | ⚠️ 1 | ✅ | Partial |
177
+ ```
178
+ 5. Summary + suggestion: "Run /vp-design --sync to auto-fix"
179
+
180
+ ### --import [brand] flow
181
+
182
+ 1. Resolve brand:
183
+ - If arg provided → search awesome-design-md catalog for match
184
+ - If no arg → AUQ catalog picker
185
+ 2. Fetch template (runtime from awesome-design-md GitHub raw content)
186
+ 3. Preview: show token table (colors/typography/spacing)
187
+ 4. AUQ: Apply as-is / Customize before applying / Use as reference only
188
+ </process>
189
+
190
+ <success_criteria>
191
+ - [ ] `design.md` created/updated at project root
192
+ - [ ] `--init` produces valid Design.MD v1 spec YAML front matter
193
+ - [ ] `--sync` updates correct target file based on stack detection
194
+ - [ ] `--audit` produces severity-categorized compliance report
195
+ - [ ] `--import` fetches community template and applies per user choice
196
+ - [ ] AUQ used for catalog picker, conflict resolution, apply mode
197
+ </success_criteria>
198
+
199
+ ## Adapter Compatibility
200
+
201
+ ### AskUserQuestion Tool (ENH-059)
202
+
203
+ | Adapter | Interactive Prompts | Notes |
204
+ |---------|---------------------|-------|
205
+ | Claude Code (terminal) | ✅ `AskUserQuestion` — **REQUIRED** | Preload via ToolSearch before first prompt |
206
+ | Cursor / Codex / Antigravity / Copilot | ❌ Text fallback | Plain numbered list |
207
+
208
+ **Claude Code (terminal) — AUQ preload required (ENH-059):**
209
+ Call `ToolSearch` with `query: "select:AskUserQuestion"` before first interactive prompt.
210
+
211
+ **Prompts using AskUserQuestion in this skill:**
212
+ - `--init`: primary color palette selection, font family selection
213
+ - `--init --import`: awesome-design-md catalog picker, apply mode (as-is/customize/reference)
214
+ - `--sync`: conflict resolution per token (Override/Merge/Skip), multi-target selection
215
+ - `--audit`: (report only — no AUQ)
216
+ - `--import`: catalog picker, apply mode
217
+ - Workflow continuation after command completes
218
+ </content>
219
+ </invoke>
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
41
41
  - `config.json` → `update.check: false` → skip this step entirely
42
42
  - Show at most once per session (`update_check_done` session guard)
43
43
  </version_check>
44
+ <persona_context>
45
+ ## Persona Context Injection (ENH-073)
46
+ At skill start, run:
47
+ ```bash
48
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
49
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
50
+ ```
51
+ Inject the output as `## User Persona` context before any task execution.
52
+ Silent if command unavailable or errors.
53
+ </persona_context>
44
54
 
45
55
 
46
56
  <cursor_skill_adapter>
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
41
41
  - `config.json` → `update.check: false` → skip this step entirely
42
42
  - Show at most once per session (`update_check_done` session guard)
43
43
  </version_check>
44
+ <persona_context>
45
+ ## Persona Context Injection (ENH-073)
46
+ At skill start, run:
47
+ ```bash
48
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
49
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
50
+ ```
51
+ Inject the output as `## User Persona` context before any task execution.
52
+ Silent if command unavailable or errors.
53
+ </persona_context>
44
54
 
45
55
 
46
56
  <cursor_skill_adapter>
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
41
41
  - `config.json` → `update.check: false` → skip this step entirely
42
42
  - Show at most once per session (`update_check_done` session guard)
43
43
  </version_check>
44
+ <persona_context>
45
+ ## Persona Context Injection (ENH-073)
46
+ At skill start, run:
47
+ ```bash
48
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
49
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
50
+ ```
51
+ Inject the output as `## User Persona` context before any task execution.
52
+ Silent if command unavailable or errors.
53
+ </persona_context>
44
54
 
45
55
 
46
56
  <cursor_skill_adapter>
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
41
41
  - `config.json` → `update.check: false` → skip this step entirely
42
42
  - Show at most once per session (`update_check_done` session guard)
43
43
  </version_check>
44
+ <persona_context>
45
+ ## Persona Context Injection (ENH-073)
46
+ At skill start, run:
47
+ ```bash
48
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
49
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
50
+ ```
51
+ Inject the output as `## User Persona` context before any task execution.
52
+ Silent if command unavailable or errors.
53
+ </persona_context>
44
54
 
45
55
 
46
56
  <cursor_skill_adapter>
@@ -0,0 +1,207 @@
1
+ <greeting>
2
+ ## Invocation Banner
3
+
4
+ Output this banner as the **first** thing on every invocation — before questions, work, or any other output:
5
+
6
+ ```
7
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
8
+ VIEPILOT ► VP-PERSONA v1.0.0 (fw 2.42.0)
9
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
10
+ ```
11
+ </greeting>
12
+ <cursor_skill_adapter>
13
+ ## A. Skill Invocation
14
+ - Skill được gọi khi user mention `vp-persona`, `/vp-persona`, "persona", "profile", "customize workflow"
15
+ - Treat all user text after the skill mention as `{{VP_ARGS}}`
16
+
17
+ ## B. User Prompting
18
+ Prompt user conversationally with numbered list options.
19
+
20
+ ## C. Tool Usage
21
+ Use Cursor tools: `Shell`, `ReadFile`, `Glob`, `rg`, `ApplyPatch`, `WebSearch`, `WebFetch`, `Subagent`
22
+ </cursor_skill_adapter>
23
+ <scope_policy>
24
+ ## ViePilot Namespace Guard (BUG-004)
25
+ - Default mode: only use and reference `vp-*` skills in ViePilot workflows.
26
+ - External skills (`non vp-*`) are out of framework scope unless user explicitly opts in.
27
+ - If external skills appear in runtime context, ignore them and route with the closest built-in `vp-*` skill.
28
+ </scope_policy>
29
+
30
+ <implementation_routing_guard>
31
+ ## Implementation routing guard (ENH-021)
32
+
33
+ - This skill is **persona management only**: read/write `~/.viepilot/persona.json`, `personas/`, `context-map.json` — does **not** implement shipping code (`lib/`, `tests/`, `bin/`, `workflows/`, `skills/`).
34
+ - For implementing features: use **`/vp-auto`**. For planning: use **`/vp-evolve`**.
35
+ - **Exception:** User **explicit** bypass — state clearly in chat.
36
+ </implementation_routing_guard>
37
+
38
+ <version_check>
39
+ ## Version Update Check (ENH-072)
40
+
41
+ After displaying the greeting banner, run:
42
+ ```bash
43
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" check-update --silent
44
+ ```
45
+
46
+ **If exit code = 1** (update available — new version printed to stdout):
47
+ Display notice banner before any other output:
48
+ ```
49
+ ┌──────────────────────────────────────────────────────────────────┐
50
+ │ ✨ ViePilot {latest_version} available (installed: {current}) │
51
+ │ npm i -g viepilot && vp-tools install --target {adapter_id} │
52
+ └──────────────────────────────────────────────────────────────────┘
53
+ ```
54
+ Replace `{latest_version}` with stdout from the command, `{current}` with the installed version,
55
+ `{adapter_id}` with the active adapter (claude-code / cursor / antigravity / codex / copilot).
56
+
57
+ **If exit code = 0 or command unavailable**: silent, continue.
58
+
59
+ **Suppression rules:**
60
+ - `--no-update-check` flag on skill invocation → skip this step entirely
61
+ - `config.json` → `update.check: false` → skip this step entirely
62
+ - Show at most once per session (`update_check_done` session guard)
63
+ </version_check>
64
+ <persona_context>
65
+ ## Persona Context Injection (ENH-073)
66
+ At skill start, run:
67
+ ```bash
68
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
69
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
70
+ ```
71
+ Inject the output as `## User Persona` context before any task execution.
72
+ Silent if command unavailable or errors.
73
+ </persona_context>
74
+
75
+ <pending_review_check>
76
+ ## Pending Review Notice (ENH-073)
77
+
78
+ At skill start, check if `~/.viepilot/pending-review.md` is non-empty:
79
+ ```bash
80
+ test -s "$HOME/.viepilot/pending-review.md" && cat "$HOME/.viepilot/pending-review.md" | wc -l
81
+ ```
82
+ If the file has entries, show a **one-line notice** (not a blocking prompt):
83
+ ```
84
+ ℹ {N} persona updates auto-applied — review ~/.viepilot/pending-review.md to revert any
85
+ ```
86
+ Show this notice **only on /vp-persona invocation**, not on other skills.
87
+ </pending_review_check>
88
+
89
+ <objective>
90
+ Manage cross-project user personas for ViePilot.
91
+
92
+ Persona is **inferred automatically** from project files + git history — no setup wizard required.
93
+ This skill is for **inspection and optional correction** of the auto-detected persona.
94
+
95
+ **Commands:**
96
+ - `/vp-persona` — Show active persona (inferred fields, confidence, domain, stacks)
97
+ - `/vp-persona --refine` — Field-by-field correction via AUQ (opt-in, not onboarding)
98
+ - `/vp-persona --list` — List all saved personas
99
+ - `/vp-persona --bind . <name>` — Override auto-detection for current dir (correction)
100
+ - `/vp-persona --merge <a> <b>` — Manually create hybrid persona from two named personas
101
+ - `/vp-persona --export` — Print active persona JSON for backup/sharing
102
+ - `/vp-persona --import <file>` — Import persona from JSON file
103
+ - `/vp-persona --reset` — Clear all personas and context-map
104
+
105
+ **Auto-detection (no command needed):**
106
+ On any `vp-*` skill invocation, persona is auto-detected from:
107
+ - Project file signals (package.json, CMakeLists.txt, requirements.txt, etc.)
108
+ - Git history (team size from shortlog, role from file extensions)
109
+ - Context map (previously detected bindings)
110
+ </objective>
111
+
112
+ <process>
113
+
114
+ ### Step 1: Check for pending-review entries
115
+ Run the pending-review check per `<pending_review_check>` above.
116
+
117
+ ### Step 2: Load and display active persona
118
+
119
+ Run:
120
+ ```bash
121
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
122
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona get
123
+ ```
124
+
125
+ Display active persona in a clean format:
126
+ ```
127
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
128
+ Active Persona: {name} [{source}]
129
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
130
+
131
+ Domain: {domain}
132
+ Role: {role}
133
+ Stacks: {stacks}
134
+ Team size: {team_size}
135
+ Output style: {output_style}
136
+ Phase template:{phase_template}
137
+ Confidence: {confidence} {confidence_note}
138
+ Inferred at: {inferred_at}
139
+
140
+ Topic priority: {topic_priority}
141
+ Topic skip: {topic_skip || "(none)"}
142
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
143
+ ```
144
+ Where `{confidence_note}` = "(low — run --refine to correct)" if confidence < 0.6, else "".
145
+
146
+ ### Step 3: Handle --refine
147
+
148
+ Use AUQ for field-by-field correction (only fields the user wants to change):
149
+
150
+ **AUQ sequence (each question is optional — user can skip):**
151
+ 1. Domain: current value shown, ask if correct
152
+ 2. Stacks: current value shown, ask to add/remove
153
+ 3. Output style: lean / balanced / enterprise
154
+ 4. Phase template: from domain pack list or custom
155
+
156
+ After correction: write updated persona to `~/.viepilot/personas/{name}.json`, update active.
157
+
158
+ ### Step 4: Handle --list
159
+
160
+ ```bash
161
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona list
162
+ ```
163
+ Display as table.
164
+
165
+ ### Step 5: Handle --bind . <name>
166
+
167
+ ```bash
168
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona set <name>
169
+ ```
170
+ Update context-map for current directory.
171
+
172
+ ### Step 6: Handle --merge <a> <b>
173
+
174
+ Load both named personas, call `mergePersonas()`, save as `merge-{a}-{b}`, set active.
175
+
176
+ ### Step 7: Handle --export / --import / --reset
177
+
178
+ - `--export`: print `~/.viepilot/personas/{active}.json` content
179
+ - `--import <file>`: read JSON file, write to personas dir, set active
180
+ - `--reset`: delete `~/.viepilot/personas/`, `context-map.json`, `persona.json`
181
+
182
+ </process>
183
+
184
+ <success_criteria>
185
+ - [ ] Active persona shown with all inferred fields
186
+ - [ ] Confidence < 0.6 flagged with note
187
+ - [ ] --refine corrects fields without full re-setup
188
+ - [ ] --list shows all personas with active marker
189
+ - [ ] --bind overrides auto-detection for current dir
190
+ - [ ] --merge creates hybrid persona
191
+ - [ ] pending-review notice shown when entries exist
192
+ </success_criteria>
193
+
194
+ ## Adapter Compatibility
195
+
196
+ ### AskUserQuestion Tool (ENH-073)
197
+
198
+ | Adapter | Interactive Prompts | Notes |
199
+ |---------|---------------------|-------|
200
+ | Claude Code (terminal) | ✅ `AskUserQuestion` — REQUIRED for --refine | Preload via ToolSearch first |
201
+ | Cursor / Codex / Copilot / Antigravity | ❌ Text fallback | Plain numbered list |
202
+
203
+ **Claude Code (terminal) — AUQ preload required (ENH-059):**
204
+ Before the first interactive prompt, call `ToolSearch` with `query: "select:AskUserQuestion"`.
205
+
206
+ **Prompts using AskUserQuestion in this skill:**
207
+ - --refine field correction (domain, stacks, output_style, phase_template)
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
41
41
  - `config.json` → `update.check: false` → skip this step entirely
42
42
  - Show at most once per session (`update_check_done` session guard)
43
43
  </version_check>
44
+ <persona_context>
45
+ ## Persona Context Injection (ENH-073)
46
+ At skill start, run:
47
+ ```bash
48
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
49
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
50
+ ```
51
+ Inject the output as `## User Persona` context before any task execution.
52
+ Silent if command unavailable or errors.
53
+ </persona_context>
44
54
 
45
55
 
46
56
  <cursor_skill_adapter>
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
41
41
  - `config.json` → `update.check: false` → skip this step entirely
42
42
  - Show at most once per session (`update_check_done` session guard)
43
43
  </version_check>
44
+ <persona_context>
45
+ ## Persona Context Injection (ENH-073)
46
+ At skill start, run:
47
+ ```bash
48
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
49
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
50
+ ```
51
+ Inject the output as `## User Persona` context before any task execution.
52
+ Silent if command unavailable or errors.
53
+ </persona_context>
44
54
 
45
55
 
46
56
  <cursor_skill_adapter>
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
41
41
  - `config.json` → `update.check: false` → skip this step entirely
42
42
  - Show at most once per session (`update_check_done` session guard)
43
43
  </version_check>
44
+ <persona_context>
45
+ ## Persona Context Injection (ENH-073)
46
+ At skill start, run:
47
+ ```bash
48
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
49
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
50
+ ```
51
+ Inject the output as `## User Persona` context before any task execution.
52
+ Silent if command unavailable or errors.
53
+ </persona_context>
44
54
 
45
55
 
46
56
  <cursor_skill_adapter>
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
41
41
  - `config.json` → `update.check: false` → skip this step entirely
42
42
  - Show at most once per session (`update_check_done` session guard)
43
43
  </version_check>
44
+ <persona_context>
45
+ ## Persona Context Injection (ENH-073)
46
+ At skill start, run:
47
+ ```bash
48
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
49
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
50
+ ```
51
+ Inject the output as `## User Persona` context before any task execution.
52
+ Silent if command unavailable or errors.
53
+ </persona_context>
44
54
 
45
55
 
46
56
  <cursor_skill_adapter>
@@ -88,11 +98,12 @@ Rollback to any checkpoint safely, with backup and state preservation.
88
98
 
89
99
  <context>
90
100
  Optional flags:
91
- - `--list` : List available checkpoints
101
+ - `--list` : List available checkpoints (plain-text table, no interactive prompt)
92
102
  - `--to <tag>` : Rollback to specific tag
93
103
  - `--latest` : Rollback to latest checkpoint
94
104
  - `--force` : Skip confirmation
95
105
  - `--dry-run` : Show what would happen
106
+ - `--limit N` : Checkpoints per page in interactive selection (default: 10). E.g. `--limit 30` shows 30 per page.
96
107
  </context>
97
108
 
98
109
  <process>
@@ -159,8 +170,30 @@ Update TRACKER.md if needed.
159
170
  ```
160
171
  </process>
161
172
 
173
+ ## Adapter Compatibility
174
+
175
+ ### AskUserQuestion Tool (ENH-075)
176
+ Checkpoint selection uses `AskUserQuestion` on Claude Code (terminal).
177
+
178
+ | Adapter | Interactive Prompts | Notes |
179
+ |---------|---------------------|-------|
180
+ | Claude Code (terminal) | ✅ `AskUserQuestion` — REQUIRED at checkpoint selection | Preload schema via ToolSearch first |
181
+ | Cursor / Codex / Copilot / Antigravity | ❌ Text fallback | Plain numbered list; re-run with `--limit N` for more entries |
182
+
183
+ **Claude Code (terminal) — AUQ preload required (ENH-059):**
184
+ Before the checkpoint selection prompt, call `ToolSearch` with
185
+ `query: "select:AskUserQuestion"` to load the deferred tool schema.
186
+ If ToolSearch fails, fall back to plain-text numbered list.
187
+
188
+ **Prompts using AskUserQuestion in this skill:**
189
+ - Checkpoint selection (Step 1 — tag list + "Show N more →" pagination + "Enter manually")
190
+
162
191
  <success_criteria>
163
192
  - [ ] Checkpoints listed with dates
193
+ - [ ] AUQ checkpoint picker shown on Claude Code terminal (text fallback on other adapters)
194
+ - [ ] "Show N more →" pagination works; disappears when no more checkpoints
195
+ - [ ] `--limit N` controls page size (default: 10)
196
+ - [ ] `--list` flag outputs plain-text table and exits (no AUQ)
164
197
  - [ ] Target validated before rollback
165
198
  - [ ] Backup created before changes
166
199
  - [ ] State files updated after rollback
@@ -37,6 +37,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
37
37
  - `config.json` → `update.check: false` → skip this step entirely
38
38
  - Show at most once per session (`update_check_done` session guard)
39
39
  </version_check>
40
+ <persona_context>
41
+ ## Persona Context Injection (ENH-073)
42
+ At skill start, run:
43
+ ```bash
44
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
45
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
46
+ ```
47
+ Inject the output as `## User Persona` context before any task execution.
48
+ Silent if command unavailable or errors.
49
+ </persona_context>
40
50
 
41
51
 
42
52
  <cursor_skill_adapter>
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
41
41
  - `config.json` → `update.check: false` → skip this step entirely
42
42
  - Show at most once per session (`update_check_done` session guard)
43
43
  </version_check>
44
+ <persona_context>
45
+ ## Persona Context Injection (ENH-073)
46
+ At skill start, run:
47
+ ```bash
48
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
49
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
50
+ ```
51
+ Inject the output as `## User Persona` context before any task execution.
52
+ Silent if command unavailable or errors.
53
+ </persona_context>
44
54
 
45
55
 
46
56
  <cursor_skill_adapter>
@@ -41,6 +41,16 @@ version, `{adapter_id}` with the active adapter (claude-code / cursor / antigrav
41
41
  - `config.json` → `update.check: false` → skip this step entirely
42
42
  - Show at most once per session (`update_check_done` session guard)
43
43
  </version_check>
44
+ <persona_context>
45
+ ## Persona Context Injection (ENH-073)
46
+ At skill start, run:
47
+ ```bash
48
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
49
+ node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
50
+ ```
51
+ Inject the output as `## User Persona` context before any task execution.
52
+ Silent if command unavailable or errors.
53
+ </persona_context>
44
54
 
45
55
 
46
56
  <cursor_skill_adapter>