viepilot 2.23.0 → 2.45.2
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.
- package/CHANGELOG.md +288 -0
- package/README.md +6 -6
- package/bin/viepilot.cjs +140 -1
- package/bin/vp-tools.cjs +204 -0
- package/docs/brainstorm/session-2026-04-20.md +261 -0
- package/docs/brainstorm/session-2026-04-24.md +131 -0
- package/docs/brainstorm/session-2026-04-25.md +109 -0
- package/docs/skills-reference.md +22 -0
- package/docs/user/features/adapters.md +2 -2
- package/docs/user/features/scaffold-first.md +62 -0
- package/docs/user/features/skill-registry.md +125 -0
- package/lib/adapters/antigravity.cjs +5 -4
- package/lib/domain-packs/ai-product.json +33 -0
- package/lib/domain-packs/data-science.json +33 -0
- package/lib/domain-packs/devops.json +33 -0
- package/lib/domain-packs/mobile.json +33 -0
- package/lib/domain-packs/web-saas.json +33 -0
- package/lib/skill-installer.cjs +274 -0
- package/lib/skill-registry.cjs +212 -0
- package/lib/viepilot-calibrate.cjs +279 -0
- package/lib/viepilot-persona.cjs +446 -0
- package/lib/viepilot-update.cjs +113 -0
- package/package.json +1 -1
- package/skills/vp-audit/SKILL.md +67 -9
- package/skills/vp-auto/SKILL.md +54 -0
- package/skills/vp-brainstorm/SKILL.md +124 -2
- package/skills/vp-crystallize/SKILL.md +82 -0
- package/skills/vp-debug/SKILL.md +37 -0
- package/skills/vp-design/SKILL.md +219 -0
- package/skills/vp-docs/SKILL.md +37 -0
- package/skills/vp-evolve/SKILL.md +69 -6
- package/skills/vp-info/SKILL.md +37 -0
- package/skills/vp-pause/SKILL.md +37 -0
- package/skills/vp-persona/SKILL.md +207 -0
- package/skills/vp-proposal/SKILL.md +37 -0
- package/skills/vp-request/SKILL.md +62 -6
- package/skills/vp-resume/SKILL.md +37 -0
- package/skills/vp-rollback/SKILL.md +61 -1
- package/skills/vp-skills/SKILL.md +311 -0
- package/skills/vp-status/SKILL.md +37 -0
- package/skills/vp-task/SKILL.md +37 -0
- package/skills/vp-ui-components/SKILL.md +37 -0
- package/skills/vp-update/SKILL.md +37 -0
- package/templates/phase/TASK.md +7 -0
- package/templates/project/PROJECT-CONTEXT.md +76 -0
- package/workflows/audit.md +131 -0
- package/workflows/autonomous.md +199 -0
- package/workflows/brainstorm.md +1172 -9
- package/workflows/crystallize.md +639 -3
- package/workflows/design.md +601 -0
- package/workflows/evolve.md +9 -0
- package/workflows/rollback.md +79 -10
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Brainstorm Session — 2026-04-25
|
|
2
|
+
|
|
3
|
+
## Meta
|
|
4
|
+
- **Session ID**: session-2026-04-25
|
|
5
|
+
- **Topic**: Design.MD × ViePilot Integration (ENH-076)
|
|
6
|
+
- **Status**: Completed
|
|
7
|
+
- **workflow_version**: 2.43.2
|
|
8
|
+
- **Participants**: User + AI
|
|
9
|
+
|
|
10
|
+
## Summary
|
|
11
|
+
Research session trên tiêu chuẩn Design.MD (Google Labs, April 2026) và brainstorm
|
|
12
|
+
cách tích hợp nó toàn diện vào ViePilot workflow — từ brainstorm → crystallize → auto.
|
|
13
|
+
|
|
14
|
+
## Research: Design.MD Standard
|
|
15
|
+
|
|
16
|
+
Design.MD là file specification từ Google Labs (21/04/2026, Apache 2.0) — Markdown + YAML
|
|
17
|
+
front matter mô tả visual design system để AI coding agents hiểu brand identity.
|
|
18
|
+
|
|
19
|
+
- **Creator**: Google Labs / Google Stitch 2.0
|
|
20
|
+
- **Format**: YAML front matter (tokens) + Markdown sections (rationale)
|
|
21
|
+
- **Adopted by**: Claude Code, Cursor, Windsurf, Kiro
|
|
22
|
+
- **Community**: awesome-design-md — 55+ brand examples
|
|
23
|
+
|
|
24
|
+
### Standard sections
|
|
25
|
+
- `colors`: semantic palette (primary, surface, accent, error, success, warning)
|
|
26
|
+
- `typography`: fontFamily, fontSize, fontWeight, lineHeight
|
|
27
|
+
- `spacing`: base unit + scale
|
|
28
|
+
- `rounded`: corner radius tokens
|
|
29
|
+
- `components`: component-specific tokens
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Decisions
|
|
34
|
+
|
|
35
|
+
### D1: Scope — 5 integration points across ViePilot
|
|
36
|
+
1. **vp-brainstorm**: auto-extract design tokens → generate design.md in session dir
|
|
37
|
+
2. **vp-crystallize**: mandatory-acknowledge gate + export to project root
|
|
38
|
+
3. **vp-auto**: preflight reads design.md, injects TOKEN_MAP into UI tasks
|
|
39
|
+
4. **new skill vp-design**: init/sync/audit/import commands
|
|
40
|
+
5. **Architect workspace**: design.html visual page
|
|
41
|
+
|
|
42
|
+
### D2: vp-brainstorm token extraction
|
|
43
|
+
- Triggered when `--ui` flag OR ≥2 design keywords detected
|
|
44
|
+
- tokens extracted to `notes.md ## design_tokens` YAML section
|
|
45
|
+
- design.md written to `.viepilot/ui-direction/{session-id}/design.md`
|
|
46
|
+
|
|
47
|
+
### D3: vp-crystallize gate — mandatory-acknowledge (not hard block)
|
|
48
|
+
- Trigger: design.md exists OR design_tokens in notes.md OR ≥3 design keywords
|
|
49
|
+
- AUQ with 3 options: Export (recommended) / Finalize & export / Skip with note
|
|
50
|
+
- Skip writes `design_md_status: skipped` (idempotent — won't re-ask same session)
|
|
51
|
+
- Export path: Step 1D.14 — after existing coverage exports
|
|
52
|
+
- Output: project root design.md + ARCHITECTURE.md ## Design System + PROJECT-CONTEXT.md flag
|
|
53
|
+
|
|
54
|
+
### D4: vp-auto — 3 injection levels
|
|
55
|
+
- Level 1: Silent context injection (always for UI tasks)
|
|
56
|
+
- Level 2: Checklist items (when task has explicit UI acceptance criteria)
|
|
57
|
+
- Level 3: Post-task compliance audit (when task output is HTML file)
|
|
58
|
+
- UI keyword detection: html/css/style/component/tailwind/layout/button/card/form/page etc.
|
|
59
|
+
- Edge cases: backend-only tasks skip, monorepo nearest-design.md wins
|
|
60
|
+
|
|
61
|
+
### D5: vp-design skill commands
|
|
62
|
+
- `--init`: Q&A from scratch OR import from awesome-design-md (55+ brands)
|
|
63
|
+
- `--sync`: tokens → Tailwind config / CSS variables / SCSS
|
|
64
|
+
- `--audit`: scan implementation vs spec, report deviations
|
|
65
|
+
- `--import [brand]`: fetch community template (Linear, Notion, Stripe...)
|
|
66
|
+
|
|
67
|
+
### D6: ARCHITECTURE.md Design System section format
|
|
68
|
+
- Token summary table (colors/typography/spacing/rounded)
|
|
69
|
+
- Design principles from design.md ## Overview
|
|
70
|
+
- Reference to design.md at project root
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Open Questions
|
|
75
|
+
|
|
76
|
+
- Q1: Should design.md be committed to git by default? (Yes — it's a project artifact like ARCHITECTURE.md)
|
|
77
|
+
- Q2: For vp-design --sync with Tailwind: CSS custom properties or direct tailwind.config.js extension?
|
|
78
|
+
→ Probably both, detected by project structure
|
|
79
|
+
- Q3: awesome-design-md catalog integration — fetch at runtime vs. bundle with ViePilot?
|
|
80
|
+
→ Fetch at runtime (keep ViePilot lean)
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Phases
|
|
85
|
+
|
|
86
|
+
### Phase 1 (ENH-076 core)
|
|
87
|
+
- 76.1: vp-brainstorm design token extraction + design.md generation
|
|
88
|
+
- 76.2: vp-crystallize Step 1D.14 mandatory gate + export pipeline
|
|
89
|
+
- 76.3: vp-auto preflight 5.5 + TOKEN_MAP injection + post-task audit
|
|
90
|
+
- 76.4: new skill vp-design (SKILL.md + workflows/design.md)
|
|
91
|
+
- 76.5: Architect workspace design.html page
|
|
92
|
+
|
|
93
|
+
### Phase 2 (polish)
|
|
94
|
+
- 76.6: awesome-design-md runtime catalog integration
|
|
95
|
+
- 76.7: vp-design --sync multi-target (Tailwind + CSS vars + SCSS)
|
|
96
|
+
- 76.8: vp-design --audit full HTML/CSS scan
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Action Items
|
|
101
|
+
- [ ] Log ENH-076 via /vp-request
|
|
102
|
+
- [ ] Plan phases via /vp-evolve
|
|
103
|
+
- [ ] Execute via /vp-auto
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Project Meta Intake (FEAT-009)
|
|
108
|
+
- Profile already bound — skip intake.
|
|
109
|
+
|
package/docs/skills-reference.md
CHANGED
|
@@ -525,3 +525,25 @@ Place custom `.pptx`/`.docx` files in `.viepilot/proposal-templates/` to overrid
|
|
|
525
525
|
```
|
|
526
526
|
|
|
527
527
|
Full guide: `docs/user/features/proposal.md`
|
|
528
|
+
|
|
529
|
+
---
|
|
530
|
+
|
|
531
|
+
## /vp-skills
|
|
532
|
+
|
|
533
|
+
**Purpose**: Agent-native global skill registry management — scan, list, install, uninstall, update, and inspect third-party skills from any project directory (ENH-062).
|
|
534
|
+
|
|
535
|
+
### Commands
|
|
536
|
+
| Command | Description |
|
|
537
|
+
|---------|-------------|
|
|
538
|
+
| `/vp-skills scan` | Refresh `~/.viepilot/skill-registry.json` by scanning all adapter dirs |
|
|
539
|
+
| `/vp-skills list` | Display indexed skills table |
|
|
540
|
+
| `/vp-skills install <src>` | Install from npm / `github:<user>/<repo>` / local path |
|
|
541
|
+
| `/vp-skills uninstall <id>` | Remove skill from all adapter directories |
|
|
542
|
+
| `/vp-skills update <id>` | Re-install from original source (`skill-meta.json`) |
|
|
543
|
+
| `/vp-skills info <id>` | Show capabilities, best_practices, and adapter paths |
|
|
544
|
+
|
|
545
|
+
### Notes
|
|
546
|
+
- Uses installed vp-tools binary (`~/.claude/viepilot/bin/vp-tools.cjs`) — works from any project directory.
|
|
547
|
+
- Fallback: `~/.cursor/viepilot/bin/vp-tools.cjs` for Cursor adapter.
|
|
548
|
+
- Registry file: `~/.viepilot/skill-registry.json` — shared across all projects.
|
|
549
|
+
- Confirmation AUQ prompt before destructive `uninstall` (Claude Code terminal only).
|
|
@@ -8,7 +8,7 @@ ViePilot supports multiple AI coding platforms via its adapter system (FEAT-013)
|
|
|
8
8
|
|------------|----------|------------|--------------|-------|--------------|
|
|
9
9
|
| `claude-code` | Claude Code *(default)* | `~/.claude/skills/` | `~/.claude/viepilot/` | ✅ Stop, PreToolUse, … | `/vp-status` |
|
|
10
10
|
| `cursor-agent` / `cursor-ide` | Cursor | `~/.cursor/skills/` | `~/.cursor/viepilot/` | — | `/vp-status` |
|
|
11
|
-
| `antigravity` | Google Antigravity | `~/.antigravity/skills/` | `~/.antigravity/viepilot/` | — | `/vp-status` |
|
|
11
|
+
| `antigravity` | Google Antigravity | `~/.gemini/antigravity/skills/` | `~/.gemini/antigravity/viepilot/` | — | `/vp-status` |
|
|
12
12
|
| `codex` | OpenAI Codex CLI | `~/.codex/skills/` | `~/.codex/viepilot/` | — | `$vp-status` |
|
|
13
13
|
| `copilot` | GitHub Copilot | `~/.config/gh-copilot/skills/` | `~/.config/gh-copilot/viepilot/` | — | `/vp-status` |
|
|
14
14
|
|
|
@@ -47,7 +47,7 @@ Skill source files use the neutral placeholder `{envToolDir}` in `execution_cont
|
|
|
47
47
|
At install time, `{envToolDir}` is replaced with each adapter's `executionContextBase`:
|
|
48
48
|
- `claude-code` → `.claude/viepilot`
|
|
49
49
|
- `cursor` → `.cursor/viepilot`
|
|
50
|
-
- `antigravity` → `.antigravity/viepilot`
|
|
50
|
+
- `antigravity` → `.gemini/antigravity/viepilot`
|
|
51
51
|
- `codex` → `.codex/viepilot`
|
|
52
52
|
- `copilot` → `.config/gh-copilot/viepilot`
|
|
53
53
|
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Scaffold-First Gate (BUG-020)
|
|
2
|
+
|
|
3
|
+
`vp-auto` enforces a **scaffold-first** rule for framework-based projects: when a task initializes a new project, the canonical scaffold command MUST run before any framework-generated files are created manually.
|
|
4
|
+
|
|
5
|
+
## How It Works
|
|
6
|
+
|
|
7
|
+
1. **Detection** — vp-auto detects "project setup" tasks by keywords in the task title/objective: "set up", "initialize", "create project", "scaffold", "bootstrap", "new project"
|
|
8
|
+
2. **Marker check** — checks for a framework marker file (e.g. `artisan` for Laravel, `manage.py` for Django) to determine if the project is already scaffolded
|
|
9
|
+
3. **Scaffold command** — if not yet scaffolded, runs the scaffold command from either:
|
|
10
|
+
- `~/.viepilot/stacks/{stack}/SUMMARY.md` → `## Scaffold` → `init_command:` field (takes priority)
|
|
11
|
+
- The built-in heuristic table in `workflows/autonomous.md`
|
|
12
|
+
4. **Block list** — refuses to create framework-native files (artisan, next.config.*, manage.py, nest-cli.json, pom.xml, etc.) without prior scaffold
|
|
13
|
+
|
|
14
|
+
## Adding a Scaffold Command to a Stack
|
|
15
|
+
|
|
16
|
+
In `~/.viepilot/stacks/{your-stack}/SUMMARY.md`, append:
|
|
17
|
+
|
|
18
|
+
```markdown
|
|
19
|
+
## Scaffold
|
|
20
|
+
|
|
21
|
+
init_command: composer create-project laravel/laravel {name}
|
|
22
|
+
marker_file: artisan
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Replace `{name}` with the project directory name placeholder — vp-auto substitutes the actual project name at runtime.
|
|
26
|
+
|
|
27
|
+
## Built-in Supported Stacks
|
|
28
|
+
|
|
29
|
+
| Stack | Scaffold command | Marker file |
|
|
30
|
+
|-------|-----------------|-------------|
|
|
31
|
+
| laravel | `composer create-project laravel/laravel {name}` | `artisan` |
|
|
32
|
+
| laravel-php84 | `composer create-project laravel/laravel:^11 {name}` | `artisan` |
|
|
33
|
+
| nextjs | `npx create-next-app@latest {name}` | `next.config.js` |
|
|
34
|
+
| nextjs-tailwind-shadcn-threejs | `npx create-next-app@latest {name} --typescript --tailwind --eslint --app` | `next.config.js` |
|
|
35
|
+
| nestjs | `npx @nestjs/cli new {name}` | `nest-cli.json` |
|
|
36
|
+
| rails | `rails new {name}` | `config/application.rb` |
|
|
37
|
+
| django | `django-admin startproject {name} .` | `manage.py` |
|
|
38
|
+
| spring-boot* | `spring init --dependencies=web,data-jpa,validation {name}` | `pom.xml` |
|
|
39
|
+
| nuxt / vuejs* | `npx nuxi@latest init {name}` | `nuxt.config.ts` |
|
|
40
|
+
| react | `npx create-react-app {name}` | `src/index.js` |
|
|
41
|
+
| electron | `npx create-electron-app {name}` | `electron-builder.yml` |
|
|
42
|
+
|
|
43
|
+
## Never-Handcraft Block List
|
|
44
|
+
|
|
45
|
+
The following files must never be created manually in a project setup task without first running the scaffold command:
|
|
46
|
+
|
|
47
|
+
- `artisan`, `composer.json` (Laravel)
|
|
48
|
+
- `next.config.js`, `next.config.ts`, `pages/_app.*`, `app/layout.*` (Next.js)
|
|
49
|
+
- `nest-cli.json`, `src/main.ts` + `tsconfig.json` combo (NestJS)
|
|
50
|
+
- `manage.py`, `wsgi.py`, `asgi.py` (Django)
|
|
51
|
+
- `config/application.rb`, `config/routes.rb`, `Gemfile` (Rails)
|
|
52
|
+
- `pom.xml` or `build.gradle` with Spring Boot starters
|
|
53
|
+
|
|
54
|
+
## Bypassing the Gate
|
|
55
|
+
|
|
56
|
+
To override the gate (e.g. the project is already partially set up), add to the task file under `## Implementation Notes`:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
scaffold_gate_waiver: project already scaffolded — artisan exists at {path}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Or at execution time, select "confirm project already scaffolded" at the control-point prompt.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Skill Registry
|
|
2
|
+
|
|
3
|
+
ViePilot can discover and index skills installed across all adapter directories. The registry powers workflow skill integration — brainstorm silently applies relevant skill best practices during UI-Direction sessions, crystallize locks skill decisions, and vp-auto executes with no re-prompting.
|
|
4
|
+
|
|
5
|
+
## Commands
|
|
6
|
+
|
|
7
|
+
| Command | Description |
|
|
8
|
+
|---------|-------------|
|
|
9
|
+
| `vp-tools scan-skills` | Scan all adapter dirs and write `~/.viepilot/skill-registry.json` |
|
|
10
|
+
| `vp-tools list-skills` | Display indexed skills from the registry |
|
|
11
|
+
| `vp-tools install-skill <source>` | Install a third-party skill *(Phase 91 — coming soon)* |
|
|
12
|
+
|
|
13
|
+
## Extended SKILL.md Format
|
|
14
|
+
|
|
15
|
+
Third-party skills (and built-in vp-* skills) can add optional metadata sections to their `SKILL.md`:
|
|
16
|
+
|
|
17
|
+
```markdown
|
|
18
|
+
## Capabilities
|
|
19
|
+
- ui-generation
|
|
20
|
+
- component-design
|
|
21
|
+
- responsive-layout
|
|
22
|
+
|
|
23
|
+
## Tags
|
|
24
|
+
ui, design, frontend, css, html
|
|
25
|
+
|
|
26
|
+
## Best Practices
|
|
27
|
+
- Mobile-first: design breakpoints from 320px up
|
|
28
|
+
- Use design tokens for consistency across components
|
|
29
|
+
- BEM naming convention for CSS class names
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Section rules
|
|
33
|
+
|
|
34
|
+
| Section | Format | Description |
|
|
35
|
+
|---------|--------|-------------|
|
|
36
|
+
| `## Capabilities` | One capability per line (`- item`) | Machine-readable ability tags used for skill matching |
|
|
37
|
+
| `## Tags` | Comma-separated or one per line | Human-readable keywords for discovery |
|
|
38
|
+
| `## Best Practices` | One practice per line (`- item`) | Applied silently when skill is matched in brainstorm/vp-auto |
|
|
39
|
+
|
|
40
|
+
All sections are **optional** — skills without them are still indexed and available.
|
|
41
|
+
|
|
42
|
+
### Backward compatibility
|
|
43
|
+
|
|
44
|
+
Existing `SKILL.md` files that do not contain these sections continue to work without modification. The scanner indexes them with empty `capabilities`, `tags`, and `best_practices` arrays and marks them as `(legacy — no capabilities)` in `list-skills` output.
|
|
45
|
+
|
|
46
|
+
## Scanner
|
|
47
|
+
|
|
48
|
+
`vp-tools scan-skills` traverses the following adapter directories:
|
|
49
|
+
|
|
50
|
+
| Adapter | Skill directory |
|
|
51
|
+
|---------|----------------|
|
|
52
|
+
| Claude Code | `~/.claude/skills/` |
|
|
53
|
+
| Cursor | `~/.cursor/skills/` |
|
|
54
|
+
| Codex | `~/.codex/skills/` |
|
|
55
|
+
| Antigravity | `~/.gemini/antigravity/skills/` |
|
|
56
|
+
| GitHub Copilot | `~/.config/gh-copilot/skills/` |
|
|
57
|
+
|
|
58
|
+
Adapter directories that do not exist are silently skipped. The same skill found in multiple adapter directories is merged into a single registry entry with all adapters listed.
|
|
59
|
+
|
|
60
|
+
## Registry Format
|
|
61
|
+
|
|
62
|
+
The registry is written to `~/.viepilot/skill-registry.json`:
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"version": "1.0",
|
|
67
|
+
"last_scan": "2026-04-20T10:30:00.000Z",
|
|
68
|
+
"scan_paths": [
|
|
69
|
+
"/Users/you/.claude/skills",
|
|
70
|
+
"/Users/you/.cursor/skills"
|
|
71
|
+
],
|
|
72
|
+
"skills": [
|
|
73
|
+
{
|
|
74
|
+
"id": "frontend-design",
|
|
75
|
+
"name": "frontend-design",
|
|
76
|
+
"source": null,
|
|
77
|
+
"version": null,
|
|
78
|
+
"description": "Opinionated frontend design guidance for UI-Direction sessions.",
|
|
79
|
+
"capabilities": ["ui-generation", "component-design", "responsive-layout"],
|
|
80
|
+
"tags": ["ui", "design", "frontend", "css"],
|
|
81
|
+
"best_practices": [
|
|
82
|
+
"Mobile-first: design breakpoints from 320px up",
|
|
83
|
+
"Use design tokens for consistency"
|
|
84
|
+
],
|
|
85
|
+
"adapters": ["claude-code", "cursor"],
|
|
86
|
+
"installed_paths": {
|
|
87
|
+
"claude-code": "/Users/you/.claude/skills/frontend-design",
|
|
88
|
+
"cursor": "/Users/you/.cursor/skills/frontend-design"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Schema reference
|
|
96
|
+
|
|
97
|
+
| Field | Type | Description |
|
|
98
|
+
|-------|------|-------------|
|
|
99
|
+
| `id` | string | Directory name (unique per skill) |
|
|
100
|
+
| `name` | string | Display name (defaults to `id`) |
|
|
101
|
+
| `source` | string \| null | Installation source: `npm:pkg`, `github:org/repo`, `./path`, or `null` for manually placed skills |
|
|
102
|
+
| `version` | string \| null | Version from `skill-meta.json` (future); `null` for legacy skills |
|
|
103
|
+
| `description` | string | First non-heading paragraph from `SKILL.md` |
|
|
104
|
+
| `capabilities` | string[] | From `## Capabilities` section |
|
|
105
|
+
| `tags` | string[] | From `## Tags` section |
|
|
106
|
+
| `best_practices` | string[] | From `## Best Practices` section |
|
|
107
|
+
| `adapters` | string[] | Adapter IDs where this skill is installed |
|
|
108
|
+
| `installed_paths` | object | `{ adapterId: absolutePath }` |
|
|
109
|
+
|
|
110
|
+
## Workflow Integration
|
|
111
|
+
|
|
112
|
+
The registry is used automatically by ViePilot workflows:
|
|
113
|
+
|
|
114
|
+
### Brainstorm (UI-Direction)
|
|
115
|
+
When UI signals are detected during a brainstorm session, relevant skills (matched by `capabilities`) are silently applied — their `best_practices` are included in HTML generation without prompting. Matched skills are recorded in `notes.md` under `## skills_used`.
|
|
116
|
+
|
|
117
|
+
### Crystallize (skill decision lock)
|
|
118
|
+
After the brainstorm scope is locked, crystallize presents the skills used and asks the user to confirm which are required vs optional per phase. The decision is written to `PROJECT-CONTEXT.md` under `## Skills`.
|
|
119
|
+
|
|
120
|
+
### vp-auto (silent execution)
|
|
121
|
+
vp-auto reads `## Skills` from `PROJECT-CONTEXT.md` and injects skill best practices per task — no re-asking. Decisions made at crystallize time are final.
|
|
122
|
+
|
|
123
|
+
## Refreshing the Registry
|
|
124
|
+
|
|
125
|
+
Run `vp-tools scan-skills` any time you install a new skill manually or after `vp-tools install-skill` (which runs it automatically). The registry is not auto-refreshed on session start.
|
|
@@ -6,10 +6,10 @@ const fs = require('fs');
|
|
|
6
6
|
module.exports = {
|
|
7
7
|
id: 'antigravity',
|
|
8
8
|
name: 'Antigravity',
|
|
9
|
-
skillsDir: (home) => path.join(home, '.antigravity', 'skills'),
|
|
10
|
-
viepilotDir: (home) => path.join(home, '.antigravity', 'viepilot'),
|
|
9
|
+
skillsDir: (home) => path.join(home, '.gemini', 'antigravity', 'skills'),
|
|
10
|
+
viepilotDir: (home) => path.join(home, '.gemini', 'antigravity', 'viepilot'),
|
|
11
11
|
// {envToolDir} in SKILL.md files resolves to this value at install time (ENH-035)
|
|
12
|
-
executionContextBase: '.antigravity/viepilot',
|
|
12
|
+
executionContextBase: '.gemini/antigravity/viepilot',
|
|
13
13
|
// Post-install hint shown in "Next actions" after viepilot install
|
|
14
14
|
postInstallHint: 'Open project and run /vp-status',
|
|
15
15
|
hooks: {
|
|
@@ -29,6 +29,7 @@ module.exports = {
|
|
|
29
29
|
],
|
|
30
30
|
isAvailable: (home) => {
|
|
31
31
|
const h = home || os.homedir();
|
|
32
|
-
return fs.existsSync(path.join(h, '.antigravity'))
|
|
32
|
+
return fs.existsSync(path.join(h, '.gemini', 'antigravity'))
|
|
33
|
+
|| fs.existsSync(path.join(h, '.antigravity'));
|
|
33
34
|
}
|
|
34
35
|
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "ai-product",
|
|
3
|
+
"label": "AI Product / LLM Application",
|
|
4
|
+
"topic_priority": ["llm-integration", "rag-pipeline", "prompt-mgmt", "eval", "ux", "guardrails"],
|
|
5
|
+
"extra_topics": [
|
|
6
|
+
{
|
|
7
|
+
"id": "llm-integration",
|
|
8
|
+
"label": "LLM Integration",
|
|
9
|
+
"questions": ["LLM provider (OpenAI/Anthropic/Gemini/local)?", "Model selection strategy (cost vs quality)?", "Streaming vs batch response?", "Fallback chain if primary model fails?"]
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": "rag-pipeline",
|
|
13
|
+
"label": "RAG Pipeline",
|
|
14
|
+
"questions": ["Document ingestion format (PDF/HTML/Markdown)?", "Chunking strategy (fixed/semantic/hierarchical)?", "Vector DB (Pinecone/Qdrant/pgvector/Chroma)?", "Embedding model?", "Retrieval method (semantic/hybrid/BM25)?"]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "prompt-mgmt",
|
|
18
|
+
"label": "Prompt Management",
|
|
19
|
+
"questions": ["Prompt versioning strategy?", "Prompt storage (DB/Git/Langfuse)?", "System prompt vs user prompt separation?", "Prompt injection protection?"]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "eval-feedback",
|
|
23
|
+
"label": "Eval & Feedback Loop",
|
|
24
|
+
"questions": ["Eval framework (RAGAS/DeepEval/custom)?", "Human feedback collection (thumbs up/down/rubric)?", "Evals in CI/CD pipeline?", "Latency + cost tracking per request?"]
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"phase_template": {
|
|
28
|
+
"name": "ai-product",
|
|
29
|
+
"phases": ["LLM Wrapper & Auth", "Prompt Engineering & RAG", "Eval Pipeline", "UX & Feedback Loop", "Guardrails & Cost Control"]
|
|
30
|
+
},
|
|
31
|
+
"architect_pages": ["llm-arch.html", "rag-flow.html"],
|
|
32
|
+
"stacks_hint": ["langchain", "openai", "anthropic", "pgvector", "fastapi", "nextjs", "redis"]
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "data-science",
|
|
3
|
+
"label": "Data Science / ML",
|
|
4
|
+
"topic_priority": ["dataset", "eda", "model-training", "evaluation", "serving", "monitoring"],
|
|
5
|
+
"extra_topics": [
|
|
6
|
+
{
|
|
7
|
+
"id": "dataset",
|
|
8
|
+
"label": "Dataset Management",
|
|
9
|
+
"questions": ["Data sources (structured/unstructured/streaming)?", "Data versioning strategy (DVC/Delta Lake/LakeFS)?", "PII/sensitive data handling?", "Train/val/test split strategy?"]
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": "model-versioning",
|
|
13
|
+
"label": "Model Versioning",
|
|
14
|
+
"questions": ["Model registry (MLflow/W&B/SageMaker)?", "Experiment tracking metadata?", "Artifact storage (S3/GCS/local)?"]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "drift-monitoring",
|
|
18
|
+
"label": "Drift & Quality Monitoring",
|
|
19
|
+
"questions": ["Data drift detection (Evidently/WhyLogs/custom)?", "Model performance degradation alerts?", "Retraining trigger strategy?"]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "eval-pipeline",
|
|
23
|
+
"label": "Evaluation Pipeline",
|
|
24
|
+
"questions": ["Offline eval metrics (AUC/F1/BLEU/ROUGE)?", "Human eval process?", "A/B testing framework for model versions?"]
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"phase_template": {
|
|
28
|
+
"name": "ml-pipeline",
|
|
29
|
+
"phases": ["Data Ingestion & EDA", "Feature Engineering & Training", "Evaluation & Registry", "Serving & API", "Monitoring & Retraining"]
|
|
30
|
+
},
|
|
31
|
+
"architect_pages": ["ml-pipeline.html", "data-lineage.html"],
|
|
32
|
+
"stacks_hint": ["python", "pandas", "pytorch", "fastapi", "mlflow", "postgresql", "redis"]
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "devops",
|
|
3
|
+
"label": "DevOps / Platform Engineering",
|
|
4
|
+
"topic_priority": ["infra", "ci-cd", "observability", "slo", "incident-mgmt", "security"],
|
|
5
|
+
"extra_topics": [
|
|
6
|
+
{
|
|
7
|
+
"id": "iac",
|
|
8
|
+
"label": "Infrastructure as Code",
|
|
9
|
+
"questions": ["IaC tool (Terraform/Pulumi/CloudFormation/CDK)?", "Cloud provider (AWS/GCP/Azure/multi)?", "State backend (S3/GCS/Terraform Cloud)?", "Module/stack organization strategy?"]
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": "ci-cd",
|
|
13
|
+
"label": "CI/CD Pipeline",
|
|
14
|
+
"questions": ["CI platform (GitHub Actions/GitLab CI/CircleCI/Jenkins)?", "Deploy strategy (blue-green/canary/rolling)?", "Secrets management (Vault/AWS SSM/GitHub Secrets)?", "PR-level preview environments?"]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "slo-sla",
|
|
18
|
+
"label": "SLO / SLA",
|
|
19
|
+
"questions": ["Availability target (99.9%/99.99%)?", "Latency SLOs (p95/p99)?", "Error budget policy?", "SLO monitoring tool (Datadog/Prometheus/Grafana)?"]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "incident-mgmt",
|
|
23
|
+
"label": "Incident Management",
|
|
24
|
+
"questions": ["On-call rotation tool (PagerDuty/OpsGenie/Rootly)?", "Runbook format and storage?", "Post-mortem process?", "Alert fatigue mitigation strategy?"]
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"phase_template": {
|
|
28
|
+
"name": "infra-ops",
|
|
29
|
+
"phases": ["Infrastructure Foundation", "CI/CD & Automation", "Observability & Alerting", "Runbooks & Incident Response"]
|
|
30
|
+
},
|
|
31
|
+
"architect_pages": ["infra-topology.html", "slo.html"],
|
|
32
|
+
"stacks_hint": ["terraform", "docker", "kubernetes", "prometheus", "grafana", "github-actions"]
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "mobile",
|
|
3
|
+
"label": "Mobile App",
|
|
4
|
+
"topic_priority": ["auth", "core-features", "offline-sync", "push-notifications", "app-store", "deep-links"],
|
|
5
|
+
"extra_topics": [
|
|
6
|
+
{
|
|
7
|
+
"id": "push-notifications",
|
|
8
|
+
"label": "Push Notifications",
|
|
9
|
+
"questions": ["Push provider (FCM/APNs/OneSignal/Expo)?", "Notification categories and opt-in flow?", "Deep link handling from notification tap?", "Background/foreground handling?"]
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": "offline-sync",
|
|
13
|
+
"label": "Offline Sync",
|
|
14
|
+
"questions": ["Offline-first or online-required?", "Conflict resolution strategy (last-write-wins/CRDT/manual)?", "Local storage (SQLite/Realm/AsyncStorage/Core Data)?", "Sync trigger (background/explicit/realtime)?"]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "app-store",
|
|
18
|
+
"label": "App Store Submission",
|
|
19
|
+
"questions": ["Target platforms (iOS/Android/both)?", "App review checklist (privacy policy, ATT prompt, entitlements)?", "CI/CD for store deployment (Fastlane/EAS/Bitrise)?"]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "deep-links",
|
|
23
|
+
"label": "Deep Links & Universal Links",
|
|
24
|
+
"questions": ["URL scheme vs universal links?", "Deferred deep linking (install → open specific screen)?", "Attribution provider (Branch/AppsFlyer/Adjust)?"]
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"phase_template": {
|
|
28
|
+
"name": "mobile-launch",
|
|
29
|
+
"phases": ["Auth & Navigation", "Core Features", "Offline & Sync", "Store Submission & Launch"]
|
|
30
|
+
},
|
|
31
|
+
"architect_pages": ["mobile-flow.html", "push.html"],
|
|
32
|
+
"stacks_hint": ["react-native", "expo", "flutter", "firebase", "postgresql"]
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "web-saas",
|
|
3
|
+
"label": "Web SaaS",
|
|
4
|
+
"topic_priority": ["auth", "user-data", "api", "billing", "admin", "onboarding", "content-mgmt"],
|
|
5
|
+
"extra_topics": [
|
|
6
|
+
{
|
|
7
|
+
"id": "billing",
|
|
8
|
+
"label": "Billing & Subscriptions",
|
|
9
|
+
"questions": ["Payment provider (Stripe/Paddle/LemonSqueezy)?", "Pricing model (flat/usage/per-seat)?", "Free trial or freemium tier?", "Proration on plan change?"]
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": "multi-tenant",
|
|
13
|
+
"label": "Multi-tenancy",
|
|
14
|
+
"questions": ["Tenant isolation: row-level, schema-per-tenant, or separate DB?", "How are tenants identified (subdomain/slug/org)?", "Cross-tenant data visibility rules?"]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "onboarding",
|
|
18
|
+
"label": "User Onboarding",
|
|
19
|
+
"questions": ["Onboarding flow steps (email verify → profile → invite team)?", "Guided setup wizard?", "Empty-state design for new accounts?"]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": "trial-freemium",
|
|
23
|
+
"label": "Trial / Freemium",
|
|
24
|
+
"questions": ["Trial duration?", "Feature gating strategy (usage caps vs feature flags)?", "Upgrade CTA placement?"]
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"phase_template": {
|
|
28
|
+
"name": "lean-startup",
|
|
29
|
+
"phases": ["Auth & Identity", "Core Features", "Monetization", "Scale & Ops"]
|
|
30
|
+
},
|
|
31
|
+
"architect_pages": ["billing.html", "tenant.html"],
|
|
32
|
+
"stacks_hint": ["nextjs", "nestjs", "postgresql", "stripe", "redis", "tailwind"]
|
|
33
|
+
}
|