@hegemonart/get-design-done 1.41.5 → 1.42.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.
Files changed (120) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +49 -0
  4. package/README.md +2 -0
  5. package/dist/claude-code/.claude/skills/add-backlog/SKILL.md +48 -0
  6. package/dist/claude-code/.claude/skills/analyze-dependencies/SKILL.md +95 -0
  7. package/dist/claude-code/.claude/skills/apply-reflections/SKILL.md +92 -0
  8. package/dist/claude-code/.claude/skills/apply-reflections/apply-reflections-procedure.md +170 -0
  9. package/dist/claude-code/.claude/skills/audit/SKILL.md +79 -0
  10. package/dist/claude-code/.claude/skills/bandit-status/SKILL.md +94 -0
  11. package/dist/claude-code/.claude/skills/benchmark/SKILL.md +65 -0
  12. package/dist/claude-code/.claude/skills/bootstrap-ds/SKILL.md +43 -0
  13. package/dist/claude-code/.claude/skills/brief/SKILL.md +128 -0
  14. package/dist/claude-code/.claude/skills/budget/SKILL.md +45 -0
  15. package/dist/claude-code/.claude/skills/cache-manager/SKILL.md +66 -0
  16. package/dist/claude-code/.claude/skills/cache-manager/cache-policy.md +126 -0
  17. package/dist/claude-code/.claude/skills/check-update/SKILL.md +98 -0
  18. package/dist/claude-code/.claude/skills/compare/SKILL.md +82 -0
  19. package/dist/claude-code/.claude/skills/compare/compare-rubric.md +171 -0
  20. package/dist/claude-code/.claude/skills/complete-cycle/SKILL.md +81 -0
  21. package/dist/claude-code/.claude/skills/connections/SKILL.md +71 -0
  22. package/dist/claude-code/.claude/skills/connections/connections-onboarding.md +608 -0
  23. package/dist/claude-code/.claude/skills/continue/SKILL.md +24 -0
  24. package/dist/claude-code/.claude/skills/darkmode/SKILL.md +76 -0
  25. package/dist/claude-code/.claude/skills/darkmode/darkmode-audit-procedure.md +258 -0
  26. package/dist/claude-code/.claude/skills/debug/SKILL.md +41 -0
  27. package/dist/claude-code/.claude/skills/debug/debug-feedback-loops.md +119 -0
  28. package/dist/claude-code/.claude/skills/design/SKILL.md +99 -0
  29. package/dist/claude-code/.claude/skills/design/design-procedure.md +304 -0
  30. package/dist/claude-code/.claude/skills/discover/SKILL.md +72 -0
  31. package/dist/claude-code/.claude/skills/discover/discover-procedure.md +222 -0
  32. package/dist/claude-code/.claude/skills/discuss/SKILL.md +96 -0
  33. package/dist/claude-code/.claude/skills/do/SKILL.md +45 -0
  34. package/dist/claude-code/.claude/skills/explore/SKILL.md +105 -0
  35. package/dist/claude-code/.claude/skills/explore/explore-procedure.md +267 -0
  36. package/dist/claude-code/.claude/skills/export/SKILL.md +30 -0
  37. package/dist/claude-code/.claude/skills/extract-learnings/SKILL.md +98 -0
  38. package/dist/claude-code/.claude/skills/fast/SKILL.md +91 -0
  39. package/dist/claude-code/.claude/skills/figma-extract/SKILL.md +64 -0
  40. package/dist/claude-code/.claude/skills/figma-write/SKILL.md +39 -0
  41. package/dist/claude-code/.claude/skills/graphify/SKILL.md +49 -0
  42. package/dist/claude-code/.claude/skills/health/SKILL.md +99 -0
  43. package/dist/claude-code/.claude/skills/health/health-mcp-detection.md +44 -0
  44. package/dist/claude-code/.claude/skills/health/health-skill-length-report.md +69 -0
  45. package/dist/claude-code/.claude/skills/help/SKILL.md +87 -0
  46. package/dist/claude-code/.claude/skills/list-assumptions/SKILL.md +61 -0
  47. package/dist/claude-code/.claude/skills/locale/SKILL.md +51 -0
  48. package/dist/claude-code/.claude/skills/map/SKILL.md +89 -0
  49. package/dist/claude-code/.claude/skills/migrate/SKILL.md +70 -0
  50. package/dist/claude-code/.claude/skills/new-cycle/SKILL.md +37 -0
  51. package/dist/claude-code/.claude/skills/new-cycle/milestone-completeness-rubric.md +87 -0
  52. package/dist/claude-code/.claude/skills/new-project/SKILL.md +53 -0
  53. package/dist/claude-code/.claude/skills/next/SKILL.md +68 -0
  54. package/dist/claude-code/.claude/skills/note/SKILL.md +48 -0
  55. package/dist/claude-code/.claude/skills/openrouter-status/SKILL.md +86 -0
  56. package/dist/claude-code/.claude/skills/optimize/SKILL.md +97 -0
  57. package/dist/claude-code/.claude/skills/pause/SKILL.md +77 -0
  58. package/dist/claude-code/.claude/skills/peer-cli-add/SKILL.md +88 -0
  59. package/dist/claude-code/.claude/skills/peer-cli-add/peer-cli-protocol.md +161 -0
  60. package/dist/claude-code/.claude/skills/peer-cli-customize/SKILL.md +90 -0
  61. package/dist/claude-code/.claude/skills/peers/SKILL.md +96 -0
  62. package/dist/claude-code/.claude/skills/plan/SKILL.md +105 -0
  63. package/dist/claude-code/.claude/skills/plan/plan-procedure.md +278 -0
  64. package/dist/claude-code/.claude/skills/plant-seed/SKILL.md +48 -0
  65. package/dist/claude-code/.claude/skills/pr-branch/SKILL.md +32 -0
  66. package/dist/claude-code/.claude/skills/progress/SKILL.md +95 -0
  67. package/dist/claude-code/.claude/skills/quality-gate/SKILL.md +90 -0
  68. package/dist/claude-code/.claude/skills/quality-gate/threat-modeling.md +101 -0
  69. package/dist/claude-code/.claude/skills/quick/SKILL.md +44 -0
  70. package/dist/claude-code/.claude/skills/reapply-patches/SKILL.md +32 -0
  71. package/dist/claude-code/.claude/skills/recall/SKILL.md +75 -0
  72. package/dist/claude-code/.claude/skills/reflect/SKILL.md +85 -0
  73. package/dist/claude-code/.claude/skills/reflect/procedures/capability-gap-scan.md +120 -0
  74. package/dist/claude-code/.claude/skills/report-issue/SKILL.md +53 -0
  75. package/dist/claude-code/.claude/skills/report-issue/report-issue-procedure.md +120 -0
  76. package/dist/claude-code/.claude/skills/resume/SKILL.md +93 -0
  77. package/dist/claude-code/.claude/skills/review-backlog/SKILL.md +46 -0
  78. package/dist/claude-code/.claude/skills/review-decisions/SKILL.md +42 -0
  79. package/dist/claude-code/.claude/skills/roi/SKILL.md +54 -0
  80. package/dist/claude-code/.claude/skills/rollout-status/SKILL.md +35 -0
  81. package/dist/claude-code/.claude/skills/router/SKILL.md +89 -0
  82. package/dist/claude-code/.claude/skills/router/capability-gap-emitter.md +65 -0
  83. package/dist/claude-code/.claude/skills/router/router-pick-emitter.md +78 -0
  84. package/dist/claude-code/.claude/skills/router/router-rules.md +84 -0
  85. package/dist/claude-code/.claude/skills/scan/SKILL.md +92 -0
  86. package/dist/claude-code/.claude/skills/scan/scan-procedure.md +732 -0
  87. package/dist/claude-code/.claude/skills/settings/SKILL.md +87 -0
  88. package/dist/claude-code/.claude/skills/ship/SKILL.md +48 -0
  89. package/dist/claude-code/.claude/skills/sketch/SKILL.md +78 -0
  90. package/dist/claude-code/.claude/skills/sketch-wrap-up/SKILL.md +92 -0
  91. package/dist/claude-code/.claude/skills/skill-manifest/SKILL.md +79 -0
  92. package/dist/claude-code/.claude/skills/spike/SKILL.md +67 -0
  93. package/dist/claude-code/.claude/skills/spike-wrap-up/SKILL.md +86 -0
  94. package/dist/claude-code/.claude/skills/start/SKILL.md +67 -0
  95. package/dist/claude-code/.claude/skills/start/start-procedure.md +115 -0
  96. package/dist/claude-code/.claude/skills/stats/SKILL.md +51 -0
  97. package/dist/claude-code/.claude/skills/style/SKILL.md +71 -0
  98. package/dist/claude-code/.claude/skills/style/style-doc-procedure.md +150 -0
  99. package/dist/claude-code/.claude/skills/synthesize/SKILL.md +94 -0
  100. package/dist/claude-code/.claude/skills/timeline/SKILL.md +66 -0
  101. package/dist/claude-code/.claude/skills/todo/SKILL.md +64 -0
  102. package/dist/claude-code/.claude/skills/turn-closeout/SKILL.md +95 -0
  103. package/dist/claude-code/.claude/skills/undo/SKILL.md +31 -0
  104. package/dist/claude-code/.claude/skills/unlock-decision/SKILL.md +54 -0
  105. package/dist/claude-code/.claude/skills/update/SKILL.md +56 -0
  106. package/dist/claude-code/.claude/skills/using-gdd/SKILL.md +78 -0
  107. package/dist/claude-code/.claude/skills/verify/SKILL.md +113 -0
  108. package/dist/claude-code/.claude/skills/verify/verify-procedure.md +512 -0
  109. package/dist/claude-code/.claude/skills/warm-cache/SKILL.md +81 -0
  110. package/dist/claude-code/.claude/skills/watch-authorities/SKILL.md +82 -0
  111. package/dist/claude-code/.claude/skills/zoom-out/SKILL.md +26 -0
  112. package/package.json +4 -1
  113. package/reference/DEPRECATIONS.md +14 -0
  114. package/reference/registry.json +7 -0
  115. package/reference/skill-placeholders.md +71 -0
  116. package/scripts/lib/build/factory.cjs +62 -0
  117. package/scripts/lib/build/harness-configs.cjs +64 -0
  118. package/sdk/cli/commands/build.ts +106 -0
  119. package/sdk/cli/index.js +84 -2
  120. package/sdk/cli/index.ts +7 -0
@@ -0,0 +1,91 @@
1
+ ---
2
+ name: gdd-fast
3
+ description: "Trivial inline design task. No subagents, no planning documents, no pipeline stages. Just do the thing described."
4
+ argument-hint: "<task description>"
5
+ tools: Read, Write, Edit, Bash, Grep, Glob
6
+ disable-model-invocation: true
7
+ ---
8
+
9
+ # /gdd:fast
10
+
11
+ The leanest possible execution path. No subagents, no STATE.md update, no DESIGN-*.md artifacts. Read the target file, apply the change inline, commit.
12
+
13
+ ## When to use
14
+
15
+ - "Change this button's border-radius to 8px"
16
+ - "Add a hover state to the nav links"
17
+ - "Fix the mobile breakpoint on the hero"
18
+ - Single-file or single-component obvious changes
19
+
20
+ ## When NOT to use
21
+
22
+ - Multi-component changes.
23
+ - Anything touching tokens used across the app.
24
+ - Anything requiring a design decision (taste, tradeoff, scope).
25
+ - Use `/gdd:quick` or the full pipeline instead.
26
+
27
+ ## Steps
28
+
29
+ 1. Parse the task description from the argument.
30
+ 2. Use Grep/Glob to locate the target file(s). If ambiguous (>2 candidates), stop and ask the user which to edit — do not guess.
31
+ 3. Read the target file(s).
32
+ 4. Apply the described change with Edit.
33
+ 5. Run a relevant sanity check (grep for the old value to confirm it's gone; grep for the new value to confirm it's in).
34
+ 6. Commit with message: `fix: <task description>` (one commit, one change).
35
+ 7. Print: "Done: <summary of what changed>."
36
+
37
+ ## Do Not
38
+
39
+ - No subagent spawns.
40
+ - No `.design/` writes.
41
+ - No STATE.md mutation.
42
+ - No pipeline stage invocation.
43
+ - Do not proceed if the change turns out to be non-trivial — bail out and recommend `/gdd:quick` or the full pipeline.
44
+ - Do not skip the `capability_gap` emit on bail-out — Stage-0 telemetry depends on it (Phase 29 D-01).
45
+
46
+ ## Emitting capability_gap on no-skill-match
47
+
48
+ If step 2 cannot locate any candidate files for the task description (or all candidates are filtered out as off-topic), or if the change in step 4 turns out to be non-trivial in a way that has no obvious resolution without a dedicated skill/agent, emit ONE `capability_gap` event before returning control to the user. This feeds Phase 29 Stage-0 telemetry — the reflector pattern-detection pass (Plan 29-02) and aggregation (Plan 29-03) read these events from the chain file (`.design/gep/events.jsonl`) to surface recurring capability gaps in `/gdd:apply-reflections`.
49
+
50
+ Synchronous emitter call (via Bash):
51
+
52
+ ```bash
53
+ node -e '
54
+ const { appendChainEvent } = require("./scripts/lib/event-chain.cjs");
55
+ const { createHash, randomUUID } = require("node:crypto");
56
+ const intent = process.env.GDD_INTENT || "";
57
+ const payload = {
58
+ event_id: randomUUID(),
59
+ parent_event_id: null,
60
+ source: "fast",
61
+ context_hash: createHash("sha256").update(intent).digest("hex"),
62
+ intent_summary: intent.slice(0, 256),
63
+ suggested_kind: "skill",
64
+ evidence_refs: [],
65
+ };
66
+ appendChainEvent({
67
+ agent: "fast",
68
+ outcome: "capability_gap",
69
+ payload,
70
+ type: "capability_gap",
71
+ timestamp: new Date().toISOString(),
72
+ sessionId: process.env.GDD_SESSION_ID || "fast-cli",
73
+ });
74
+ '
75
+ ```
76
+
77
+ Notes:
78
+ - `evidence_refs` is empty `[]` for fast (no trajectory in `/gdd:fast` — that path is too lean by design).
79
+ - `parent_event_id` is null (root event for the fast bail-out).
80
+ - `suggested_kind` is `"skill"` because fast bail-outs are usually narrow primitives, not multi-step workflows. Plan 29-03's aggregator may upgrade to `"agent"` if a `context_hash` cluster shows multi-step usage.
81
+ - The emitter MUST NOT block — `appendChainEvent` already swallows IO errors via its existing try/catch (see `scripts/lib/event-chain.cjs:97-105`).
82
+ - The 7-field payload is preserved verbatim through `appendChainEvent`'s opaque-extras pattern; the chain row carries `type`, `timestamp`, `sessionId`, `payload` as opaque caller-supplied fields and is projected back to the events-schema envelope shape by readers (Plan 29-03 aggregator).
83
+
84
+ Trigger conditions:
85
+ - **Trigger 1**: Step 2 returns zero candidate files for the task description (target is genuinely missing).
86
+ - **Trigger 2**: Step 2 returns more than 2 candidates AND the user bail-out in step 2 fires (stop and ask).
87
+ - **Trigger 3**: Step 4 reveals the change is non-trivial in a way that has no obvious primitive resolution (the `## Do Not` "Do not proceed" line fires).
88
+
89
+ MCP-probe failures (connection down, transport-layer errors) do NOT emit `capability_gap` — those are Phase 22 connection-status concerns (D-08).
90
+
91
+ ## FAST COMPLETE
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: gdd-figma-extract
3
+ description: Off-context Figma design-system extraction into a compact local digest (DESIGN.md + tokens.json + components.json). Pulls the file via the Figma REST API and digests it without the raw JSON ever entering the model context.
4
+ ---
5
+
6
+ # gdd-figma-extract
7
+
8
+ Pull a whole Figma design system into a compact, queryable local digest — **without** the raw JSON ever entering Claude context. The heavy lifting runs in tested `.cjs` tools; the model reads only the digest outputs.
9
+
10
+ ## Usage
11
+
12
+ ```
13
+ /gdd:figma-extract <file-key-or-url> # full design-system digest
14
+ /gdd:figma-extract <file-key-or-url> --component Button # ~500-token single-component slice
15
+ ```
16
+
17
+ `<file-key-or-url>` is a Figma file URL (`https://www.figma.com/file/<key>/…` or `/design/<key>/…`) or a bare file key.
18
+
19
+ ## Behavior
20
+
21
+ 1. **Preflight (D-10).** Confirm `FIGMA_TOKEN` is set in the environment:
22
+ ```
23
+ node -e "process.exit(process.env.FIGMA_TOKEN||process.env.FIGMA_PERSONAL_ACCESS_TOKEN?0:1)"
24
+ ```
25
+ If unset, tell the user to `export FIGMA_TOKEN=figd_…` (from https://www.figma.com/developers/api#access-tokens). The token comes from the environment **only** — never ask the user to paste it into a file or the chat, and never echo it back.
26
+
27
+ 2. **Stage 1 — pull.** Pull the file's REST endpoints into the gitignored raw cache (D-09):
28
+ ```
29
+ node scripts/lib/figma-extract/pull.cjs "<file-key-or-url>"
30
+ ```
31
+ This caches to `.figma-extract-cache/raw/<file-key>/` and skips re-pulling when Figma's `version` is unchanged (D-11). Add `--force` to bypass the cache, `--out <dir>` to relocate the cache. The tool prints a JSON summary (endpoints, bytes, cached) on stdout — the raw bodies stay on disk.
32
+
33
+ 3. **Stage 2 — plugin sync (OPTIONAL, Path C).** Only when the design tokens live in Figma Variables that the REST API cannot return (non-Enterprise plans → the pull summary shows `variables` skipped) and the user wants token coverage:
34
+ ```
35
+ node scripts/lib/figma-extract/receiver.cjs --out .figma-extract-cache/raw/<file-key>
36
+ ```
37
+ This binds `127.0.0.1:5179` (D-06). Tell the user to run the dev-installed **"GDD Sync"** plugin in Figma and click **"Export to GDD"** — see `figma-plugin/README.md` for the one-time dev-install. The receiver writes `variables.json` into the cache and exits on receipt or timeout. Skip this stage entirely for design systems whose tokens already come through the REST pull.
38
+
39
+ 4. **Stage 3 — digest.** Transform the cache into the compact digest:
40
+ ```
41
+ node scripts/lib/figma-extract/digest.cjs --raw .figma-extract-cache/raw/<file-key> --out .figma-extract-cache/digest
42
+ ```
43
+ This writes `DESIGN.md`, `tokens.json`, and `components.json`. Add `--prefer-styles` to invert the token priority to styles-first (D-04). Add `--component <name>` (D-08) to emit a single-component slice instead of the full digest.
44
+
45
+ 5. **Read the digest.** Open **only** `.figma-extract-cache/digest/DESIGN.md` (plus `tokens.json` / `components.json` when you need structured data). For a single component, pass `--component <name>` in Stage 3 and read the ~500-token slice instead of the full ~16K-token spec.
46
+
47
+ ## Required Reading
48
+
49
+ - `.figma-extract-cache/digest/DESIGN.md` — the compact human/LLM-readable spec
50
+ - `.figma-extract-cache/digest/tokens.json` — resolved design tokens (when structured token data is needed)
51
+ - `.figma-extract-cache/digest/components.json` — components with variants/props/defaults (when structured component data is needed)
52
+
53
+ ## Notes
54
+
55
+ - Two-stage pipeline (D-01): re-run Stage 3 against an existing cache without re-pulling. The digest does zero network calls.
56
+ - The spike proved **0 Claude tokens** during extraction (898× compression, 223 MB → 254 KB). That property holds only because this skill never surfaces the raw cache.
57
+ - Figma MCP remains the right tool for spot questions on a single live component; this skill is the cheaper path for whole-design-system workflows.
58
+
59
+ ## Do Not
60
+
61
+ - **Do NOT read or `cat` the `raw/*.json` cache** (e.g. `.figma-extract-cache/raw/<file-key>/file.json`). It is tool-internal and often 100+ MB; loading it into context defeats the off-context guarantee (D-12). Read only the digest outputs above.
62
+ - **Do not persist, log, echo, or print `FIGMA_TOKEN`** (D-10). It belongs in the environment only — never write it to a file, a commit, or chat output.
63
+
64
+ ## FIGMA-EXTRACT COMPLETE
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: gdd-figma-write
3
+ description: "Write design decisions from `.design/DESIGN-CONTEXT.md` back into the active Figma file by dispatching the `design-figma-writer` agent in one of three modes (annotate / tokenize / mappings). Use when the user has completed a design pipeline cycle and wants the decisions (layer comments, variable bindings, or Code Connect mappings) reflected in Figma. Operates proposal→confirm with `--dry-run` and `--confirm-shared` flags."
4
+ ---
5
+
6
+ # gdd-figma-write
7
+
8
+ Dispatches the `design-figma-writer` agent to write design decisions back to the open Figma file. The shared probe pattern (ToolSearch → live call → STATE.md write) and connection handshake are documented at `../../reference/shared-preamble.md#connection-handshake-summary` and `../../connections/figma.md`.
9
+
10
+ ## Usage
11
+
12
+ ```
13
+ /get-design-done figma-write <mode> [--dry-run] [--confirm-shared]
14
+ ```
15
+
16
+ Modes:
17
+ - `annotate` — add design decision comments to Figma layers
18
+ - `tokenize` — bind hard-coded color/spacing/type values to Figma variables
19
+ - `mappings` — write Code Connect component↔code file mappings
20
+
21
+ Flags:
22
+ - `--dry-run` — emit the proposal without executing any Figma writes
23
+ - `--confirm-shared` — authorize writes to shared team library components
24
+
25
+ ## Prerequisites
26
+
27
+ 1. Remote Figma MCP registered (writes are remote-only). Preferred: `claude plugin install figma@claude-plugins-official`. Manual: `claude mcp add --transport http figma https://mcp.figma.com/mcp`.
28
+ 2. `.design/DESIGN-CONTEXT.md` exists (run `discover` first)
29
+ 3. `.design/STATE.md` `<connections>` shows `figma: available (…, writes=true)`. If `writes=false` (desktop-only variant), writes are not supported — the agent will STOP with an instruction to install the remote MCP.
30
+
31
+ ## Required Reading
32
+
33
+ Read `.design/STATE.md` and `.design/DESIGN-CONTEXT.md` before dispatching the agent.
34
+
35
+ ## Dispatch
36
+
37
+ <agent>design-figma-writer</agent>
38
+
39
+ Pass through all flags and arguments from the invocation to the agent.
@@ -0,0 +1,49 @@
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.
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: gdd-health
3
+ description: "Reports .design/ artifact health — staleness, missing files, token drift, 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`.
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). 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
@@ -0,0 +1,44 @@
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.
@@ -0,0 +1,69 @@
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.
@@ -0,0 +1,87 @@
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
@@ -0,0 +1,61 @@
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
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: gdd-locale
3
+ description: "Inspects or sets the GDD CLI locale for this project. With no argument, reports the resolved locale (config.locale > env LANG > en), the fallback chain, and per-locale coverage (which message tables are complete vs placeholder). With a <code> (en/ru/uk/de/fr/zh/ja), sets .design/config.json#locale after previewing the change. Localizes --help, common error messages, and skill prompt headers via scripts/lib/i18n/; missing keys fall back to English, so a partial locale never breaks the CLI. Use to switch GDD's own output language."
4
+ argument-hint: "[<code>]"
5
+ user-invocable: true
6
+ tools: Read, Write, Bash, Grep, Glob
7
+ ---
8
+
9
+ # /gdd:locale
10
+
11
+ Closes the English-only CLI gap: GDD's README is multilingual, but `--help`, errors, and skill prompt
12
+ headers spoke English until now. This skill inspects or sets the project's locale. Contract:
13
+ `../../reference/cli-localization.md`.
14
+
15
+ ## Invocation
16
+
17
+ | Command | Behavior |
18
+ |---|---|
19
+ | `/gdd:locale` | Report the resolved locale, the fallback chain, and per-locale coverage. |
20
+ | `/gdd:locale <code>` | Set `.design/config.json#locale` to `<code>` (en/ru/uk/de/fr/zh/ja), after preview. |
21
+
22
+ ## Steps
23
+
24
+ 1. **Resolve current.** Read `.design/config.json#locale` (if any) and the environment, then call the
25
+ resolver to report the active locale + chain:
26
+
27
+ ```bash
28
+ node -e '
29
+ const i = require("./scripts/lib/i18n/index.cjs");
30
+ let cfg = {}; try { cfg = JSON.parse(require("fs").readFileSync(".design/config.json","utf8")); } catch {}
31
+ const loc = i.resolveLocale({ env: process.env, configLocale: cfg.locale });
32
+ const cov = i.KNOWN_LOCALES.map((l) => `${l}:${(i.loadTable(l)._meta||{}).coverage||"?"}`).join(" ");
33
+ console.log(JSON.stringify({ resolved: loc, chain: i.fallbackChain(loc), coverage: cov }));
34
+ '
35
+ ```
36
+
37
+ 2. **No argument** → print the resolved locale, the fallback chain, and the coverage line (which
38
+ tables are `complete` vs `placeholder`). Stop.
39
+ 3. **`<code>` argument** → validate it is in `KNOWN_LOCALES` (en/ru/uk/de/fr/zh/ja). Unknown → print the
40
+ `error.invalid_locale` message + the known list, change nothing.
41
+ 4. **Preview + set.** Show `locale: <old> -> <code>`, then write `locale` into `.design/config.json`
42
+ (create the file if absent, preserving any existing keys). Confirm, and note that missing keys in a
43
+ placeholder locale fall back to English.
44
+
45
+ ## Output
46
+
47
+ End with:
48
+
49
+ ```
50
+ ## LOCALE COMPLETE
51
+ ```