@hegemonart/get-design-done 1.0.7

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 (144) hide show
  1. package/.claude-plugin/marketplace.json +63 -0
  2. package/.claude-plugin/plugin.json +54 -0
  3. package/CHANGELOG.md +221 -0
  4. package/LICENSE +21 -0
  5. package/README.md +724 -0
  6. package/SKILL.md +232 -0
  7. package/agents/README.md +226 -0
  8. package/agents/a11y-mapper.md +118 -0
  9. package/agents/component-taxonomy-mapper.md +88 -0
  10. package/agents/design-advisor.md +139 -0
  11. package/agents/design-assumptions-analyzer.md +171 -0
  12. package/agents/design-auditor.md +383 -0
  13. package/agents/design-context-builder.md +544 -0
  14. package/agents/design-context-checker-gate.md +90 -0
  15. package/agents/design-context-checker.md +260 -0
  16. package/agents/design-discussant.md +98 -0
  17. package/agents/design-doc-writer.md +229 -0
  18. package/agents/design-executor.md +452 -0
  19. package/agents/design-figma-writer.md +302 -0
  20. package/agents/design-fixer.md +180 -0
  21. package/agents/design-integration-checker-gate.md +93 -0
  22. package/agents/design-integration-checker.md +326 -0
  23. package/agents/design-pattern-mapper.md +206 -0
  24. package/agents/design-phase-researcher.md +229 -0
  25. package/agents/design-plan-checker.md +164 -0
  26. package/agents/design-planner.md +352 -0
  27. package/agents/design-reflector.md +175 -0
  28. package/agents/design-research-synthesizer.md +127 -0
  29. package/agents/design-verifier-gate.md +97 -0
  30. package/agents/design-verifier.md +605 -0
  31. package/agents/gdd-graphify-sync.md +100 -0
  32. package/agents/gdd-intel-updater.md +88 -0
  33. package/agents/gdd-learnings-extractor.md +85 -0
  34. package/agents/motion-mapper.md +103 -0
  35. package/agents/token-mapper.md +103 -0
  36. package/agents/visual-hierarchy-mapper.md +95 -0
  37. package/connections/chromatic.md +247 -0
  38. package/connections/claude-design.md +190 -0
  39. package/connections/connections.md +218 -0
  40. package/connections/figma-writer.md +139 -0
  41. package/connections/figma.md +146 -0
  42. package/connections/graphify.md +197 -0
  43. package/connections/pinterest.md +153 -0
  44. package/connections/preview.md +173 -0
  45. package/connections/refero.md +189 -0
  46. package/connections/storybook.md +280 -0
  47. package/hooks/budget-enforcer.js +318 -0
  48. package/hooks/context-exhaustion.js +127 -0
  49. package/hooks/gdd-read-injection-scanner.js +44 -0
  50. package/hooks/hooks.json +44 -0
  51. package/package.json +60 -0
  52. package/reference/BRANCH-PROTECTION.md +65 -0
  53. package/reference/DEPRECATIONS.md +41 -0
  54. package/reference/STATE-TEMPLATE.md +200 -0
  55. package/reference/accessibility.md +190 -0
  56. package/reference/anti-patterns.md +336 -0
  57. package/reference/audit-scoring.md +205 -0
  58. package/reference/checklists.md +137 -0
  59. package/reference/config-schema.md +319 -0
  60. package/reference/debugger-philosophy.md +32 -0
  61. package/reference/heuristics.md +201 -0
  62. package/reference/intel-schema.md +266 -0
  63. package/reference/model-prices.md +37 -0
  64. package/reference/model-tiers.md +118 -0
  65. package/reference/motion.md +285 -0
  66. package/reference/parallelism-rules.md +108 -0
  67. package/reference/priority-matrix.md +31 -0
  68. package/reference/project-skills-guide.md +42 -0
  69. package/reference/review-format.md +107 -0
  70. package/reference/schemas/config.schema.json +41 -0
  71. package/reference/schemas/hooks.schema.json +55 -0
  72. package/reference/schemas/intel.schema.json +191 -0
  73. package/reference/schemas/marketplace.schema.json +72 -0
  74. package/reference/schemas/plugin.schema.json +59 -0
  75. package/reference/shared-preamble.md +82 -0
  76. package/reference/typography.md +229 -0
  77. package/scripts/aggregate-agent-metrics.js +144 -0
  78. package/scripts/apply-branch-protection.sh +75 -0
  79. package/scripts/bootstrap-manifest.txt +3 -0
  80. package/scripts/bootstrap.sh +80 -0
  81. package/scripts/build-intel.cjs +458 -0
  82. package/scripts/detect-stale-refs.cjs +101 -0
  83. package/scripts/extract-changelog-section.cjs +57 -0
  84. package/scripts/release-smoke-test.cjs +169 -0
  85. package/scripts/rollback-release.sh +42 -0
  86. package/scripts/run-injection-scanner-ci.cjs +92 -0
  87. package/scripts/validate-frontmatter.cjs +68 -0
  88. package/scripts/validate-schemas.cjs +225 -0
  89. package/scripts/verify-version-sync.cjs +30 -0
  90. package/skills/add-backlog/SKILL.md +47 -0
  91. package/skills/analyze-dependencies/SKILL.md +184 -0
  92. package/skills/apply-reflections/SKILL.md +112 -0
  93. package/skills/audit/SKILL.md +54 -0
  94. package/skills/brief/SKILL.md +75 -0
  95. package/skills/cache-manager/SKILL.md +120 -0
  96. package/skills/compare/SKILL.md +322 -0
  97. package/skills/complete-cycle/SKILL.md +33 -0
  98. package/skills/darkmode/SKILL.md +331 -0
  99. package/skills/debug/SKILL.md +38 -0
  100. package/skills/design/SKILL.md +281 -0
  101. package/skills/discover/SKILL.md +172 -0
  102. package/skills/discuss/SKILL.md +67 -0
  103. package/skills/do/SKILL.md +45 -0
  104. package/skills/explore/SKILL.md +109 -0
  105. package/skills/extract-learnings/SKILL.md +98 -0
  106. package/skills/fast/SKILL.md +44 -0
  107. package/skills/figma-write/SKILL.md +40 -0
  108. package/skills/graphify/SKILL.md +48 -0
  109. package/skills/health/SKILL.md +48 -0
  110. package/skills/help/SKILL.md +76 -0
  111. package/skills/list-assumptions/SKILL.md +60 -0
  112. package/skills/map/SKILL.md +112 -0
  113. package/skills/new-cycle/SKILL.md +35 -0
  114. package/skills/new-project/SKILL.md +53 -0
  115. package/skills/next/SKILL.md +42 -0
  116. package/skills/note/SKILL.md +47 -0
  117. package/skills/optimize/SKILL.md +120 -0
  118. package/skills/pause/SKILL.md +41 -0
  119. package/skills/plan/SKILL.md +251 -0
  120. package/skills/plant-seed/SKILL.md +47 -0
  121. package/skills/pr-branch/SKILL.md +31 -0
  122. package/skills/progress/SKILL.md +60 -0
  123. package/skills/quick/SKILL.md +43 -0
  124. package/skills/reapply-patches/SKILL.md +31 -0
  125. package/skills/reflect/SKILL.md +73 -0
  126. package/skills/resume/SKILL.md +37 -0
  127. package/skills/review-backlog/SKILL.md +45 -0
  128. package/skills/router/SKILL.md +67 -0
  129. package/skills/scan/SKILL.md +721 -0
  130. package/skills/settings/SKILL.md +78 -0
  131. package/skills/ship/SKILL.md +31 -0
  132. package/skills/sketch/SKILL.md +78 -0
  133. package/skills/sketch-wrap-up/SKILL.md +88 -0
  134. package/skills/skill-manifest/SKILL.md +79 -0
  135. package/skills/spike/SKILL.md +67 -0
  136. package/skills/spike-wrap-up/SKILL.md +81 -0
  137. package/skills/stats/SKILL.md +50 -0
  138. package/skills/style/SKILL.md +193 -0
  139. package/skills/synthesize/SKILL.md +93 -0
  140. package/skills/todo/SKILL.md +54 -0
  141. package/skills/undo/SKILL.md +30 -0
  142. package/skills/update/SKILL.md +36 -0
  143. package/skills/verify/SKILL.md +452 -0
  144. package/skills/warm-cache/SKILL.md +113 -0
@@ -0,0 +1,139 @@
1
+ # Figma Writer — Connection Specification
2
+
3
+ This file is the connection specification for the figma-writer capability within the get-design-done pipeline. The figma-writer is a proposal→confirm write agent (`design-figma-writer`) that wraps the `mcp__figma__use_figma` remote MCP to write design decisions back to Figma. It is distinct from the Figma Desktop MCP read connection documented in `connections/figma.md`. See `connections/connections.md` for the full connection index and capability matrix.
4
+
5
+ ---
6
+
7
+ ## Setup
8
+
9
+ **Prerequisites:**
10
+
11
+ - Figma desktop app installed and running (required for read operations via `mcp__figma-desktop__*`)
12
+ - Dev Mode enabled in the Figma desktop app
13
+ - Remote Figma MCP registered for write operations
14
+
15
+ **Register remote MCP (Claude Code):**
16
+
17
+ ```
18
+ claude mcp add figma --transport http https://mcp.figma.com/v1/sse
19
+ ```
20
+
21
+ After running this command, restart the Claude Code session. The remote MCP server authenticates via OAuth at `mcp.figma.com`. On first use, Claude Code will prompt you to complete the OAuth flow.
22
+
23
+ **Verification:**
24
+
25
+ After session restart, run:
26
+
27
+ ```
28
+ ToolSearch({ query: "select:mcp__figma__use_figma", max_results: 1 })
29
+ ```
30
+
31
+ Expect a non-empty result listing `mcp__figma__use_figma`. If empty, the remote MCP is not registered — run the registration command above and restart.
32
+
33
+ ---
34
+
35
+ ## Tools
36
+
37
+ All write operations use the `mcp__figma__` prefix (remote MCP). Read operations use the `mcp__figma-desktop__` prefix (desktop MCP).
38
+
39
+ | Tool | Full name | Returns | Pipeline use |
40
+ |------|-----------|---------|--------------|
41
+ | `use_figma` | `mcp__figma__use_figma` | operation result | all write operations (annotate, tokenize, mappings) |
42
+
43
+ **Important distinction:** `mcp__figma-desktop__*` tools are used for reads only (get_metadata, get_variable_defs). `mcp__figma__use_figma` is the remote MCP used exclusively for writes. The desktop MCP does NOT expose `use_figma` — it is remote-only. Do not attempt to call `mcp__figma-desktop__use_figma` — that tool does not exist.
44
+
45
+ ---
46
+
47
+ ## Three Modes
48
+
49
+ The figma-writer operates in one of three modes per invocation:
50
+
51
+ | Mode | Description | Source data | Figma target |
52
+ |------|-------------|-------------|--------------|
53
+ | `annotate` | Write design decision annotations onto Figma layer comments | D-XX decisions from DESIGN-CONTEXT.md | Layer comments on affected frames/components |
54
+ | `tokenize` | Replace hard-coded color/spacing/type literals with Figma variable references | Color/spacing/typography values from DESIGN-CONTEXT.md; existing variables from `get_variable_defs` | Variable bindings on layer fill/stroke/spacing properties |
55
+ | `mappings` | Write Code Connect mappings linking component instances to code file paths | Component names and file paths from DESIGN-CONTEXT.md | Code Connect entries on Figma component nodes |
56
+
57
+ All three modes follow the proposal→confirm UX: the agent builds a numbered operation list and presents it to the user before executing any write. The user must confirm before `use_figma` is called.
58
+
59
+ ---
60
+
61
+ ## Which Stages Use This Connection
62
+
63
+ | Stage | Agent/Skill | Tool used | Purpose |
64
+ |-------|-------------|-----------|---------|
65
+ | figma-write | `agents/design-figma-writer.md` | `mcp__figma__use_figma` | Write design decisions back to Figma in three modes (annotate/tokenize/mappings) |
66
+ | design | `skills/design/SKILL.md` | (dispatch only) | Offer to spawn design-figma-writer after design-executor completes, when figma_writer: available |
67
+
68
+ ---
69
+
70
+ ## Availability Probe (ToolSearch-only)
71
+
72
+ The figma-writer probe is ToolSearch-only — no live call at probe time. This matches the Refero connection pattern (opt-in tool, no live call needed to confirm availability).
73
+
74
+ ```
75
+ ToolSearch({ query: "select:mcp__figma__use_figma", max_results: 1 })
76
+ → Empty result → figma_writer: not_configured (skip figma-write entirely; log to STATE.md)
77
+ → Non-empty result → figma_writer: available
78
+ ```
79
+
80
+ Write `figma_writer:` status to `.design/STATE.md` `<connections>` immediately after probing.
81
+
82
+ Note: The status key is `figma_writer:` (with underscore). This is distinct from `figma:` (desktop MCP status) and `figma_write:` is not used — the canonical key is `figma_writer:`.
83
+
84
+ ---
85
+
86
+ ## Fallback Behavior
87
+
88
+ When `figma_writer` is `not_configured`, the pipeline degrades gracefully — no error is raised.
89
+
90
+ **figma-write stage:**
91
+ - `figma_writer: not_configured` → skip with note: "Figma write skipped — remote MCP not installed. Register with: claude mcp add figma --transport http https://mcp.figma.com/v1/sse"
92
+
93
+ **design stage:**
94
+ - `figma_writer: not_configured` or absent → skip the figma-write dispatch offer entirely (no prompt, no output)
95
+ - `figma_writer: available` → offer opt-in prompt after design-executor completes
96
+
97
+ **Special case — desktop MCP present but remote absent:**
98
+ If `figma: available` (desktop MCP) but `figma_writer: not_configured` (remote MCP absent), the figma-write capability is still not available. Desktop MCP cannot perform writes. Do not offer figma-write dispatch in this state.
99
+
100
+ ---
101
+
102
+ ## STATE.md Integration
103
+
104
+ The scan stage writes the initial `figma_writer:` status. Subsequent stages read from STATE.md without re-probing.
105
+
106
+ Example `<connections>` block after probing:
107
+
108
+ ```xml
109
+ <connections>
110
+ figma: available
111
+ figma_writer: available
112
+ refero: not_configured
113
+ </connections>
114
+ ```
115
+
116
+ **Status key:** `figma_writer:` (underscore separator)
117
+
118
+ **Status values:**
119
+
120
+ | Value | Meaning |
121
+ |-------|---------|
122
+ | `available` | ToolSearch returned non-empty for `mcp__figma__use_figma` |
123
+ | `not_configured` | ToolSearch returned empty — remote MCP not registered |
124
+
125
+ Note: There is no `unavailable` state for figma_writer — the ToolSearch-only probe cannot detect auth failures. Auth issues surface at execution time when `use_figma` is first called.
126
+
127
+ ---
128
+
129
+ ## Caveats and Pitfalls
130
+
131
+ 1. **`mcp__figma__use_figma` is the remote MCP only.** It is registered as server `figma` via `claude mcp add`. It is NOT the same as the desktop MCP (`mcp__figma-desktop__*`). Running ToolSearch for `figma-desktop` will NOT find `use_figma`. Always use `select:mcp__figma__use_figma` as the probe query.
132
+
133
+ 2. **All writes require user confirmation.** The proposal→confirm UX in design-figma-writer ensures the user reviews all operations before any write is executed. There is no auto-approve mode.
134
+
135
+ 3. **Use `--dry-run` to inspect the proposal without risk.** Pass `--dry-run` to emit the full operation list without calling `use_figma`. Safe to run on production Figma files.
136
+
137
+ 4. **Use `--confirm-shared` for team library components.** Before any write, the agent detects shared team library components via `get_metadata`. If shared components are in the operation list and `--confirm-shared` was not passed, the agent halts and requires the flag. This prevents accidental modification of team-wide design tokens.
138
+
139
+ 5. **Operations execute sequentially, not atomically.** If one operation fails mid-sequence, the agent logs the error and continues with remaining operations. The Figma file may be left in a partially-updated state. The summary lists all failures for manual follow-up.
@@ -0,0 +1,146 @@
1
+ # Figma MCP — Connection Specification
2
+
3
+ This file is the connection specification for the official Figma Desktop MCP within the get-design-done pipeline. It provides the setup guide, tool inventory, per-stage usage, probe pattern, fallback behavior, and anti-patterns. See `connections/connections.md` for the full connection index and capability matrix.
4
+
5
+ ---
6
+
7
+ ## Setup
8
+
9
+ **Prerequisites:**
10
+
11
+ - Figma desktop app installed and running
12
+ - Dev Mode enabled in the Figma desktop app (File menu → Enable Dev Mode, or toggle in the toolbar)
13
+
14
+ **Install command (Claude Code):**
15
+
16
+ ```
17
+ claude mcp add --transport http figma-desktop http://127.0.0.1:3845/mcp
18
+ ```
19
+
20
+ After running this command, restart the Claude Code session. The MCP server connects via HTTP to the Figma desktop app's local MCP endpoint.
21
+
22
+ **Verification:**
23
+
24
+ After session restart, run:
25
+
26
+ ```
27
+ ToolSearch({ query: "figma-desktop", max_results: 10 })
28
+ ```
29
+
30
+ Expect non-empty results listing `mcp__figma-desktop__*` tools. If results are empty, the desktop app is not running or Dev Mode is not enabled — fix both and restart.
31
+
32
+ **Warning — wrong MCP confusion:**
33
+
34
+ This spec targets the **official Figma Desktop MCP** (`mcp__figma-desktop__*` prefix, server name `figma-desktop`, HTTP transport).
35
+
36
+ Do NOT confuse with the southleft `figma-console-mcp` package (registered as `"figma-console"` in `~/.claude/mcp.json`, uses `figma_*` prefix). Both can be active simultaneously. The pipeline uses `mcp__figma-desktop__*` exclusively — it is stable, official, and requires no external package dependency beyond the Figma desktop app.
37
+
38
+ ---
39
+
40
+ ## Tools
41
+
42
+ All tools use the `mcp__figma-desktop__` prefix.
43
+
44
+ | Tool | Full name | Returns | Phase 4 use |
45
+ |------|-----------|---------|-------------|
46
+ | `get_variable_defs` | `mcp__figma-desktop__get_variable_defs` | Variable collection tree: collection ID, mode names, variable names (hierarchical, e.g. `colors/primary/500`), resolved values (hex for COLOR, float for FLOAT), descriptions, scopes | **In scope** — scan: token augmentation (CONN-03); discover: decisions pre-population (CONN-04) |
47
+ | `get_design_context` | `mcp__figma-desktop__get_design_context` | Structured React+Tailwind component tree of the current Figma selection | **In scope (secondary)** — discover: existing design decisions for established Figma systems |
48
+ | `get_screenshot` | `mcp__figma-desktop__get_screenshot` | Screenshot image of the selected Figma layer or frame | Out of scope Phase 4 |
49
+ | `get_metadata` | `mcp__figma-desktop__get_metadata` | Lightweight XML outline: layer IDs, names, types, position/size. Works with no selection open. | **In scope** — used as the availability probe (no file must be open) |
50
+ | `get_code_connect_map` | `mcp__figma-desktop__get_code_connect_map` | Maps Figma component instances to code implementations (file paths, framework labels) | Out of scope Phase 4 |
51
+ | `create_design_system_rules` | `mcp__figma-desktop__create_design_system_rules` | Generates rule files for design system alignment during code generation | Out of scope Phase 4 |
52
+
53
+ `get_metadata` is preferred for probing because it works without a file or selection open, keeping the probe lightweight. `get_variable_defs` is the primary workhorse for token extraction and decisions pre-population.
54
+
55
+ ---
56
+
57
+ ## Which Stages Use This Connection
58
+
59
+ | Stage | Skill/Agent | Tool used | Purpose |
60
+ |-------|------------|-----------|---------|
61
+ | scan | `skills/scan/SKILL.md` | `get_variable_defs` | Token augmentation — supplements grep-based CSS token extraction with Figma variable definitions (CONN-03) |
62
+ | discover | `agents/design-context-builder.md` | `get_variable_defs` | Decisions pre-population — pre-fills D-XX color/spacing/typography decisions from Figma variables before the interview (CONN-04) |
63
+ | plan | — | — | Not currently used |
64
+ | verify | — | — | Not currently used |
65
+
66
+ Both scan and discover call `get_variable_defs` with no explicit selection to retrieve all variables in the active Figma file. If no file is open, the call errors and the stage falls back to its non-Figma path.
67
+
68
+ ---
69
+
70
+ ## Availability Probe
71
+
72
+ **Call ToolSearch first — always.** In Claude Code sessions with many MCP servers, `mcp__figma-desktop__*` tools may be in the deferred tool set (not loaded into context at session start). Calling a deferred tool directly fails silently or errors. ToolSearch loads the tools into context and confirms their presence in a single call.
73
+
74
+ **Figma probe sequence:**
75
+
76
+ ```
77
+ Step 1 — ToolSearch check:
78
+ ToolSearch({ query: "select:mcp__figma-desktop__get_metadata", max_results: 1 })
79
+ → Empty result → figma: not_configured (MCP not registered or app not running)
80
+ → Non-empty result → proceed to Step 2
81
+
82
+ Step 2 — Live tool call:
83
+ call mcp__figma-desktop__get_metadata
84
+ → Success → figma: available
85
+ → Error → figma: unavailable
86
+ ```
87
+
88
+ Write the result to `.design/STATE.md <connections>` immediately after probing.
89
+
90
+ ---
91
+
92
+ ## Fallback Behavior
93
+
94
+ When figma is `not_configured` or `unavailable`, stages degrade gracefully — no error is raised.
95
+
96
+ **scan stage:**
97
+
98
+ - Skip Step 2A (Figma Token Augmentation)
99
+ - Rely on grep-based CSS custom property extraction alone
100
+ - DESIGN.md token section uses `source: CSS custom properties` (not `source: figma-variables`)
101
+ - `figma_variables_used: false` in DESIGN.md frontmatter
102
+
103
+ **discover stage (design-context-builder):**
104
+
105
+ - Skip Step 0 (Figma Pre-population)
106
+ - Populate D-XX decisions via interview only (manual elicitation from the user)
107
+ - DESIGN-CONTEXT.md omits the "Token decisions pre-populated from Figma variables" note
108
+
109
+ Neither stage appends a `<blocker>` for a missing Figma connection — Figma is an enhancement, not a requirement. If a `must_have` explicitly requires Figma data, THEN append a blocker.
110
+
111
+ ---
112
+
113
+ ## STATE.md Integration
114
+
115
+ Every stage writes its probe result to `.design/STATE.md` under the `<connections>` section:
116
+
117
+ ```xml
118
+ <connections>
119
+ figma: available
120
+ refero: not_configured
121
+ </connections>
122
+ ```
123
+
124
+ **Status values:**
125
+
126
+ | Value | Meaning |
127
+ |-------|---------|
128
+ | `available` | `get_metadata` returned a successful response |
129
+ | `unavailable` | Tool is in the session but errored (app offline, no file open, rate-limited) |
130
+ | `not_configured` | ToolSearch returned empty for `figma-desktop` — MCP not registered |
131
+
132
+ The `<connections>` schema is minimal by design. Traceability of which outputs came from Figma is handled via source annotations in DESIGN.md (`source: figma-variables`) and DESIGN-CONTEXT.md ("pre-populated from Figma variables"), not via richer STATE.md fields.
133
+
134
+ ---
135
+
136
+ ## Caveats and Pitfalls
137
+
138
+ - **`get_variable_defs` returns resolved values, not alias chains.** If a semantic token (`colors/semantic/brand`) aliases a primitive (`colors/blue/500`), only the resolved hex is returned. When recording variables in DESIGN.md, use the variable NAME alongside the hex: `colors/semantic/brand = #3B82F6`. Add a note: "resolved value — may alias a primitive; verify in Figma if the token layer matters."
139
+
140
+ - **`get_variable_defs` requires an open Figma file.** If no file is open in the desktop app, the call errors. The probe falls to `unavailable` in this case — the stage skips Figma steps and continues with non-Figma fallbacks.
141
+
142
+ - **Multi-mode variables (Light/Dark).** Variables may carry values for multiple modes. When present, extract both: `#3B82F6 (light) / #60A5FA (dark)`. DESIGN.md can note dark-mode token existence in the color section.
143
+
144
+ - **Deferred-tool loading.** Always call `ToolSearch` before any `mcp__figma-desktop__*` tool invocation. This applies at every stage entry, even if Figma was `available` in a previous run — tool availability can change between sessions.
145
+
146
+ - **Wrong-MCP confusion.** This spec covers `mcp__figma-desktop__*` (official Figma Desktop MCP). The southleft `figma-console-mcp` uses `figma_*` prefix and serves different use cases. Do not mix them. If ToolSearch returns results prefixed `figma_` but not `mcp__figma-desktop__`, the Figma Desktop MCP is still not configured.
@@ -0,0 +1,197 @@
1
+ # Graphify — Connection Specification
2
+
3
+ This file is the connection specification for Graphify within the get-design-done pipeline. Graphify builds a queryable knowledge graph over the codebase — mapping component↔token↔decision relationships via Tree-sitter static analysis and LLM semantic extraction. See `connections/connections.md` for the full connection index and capability matrix.
4
+
5
+ ---
6
+
7
+ ## Setup
8
+
9
+ **Prerequisites:**
10
+ - Python 3.9+ available on PATH
11
+ - GSD framework with `graphify.enabled = true` in `.planning/config.json`
12
+
13
+ **Install:**
14
+ ```
15
+ pip install graphifyy
16
+ graphify install # installs skill files into ~/.claude/skills/graphify/
17
+ ```
18
+
19
+ **Enable in GSD config:**
20
+ ```
21
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-set graphify.enabled true
22
+ ```
23
+
24
+ **Build the graph (initial):**
25
+ ```
26
+ graphify . # run in project root; produces graphify-out/graph.json
27
+ # or via GSD tools:
28
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" graphify build
29
+ ```
30
+
31
+ **Recommended: auto-rebuild after commits:**
32
+ ```
33
+ graphify hook install
34
+ ```
35
+
36
+ **Verification:**
37
+ After building, run:
38
+ ```
39
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" graphify status
40
+ ```
41
+ Expect: `{ enabled: true, graph_path: "...", node_count: N, edge_count: N, stale: false }`
42
+
43
+ **Note:** Graphify is an optional external dependency. It requires Python and takes 1-5 minutes to build on a large codebase. Do NOT add to plugin bootstrap — users opt in manually.
44
+
45
+ ---
46
+
47
+ ## Graph Schema
48
+
49
+ ### Node Types
50
+
51
+ | Node type | Source | ID pattern |
52
+ |-----------|--------|-----------|
53
+ | component | `.stories.tsx` / `src/components/*.tsx` | `component:<name>` |
54
+ | token:color | CSS custom properties / Figma variables | `token:color/<name>` |
55
+ | token:spacing | CSS custom properties | `token:spacing/<name>` |
56
+ | token:typography | CSS custom properties | `token:typography/<name>` |
57
+ | token:motion | CSS animation variables | `token:motion/<name>` |
58
+ | page/route | `src/app/` or `src/pages/` | `page:<path>` |
59
+ | decision | DESIGN-CONTEXT.md D-XX entries | `decision:D-<nn>` |
60
+ | must-have | DESIGN-CONTEXT.md M-XX entries | `must-have:M-<nn>` |
61
+ | debt-item | DESIGN-DEBT.md entries | `debt:<id>` |
62
+ | anti-pattern | DESIGN-CONTEXT.md anti-patterns | `antipattern:<name>` |
63
+ | a11y-finding | DESIGN-VERIFICATION.md violations | `a11y:<rule-name>` |
64
+ | figma-variable | Figma `get_variable_defs` output | `figma-var:<name>` |
65
+
66
+ ### Edge Types
67
+
68
+ | Edge | From | To | Meaning |
69
+ |------|------|-----|---------|
70
+ | `uses` | component | token | Component references this token |
71
+ | `renders` | page | component | Page renders this component |
72
+ | `violates` | debt-item | decision | Debt item contradicts this decision |
73
+ | `derives-from` | a11y-finding | component | A11y finding originates in this component |
74
+ | `maps-to` | figma-variable | token | Figma variable corresponds to CSS token |
75
+ | `detected-at` | anti-pattern | component | Anti-pattern found in this component |
76
+
77
+ ### graph.json structure
78
+
79
+ ```json
80
+ {
81
+ "nodes": [
82
+ { "id": "component:Button", "label": "Button", "type": "component",
83
+ "description": "Primary interactive element", "source": "src/components/Button.tsx" }
84
+ ],
85
+ "edges": [
86
+ { "source": "component:Button", "target": "token:color/primary/500",
87
+ "label": "uses", "confidence": "EXTRACTED", "confidence_score": 0.95 }
88
+ ]
89
+ }
90
+ ```
91
+
92
+ Edge confidence tiers: EXTRACTED (found in source), INFERRED (semantic inference), AMBIGUOUS (flagged for review).
93
+
94
+ ---
95
+
96
+ ## Which Stages Use This Connection
97
+
98
+ | Stage | Agent | Usage | Purpose |
99
+ |-------|-------|-------|---------|
100
+ | plan | `agents/design-planner.md` | Pre-scope token query | Count affected components before scoping a token change task |
101
+ | verify | `agents/design-integration-checker.md` | Pre-search D-XX query | Find components and tokens connected to each decision before grep |
102
+
103
+ Graphify is NOT called during scan, discover, or design. It is a read-only pre-search oracle for planner and verifier agents.
104
+
105
+ ---
106
+
107
+ ## Availability Probe
108
+
109
+ Unlike MCP connections, Graphify has no ToolSearch check. The probe is file-existence + config-flag based.
110
+
111
+ **Graphify probe sequence (execute at agent entry, before using graph):**
112
+
113
+ Step G1 — Config check:
114
+ ```
115
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" graphify status
116
+ → Error or { enabled: false } → graphify: not_configured (skip all graph steps)
117
+ → { enabled: true } → proceed to Step G2
118
+ ```
119
+
120
+ Step G2 — Graph file check:
121
+ ```
122
+ Check if graphify-out/graph.json exists in project root
123
+ → Absent → graphify: unavailable (graph not built yet)
124
+ → Present → graphify: available
125
+ ```
126
+
127
+ Write graphify status to `.design/STATE.md` `<connections>`.
128
+
129
+ **Note:** Agents check `.design/STATE.md` `<connections>` FIRST before running the probe. If a prior stage already wrote `graphify: available`, skip the probe and use the cached status.
130
+
131
+ ---
132
+
133
+ ## Pre-Search Consultation Pattern
134
+
135
+ This is the canonical pre-search pattern for agents. Copy inline — SKILL.md and agent files have no include mechanism.
136
+
137
+ **For decision-based queries (design-integration-checker):**
138
+
139
+ Step 1: Query graph for decision node and its neighbors
140
+ ```
141
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" graphify query "decision:D-<nn>" --budget 1500
142
+ → Returns: connected components + tokens as JSON
143
+ → Use returned component IDs as grep seed list (reduces false-negative "not found")
144
+ ```
145
+
146
+ Step 2: Grep each returned component for the decision pattern
147
+ (then continue to standard grep behavior if graph returned nothing)
148
+
149
+ **For token-based queries (design-planner):**
150
+
151
+ Step 1: Query graph for token node and its neighbors
152
+ ```
153
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" graphify query "<token-name>" --budget 1500
154
+ → Returns: all components that reference this token
155
+ → Annotate planned task with "N components affected" before scoping
156
+ ```
157
+
158
+ Step 2: Include component list in the task description
159
+ (then continue standard planning behavior)
160
+
161
+ **Budget note:** Use `--budget 1500` for pre-search queries. High confidence_score edges (>= 0.8) are more reliable; AMBIGUOUS edges are hints only.
162
+
163
+ ---
164
+
165
+ ## Fallback
166
+
167
+ | Status | Behavior |
168
+ |--------|----------|
169
+ | `graphify: available` | Agents query graph before grep; annotate results with graph context |
170
+ | `graphify: unavailable` | Agents skip graph steps; log "graphify query skipped — graph not built" in output; fall back to grep |
171
+ | `graphify: not_configured` | Same as unavailable; no user-visible error (opt-in feature) |
172
+
173
+ The graph is a performance optimization and accuracy enhancer. It is never a hard requirement. All agents MUST produce valid output via grep alone.
174
+
175
+ ---
176
+
177
+ ## Anti-Patterns
178
+
179
+ - **Do NOT use graphify to replace grep.** The graph is a seed list, not a complete index. Always grep after querying the graph.
180
+ - **Do NOT embed graph.json contents in agent context.** Query specific nodes via gsd-tools; never read graph.json directly.
181
+ - **Do NOT query the graph during scan or design stages.** The graph is read-only and only useful when decisions already exist (plan, verify).
182
+ - **Do NOT block on graph build time.** If `graphify build` takes >30 seconds mid-session, log "graphify build deferred — run /gdd:graphify build manually" and continue without graph.
183
+ - **Do NOT assume graph covers .design/ artifacts.** Graphify analyzes source code (src/, components/). DESIGN-CONTEXT.md and DESIGN-PLAN.md are not graph nodes unless explicitly indexed.
184
+
185
+ ---
186
+
187
+ ## /gdd:graphify Commands
188
+
189
+ | Subcommand | GSD tools call | Purpose |
190
+ |------------|----------------|---------|
191
+ | `build` | `gsd-tools graphify build` | Build or rebuild the knowledge graph |
192
+ | `query <term>` | `gsd-tools graphify query "<term>" --budget 2000` | Query the graph for a node and its neighbors |
193
+ | `status` | `gsd-tools graphify status` | Check graph age, node count, enabled status |
194
+ | `diff` | `gsd-tools graphify diff` | Show topology changes since last build |
195
+
196
+ If `graphify.enabled = false` in `.planning/config.json`, the skill prompts:
197
+ "Graphify is not enabled. Enable with: gsd-tools config-set graphify.enabled true — then run /gdd:graphify build."
@@ -0,0 +1,153 @@
1
+ # Pinterest MCP — Connection Specification
2
+
3
+ This file is the connection specification for Pinterest MCP within the get-design-done pipeline. Its primary role is to provide visual reference collection in the discover stage — users search Pinterest for design patterns, color palettes, and UI inspiration that feed into the research-synthesizer as reference inputs. See `connections/connections.md` for the full connection index and capability matrix.
4
+
5
+ ---
6
+
7
+ ## Setup
8
+
9
+ **Prerequisites:**
10
+
11
+ - Pinterest MCP installed and registered in Claude Code. The recommended package is `terryso/mcp-pinterest` (headless scraping, no API key required).
12
+
13
+ **Install command (Claude Code):**
14
+
15
+ ```
16
+ npx -y @smithery/cli install mcp-pinterest --client claude
17
+ ```
18
+
19
+ This registers the server with the name `mcp-pinterest`. After running, restart the Claude Code session.
20
+
21
+ **Alternative package:**
22
+
23
+ ```
24
+ npx @iflow-mcp/pinterest-mcp-server
25
+ ```
26
+
27
+ If using the alternative, the server name may differ — run the verification step below to confirm.
28
+
29
+ **Verification:**
30
+
31
+ After session restart, run:
32
+
33
+ ```
34
+ ToolSearch({ query: "mcp-pinterest", max_results: 5 })
35
+ ```
36
+
37
+ Expect non-empty results listing `mcp__mcp-pinterest__*` tools. If results are empty, the Pinterest MCP is not registered — run the install command above and restart.
38
+
39
+ **Warning — prefix depends on registration name:**
40
+
41
+ Pinterest MCP tool names in Claude Code follow the pattern `mcp__<server-name>__<tool-name>`. The default Smithery install uses `mcp-pinterest` as the server name, giving the prefix `mcp__mcp-pinterest__`. However, if registered with a different name (e.g., `pinterest`), the prefix becomes `mcp__pinterest__`. **Always verify via ToolSearch at runtime — never hardcode the prefix.** The stage probe handles this automatically.
42
+
43
+ ---
44
+
45
+ ## Tools
46
+
47
+ Tool names below assume the default `mcp-pinterest` server registration. Actual names may differ — confirm via ToolSearch.
48
+
49
+ | Tool shortname | Expected full name | Returns | Pipeline use |
50
+ |----------------|-------------------|---------|--------------|
51
+ | `pinterest_search` | `mcp__mcp-pinterest__pinterest_search` | Array of pin objects (url, title, image_url, description) | **Primary discover tool** — search by keyword for design inspiration |
52
+ | `pinterest_get_image_info` | `mcp__mcp-pinterest__pinterest_get_image_info` | Pin metadata (title, description, board, creator, tags) | Detail enrichment for a specific pin URL |
53
+ | `pinterest_search_and_download` | `mcp__mcp-pinterest__pinterest_search_and_download` | Search results + local image downloads | Heavy mode — only use if offline image analysis is required |
54
+
55
+ **Recommended for pipeline use:** `pinterest_search` only. It returns pin metadata without downloading images, keeping token cost and latency low. `pinterest_get_image_info` is used when a specific pin needs deeper attribution. `pinterest_search_and_download` should only be used when the user explicitly needs local image files.
56
+
57
+ ---
58
+
59
+ ## Which Stages Use This Connection
60
+
61
+ | Stage | Skill/Agent | Tools used | Purpose |
62
+ |-------|------------|------------|---------|
63
+ | discover | `agents/design-research-synthesizer.md` | `pinterest_search` | Search for visual inspiration matching the project's design direction; results feed into `<connection_sources>` section of DESIGN-CONTEXT.md |
64
+
65
+ Pinterest is a reference source only — it feeds the synthesizer alongside Refero, awesome-design-md, and Figma variables. It does NOT modify STATE.md decisions directly.
66
+
67
+ ---
68
+
69
+ ## Availability Probe
70
+
71
+ **Pinterest uses the ToolSearch-only probe pattern** — identical to Refero. No live tool call is needed to confirm availability.
72
+
73
+ ```
74
+ Step P1 — ToolSearch check (discover stage entry):
75
+ ToolSearch({ query: "mcp-pinterest", max_results: 5 })
76
+ → Empty result → pinterest: not_configured (skip Pinterest; fall through to Refero)
77
+ → Non-empty result → pinterest: available
78
+ ```
79
+
80
+ **No live call at probe time.** Unlike Preview (which calls `preview_list`), Pinterest requires no live probe call. ToolSearch presence is sufficient — the tool will be called only when a search query is needed.
81
+
82
+ Write the result to `.design/STATE.md <connections>` immediately after probing in scan stage.
83
+
84
+ **Fallback chain (discover stage):**
85
+
86
+ Pinterest falls into the reference-source fallback chain as the first tier:
87
+
88
+ ```
89
+ Pinterest (if available)
90
+ → Refero (if available)
91
+ → awesome-design-md (always available — static curated list in reference/)
92
+ ```
93
+
94
+ When Pinterest is available, search it first. When Pinterest is `not_configured`, skip silently and proceed to Refero. The synthesizer uses whichever sources are available — there is no minimum required source count.
95
+
96
+ ---
97
+
98
+ ## Fallback Behavior
99
+
100
+ When Pinterest is `not_configured`:
101
+
102
+ - Skip the Pinterest search step in the synthesizer entirely
103
+ - Do NOT emit a warning or blocker to the user — Pinterest is an enhancement, not a requirement
104
+ - Proceed to Refero in the fallback chain
105
+ - The `<connection_sources>` section of DESIGN-CONTEXT.md should note: `pinterest: not_configured — skipped`
106
+
107
+ When Pinterest is `available` but `pinterest_search` returns an error or empty results:
108
+
109
+ - Log the error in DESIGN-CONTEXT.md `<connection_sources>` section
110
+ - Set `pinterest: unavailable` in STATE.md `<connections>`
111
+ - Proceed to Refero
112
+
113
+ ---
114
+
115
+ ## STATE.md Integration
116
+
117
+ Scan stage probes Pinterest at pipeline entry and writes the result to `<connections>`:
118
+
119
+ ```xml
120
+ <connections>
121
+ figma: available
122
+ refero: not_configured
123
+ preview: available
124
+ storybook: not_configured
125
+ chromatic: not_configured
126
+ figma_writer: not_configured
127
+ graphify: not_configured
128
+ pinterest: available
129
+ claude_design: not_configured
130
+ </connections>
131
+ ```
132
+
133
+ **Status values:**
134
+
135
+ | Value | Meaning |
136
+ |-------|---------|
137
+ | `available` | ToolSearch returned non-empty results for `mcp-pinterest` |
138
+ | `not_configured` | ToolSearch returned empty — Pinterest MCP not registered in this session |
139
+ | `unavailable` | Tool is present but `pinterest_search` errored or returned empty on first call |
140
+
141
+ ---
142
+
143
+ ## Caveats and Pitfalls
144
+
145
+ 1. **Headless scraping may be rate-limited.** `terryso/mcp-pinterest` uses headless browser scraping, not the official Pinterest API. Rate limits or IP blocks are possible if too many searches are made in quick succession. Limit to 2-3 searches per discover session. The pipeline naturally constrains this by searching once per design concern (color, typography, layout) rather than repeatedly.
146
+
147
+ 2. **No authentication required — but content is public only.** Pinterest MCP accesses only public pins. Private boards and pins are not accessible. This is by design for the pipeline use case — design inspiration should be sourced from publicly shareable references.
148
+
149
+ 3. **Tool prefix uncertainty — always use ToolSearch.** Never call `mcp__mcp-pinterest__pinterest_search` directly without first confirming via ToolSearch that the tool exists under that name. If the user registered the server as `pinterest` (no `mcp-` prefix), the tool would be `mcp__pinterest__pinterest_search`. The probe pattern above handles this automatically.
150
+
151
+ 4. **Image URLs may be ephemeral.** Pinterest image URLs (CDN links) can expire or change. Do not cache image URLs in STATE.md or DESIGN-CONTEXT.md for more than one session. Reference search results by pin title and query context, not by image URL.
152
+
153
+ 5. **Results are inspiration, not specifications.** Pinterest references are inputs to the synthesizer, which extracts design signals (dominant colors, typography patterns, spacing density). Do not treat a Pinterest search result as a binding design decision — it informs the D-XX discussion in the discover stage.