@hegemonart/get-design-done 1.57.2 → 1.58.0
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/.claude-plugin/marketplace.json +4 -4
- package/.claude-plugin/plugin.json +2 -2
- package/CHANGELOG.md +87 -0
- package/README.md +1 -1
- package/SKILL.md +2 -6
- package/connections/cursor.md +0 -1
- package/hooks/gdd-intel-trigger.js +2 -2
- package/package.json +3 -3
- package/reference/DEPRECATIONS.md +18 -11
- package/reference/live-mode-integration.md +1 -1
- package/reference/registry.json +1 -1
- package/reference/skill-graph.md +1 -5
- package/reference/skill-metadata.md +4 -4
- package/reference/skill-placeholders.md +2 -2
- package/scripts/lib/manifest/scaffolder.cjs +1 -1
- package/scripts/lib/manifest/schemas/skills.schema.json +1 -1
- package/scripts/lib/manifest/skills.json +4 -24
- package/scripts/lib/new-addendum.cjs +1 -1
- package/scripts/lib/worktree-resolve.cjs +4 -16
- package/sdk/cli/commands/build.ts +2 -2
- package/sdk/cli/index.js +2 -2
- package/sdk/cli/index.ts +1 -1
- package/skills/README.md +82 -0
- package/skills/bootstrap-ds/SKILL.md +1 -1
- package/skills/compare/SKILL.md +1 -1
- package/skills/new-cycle/SKILL.md +1 -1
- package/skills/new-skill/SKILL.md +5 -5
- package/skills/peer-cli-customize/SKILL.md +0 -1
- package/skills/peers/SKILL.md +1 -1
- package/skills/reflect/procedures/capability-gap-scan.md +0 -1
- package/skills/report-issue/report-issue-procedure.md +0 -1
- package/skills/synthesize/SKILL.md +1 -1
- package/skills/turn-closeout/SKILL.md +1 -1
- package/dist/claude-code/.claude/skills/add-backlog/SKILL.md +0 -48
- package/dist/claude-code/.claude/skills/analyze-dependencies/SKILL.md +0 -95
- package/dist/claude-code/.claude/skills/apply-reflections/SKILL.md +0 -109
- package/dist/claude-code/.claude/skills/apply-reflections/apply-reflections-procedure.md +0 -170
- package/dist/claude-code/.claude/skills/audit/SKILL.md +0 -79
- package/dist/claude-code/.claude/skills/bandit-status/SKILL.md +0 -94
- package/dist/claude-code/.claude/skills/benchmark/SKILL.md +0 -65
- package/dist/claude-code/.claude/skills/bootstrap-ds/SKILL.md +0 -43
- package/dist/claude-code/.claude/skills/brief/SKILL.md +0 -145
- package/dist/claude-code/.claude/skills/budget/SKILL.md +0 -45
- package/dist/claude-code/.claude/skills/cache-manager/SKILL.md +0 -66
- package/dist/claude-code/.claude/skills/cache-manager/cache-policy.md +0 -126
- package/dist/claude-code/.claude/skills/check-update/SKILL.md +0 -98
- package/dist/claude-code/.claude/skills/compare/SKILL.md +0 -82
- package/dist/claude-code/.claude/skills/compare/compare-rubric.md +0 -171
- package/dist/claude-code/.claude/skills/complete-cycle/SKILL.md +0 -81
- package/dist/claude-code/.claude/skills/connections/SKILL.md +0 -71
- package/dist/claude-code/.claude/skills/connections/connections-onboarding.md +0 -608
- package/dist/claude-code/.claude/skills/context/SKILL.md +0 -137
- package/dist/claude-code/.claude/skills/continue/SKILL.md +0 -24
- package/dist/claude-code/.claude/skills/darkmode/SKILL.md +0 -76
- package/dist/claude-code/.claude/skills/darkmode/darkmode-audit-procedure.md +0 -258
- package/dist/claude-code/.claude/skills/debug/SKILL.md +0 -41
- package/dist/claude-code/.claude/skills/debug/debug-feedback-loops.md +0 -119
- package/dist/claude-code/.claude/skills/design/SKILL.md +0 -118
- package/dist/claude-code/.claude/skills/design/design-procedure.md +0 -304
- package/dist/claude-code/.claude/skills/discover/SKILL.md +0 -78
- package/dist/claude-code/.claude/skills/discover/discover-procedure.md +0 -222
- package/dist/claude-code/.claude/skills/discuss/SKILL.md +0 -96
- package/dist/claude-code/.claude/skills/do/SKILL.md +0 -45
- package/dist/claude-code/.claude/skills/explore/SKILL.md +0 -118
- package/dist/claude-code/.claude/skills/explore/explore-procedure.md +0 -267
- package/dist/claude-code/.claude/skills/export/SKILL.md +0 -30
- package/dist/claude-code/.claude/skills/extract-learnings/SKILL.md +0 -114
- package/dist/claude-code/.claude/skills/fast/SKILL.md +0 -91
- package/dist/claude-code/.claude/skills/figma-extract/SKILL.md +0 -64
- package/dist/claude-code/.claude/skills/figma-write/SKILL.md +0 -50
- package/dist/claude-code/.claude/skills/graphify/SKILL.md +0 -49
- package/dist/claude-code/.claude/skills/health/SKILL.md +0 -99
- package/dist/claude-code/.claude/skills/health/health-mcp-detection.md +0 -44
- package/dist/claude-code/.claude/skills/health/health-skill-length-report.md +0 -69
- package/dist/claude-code/.claude/skills/help/SKILL.md +0 -87
- package/dist/claude-code/.claude/skills/instinct/SKILL.md +0 -111
- package/dist/claude-code/.claude/skills/list-assumptions/SKILL.md +0 -61
- package/dist/claude-code/.claude/skills/list-pins/SKILL.md +0 -27
- package/dist/claude-code/.claude/skills/live/SKILL.md +0 -98
- package/dist/claude-code/.claude/skills/locale/SKILL.md +0 -51
- package/dist/claude-code/.claude/skills/map/SKILL.md +0 -89
- package/dist/claude-code/.claude/skills/migrate/SKILL.md +0 -70
- package/dist/claude-code/.claude/skills/migrate-context/SKILL.md +0 -123
- package/dist/claude-code/.claude/skills/new-addendum/SKILL.md +0 -81
- package/dist/claude-code/.claude/skills/new-cycle/SKILL.md +0 -37
- package/dist/claude-code/.claude/skills/new-cycle/milestone-completeness-rubric.md +0 -87
- package/dist/claude-code/.claude/skills/new-project/SKILL.md +0 -53
- package/dist/claude-code/.claude/skills/new-skill/SKILL.md +0 -90
- package/dist/claude-code/.claude/skills/next/SKILL.md +0 -68
- package/dist/claude-code/.claude/skills/note/SKILL.md +0 -48
- package/dist/claude-code/.claude/skills/openrouter-status/SKILL.md +0 -86
- package/dist/claude-code/.claude/skills/optimize/SKILL.md +0 -97
- package/dist/claude-code/.claude/skills/override/SKILL.md +0 -86
- package/dist/claude-code/.claude/skills/paper-write/SKILL.md +0 -54
- package/dist/claude-code/.claude/skills/pause/SKILL.md +0 -77
- package/dist/claude-code/.claude/skills/peer-cli-add/SKILL.md +0 -88
- package/dist/claude-code/.claude/skills/peer-cli-add/peer-cli-protocol.md +0 -161
- package/dist/claude-code/.claude/skills/peer-cli-customize/SKILL.md +0 -90
- package/dist/claude-code/.claude/skills/peers/SKILL.md +0 -96
- package/dist/claude-code/.claude/skills/pencil-write/SKILL.md +0 -54
- package/dist/claude-code/.claude/skills/pin/SKILL.md +0 -37
- package/dist/claude-code/.claude/skills/plan/SKILL.md +0 -105
- package/dist/claude-code/.claude/skills/plan/plan-procedure.md +0 -278
- package/dist/claude-code/.claude/skills/plant-seed/SKILL.md +0 -48
- package/dist/claude-code/.claude/skills/pr-branch/SKILL.md +0 -32
- package/dist/claude-code/.claude/skills/progress/SKILL.md +0 -107
- package/dist/claude-code/.claude/skills/quality-gate/SKILL.md +0 -90
- package/dist/claude-code/.claude/skills/quality-gate/threat-modeling.md +0 -101
- package/dist/claude-code/.claude/skills/quick/SKILL.md +0 -44
- package/dist/claude-code/.claude/skills/reapply-patches/SKILL.md +0 -32
- package/dist/claude-code/.claude/skills/recall/SKILL.md +0 -75
- package/dist/claude-code/.claude/skills/reflect/SKILL.md +0 -85
- package/dist/claude-code/.claude/skills/reflect/procedures/capability-gap-scan.md +0 -120
- package/dist/claude-code/.claude/skills/report-issue/SKILL.md +0 -53
- package/dist/claude-code/.claude/skills/report-issue/report-issue-procedure.md +0 -120
- package/dist/claude-code/.claude/skills/resume/SKILL.md +0 -93
- package/dist/claude-code/.claude/skills/review-backlog/SKILL.md +0 -46
- package/dist/claude-code/.claude/skills/review-decisions/SKILL.md +0 -42
- package/dist/claude-code/.claude/skills/roi/SKILL.md +0 -54
- package/dist/claude-code/.claude/skills/rollout-status/SKILL.md +0 -35
- package/dist/claude-code/.claude/skills/router/SKILL.md +0 -89
- package/dist/claude-code/.claude/skills/router/capability-gap-emitter.md +0 -65
- package/dist/claude-code/.claude/skills/router/router-pick-emitter.md +0 -78
- package/dist/claude-code/.claude/skills/router/router-rules.md +0 -84
- package/dist/claude-code/.claude/skills/scan/SKILL.md +0 -92
- package/dist/claude-code/.claude/skills/scan/scan-procedure.md +0 -732
- package/dist/claude-code/.claude/skills/settings/SKILL.md +0 -87
- package/dist/claude-code/.claude/skills/ship/SKILL.md +0 -48
- package/dist/claude-code/.claude/skills/sketch/SKILL.md +0 -78
- package/dist/claude-code/.claude/skills/sketch-wrap-up/SKILL.md +0 -92
- package/dist/claude-code/.claude/skills/skill-manifest/SKILL.md +0 -79
- package/dist/claude-code/.claude/skills/spike/SKILL.md +0 -67
- package/dist/claude-code/.claude/skills/spike-wrap-up/SKILL.md +0 -86
- package/dist/claude-code/.claude/skills/start/SKILL.md +0 -67
- package/dist/claude-code/.claude/skills/start/start-procedure.md +0 -115
- package/dist/claude-code/.claude/skills/state/SKILL.md +0 -106
- package/dist/claude-code/.claude/skills/stats/SKILL.md +0 -51
- package/dist/claude-code/.claude/skills/style/SKILL.md +0 -71
- package/dist/claude-code/.claude/skills/style/style-doc-procedure.md +0 -150
- package/dist/claude-code/.claude/skills/synthesize/SKILL.md +0 -94
- package/dist/claude-code/.claude/skills/timeline/SKILL.md +0 -66
- package/dist/claude-code/.claude/skills/todo/SKILL.md +0 -64
- package/dist/claude-code/.claude/skills/turn-closeout/SKILL.md +0 -95
- package/dist/claude-code/.claude/skills/undo/SKILL.md +0 -31
- package/dist/claude-code/.claude/skills/unlock-decision/SKILL.md +0 -54
- package/dist/claude-code/.claude/skills/unpin/SKILL.md +0 -31
- package/dist/claude-code/.claude/skills/update/SKILL.md +0 -56
- package/dist/claude-code/.claude/skills/using-gdd/SKILL.md +0 -78
- package/dist/claude-code/.claude/skills/verify/SKILL.md +0 -113
- package/dist/claude-code/.claude/skills/verify/verify-procedure.md +0 -511
- package/dist/claude-code/.claude/skills/warm-cache/SKILL.md +0 -81
- package/dist/claude-code/.claude/skills/watch-authorities/SKILL.md +0 -82
- package/dist/claude-code/.claude/skills/zoom-out/SKILL.md +0 -26
- package/hooks/run-hook.cmd +0 -35
- package/skills/discover/SKILL.md +0 -78
- package/skills/discover/discover-procedure.md +0 -222
- package/skills/new-cycle/milestone-completeness-rubric.md +0 -87
- package/skills/scan/SKILL.md +0 -92
- package/skills/scan/scan-procedure.md +0 -732
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: gdd-graphify
|
|
3
|
-
description: "Manage the Graphify knowledge graph for the current project. Build, query, status, diff. When available, design-planner and design-integration-checker use the graph for pre-search consultation."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# gdd-graphify
|
|
7
|
-
|
|
8
|
-
Thin command wrapper around the GSD graphify tools integration.
|
|
9
|
-
|
|
10
|
-
## Usage
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
/get-design-done graphify build # Build or rebuild the knowledge graph
|
|
14
|
-
/get-design-done graphify query <term> # Query graph for a node and neighbors
|
|
15
|
-
/get-design-done graphify status # Check graph age, enabled, node count
|
|
16
|
-
/get-design-done graphify diff # Show topology changes since last build
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Behavior
|
|
20
|
-
|
|
21
|
-
1. Read `.design/STATE.md` to check `graphify` status in `<connections>`.
|
|
22
|
-
2. Check `graphify.enabled` in `.design/config.json` via a direct file read (per D-09 - no `config-get` CLI subcommand):
|
|
23
|
-
```
|
|
24
|
-
node -e "try{const c=JSON.parse(require('fs').readFileSync('.design/config.json','utf8'));process.stdout.write(String(c.graphify?.enabled===true))}catch{process.stdout.write('false')}"
|
|
25
|
-
```
|
|
26
|
-
3. If not enabled, print:
|
|
27
|
-
```
|
|
28
|
-
"Graphify is not enabled. Edit `.design/config.json` to set `graphify.enabled: true`."
|
|
29
|
-
"Then run /gdd:graphify build to generate the knowledge graph."
|
|
30
|
-
```
|
|
31
|
-
STOP.
|
|
32
|
-
4. Execute the requested subcommand via the native CLI:
|
|
33
|
-
- build: `node bin/gdd-graph build`
|
|
34
|
-
- query: `node bin/gdd-graph query "<term>" --budget 2000`
|
|
35
|
-
- status: `node bin/gdd-graph status`
|
|
36
|
-
- diff: `node bin/gdd-graph diff`
|
|
37
|
-
5. After `build` completes, update `.design/STATE.md` `<connections>`: `graphify: available`
|
|
38
|
-
|
|
39
|
-
## Required Reading
|
|
40
|
-
|
|
41
|
-
- `.design/STATE.md` - for graphify status in `<connections>`
|
|
42
|
-
- `.design/config.json` - for `graphify.enabled` flag
|
|
43
|
-
|
|
44
|
-
## Notes
|
|
45
|
-
|
|
46
|
-
- Graphify is optional. The native CLI ships in this repo at `bin/gdd-graph` (no external install - Node only).
|
|
47
|
-
- Graph is stored at `.design/graph/graph.json` (Ajv-validated against `scripts/lib/graph/schema.json`).
|
|
48
|
-
- Graph covers source code (`src/`, `components/`). It does NOT index `.design/` artifacts by default.
|
|
49
|
-
- Use `query` with node IDs from the graph schema: `component:<name>`, `token:color/<name>`, `decision:D-<nn>`, etc.
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: gdd-health
|
|
3
|
-
description: "Reports .design/ artifact health - staleness, missing files, token drift, broken state transitions. Activates for requests involving checking .design artifact health, staleness, token drift, or broken state transitions."
|
|
4
|
-
tools: Read, Bash, Glob, Grep, mcp__gdd_state__get
|
|
5
|
-
disable-model-invocation: true
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# /gdd:health
|
|
9
|
-
|
|
10
|
-
**Role:** Report the health of the `.design/` directory. Print a score and list the checks that failed.
|
|
11
|
-
|
|
12
|
-
## Checks
|
|
13
|
-
|
|
14
|
-
1. **Artifact inventory** - `ls -la .design/*.md` with size and mtime. Print a table.
|
|
15
|
-
2. **Missing expected artifacts** - by `stage` field from the `mcp__gdd_state__get` snapshot:
|
|
16
|
-
- `brief` expects BRIEF.md
|
|
17
|
-
- `explore` expects DESIGN.md, DESIGN-DEBT.md, DESIGN-CONTEXT.md
|
|
18
|
-
- `plan` expects DESIGN-PLAN.md
|
|
19
|
-
- `design` expects DESIGN-SUMMARY.md
|
|
20
|
-
- `verify` expects DESIGN-VERIFICATION.md
|
|
21
|
-
FAIL per missing.
|
|
22
|
-
3. **Token drift** - `wc -c .design/DESIGN.md .design/DESIGN-CONTEXT.md`; approx tokens = bytes/4. WARN if combined >40000.
|
|
23
|
-
4. **Aged DESIGN-DEBT** - items in `.design/DESIGN-DEBT.md` not touched in >14 days (file mtime). WARN.
|
|
24
|
-
5. **Broken state transitions** - `stage` field from the snapshot inconsistent with artifacts present (e.g. stage=`verify` but DESIGN-SUMMARY.md missing). FAIL.
|
|
25
|
-
6. **Pending sketch/spike wrap-ups** - any `.design/sketches/*` or `.design/spikes/*` directory lacking a SUMMARY.md. WARN.
|
|
26
|
-
7. **Seed germination** - scan `.design/SEEDS.md` (if present) for seeds whose trigger keywords match the snapshot or CYCLES.md content. List as "Seed ready: <text>".
|
|
27
|
-
|
|
28
|
-
## State snapshot
|
|
29
|
-
|
|
30
|
-
Call `mcp__gdd_state__get` once at the start to pull the snapshot used by checks 2, 5, and 7. Aggregate health math stays prose-level:
|
|
31
|
-
- Count available connections from `<connections>`.
|
|
32
|
-
- Count open blockers from `<blockers>` where `resolved` is absent.
|
|
33
|
-
- Count pending must-haves from `<must_haves>` where `status: "pending"`.
|
|
34
|
-
|
|
35
|
-
## Output
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
━━━ Design health ━━━
|
|
39
|
-
Artifacts:
|
|
40
|
-
BRIEF.md 2.1 KB 2026-04-14
|
|
41
|
-
DESIGN.md 18.4 KB 2026-04-17
|
|
42
|
-
DESIGN-CONTEXT.md 7.2 KB 2026-04-17
|
|
43
|
-
|
|
44
|
-
Checks:
|
|
45
|
-
[PASS] Missing artifacts
|
|
46
|
-
[WARN] Token drift (42,100)
|
|
47
|
-
[PASS] Aged DESIGN-DEBT
|
|
48
|
-
[PASS] State transitions
|
|
49
|
-
[PASS] Sketch/spike wrap-ups
|
|
50
|
-
[PASS] Seed germination
|
|
51
|
-
|
|
52
|
-
Health: 5 / 6 checks passing.
|
|
53
|
-
━━━━━━━━━━━━━━━━━━━━━
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
## Figma-extract readiness (figma_extract)
|
|
57
|
-
|
|
58
|
-
After the health table, the `gdd_health` MCP surface (`scripts/lib/health-mirror/index.cjs`) reports a `figma_extract` check so a user knows whether figma-extract is usable. The detail is one of three exact strings:
|
|
59
|
-
|
|
60
|
-
- `figma extract: ready (token set)` - `FIGMA_TOKEN` (or `FIGMA_PERSONAL_ACCESS_TOKEN`) is present (status `ok`).
|
|
61
|
-
- `figma extract: token missing` - no token env is set (status `warn`).
|
|
62
|
-
- `figma extract: plugin sync needed for variables (Free tier detected)` - token present but a prior pull recorded a 403/skip on the Variables REST path, so run the plugin-sync step (status `warn`).
|
|
63
|
-
|
|
64
|
-
Token PRESENCE only is detected (D-10) - the token value is never read, logged, or shown. The Free-tier signal is read from the local raw-pull cache only; no network call is made.
|
|
65
|
-
|
|
66
|
-
## Skill-discipline bootstrap (skill_discipline)
|
|
67
|
-
|
|
68
|
-
The `gdd_health` MCP surface also reports a `skill_discipline` check (Phase 32) confirming the using-gdd SessionStart bootstrap is live - detail is one of three exact strings:
|
|
69
|
-
- `skill-discipline: ready` - `skills/using-gdd/SKILL.md` exists AND `hooks/hooks.json` SessionStart wires `inject-using-gdd.sh` (status `ok`).
|
|
70
|
-
- `skill-discipline: missing using-gdd` (skill absent) or `skill-discipline: hook not wired` (skill present, no SessionStart inject) - both `warn`. The MCP surface also reports a `harness_freshness` check (Phase 44): per-harness `last_verified` age, status-aware (only `tested` harnesses warn at 60d / fail at 180d; others `n/a`). Full taxonomy in `HARNESSES.md`; refresh with `npm run verify:harness <id>`.
|
|
71
|
-
|
|
72
|
-
## Check MCP registration (gdd-mcp)
|
|
73
|
-
|
|
74
|
-
After the health table, inspect whether `gdd-mcp` (Phase 27.7+) is registered with any installed harness and render a one-line status row. Dismissable via `.design/config.json#mcp_nudge=false`. Non-blocking: failure paths render `MCP server: unknown` rather than crash. Full detection procedure (dismissal check, detection via `scripts/lib/install/mcp-register.cjs`, row rendering for claude/codex/both/neither, fallback) lives in `./health-mcp-detection.md`.
|
|
75
|
-
|
|
76
|
-
## Update notice (safe-window surface)
|
|
77
|
-
|
|
78
|
-
After the health table, emit the plugin-update banner if one is present:
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
[ -f .design/update-available.md ] && cat .design/update-available.md
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
Written by `hooks/update-check.sh`; suppressed mid-pipeline and when the latest release is dismissed.
|
|
85
|
-
|
|
86
|
-
## Skill-length report
|
|
87
|
-
|
|
88
|
-
After the health table, surface the Phase 28.5 skill-authoring contract drift signal by running `node scripts/validate-skill-length.cjs --quiet --json` and reading `summary` from stdout. Print two prose lines:
|
|
89
|
-
|
|
90
|
-
- `Skill-length: <total> total | <clean> clean | <warnings> warn (>=100) | <blockers> block (>=250)`
|
|
91
|
-
- If blockers > 0: list each blocker as a row `- <name> (<lines> lines)`. Else: print `All skills within contract.`
|
|
92
|
-
|
|
93
|
-
Thresholds: warn >=100, block >=250 (D-01). Strict description-format off by default (D-02). Then add two compact Phase 50 lines from `scripts/lib/manifest/skills.json`: `Skills: <n>/<total> in v3 description form` (descriptions matching `/Activates for requests involving/i`) and `Composition: <edges> edges | <cycles> cycles` (`composes_with`/`next_skills` fan-out; cycles via `scripts/validate-composition-graph.cjs` when present, else `0`). See `./health-skill-length-report.md` for the JSON shape and threshold rationale.
|
|
94
|
-
|
|
95
|
-
## Do Not
|
|
96
|
-
|
|
97
|
-
- Do not mutate STATE.md - this skill is read-only. Only `mcp__gdd_state__get` is permitted.
|
|
98
|
-
|
|
99
|
-
## HEALTH COMPLETE
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: health-mcp-detection
|
|
3
|
-
type: heuristic
|
|
4
|
-
version: 1.0.0
|
|
5
|
-
phase: 28.5
|
|
6
|
-
tags: [health, mcp, detection, gdd-mcp, registration-nudge]
|
|
7
|
-
last_updated: 2026-05-18
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Health MCP-Registration Detection Procedure
|
|
11
|
-
|
|
12
|
-
Extracted from `skills/health/SKILL.md` per Phase 28.5 D-10 (extract-then-link, never delete content).
|
|
13
|
-
This file documents the canonical procedure for inspecting whether `gdd-mcp` (Phase 27.7+) is
|
|
14
|
-
registered with any installed harness and rendering a one-line status row after the health
|
|
15
|
-
table. The procedure is non-blocking by design: any failure path renders `unknown` rather
|
|
16
|
-
than crashing the skill.
|
|
17
|
-
|
|
18
|
-
## Dismissal check
|
|
19
|
-
|
|
20
|
-
1. Read `.design/config.json` (if present). Parse JSON inside a try/catch.
|
|
21
|
-
2. If `config.mcp_nudge === false`, SKIP this step entirely (render nothing).
|
|
22
|
-
3. On parse failure: default to `mcp_nudge=true` (show the row) - fail-safe per threat T-27.7-04-05.
|
|
23
|
-
|
|
24
|
-
## Detection
|
|
25
|
-
|
|
26
|
-
1. Read `.claude/settings.local.json` (or equivalent harness settings file) and inspect its `mcpServers` object - alternatively run `claude mcp list` / `codex mcp list` if a CLI is available (see fallback below).
|
|
27
|
-
2. Preferred invocation via the install-lib: call `detectMcpRegistration()` from `scripts/lib/install/mcp-register.cjs`. Returns `{harnesses: [{harness, present, registered}], summary}`.
|
|
28
|
-
|
|
29
|
-
## Row rendering
|
|
30
|
-
|
|
31
|
-
Based on the detection result, render exactly ONE of these row strings:
|
|
32
|
-
|
|
33
|
-
- When `claude` and `codex` both present + both registered:
|
|
34
|
-
`MCP server: registered with claude+codex`
|
|
35
|
-
- When only one harness is present and registered:
|
|
36
|
-
`MCP server: registered with claude` (or `MCP server: registered with codex`)
|
|
37
|
-
- When at least one harness is present but `gdd-mcp` is NOT in its registered list:
|
|
38
|
-
`MCP server: not registered (run: npx @hegemonart/get-design-done --register-mcp; dismiss: .design/config.json#mcp_nudge=false)`
|
|
39
|
-
- When neither harness CLI is found on PATH:
|
|
40
|
-
`MCP server: unknown (claude/codex CLI not found)`
|
|
41
|
-
|
|
42
|
-
## Fallback (if `mcp-register.cjs` not yet shipped)
|
|
43
|
-
|
|
44
|
-
Skip this step silently with status `MCP server: unknown`. This step is non-blocking - failures here MUST NOT crash the SKILL.
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# Health skill - skill-length report subsection
|
|
2
|
-
|
|
3
|
-
Phase 28.5-11 / D-11 reference. Read by `skills/health/SKILL.md` to render the
|
|
4
|
-
"Skill-length report" subsection after the standard health checks.
|
|
5
|
-
|
|
6
|
-
## JSON shape (from `validate-skill-length.cjs --quiet --json`)
|
|
7
|
-
|
|
8
|
-
```jsonc
|
|
9
|
-
{
|
|
10
|
-
"summary": {
|
|
11
|
-
"total": 70, // number of SKILL.md files under skills/
|
|
12
|
-
"clean": 70, // skills with 0 errors and 0 warnings
|
|
13
|
-
"warnings": 0, // skills with >=100 lines but <250 (D-01 warn band)
|
|
14
|
-
"blockers": 0 // skills with any block-level error (>=250 lines,
|
|
15
|
-
// missing frontmatter field, description out of
|
|
16
|
-
// range, disable-model-invocation non-whitelisted)
|
|
17
|
-
},
|
|
18
|
-
"skills": [
|
|
19
|
-
{
|
|
20
|
-
"name": "...", // skill folder name (matches skills/<name>/SKILL.md)
|
|
21
|
-
"path": "...", // absolute path to the file on disk
|
|
22
|
-
"lines": 0, // wc -l semantics
|
|
23
|
-
"descriptionLength": 0, // length of frontmatter.description string
|
|
24
|
-
"hasRequiredFields": true,
|
|
25
|
-
"level": "clean", // "clean" | "warn" | "block"
|
|
26
|
-
"errors": [{ "code": "...", "message": "..." }],
|
|
27
|
-
"warnings": [{ "code": "...", "message": "..." }],
|
|
28
|
-
"reasons": ["..."] // human-readable summary lines
|
|
29
|
-
}
|
|
30
|
-
]
|
|
31
|
-
}
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
## Render contract
|
|
35
|
-
|
|
36
|
-
The health skill prints two lines after the existing checks table:
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
Skill-length: <total> total | <clean> clean | <warnings> warn (>=100) | <blockers> block (>=250)
|
|
40
|
-
All skills within contract.
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
If `summary.blockers > 0`, replace the second line with one indented row per
|
|
44
|
-
blocker entry (skills where `level === "block"`):
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
Skill-length: 70 total | 67 clean | 2 warn (>=100) | 1 block (>=250)
|
|
48
|
-
- <name> (<lines> lines)
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## Thresholds (D-01)
|
|
52
|
-
|
|
53
|
-
- `warn >=100` - skill flagged as advisory; CI emits `::warning::` annotation
|
|
54
|
-
but does not fail the build.
|
|
55
|
-
- `block >=250` - skill flagged as blocker; CI emits `::error::` and fails
|
|
56
|
-
the build via exit code 2.
|
|
57
|
-
|
|
58
|
-
## Strict description-format (D-02)
|
|
59
|
-
|
|
60
|
-
`STRICT_DESCRIPTION=1` / `--strict-description` is OFF by default. Phase 33
|
|
61
|
-
will graduate the strict `<what>. Use when <triggers>.` regex from advisory
|
|
62
|
-
to hard-block based on A/B evidence at
|
|
63
|
-
`.design/research/description-format-ab.md`.
|
|
64
|
-
|
|
65
|
-
## Cross-link from health
|
|
66
|
-
|
|
67
|
-
- `skills/health/SKILL.md` - emits the report after the main checks table.
|
|
68
|
-
- `scripts/validate-skill-length.cjs` - provides the JSON.
|
|
69
|
-
- `tests/phase-28.5-baseline.test.cjs` - locks the post-rework distribution.
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: gdd-help
|
|
3
|
-
description: "Lists all available get-design-done commands with one-line descriptions"
|
|
4
|
-
tools: Read
|
|
5
|
-
disable-model-invocation: true
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Get Design Done - Help
|
|
9
|
-
|
|
10
|
-
**Role:** Print a formatted reference of all `/gdd:` commands, grouped by purpose.
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Output
|
|
15
|
-
|
|
16
|
-
Print the following table:
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
━━━ Get Design Done — Command Reference ━━━
|
|
20
|
-
|
|
21
|
-
Pipeline stages (run in order):
|
|
22
|
-
brief Stage 1 — capture problem statement, audience, constraints → BRIEF.md
|
|
23
|
-
explore Stage 2 — inventory scan + design context interview → DESIGN.md, DESIGN-DEBT.md, DESIGN-CONTEXT.md
|
|
24
|
-
plan Stage 3 — decompose into executable tasks → DESIGN-PLAN.md
|
|
25
|
-
design Stage 4 — execute tasks with wave coordination → DESIGN-SUMMARY.md
|
|
26
|
-
verify Stage 5 — audit, verify, score → DESIGN-VERIFICATION.md
|
|
27
|
-
|
|
28
|
-
Standalone analysis:
|
|
29
|
-
style [Component] Generate component handoff doc → DESIGN-STYLE-[Name].md
|
|
30
|
-
darkmode Audit dark mode architecture + contrast → DARKMODE-AUDIT.md
|
|
31
|
-
compare Delta between baseline and verification → COMPARE-REPORT.md
|
|
32
|
-
|
|
33
|
-
Ergonomics:
|
|
34
|
-
next Route to the next pipeline stage based on STATE.md
|
|
35
|
-
help This reference
|
|
36
|
-
progress Show current pipeline state
|
|
37
|
-
health Health check of .design/ artifacts
|
|
38
|
-
quick Fast pass through the whole pipeline
|
|
39
|
-
fast Aggressive speed mode
|
|
40
|
-
|
|
41
|
-
Exploration:
|
|
42
|
-
discuss Open discussion thread with design-discussant agent
|
|
43
|
-
list-assumptions Print active D-XX decisions from STATE.md
|
|
44
|
-
sketch Open a design sketch scratchpad
|
|
45
|
-
sketch-wrap-up Close sketch and merge learnings
|
|
46
|
-
spike Time-boxed exploratory spike
|
|
47
|
-
spike-wrap-up Close spike and capture outcomes
|
|
48
|
-
map Map the codebase structure
|
|
49
|
-
audit Run audit-only pass
|
|
50
|
-
|
|
51
|
-
Maintenance:
|
|
52
|
-
note Record a quick note to STATE.md
|
|
53
|
-
plant-seed Record an idea for later
|
|
54
|
-
add-backlog Append item to backlog
|
|
55
|
-
review-backlog Review pending backlog
|
|
56
|
-
todo List/manage design TODOs
|
|
57
|
-
stats Print pipeline stats
|
|
58
|
-
settings View/edit plugin settings
|
|
59
|
-
update Update the plugin
|
|
60
|
-
reapply-patches Reapply any pending patches
|
|
61
|
-
debug Enter systematic debugging mode
|
|
62
|
-
undo Revert the last stage action
|
|
63
|
-
|
|
64
|
-
Lifecycle:
|
|
65
|
-
new-project Initialize STATE.md + .design/ directory
|
|
66
|
-
new-cycle Start a new design cycle on an existing project
|
|
67
|
-
complete-cycle Archive the current cycle
|
|
68
|
-
pause Pause work and save context
|
|
69
|
-
resume Resume paused work
|
|
70
|
-
do Execute a specific task
|
|
71
|
-
ship Create PR from completed work
|
|
72
|
-
pr-branch Create/switch PR branch
|
|
73
|
-
|
|
74
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
## Update notice (safe-window surface)
|
|
78
|
-
|
|
79
|
-
After the command reference, emit the plugin-update banner if one is present:
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
[ -f .design/update-available.md ] && cat .design/update-available.md
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
Written by `hooks/update-check.sh`; suppressed mid-pipeline and when the latest release is dismissed.
|
|
86
|
-
|
|
87
|
-
## HELP COMPLETE
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: gdd-instinct
|
|
3
|
-
description: "Inspects and manages atomic instinct learning units - small, scoped, confidence-weighted patterns the pipeline accumulates across cycles. Lists the project and global instinct stores, searches them by keyword, and promotes a vetted project instinct to the global store once it has cleared the cross-project gate. Use when the user wants to see what instincts exist, find an instinct by topic, or promote one to global scope. Activates for requests involving instincts, learned patterns, instinct promotion, instinct search, or the instinct store."
|
|
4
|
-
argument-hint: "[list | query <keyword> | promote <id>] [--scope project|global] [--domain <d>]"
|
|
5
|
-
tools: Read, Bash
|
|
6
|
-
user-invocable: true
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# /gdd:instinct
|
|
10
|
-
|
|
11
|
-
**Role:** Front end for the atomic instinct store. An instinct is a single learned pattern with a trigger, a confidence between 0.3 and 0.9, a domain, and a scope. This skill lists, searches, and promotes instincts. It never edits stored units by hand and never invents new ones - the reflector and `/gdd:extract-learnings` author them.
|
|
12
|
-
|
|
13
|
-
The store engine ships at `scripts/lib/instinct-store.cjs` (authored elsewhere - this skill only calls it). Unit shape (YAML frontmatter plus a short body) is specified in `reference/instinct-format.md`. The project store lives at `.design/instincts/instincts.json`; the global store at `~/.claude/gdd/global-instincts.json`.
|
|
14
|
-
|
|
15
|
-
Invoke the engine with `node`, the same way other skills call a `scripts/lib` helper:
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
node "${CLAUDE_PLUGIN_ROOT}/scripts/lib/instinct-store.cjs" <subcommand> [args]
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
If the engine exposes only a module API rather than a CLI, drive it from a short `node -e` script:
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
node -e "const s=require('${CLAUDE_PLUGIN_ROOT}/scripts/lib/instinct-store.cjs'); console.log(JSON.stringify(s.list({scope:process.env.SCOPE})))"
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Invocation Modes
|
|
28
|
-
|
|
29
|
-
| Command | Behavior |
|
|
30
|
-
|---|---|
|
|
31
|
-
| `/gdd:instinct list` | Compact table of stored instincts (default mode). |
|
|
32
|
-
| `/gdd:instinct query "<keyword>"` | Search instincts by keyword; show the top matches. |
|
|
33
|
-
| `/gdd:instinct promote <id>` | Promote one project instinct to the global store (gated). |
|
|
34
|
-
|
|
35
|
-
Flags apply across modes:
|
|
36
|
-
|
|
37
|
-
- `--scope project|global` selects which store to read. Default is `project`.
|
|
38
|
-
- `--domain <d>` filters to one domain (the domain enum is defined in `reference/instinct-format.md`).
|
|
39
|
-
|
|
40
|
-
## list
|
|
41
|
-
|
|
42
|
-
Read the requested store and print a compact table. Call `instinct-store.list({ scope, domain, baseDir })`:
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
node -e "const s=require('${CLAUDE_PLUGIN_ROOT}/scripts/lib/instinct-store.cjs'); \
|
|
46
|
-
const rows=s.list({ scope: process.env.SCOPE || 'project', domain: process.env.DOMAIN || undefined }); \
|
|
47
|
-
console.log(JSON.stringify(rows));"
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Render one row per instinct. Keep it scannable:
|
|
51
|
-
|
|
52
|
-
```
|
|
53
|
-
ID DOMAIN CONF CYCLES TRIGGER
|
|
54
|
-
in-7f3a tokens 0.72 3 palette has no neutral ramp
|
|
55
|
-
in-91bc layout 0.55 2 cards overflow on the 320px breakpoint
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
- `CONF` is the stored confidence (0.3 to 0.9).
|
|
59
|
-
- `CYCLES` is `cycles_seen`.
|
|
60
|
-
- Truncate `TRIGGER` to keep each line on one row.
|
|
61
|
-
|
|
62
|
-
If the store is empty, print: `No instincts in the <scope> store yet. Run /gdd:reflect or /gdd:extract-learnings to accumulate some.`
|
|
63
|
-
|
|
64
|
-
## query
|
|
65
|
-
|
|
66
|
-
Search by keyword and show the closest matches. Call `instinct-store.query(keyword, { scope, baseDir, limit })`. The engine uses an FTS5 index when one is present and falls back to a plain scan otherwise; either path returns the same row shape.
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
node -e "const s=require('${CLAUDE_PLUGIN_ROOT}/scripts/lib/instinct-store.cjs'); \
|
|
70
|
-
const hits=s.query(process.env.KW, { scope: process.env.SCOPE || 'project', limit: 10 }); \
|
|
71
|
-
console.log(JSON.stringify(hits));"
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
Print the top matches in the same table shape as `list`, ordered by the engine's relevance ranking. If there are no matches, say so plainly and suggest a broader keyword. Quote multi-word keywords so the shell passes one argument.
|
|
75
|
-
|
|
76
|
-
## promote
|
|
77
|
-
|
|
78
|
-
Promote a single project instinct into the global store so it applies across every project. Promotion is **gated**: `instinct-store.promote(id, { baseDir })` only succeeds when the instinct has been seen across at least K cycles (K=2) spanning at least M distinct project ids (M=2). The engine enforces the gate; this skill surfaces the outcome and asks the user to confirm before the write.
|
|
79
|
-
|
|
80
|
-
Confirm first. Prefer `@clack/prompts`, and fall back to `AskUserQuestion` when it is absent (mirror the probe in `/gdd:new-skill`):
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
node -e "try { require.resolve('@clack/prompts'); console.log('clack'); } catch { console.log('fallback'); }"
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
- `clack`: drive `clack.confirm({ message: 'Promote <id> to the global store?' })` from a short Node script.
|
|
87
|
-
- `fallback`: ask the same yes or no question with `AskUserQuestion`.
|
|
88
|
-
|
|
89
|
-
On a confirmed yes, run the promotion:
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
node -e "const s=require('${CLAUDE_PLUGIN_ROOT}/scripts/lib/instinct-store.cjs'); \
|
|
93
|
-
console.log(JSON.stringify(s.promote(process.env.ID, {})));"
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Branch on the engine result:
|
|
97
|
-
|
|
98
|
-
- Promotion succeeded: print `Promoted <id> to the global store.` and show the new global row.
|
|
99
|
-
- Gate not met: the engine reports how far the instinct is from the K=2 / M=2 bar. Print that plainly, for example `<id> needs 2 cycles across 2 projects; seen 1 cycle in 1 project so far. Not promoted.` Do not retry and do not force the write.
|
|
100
|
-
- Unknown id: print `No instinct <id> in the project store.` and suggest `/gdd:instinct list`.
|
|
101
|
-
|
|
102
|
-
If the user answers no at the confirm step, print `Promotion cancelled.` and exit without writing.
|
|
103
|
-
|
|
104
|
-
## Do Not
|
|
105
|
-
|
|
106
|
-
- Do not edit `.design/instincts/instincts.json` or the global store by hand. All writes go through `scripts/lib/instinct-store.cjs`.
|
|
107
|
-
- Do not author new instincts here. The reflector and `/gdd:extract-learnings` emit units; this skill reads and promotes them.
|
|
108
|
-
- Do not bypass the promotion gate. If the K=2 / M=2 bar is not met, report it and stop.
|
|
109
|
-
- Do not modify `reference/instinct-format.md` or the store engine.
|
|
110
|
-
|
|
111
|
-
## INSTINCT COMPLETE
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: gdd-list-assumptions
|
|
3
|
-
description: "Surfaces hidden design assumptions baked into the codebase before planning - pattern-based detection plus user-surfaced items."
|
|
4
|
-
argument-hint: "[--area typography|color|layout|motion|a11y]"
|
|
5
|
-
tools: Read, Grep, Glob
|
|
6
|
-
disable-model-invocation: true
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# /gdd:list-assumptions
|
|
10
|
-
|
|
11
|
-
**Role:** Surface implicit design assumptions that were never explicitly decided. Output a numbered list tagging each as `[EXPLICIT]` (found in STATE.md/DESIGN-CONTEXT.md decisions) or `[IMPLICIT]` (inferred from code patterns).
|
|
12
|
-
|
|
13
|
-
## Step 1 - Read explicit decisions
|
|
14
|
-
|
|
15
|
-
Read `.design/STATE.md` `<decisions>` and `.design/DESIGN-CONTEXT.md` (if present). Collect every D-XX as `[EXPLICIT]` entries keyed by category.
|
|
16
|
-
|
|
17
|
-
## Step 2 - Scan codebase for implicit patterns
|
|
18
|
-
|
|
19
|
-
If `--area <name>` is given, restrict to that area. Otherwise scan all.
|
|
20
|
-
|
|
21
|
-
**Layout**
|
|
22
|
-
- Grep for `@media` queries → "Is mobile-first or desktop-first assumed?"
|
|
23
|
-
- Grep for `grid-template`, `flex-direction` → "Is F-pattern or Z-pattern layout assumed?"
|
|
24
|
-
|
|
25
|
-
**Typography**
|
|
26
|
-
- Grep for `font-family` declarations → "Does the chosen font stack assume brand acceptance?"
|
|
27
|
-
- Grep for `font-size: [0-9]+px` with varying values → "Is a modular scale assumed or ad-hoc sizing?"
|
|
28
|
-
|
|
29
|
-
**Color**
|
|
30
|
-
- Grep for hex literals `#[0-9a-fA-F]{3,8}` → "Is the palette assumed to be fixed without a token layer?"
|
|
31
|
-
|
|
32
|
-
**Motion**
|
|
33
|
-
- Grep for `@keyframes`, `transition`, `animate` → "Does the brand tolerate animation?"
|
|
34
|
-
- Grep for `prefers-reduced-motion` → "Is reduced-motion honored or assumed ignored?"
|
|
35
|
-
|
|
36
|
-
**A11y**
|
|
37
|
-
- Grep for `aria-`, `role=`, `alt=` coverage → "Is WCAG AA the target, or AAA?"
|
|
38
|
-
- Grep for `outline: none`, `outline: 0` → "Are focus rings intentionally removed?"
|
|
39
|
-
|
|
40
|
-
For each hit, emit `Detected assumption: [pattern] at [file:line]` and flag as `[IMPLICIT]`.
|
|
41
|
-
|
|
42
|
-
## Step 3 - Output
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
━━━ Design assumptions ━━━
|
|
46
|
-
|
|
47
|
-
Typography
|
|
48
|
-
01 [EXPLICIT] D-03: Font family Inter
|
|
49
|
-
02 [IMPLICIT] 18 px font-size values found — scale not explicit (src/Card.css:12, ...)
|
|
50
|
-
|
|
51
|
-
Color
|
|
52
|
-
03 [IMPLICIT] 47 hex literals — no token layer (see /gdd:discuss color)
|
|
53
|
-
|
|
54
|
-
...
|
|
55
|
-
|
|
56
|
-
N assumptions total — M implicit.
|
|
57
|
-
Next: /gdd:discuss --all to resolve implicit ones.
|
|
58
|
-
━━━━━━━━━━━━━━━━━━━━━━━━
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## LIST-ASSUMPTIONS COMPLETE
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: gdd-list-pins
|
|
3
|
-
description: "Lists pinned skill aliases per harness with their source skill and pin timestamp. Use when you want to see which gdd skills have been pinned as standalone shortcuts and where."
|
|
4
|
-
tools: Read, Bash
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# /gdd:list-pins
|
|
8
|
-
|
|
9
|
-
**Role:** Show every pinned skill alias across the installed harness `skills/` directories. For each one, report the harness it lives in, the on-disk alias directory name, the source skill it points at (from the `<!-- gdd-pinned-skill source=<skill> -->` marker), and when it was pinned (the file modification time).
|
|
10
|
-
|
|
11
|
-
## Steps
|
|
12
|
-
|
|
13
|
-
1. **Run the list CLI.** Invoke the shipped script (it takes no arguments). The plugin root resolves via `CLAUDE_PLUGIN_ROOT` (falling back to the current directory when that variable is absent):
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
node "${CLAUDE_PLUGIN_ROOT:-$(pwd)}/scripts/lib/pin/cli.cjs" list
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
The CLI scans each harness `skills/` directory under the current project, finds the stubs carrying the gdd pin marker, and prints one line per pinned alias in the form `[<config-dir>] <alias> -> source=<skill> (pinned <timestamp>)`.
|
|
20
|
-
|
|
21
|
-
2. **Report the result.** Relay the CLI output verbatim. Exit codes: 0 means one or more pinned aliases were found, 1 means none were found (nothing has been pinned yet), 2 means an error.
|
|
22
|
-
|
|
23
|
-
## Do Not
|
|
24
|
-
|
|
25
|
-
- Do not scan the harness directories by hand. The CLI already enforces the marker check, so only genuine gdd pins are listed.
|
|
26
|
-
|
|
27
|
-
## LIST-PINS COMPLETE
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: gdd-live
|
|
3
|
-
description: "Live in-browser design mode. The user picks a DOM element on a running dev server (via the Claude Preview MCP), the agent generates N design variants in one batch, they hot-swap in place through HMR or preview_eval using a data-gdd-variant marker, the user accepts or discards, and the whole pick-generate-accept loop persists to .design/live-sessions so it survives a crash or resume. Use when the user wants to iterate on the look of a live component against a real running server, asks to try variants on a page, or runs the live command with a url; falls back to a screenshot-only degraded mode on harnesses without MCP support. Activates for requests involving in-browser design iteration, picking an element on a dev server, or generating variants with hot-swap."
|
|
4
|
-
argument-hint: "[--variants N] [--resume <session-id>] [url]"
|
|
5
|
-
tools: Read, Write, Edit, Bash, Glob, Grep, Task
|
|
6
|
-
user-invocable: true
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# gdd-live - Live In-Browser Design Mode
|
|
10
|
-
|
|
11
|
-
Pick a DOM element on a running dev server, generate competing design variants, hot-swap them in place, and accept the winner as a real source edit. Every step persists to `.design/live-sessions/<id>.json` so the session survives a crash or a later resume.
|
|
12
|
-
|
|
13
|
-
The browser-side runtime, the harness-mode gate, the session store, the events feed, the post-check, the scope guard, and the bandit feed are all separate modules under `scripts/lib/live/`. This skill describes the loop and names the module that owns each step; it does not import them.
|
|
14
|
-
|
|
15
|
-
For the full surface (the Preview MCP tools, the six `live_*` events, the session file, the bandit feed, degraded mode, the scope guard), see `../../reference/live-mode-integration.md`. For the SKILL.md structural contract, see `../../reference/skill-authoring-contract.md`.
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## Arguments
|
|
20
|
-
|
|
21
|
-
- `[url]` - the page to drive. Optional. When omitted, detect the dev server and use its root.
|
|
22
|
-
- `--variants N` - how many variants to generate per pick. Default 3.
|
|
23
|
-
- `--resume <session-id>` - reattach to an in-progress session in `.design/live-sessions/`.
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## BOOT
|
|
28
|
-
|
|
29
|
-
1. Probe the Preview MCP per `../../connections/preview.md`: `ToolSearch({ query: "Claude_Preview" })`, then `mcp__Claude_Preview__preview_list`. Empty ToolSearch means the MCP is not loaded.
|
|
30
|
-
2. Resolve the harness live mode. The capability signal is `capability_matrix.mcp_support` in `scripts/lib/manifest/harnesses.json`, projected by `scripts/lib/live/harness-mode.cjs` (`liveModeFor(harnessId)`). A `puppeteer` result means full live mode; a `degraded` result means screenshot-only.
|
|
31
|
-
3. If `mcp_support` is false for this harness, or Preview is unavailable, enter DEGRADED mode and say so plainly: variants are generated and captured as static screenshots, with no in-page hot-swap. Skip the INJECT and PICK steps; generate against the file the user names instead.
|
|
32
|
-
4. Detect the dev server. Look for Vite, Next, Bun, or a static server (check `package.json` scripts plus a `preview_list` entry). Record the server descriptor on the session.
|
|
33
|
-
5. Open or create the session via `scripts/lib/live/session-store.cjs` (`.design/live-sessions/<id>.json`). On `--resume`, load the named session (see RESUME).
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## INJECT
|
|
38
|
-
|
|
39
|
-
Inject the browser runtime once. Read `RUNTIME_JS` from `scripts/lib/live/runtime.cjs` and evaluate it in the page with `mcp__Claude_Preview__preview_eval`. The runtime is an idempotent IIFE bound to `window.__gddLive`, so a re-inject after navigation rebinds the same singleton rather than stacking listeners. It installs the pick handler and the variant-swap helpers, and stamps the live variant on the element via the `data-gdd-variant` attribute.
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
## PICK
|
|
44
|
-
|
|
45
|
-
1. Arm the picker (`window.__gddLive.pick()`), then guide the user to click the target element. Use `preview_click` and `preview_inspect` to confirm the element and read its computed styles and bounding box.
|
|
46
|
-
2. Read the pick report back. Its fields are documented in `pickReportShape` (selector, tagName, classList, boundingRect, computedStyle subset, current variant). The selector strategy prefers id, then a data-testid, then a tag plus class plus nth-of-type path.
|
|
47
|
-
3. Emit a `live_pick` event through `scripts/lib/live/events.cjs` and append a `pick` entry to the session.
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## GENERATE (one batch)
|
|
52
|
-
|
|
53
|
-
1. Load the relevant Phase 45 canonical reference index FIRST, so variants are grounded in real guidance: the domain index that matches the picked element (for example `../../reference/spatial.md` for layout, `../../reference/interaction.md` for components and a11y, `../../reference/color.md` for color, `../../reference/typography.md` for type, `../../reference/motion.md` for animation).
|
|
54
|
-
2. Generate all N variants in ONE batch (default 3), each a distinct, hypothesis-tagged design direction for the picked element. Do not generate them one at a time.
|
|
55
|
-
3. For each variant: write the change atomically to the implicated source file, then make it live. With HMR running, the file write is enough; otherwise apply the variant in place with `window.__gddLive.swapVariant({ n, style, html })`, which sets `data-gdd-variant="n"` and applies the variant's style or markup.
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## POST-CHECK
|
|
60
|
-
|
|
61
|
-
Run the post-check on each variant via `scripts/lib/live/postcheck.cjs`, which invokes `gdd-detect`. Show the findings inline next to each variant. A variant that trips a finding is flagged, NOT auto-rejected: the user still decides. Append a `live_postcheck` event per variant.
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
## ACCEPT / DISCARD
|
|
66
|
-
|
|
67
|
-
- ACCEPT one variant: apply the chosen variant as the canonical source edit, and revert the others in the page (`window.__gddLive.revert()` on each non-chosen element). Emit a `live_accept` event and feed the outcome to the design-variants bandit via `scripts/lib/live/bandit-feed.cjs` (a dev-time signal). Append an `accept` entry.
|
|
68
|
-
- DISCARD: revert every variant in the page back to its captured original and leave the source untouched. Emit a `live_discard` event and append a `discard` entry.
|
|
69
|
-
|
|
70
|
-
Either way, persist the result through `scripts/lib/live/session-store.cjs` before continuing.
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## PERSIST
|
|
75
|
-
|
|
76
|
-
Every step (boot, pick, generate, post-check, accept, discard) is written to the session file through `scripts/lib/live/session-store.cjs` as it happens. The on-disk event log uses the `pick`, `generate`, `accept`, `discard` kinds; the telemetry stream uses the six `live_*` event types. Writes are atomic, so an interrupted step never leaves a half-written session.
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## RESUME
|
|
81
|
-
|
|
82
|
-
With `--resume <session-id>`, load the named session from `.design/live-sessions/`. Only an `in_progress` session is resumable. Offer the user two choices: continue from the last recorded event (report what that was, for example "last pick was the primary button"), or start fresh (open a new session and leave the old one intact). Never silently replay completed events.
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## SCOPE GUARD
|
|
87
|
-
|
|
88
|
-
Never write outside the source files implicated by the picked element. Run every proposed write through `scripts/lib/live/scope-guard.cjs`, which maps the picked selector to its owning source files and rejects edits that fall outside them. If a variant would need a change beyond that scope (a shared token, a parent layout, a new dependency), stop and surface it to the user rather than widening the blast radius.
|
|
89
|
-
|
|
90
|
-
## Constraints
|
|
91
|
-
|
|
92
|
-
- Do NOT edit files outside the picked element's implicated sources (enforced by the scope guard).
|
|
93
|
-
- Do NOT generate variants one at a time; generate the full batch, then swap.
|
|
94
|
-
- Do NOT auto-reject a variant on a post-check finding; flag it and let the user decide.
|
|
95
|
-
- In DEGRADED mode, state up front that hot-swap is unavailable and fall back to screenshots.
|
|
96
|
-
- Persist before every user-facing prompt so a crash never loses accepted work.
|
|
97
|
-
|
|
98
|
-
## LIVE COMPLETE
|