@hegemonart/get-design-done 1.36.3 → 1.37.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,14 +5,14 @@
5
5
  },
6
6
  "metadata": {
7
7
  "description": "Get Design Done — 5-stage agent-orchestrated design pipeline with 9 connections, handoff-first workflow, bidirectional Figma write-back, 22+ specialized agents, queryable knowledge layer (intel store, dependency analysis, learnings extraction), and a self-improvement loop (reflector, frontmatter + budget feedback, global-skills layer). v1.20.0 ships the SDK foundation: gdd-state MCP server (11 typed tools), lockfile-safe STATE.md mutations, event stream, and resilience primitives (jittered-backoff, rate-guard, error-classifier, iteration-budget) for rate-limit + 429 + context-overflow recovery. Full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows) and release automation (auto-tag + GitHub Release + release-time smoke test).",
8
- "version": "1.36.3"
8
+ "version": "1.37.2"
9
9
  },
10
10
  "plugins": [
11
11
  {
12
12
  "name": "get-design-done",
13
13
  "source": "./",
14
14
  "description": "Agent-orchestrated 5-stage design pipeline: Brief → Explore → Plan → Design → Verify. 22+ specialized agents, 9 connections (Figma, Refero, Preview, Storybook, Chromatic, Figma Writer, Graphify, Pinterest, Claude Design), Claude Design handoff, bidirectional Figma write-back, and a queryable intel store (.design/intel/) for dependency and learnings queries. Standalone commands: style, darkmode, compare, figma-write, graphify, handoff, analyze-dependencies, skill-manifest, extract-learnings. Embeds NNG heuristics, WCAG thresholds, typographic systems, motion framework, and anti-pattern catalog. Ships with a full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows) and release automation. Optimization layer (v1.0.4.1, retroactive): gdd-router + gdd-cache-manager skills, PreToolUse budget-enforcer hook, tier-aware agent frontmatter, lazy checker gates, streaming synthesizer, /gdd:warm-cache + /gdd:optimize commands, and cost telemetry at .design/telemetry/costs.jsonl — targeting 50-70% per-task token-cost reduction with no quality-floor regression. v1.20.0 SDK foundation: gdd-state MCP server (11 typed tools), lockfile-safe STATE.md mutations, event stream at .design/telemetry/events.jsonl, resilience primitives (jittered-backoff, rate-guard, error-classifier, iteration-budget) with rate-limit + 429 + context-overflow recovery, and TypeScript toolchain.",
15
- "version": "1.36.3",
15
+ "version": "1.37.2",
16
16
  "author": {
17
17
  "name": "hegemonart"
18
18
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "get-design-done",
3
3
  "short_name": "gdd",
4
- "version": "1.36.3",
4
+ "version": "1.37.2",
5
5
  "description": "Agent-orchestrated 5-stage design pipeline: Brief → Explore → Plan → Design → Verify. 22+ specialized agents, 9 connections (Figma, Refero, Preview, Storybook, Chromatic, Figma Writer, Graphify, Pinterest, Claude Design), handoff-first workflow via Claude Design bundles, bidirectional Figma write-back (annotations, Code Connect), queryable intel store (`.design/intel/`) for O(1) design surface lookups, and self-improvement loop (reflector agent, frontmatter + budget feedback, global-skills layer at `~/.claude/gdd/global-skills/`). Standalone commands: style, darkmode, compare, figma-write, graphify, handoff, analyze-dependencies, skill-manifest, extract-learnings, reflect, apply-reflections. Embeds NNG heuristics, WCAG thresholds, typographic systems, motion framework, and anti-pattern catalog. Ships with a full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows, lint + schema + frontmatter + stale-ref + shellcheck + gitleaks + injection-scan + blocking size-budget) and release automation (auto-tag + GitHub Release + release-time smoke test). Optimization layer (v1.0.4.1, retroactive): gdd-router + gdd-cache-manager skills, PreToolUse budget-enforcer hook, tier-aware agent frontmatter, lazy checker gates, streaming synthesizer, /gdd:warm-cache + /gdd:optimize commands, and cost telemetry at .design/telemetry/costs.jsonl — targeting 50-70% per-task token-cost reduction with no quality-floor regression. v1.20.0 SDK foundation: gdd-state MCP server (11 typed tools), lockfile-safe STATE.md mutations, event stream at .design/telemetry/events.jsonl, resilience primitives (jittered-backoff, rate-guard, error-classifier, iteration-budget) with rate-limit + 429 + context-overflow recovery, and TypeScript toolchain. v1.27.7 ships gdd-mcp (Phase 27.7): 12 read-only MCP tools for sub-3s priming. v1.28.0 (Phase 28): Foundational References Tier 2 — 5 new reference files (color-theory, composition, proportion-systems, i18n, contrast-advanced), 2 verifier i18n probes + 1 explore i18n-readiness probe, 12 additive cross-link insertions across 10 existing references, 2 orthogonal audit-scoring lens-tags (composition_alignment + i18n_readiness).",
6
6
  "author": {
7
7
  "name": "hegemonart",
package/CHANGELOG.md CHANGED
@@ -4,6 +4,49 @@ All notable changes to get-design-done are documented here. Versions follow [sem
4
4
 
5
5
  ---
6
6
 
7
+ ## [1.37.2] - 2026-06-01
8
+
9
+ ### Phase 37.2 — Greenfield Design-System Bootstrap (`/gdd:bootstrap-ds`) — completes Phase 37
10
+
11
+ Second and **FINAL** sub-phase of the split **Phase 37** — completing it marks the **parent Phase 37 COMPLETE** (AI-Native Tools Wave 2 + Greenfield DS Bootstrap). Closes the greenfield gap: GDD assumed a design system already existed (in code or Figma) — a brand-new project has none. `/gdd:bootstrap-ds` turns a brand input into a coherent token system + proof components. **No new runtime dependency** — the token math emits native CSS `oklch()` (no color-conversion library).
12
+
13
+ ### Added
14
+
15
+ - **`scripts/lib/ds/token-scale.cjs`** — a pure, dependency-free (zero `require`) token generator. `oklchScale(primary)` → 9 tint/shade stops as native CSS `oklch()`, anchored at the primary, lightness interpolated toward white/black, chroma damped at the extremes (no OKLab→sRGB conversion, no color library); `typeScale` (modular), `spacingScale` (4pt/8pt), `radiusScale`. Deterministic.
16
+ - **`reference/ds-bootstrap-rubric.md`** — greenfield emission rules: primary → 9 tints; **never more than 2 brand colors**; neutrals + semantic colors; type ratios 1.2/1.25/1.333; 4pt/8pt spacing; radius + motion defaults; the 3 variants; role-named CSS-custom-property emission + framework mapping; proof scaffolding. Registered (`type: heuristic`, `phase: 37.2`; 150 → 151).
17
+ - **`agents/ds-generator.md`** — brand-input → token system via `token-scale.cjs` + the rubric + `color-theory.md`. Emits **3 variants** (conservative / balanced / bold), the user picks one, then scaffolds **button / input / card** in the detected framework (web default; native via Phase 34). Never invents a brand; never overwrites an existing DS; proposal→confirm.
18
+ - **`skills/bootstrap-ds/SKILL.md`** (`/gdd:bootstrap-ds`) — brand-input intake (primary + secondary + tone tags + target framework) → `ds-generator`. 43 lines (≤100 Phase-28.5 contract).
19
+
20
+ ### Notes
21
+
22
+ - **No new runtime dependency** (native `oklch()`), **no new egress**.
23
+ - 6-manifest lockstep at **v1.37.2** + `OFF_CADENCE_VERSIONS.add('1.37.2')` + the 27 live-pinned `manifests-version.txt` baselines forward-propagated 1.37.1 → 1.37.2.
24
+ - Inventory relock: skill-list 75 → 76 (+`bootstrap-ds`, both `current/` + `phase-20/`), phase-20 agent-list 49 → 50 (+`ds-generator`) + both frontmatter-snapshots, registry-diff 150 → 151, tarball golden 676 → 680 (+4); root `SKILL.md` command table + `command-count-sync` gate updated.
25
+ - **This completes the parent Phase 37 (AI-Native Tools Wave 2 + Greenfield DS Bootstrap).**
26
+
27
+ ---
28
+
29
+ ## [1.37.1] - 2026-06-01
30
+
31
+ ### Phase 37.1 — AI-Native Tools Wave 2 (Framer + Penpot + Webflow + v0.dev + Plasmic + Builder.io)
32
+
33
+ First sub-phase of the split **Phase 37**. Schedules Phase 14's explicit backlog: six AI-native design tools, each under the existing connection capability contract (canvas | generator | shared probe). **No new runtime dependency, no new egress** — each tool is an opt-in user-connected MCP/API, probed via ToolSearch/env; absent → degrade-to-code-only.
34
+
35
+ ### Added
36
+
37
+ - **`connections/framer.md`** + **`penpot.md`** + **`webflow.md`** — canvas-category specs. Framer (read frames + write proposals), Penpot (open-source Figma alt; self-hosted-vs-cloud probe), Webflow (read site structure as a design-adaptation source — not CMS authoring). Contribute at the **design** stage.
38
+ - **`connections/v0-dev.md`** + **`plasmic.md`** + **`builder-io.md`** — generator-category specs. v0.dev (MCP-first → REST + `V0_API_KEY`), Plasmic (dual: canvas read + code emission), Builder.io Visual Copilot (pull-only this phase). Drive the **generator** stage.
39
+ - **`agents/design-component-generator.md`** — Step-0 detection + `--tool` flag extended to `v0|plasmic|builder-io`, plus compact `<!-- impl: v0 -->` / `<!-- impl: plasmic -->` / `<!-- impl: builder-io -->` sections that cross-link to the connection specs (231 → 259, under the LARGE budget). Priority: magic-patterns > 21st.dev > v0 > plasmic > builder-io; `--tool` overrides.
40
+ - **`connections/connections.md`** + onboarding — 21 → 27 onboarded (6 Active rows + 6 capability-matrix rows: framer/penpot → canvas, webflow/v0/builder-io → generator, **Plasmic → canvas + generator dual**; probes + value-prop + setup matrix).
41
+
42
+ ### Notes
43
+
44
+ - **No new runtime dependency, no new egress** — opt-in MCP/API connections; the generator never writes to `src/` without proposal→confirm.
45
+ - 6-manifest lockstep at **v1.37.1** + `OFF_CADENCE_VERSIONS.add('1.37.1')` + the 26 live-pinned `manifests-version.txt` baselines forward-propagated 1.36.3 → 1.37.1 (opens the v1.37.x arc).
46
+ - Inventory relock: connection-list 29 → 35 (+6), onboarding → 27, tarball golden 670 → 676 (+6). Registry unchanged (no `reference/` doc); no new skill/agent dir (the generator agent pre-exists).
47
+
48
+ ---
49
+
7
50
  ## [1.36.3] - 2026-06-01
8
51
 
9
52
  ### Phase 36.3 — Knowledge Tier-3: Conversational UI — completes Phase 36
package/README.md CHANGED
@@ -162,6 +162,14 @@ GDD now opens the motion **exports** a project ships. The pure, dependency-free
162
162
 
163
163
  [`reference/conversational-ui.md`](reference/conversational-ui.md) closes a zero-coverage surface: voice flows + chatbots. It codifies voice-flow reprompts (no-input / no-match → human handoff), multi-turn dialogue (context carryover, slot-filling, repair), **prompt-as-UX** (the assistant's persona/tone/boundaries as a versioned design artifact), chatbot empty-states + suggested replies, voice-first onboarding, and error recovery + accessibility. [`design-context-builder`](agents/design-context-builder.md) detects a `conversational` project type (brief keywords + chatbot/voice deps like `botpress` / `dialogflow` / `actions-on-google` / `ask-sdk-core`) and loads the pack into context. **No new runtime dependency.** This is the **final sub-phase of Phase 36 — which is now complete** (domain packs + motion-tool verification + conversational UI).
164
164
 
165
+ ### AI-native tools — Wave 2 (v1.37.1)
166
+
167
+ Six more AI-native design tools join the connection layer (Phase 14's backlog, now scheduled): **Framer**, **Penpot**, and **Webflow** (canvas-category — read frames/boards/structure as design sources) plus **v0.dev**, **Plasmic**, and **Builder.io** (generator-category — prompt→component, wired into [`design-component-generator`](agents/design-component-generator.md) as `<!-- impl: -->` sections). Plasmic is dual (canvas + generator). Onboarding grows 21 → 27. Each is an opt-in MCP/API connection that degrades to code-only when absent — **no new runtime dependency**. First sub-phase of Phase 37 (Greenfield DS Bootstrap follows).
168
+
169
+ ### Greenfield design-system bootstrap (v1.37.2)
170
+
171
+ `/gdd:bootstrap-ds` gives a brand-new project a coherent design system from a brand input (a primary color + optional secondary + tone tags + target framework). The pure [`token-scale`](scripts/lib/ds/token-scale.cjs) helper emits a 9-stop OKLCH color scale as native CSS `oklch()` (no color-conversion library), a modular type scale, a 4pt/8pt spacing scale, and radius/motion defaults; [`ds-generator`](agents/ds-generator.md) offers **3 variants** (conservative / balanced / bold) to pick from per [`reference/ds-bootstrap-rubric.md`](reference/ds-bootstrap-rubric.md), then scaffolds button/input/card proof components. Never invents a brand; never overwrites an existing DS. **No new runtime dependency.** This **completes Phase 37** (AI-native Wave 2 + greenfield bootstrap).
172
+
165
173
  ### Previous releases
166
174
 
167
175
  - **v1.26.0** — Headless Model Resolver (per-runtime tier→model map, `resolved_models` router field, per-runtime price tables, `reasoning-class` runtime-neutral alias).
package/SKILL.md CHANGED
@@ -100,6 +100,7 @@ Each stage produces artifacts in `.design/` inside the current project.
100
100
  | `benchmark <component\|--wave N\|--list\|--refresh component>` | `get-design-done:gdd-benchmark` | Harvest + synthesize per-component design specs from 18 design systems → `reference/components/<name>.md` |
101
101
  | `benchmark <component\|--wave N\|--list\|--refresh component>` | `get-design-done:gdd-benchmark` | Harvest + synthesize per-component design specs from 18 design systems → `reference/components/<name>.md` |
102
102
  | `export <cycle> --format html\|pdf\|notion [--pseudonymize] [--pr]` | `get-design-done:gdd-export` | Phase 35.5 — package a finished cycle's design output into a stakeholder-shareable artifact (self-contained HTML / Paged.js-print PDF / Notion page); redacts always, `--pseudonymize` masks identity for external sharing, `--pr` posts the HTML preview via pr-commenter |
103
+ | `bootstrap-ds [--primary <color>] [--secondary <color>] [--tone <tags>] [--framework <t>]` | `get-design-done:gdd-bootstrap-ds` | Phase 37.2 — bootstrap a design system for a GREENFIELD project (no DS): brand input → OKLCH token system (color tints + modular type + 4pt/8pt spacing + radius/motion) in 3 variants to pick, then button/input/card proof scaffolding via `ds-generator` |
103
104
 
104
105
  ## Handoff Routing
105
106
 
@@ -31,7 +31,11 @@ Read `.design/STATE.md` `<connections>` block. Check for:
31
31
  - `magic-patterns: available` → prefer magic-patterns (DS-aware + preview_url); use magic-patterns impl
32
32
  - `21st-dev: available` (and magic-patterns not available) → use 21st.dev impl
33
33
  - Both available → prefer magic-patterns (DS-aware + preview_url); 21st.dev as fallback
34
- - Neither available → Print: "No component generator configured. Set up 21st.dev or Magic Patterns per connections/21st-dev.md or connections/magic-patterns.md." STOP.
34
+ - `v0-dev: available`use the v0 impl (generator; MCP-first REST + `V0_API_KEY`)
35
+ - `plasmic: available` → use the plasmic impl (canvas read + code emission)
36
+ - `builder-io: available` → use the builder-io impl (Visual Copilot; pull-only this phase)
37
+ - Priority when several are available: magic-patterns > 21st.dev > v0 > plasmic > builder-io (DS-awareness + preview first); `--tool` overrides.
38
+ - None available → Print: "No component generator configured. Set up 21st.dev / Magic Patterns / v0.dev / Plasmic / Builder.io per the matching `connections/<tool>.md`." STOP.
35
39
 
36
40
  ---
37
41
 
@@ -39,7 +43,7 @@ Read `.design/STATE.md` `<connections>` block. Check for:
39
43
 
40
44
  Parse flags:
41
45
  - `--dry-run` — emit proposal only, no writes
42
- - `--tool 21st|magic-patterns` — override generator selection
46
+ - `--tool 21st|magic-patterns|v0|plasmic|builder-io` — override generator selection
43
47
  - `--ds <design-system>` — design system target: `shadcn | tailwind | mantine | chakra`
44
48
  - Component description (required positional arg): natural-language component spec
45
49
 
@@ -164,6 +168,30 @@ After generating, write `preview_url` to STATE.md `<generator>` block (see Step
164
168
 
165
169
  <!-- /impl: magic-patterns -->
166
170
 
171
+ <!-- impl: v0 -->
172
+ ## v0.dev Implementation
173
+
174
+ ### Step 2D — v0.dev: Generate
175
+
176
+ Probe per `connections/v0-dev.md` (MCP-first → REST + `V0_API_KEY`). Generate from the description + DS context: MCP available → call the v0 generate tool (verify the name via ToolSearch) with the spec + `--ds` target; REST fallback → POST the spec to the v0 Platform API with `V0_API_KEY`. v0 emits React + Tailwind + shadcn by default — reconcile to the project `--ds`. Carry into Step 3 (proposal); never write to `src/` without confirmation. Full tool catalogue + setup: `connections/v0-dev.md`.
177
+ <!-- /impl: v0 -->
178
+
179
+ <!-- impl: plasmic -->
180
+ ## Plasmic Implementation
181
+
182
+ ### Step 2E — Plasmic: Read canvas + emit code
183
+
184
+ Probe per `connections/plasmic.md`. Plasmic is dual: **canvas read** → pull the Plasmic project's components as a design source (like Figma); **code emission** → emit the component code for the `--ds` target. Reconcile emitted code to the project DS; carry into Step 3 (proposal). Detail: `connections/plasmic.md`.
185
+ <!-- /impl: plasmic -->
186
+
187
+ <!-- impl: builder-io -->
188
+ ## Builder.io Implementation
189
+
190
+ ### Step 2F — Builder.io: Visual Copilot (pull-only)
191
+
192
+ Probe per `connections/builder-io.md` (MCP-first → `BUILDER_API_KEY`). **Pull-only this phase**: generate / ingest patterns via Visual Copilot, reconcile to `--ds`, carry into Step 3 (proposal). NO write-back this phase. Detail: `connections/builder-io.md`.
193
+ <!-- /impl: builder-io -->
194
+
167
195
  ---
168
196
 
169
197
  ## Step 3 — Build Proposal
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: ds-generator
3
+ description: Greenfield design-system generator. Turns a brand input (primary color + optional secondary + tone tags + target framework) into a coherent token system — OKLCH color tints/shades, a modular type scale, a 4pt/8pt spacing scale, radius + motion defaults — via the pure scripts/lib/ds/token-scale.cjs and reference/ds-bootstrap-rubric.md. Emits 3 variants (conservative/balanced/bold) for the user to pick, then scaffolds proof components (button/input/card) in the detected framework. Proposal→confirm; never overwrites an existing design system.
4
+ tools: Read, Write, Bash, Glob, Grep
5
+ color: green
6
+ default-tier: opus
7
+ tier-rationale: "Greenfield token-system synthesis is a design-judgment task (OKLCH color relationships, scale selection, tone→ratio mapping grounded in color-theory) — Opus-tier, not a mechanical worker."
8
+ size_budget: LARGE
9
+ size_budget_rationale: "Honest tier sized to the ~120-line body. The agent states the brand-input → token-system → 3-variants → scaffold flow and DELEGATES the deterministic math to scripts/lib/ds/token-scale.cjs and the emission rules to reference/ds-bootstrap-rubric.md (the pdf-executor→validate-print-css precedent)."
10
+ parallel-safe: false
11
+ typical-duration-seconds: 90
12
+ reads-only: false
13
+ writes:
14
+ - ".design/tokens/**"
15
+ - "src/** (proof components, on confirm only)"
16
+ ---
17
+
18
+ @reference/shared-preamble.md
19
+
20
+ # ds-generator
21
+
22
+ ## Role
23
+
24
+ Bootstrap a coherent design system for a **greenfield** project that has none — no Figma, no token file, no component library. Take a brand input and emit a token system + a few proof components, grounded in `reference/ds-bootstrap-rubric.md` + `reference/color-theory.md`, using the deterministic `scripts/lib/ds/token-scale.cjs`. **Never invent a brand** (no logomark, no typeface, no third brand color) and **never overwrite an existing DS** — if `design-context-builder` already mapped one, stop and defer to it.
25
+
26
+ ## When invoked
27
+
28
+ By `/gdd:bootstrap-ds` (the skill collects the brand input). Also reachable when `design-context-builder` detects a greenfield project (no DS signals) and the user opts in.
29
+
30
+ ## Inputs (brand input)
31
+
32
+ - **primary** (required) — a brand color (hex / rgb / `oklch()`). Convert to OKLCH `{l, c, h}`.
33
+ - **secondary** (optional) — a second brand color. Emitted only if supplied (rubric ≤2-colors rule).
34
+ - **tone tags** (optional) — e.g. `calm`, `corporate`, `editorial`, `playful`, `bold` → maps to the type ratio + chroma treatment per the rubric.
35
+ - **target framework** (optional) — `web` (default) / `native-ios` / `native-android` / `flutter` (Phase 34 routing). Detect from the project if absent.
36
+
37
+ ## Step 1 — Resolve the primary to OKLCH
38
+
39
+ Parse the brand primary to `{ l, c, h }`. If given as hex/rgb, convert to OKLCH (state the conversion; do NOT add a color library — use a documented inline conversion or ask the user for the `oklch()` value). Validate `l ∈ 0..1`, `c ≥ 0`, `h ∈ 0..360`.
40
+
41
+ ## Step 2 — Generate the 3 variants
42
+
43
+ For each of **conservative / balanced / bold** (rubric table), run the pure generator and assemble a token set:
44
+
45
+ ```bash
46
+ node -e "const t=require('./scripts/lib/ds/token-scale.cjs'); \
47
+ console.log(JSON.stringify({ \
48
+ color: t.oklchScale({l:L,c:C,h:H}), \
49
+ type: t.typeScale(1, RATIO), \
50
+ space: t.spacingScale(BASE, 8), \
51
+ radius: t.radiusScale(R) }, null, 2))"
52
+ ```
53
+
54
+ Vary chroma (×0.8 / ×1.0 / ×1.15-clamped), type ratio (1.2 / 1.25 / 1.333), and radius (4 / 8 / 12) per the rubric. Emit neutrals (low-chroma ramp) + semantic colors (success/warning/danger/info at fixed hues) the same way. Verify text/surface pairings clear WCAG AA (`reference/color-theory.md`).
55
+
56
+ ## Step 3 — Present + pick (D-02)
57
+
58
+ Show the 3 variants compactly (the `500` primary, the type ratio, the spacing baseline, the radius, a one-line feel). The user picks ONE. Do not scaffold before the pick.
59
+
60
+ ## Step 4 — Emit the chosen token set (proposal → confirm)
61
+
62
+ Emit role-named CSS custom properties (`:root { --color-primary-500: oklch(...); --space-4: 16px; --radius-md: 8px; ... }`) as the canonical artifact, plus the target-framework mapping (web → Tailwind `theme.extend` / shadcn CSS vars; native → `reference/native-platforms.md`). Propose the file(s); write only on confirm.
63
+
64
+ ## Step 5 — First-component scaffolding (proof)
65
+
66
+ Emit **button + input + card** in the target framework, consuming only the emitted tokens — a coherence proof, not a component library. Proposal→confirm; never write to `src/` without it.
67
+
68
+ ## Record
69
+
70
+ Emit a `## Bootstrap summary` for the cycle: the chosen variant, the token counts (9 color stops + neutrals + semantics, N type steps, N spacing steps), the framework, and the scaffolded components. Close with:
71
+
72
+ ```
73
+ ## DS BOOTSTRAP COMPLETE
74
+ ```
@@ -0,0 +1,131 @@
1
+ # Builder.io — Connection Specification
2
+
3
+ This file is the connection specification for Builder.io Visual Copilot within the get-design-done pipeline. Builder.io Visual Copilot is an AI-native **generator-category** tool — it converts designs (Figma frames, imported layouts) into framework code and generates UI components from descriptions. It integrates via the Builder MCP / Visual Copilot or via a direct API key. See `connections/connections.md` for the full connection index and capability matrix.
4
+
5
+ **Scope this phase: PULL-ONLY.** Builder.io is used to *ingest patterns* and *generate* code into the pipeline. Write-back (publishing components or content models back to Builder.io spaces) is **deferred** — not wired this phase. See [21st.dev](21st-dev.md) for the sibling generator-category spec.
6
+
7
+ ---
8
+
9
+ ## Setup
10
+
11
+ ### Prerequisites
12
+
13
+ **Path A — Builder MCP / Visual Copilot (preferred):**
14
+ - A [Builder.io](https://www.builder.io) account
15
+ - The Builder MCP or Visual Copilot enabled in your Claude environment
16
+ - No additional manual setup when the connector is enabled
17
+
18
+ **Path B — API key fallback:**
19
+ - A Builder.io account and API key (public/private key for your Builder space)
20
+ - `BUILDER_API_KEY` environment variable set
21
+ - MCP server install (example):
22
+ ```bash
23
+ claude mcp add builder-io --transport http https://mcp.builder.io/sse \
24
+ -e BUILDER_API_KEY=$BUILDER_API_KEY
25
+ ```
26
+
27
+ ### Verification
28
+
29
+ ```
30
+ ToolSearch({ query: "builder", max_results: 5 })
31
+ ```
32
+
33
+ Non-empty results including a Builder generate/figma-import tool → connector available (Path A).
34
+ Empty → check `BUILDER_API_KEY`; if set, install Path B and restart the Claude Code session.
35
+
36
+ ---
37
+
38
+ ## Probe Pattern
39
+
40
+ Builder.io uses a **MCP-first, env-fallback** probe. Check for Builder tools first; fall back to the API key env var.
41
+
42
+ ```
43
+ ToolSearch({ query: "builder", max_results: 5 })
44
+ → Non-empty → builder-io: available (MCP / Visual Copilot)
45
+ → Empty → check BUILDER_API_KEY env var
46
+ set → builder-io: available (API key path)
47
+ unset → builder-io: not_configured
48
+ ```
49
+
50
+ Three-value schema written to `.design/STATE.md` `<connections>`:
51
+
52
+ | Value | Meaning |
53
+ |-------|---------|
54
+ | `available` | Builder MCP tools found, OR `BUILDER_API_KEY` is set |
55
+ | `not_configured` | No Builder tools and no API key — skip all Builder.io steps |
56
+ | `error` | Tools present but probe/auth failed — degrade, surface the error, never block |
57
+
58
+ Write result to STATE.md `<connections>`: `builder-io: <status>`
59
+
60
+ Fallback: when `not_configured`, the generator stage skips Builder.io and falls back to another generator (if available) or degrades to manual code-only build.
61
+
62
+ ---
63
+
64
+ ## Builder.io Tools
65
+
66
+ Builder.io exposes Visual Copilot capabilities through MCP tools. Names and exact signatures vary by connector version — discover them via the probe (`ToolSearch({ query: "builder" })`) rather than hardcoding. Described generically, the relevant **pull-only** capabilities are:
67
+
68
+ | Capability | Stage | Purpose |
69
+ |------------|-------|---------|
70
+ | Figma → code generate | generator | Convert a selected Figma frame/URL into framework code (React, Vue, Svelte, Angular, etc.) |
71
+ | Describe → component generate | generator | Generate a UI component from a natural-language description |
72
+ | Pull / ingest pattern | generator | Fetch an existing Builder block/pattern as a starting point for adaptation |
73
+
74
+ ### Typical generate inputs (generic)
75
+
76
+ | Input | Values | Notes |
77
+ |-------|--------|-------|
78
+ | `source` | Figma frame URL / selection, or description | Pull-side input — the design or spec to convert |
79
+ | `framework` | `"react" \| "vue" \| "svelte" \| "angular"` | Auto-detected from the project in the explore stage |
80
+ | `styling` | `"tailwind" \| "css" \| "styled-components"` | Auto-detected; defaults to the project's active styling |
81
+
82
+ Returns generated source code (and, where supported, a preview reference) for the generator stage to consume.
83
+
84
+ ---
85
+
86
+ ## Pipeline Integration
87
+
88
+ Builder.io is wired as a **generator-category** connection: it feeds the **generator** stage only.
89
+
90
+ | Stage | What Builder.io provides |
91
+ |-------|--------------------------|
92
+ | generator | Figma → code / describe → component generation via `agents/design-component-generator.md` |
93
+ | generator | Pull / ingest an existing Builder pattern as adaptation source |
94
+
95
+ ### Generator wiring
96
+
97
+ The generator stage dispatches to Builder.io through the `<!-- impl: builder-io -->` section of `agents/design-component-generator.md`. That agent:
98
+
99
+ 1. Reads `builder-io: available` from STATE.md `<connections>` before dispatching.
100
+ 2. Resolves the generate inputs (Figma source or description; `framework`; `styling`) from project context.
101
+ 3. Calls the Builder generate/pull capability and captures the returned source code.
102
+ 4. Writes the generated component into the project as a **proposal**, not a direct commit.
103
+
104
+ ### Pull-only scope (write-back deferred)
105
+
106
+ This phase wires **ingest + generate only**:
107
+
108
+ - **Ingest**: pull existing Builder patterns/blocks as adaptation sources.
109
+ - **Generate**: Figma → code and describe → component into the pipeline.
110
+ - **NO write-back**: the pipeline does **not** publish components, content models, or edits back to Builder.io spaces this phase. Write-back / roundtrip is explicitly **deferred** to a later phase.
111
+
112
+ ### Proposal → confirm
113
+
114
+ Generated code is **never** auto-inserted. The generator surfaces the result as a proposal; the design-executor confirms adoption with the user before the code is written into the working tree. This mirrors the decision-gate pattern used by sibling generators (see [21st.dev](21st-dev.md)) — the agent surfaces candidates, the user/executor decides.
115
+
116
+ ---
117
+
118
+ ## Fallback Behavior
119
+
120
+ When `builder-io: not_configured`:
121
+ - Print: `Builder.io not configured — Visual Copilot generator skipped.`
122
+ - Falls back to another generator-category connection if one is `available` (e.g. 21st.dev, Magic Patterns).
123
+ - If no generator is configured, the generator stage **degrades to code-only**: the design-executor proceeds with a manual component build.
124
+ - Builder.io **never blocks** the pipeline — a missing or errored connection only removes one generator option; the generator stage always has a code-only path.
125
+
126
+ When `builder-io: error`:
127
+ - Surface the probe/auth error to the user, mark the connection degraded, and fall back as above. Do not retry in a loop and do not block.
128
+
129
+ ---
130
+
131
+ Do NOT edit the connection index here — the 37.1 wiring plan adds the Active-Connections row + matrix entry.
@@ -2,7 +2,7 @@
2
2
 
3
3
  This directory contains connection specifications for external tools and MCPs that the get-design-done pipeline integrates with. Each connection has its own spec file. This file is the index.
4
4
 
5
- **Getting started:** run `/gdd:connections` for the interactive onboarding wizard — it probes all 21 connections, recommends setup based on your project type, and walks you through installing each one (auto-run for reversible MCP adds, copy-command for everything else). You can also run `/gdd:connections list` for a read-only status check or `/gdd:connections <name>` to jump to a single connection's setup.
5
+ **Getting started:** run `/gdd:connections` for the interactive onboarding wizard — it probes all 27 connections, recommends setup based on your project type, and walks you through installing each one (auto-run for reversible MCP adds, copy-command for everything else). You can also run `/gdd:connections list` for a read-only status check or `/gdd:connections <name>` to jump to a single connection's setup.
6
6
 
7
7
  ---
8
8
 
@@ -37,6 +37,12 @@ This directory contains connection specifications for external tools and MCPs th
37
37
  | Notion | Active | [`connections/notion.md`](connections/notion.md) | **Export** write-path (not a pipeline stage) — `mcp__notion__*` (ToolSearch probe); `/gdd:export --format notion`; redact + `GDD_DISABLE_NOTION` kill-switch; degrade-to-HTML |
38
38
  | Lottie | Active | [`connections/lottie.md`](connections/lottie.md) | **Optional** motion verify (Lottie JSON); static floor = `validate-motion.cjs` (MO-* warnings + perf budget); player opt-in; WARN-never-block, degrade-to-static/code-only (36.2, D-02/D-03) |
39
39
  | Rive | Active | [`connections/rive.md`](connections/rive.md) | **Optional** motion verify (Rive `.riv`); size + RIVE-header floor; deep state-machine graph via opt-in Rive runtime, else manual-review advisory; WARN-never-block (36.2, D-02/D-04) |
40
+ | Framer | Active | [`connections/framer.md`](connections/framer.md) | **AI-native** (Wave 2, canvas) — read frames + write proposals; MCP probe; degrade-to-code-only (37.1) |
41
+ | Penpot | Active | [`connections/penpot.md`](connections/penpot.md) | **AI-native** (Wave 2, canvas) — open-source Figma alt; self-hosted-vs-cloud probe; degrade-to-code-only (37.1) |
42
+ | Webflow | Active | [`connections/webflow.md`](connections/webflow.md) | **AI-native** (Wave 2, generator) — read site structure as an adaptation source (not CMS authoring); degrade-to-code-only (37.1) |
43
+ | v0.dev | Active | [`connections/v0-dev.md`](connections/v0-dev.md) | **AI-native** (Wave 2, generator) — Vercel v0; MCP-first → REST + `V0_API_KEY`; component-generator `v0` impl (37.1) |
44
+ | Plasmic | Active | [`connections/plasmic.md`](connections/plasmic.md) | **AI-native** (Wave 2, dual) — canvas read + code emission; component-generator `plasmic` impl (37.1) |
45
+ | Builder.io | Active | [`connections/builder-io.md`](connections/builder-io.md) | **AI-native** (Wave 2, generator) — Visual Copilot, pull-only this phase; component-generator `builder-io` impl (37.1) |
40
46
 
41
47
  ---
42
48
 
@@ -66,6 +72,12 @@ Each cell describes what the connection contributes at that pipeline stage, or `
66
72
  | Print-Renderer | — | — | — | print render-test target (pdf-executor) | rendered PDF/page evidence when the print-render is available, else degrade to the static print-CSS validator / code-only (D-03) | — | — | — | — |
67
73
  | Lottie | — | — | — | — | Lottie-export motion check: `validate-motion.cjs` (MO-FR/DUR/IMG/BUDGET) when present, WARN-never-block (D-02) | — | — | — | — |
68
74
  | Rive | — | — | — | — | Rive-export motion check: size + RIVE-header floor; state-machine graph via opt-in runtime, else manual-review advisory; WARN (D-02/D-04) | — | — | — | — |
75
+ | Framer | — | — | — | canvas source (read frames, write proposals) | — | ✓ | — | — | — |
76
+ | Penpot | — | — | — | canvas source (read boards/components) | — | ✓ | — | — | — |
77
+ | Webflow | — | — | — | structure / adaptation source | — | — | ✓ | — | — |
78
+ | v0.dev | — | — | — | component-generator (v0 impl) | — | — | ✓ | — | — |
79
+ | Plasmic | — | — | — | component-generator (plasmic impl) + canvas read | — | ✓ | ✓ | — | — |
80
+ | Builder.io | — | — | — | component-generator (builder-io impl) | — | — | ✓ | — | — |
69
81
  | Lazyweb | — | reference search via `lazyweb_search` (**Tier 1 — free, tried first**; D-01); complements refero/pinterest | — | — | — | — | — | — | — |
70
82
  | Mobbin | — | reference search via mobbin tools (**Tier 2 — paid, mobile/flow-level**; D-01); complements refero/lazyweb | — | — | — | — | — | — | — |
71
83
  | Slack | — | — | — | — | — | — | — | verify-fail/audit-pass/ship → Slack webhook (routed, redacted, degrade-to-noop; D-04/D-05) | — |
@@ -0,0 +1,126 @@
1
+ # Framer — Connection Specification
2
+
3
+ This file is the connection specification for **Framer** within the get-design-done pipeline. Framer is an AI-native canvas design tool (Wave 2). Like Figma, it is a **canvas-category** connection: GDD reads the current Framer selection/frames as a design source and writes annotated design proposals back. It is **not** a code generator — the pipeline never asks Framer to emit production components. See `connections/connections.md` for the full connection index and capability matrix.
4
+
5
+ This is an **opt-in, user-connected** tool. There is no bundled dependency — GDD ships no Framer client. The connection only activates when the user has independently registered a Framer MCP (or plugin bridge) in their session.
6
+
7
+ ---
8
+
9
+ ## Setup
10
+
11
+ ### Prerequisites
12
+ - A [Framer](https://www.framer.com) account with edit access to the target project.
13
+ - A Framer API token (or plugin authorization) — generated from the Framer account/workspace settings and scoped to the projects GDD may read or propose against.
14
+ - A Framer MCP server **or** the Framer plugin bridge registered in the Claude Code session. Framer's surface evolves quickly; resolve the exact transport at runtime via the probe below rather than hardcoding it.
15
+
16
+ ### How to connect
17
+
18
+ **Option A — Framer MCP (preferred).** Register the Framer MCP over HTTP transport, supplying the API token via environment:
19
+
20
+ ```
21
+ claude mcp add --transport http framer https://<framer-mcp-endpoint>
22
+ ```
23
+
24
+ Set the token in the session environment (name as documented by the Framer MCP — commonly `FRAMER_API_TOKEN`). Restart the Claude Code session after registering. Auth prompts on first tool call.
25
+
26
+ **Option B — Framer plugin bridge.** If Framer exposes a desktop/plugin bridge instead of a hosted MCP, install that plugin inside Framer and register its local endpoint as an MCP server named `framer`. This path mirrors Figma's desktop Dev Mode bridge: it serves the current open project to the session over local HTTP.
27
+
28
+ The pipeline auto-detects any server whose name matches `/framer/i` (e.g., `framer`, `Framer`, UUID-prefixed instances) and records the resolved tool prefix in `STATE.md`. Exact tool names are **not** assumed — they are discovered at runtime.
29
+
30
+ ### Verification
31
+
32
+ After session restart, run:
33
+
34
+ ```
35
+ ToolSearch({ query: "framer", max_results: 10 })
36
+ ```
37
+
38
+ Expect non-empty results under a `/framer/i` prefix, including at least one read tool (selection/frame reader) and, for write-back, a proposal/annotation tool. If empty, re-register the MCP and restart the session.
39
+
40
+ ---
41
+
42
+ ## Probe Pattern
43
+
44
+ **MCP-first. Call `ToolSearch` before any Framer tool — always.** Framer tools are commonly in the deferred tool set and are not loaded into context at session start. Calling a deferred tool directly fails. `ToolSearch` loads the tools and confirms their presence in one call.
45
+
46
+ ```
47
+ ToolSearch({ query: "framer", max_results: 10 })
48
+ → Empty → framer: not_configured (no Framer MCP registered; skip all Framer steps)
49
+ → Non-empty → resolve prefix matching /framer/i, then live-probe a read tool:
50
+ → read tool succeeds → framer: available (prefix=mcp__<prefix>__)
51
+ → read tool errors → framer: unavailable (auth expired / no project open / rate-limited)
52
+ ```
53
+
54
+ Three-value schema written to `.design/STATE.md` under `<connections>`:
55
+
56
+ | Value | Meaning |
57
+ |-------|---------|
58
+ | `available` | A `/framer/i` read tool resolved and the live call succeeded. |
59
+ | `unavailable` | A Framer tool is in the session but errored (auth expired, no project open, rate-limited). |
60
+ | `not_configured` | No server matching `/framer/i` — MCP not registered. |
61
+
62
+ Example STATE block:
63
+
64
+ ```xml
65
+ <connections>
66
+ framer: available (prefix=mcp__framer__)
67
+ figma: not_configured
68
+ </connections>
69
+ ```
70
+
71
+ Re-probe at every stage entry, even if Framer was `available` previously — the resolved prefix and availability can change between sessions.
72
+
73
+ ---
74
+
75
+ ## Framer Tools
76
+
77
+ Tool names take the form `mcp__<prefix>__<tool>` where `<prefix>` is the resolved server name from the probe (commonly `framer`). **Verify exact tool names via `ToolSearch` at runtime** — the table below describes capabilities generically, not literal identifiers.
78
+
79
+ **Reads (design source):**
80
+
81
+ | Capability | Returns | Pipeline use |
82
+ |------------|---------|--------------|
83
+ | Selection reader | The currently selected frame(s)/layer(s): node IDs, names, types, geometry | **In scope** — design source for the current selection; also the availability probe |
84
+ | Frame / canvas reader | Frame tree for the open project or page: hierarchy, layout, component instances | **In scope** — reads frames as a design source for the design stage |
85
+ | Token / style reader | Color, spacing, typography, and shared-style definitions used in the project | **In scope (when present)** — supplements token extraction, mirroring Figma `get_variable_defs` |
86
+ | Screenshot / preview | Rendered image of the selected frame | **In scope (opt-in)** — visual reference capture; not invoked by default |
87
+
88
+ **Writes (design proposals):**
89
+
90
+ | Capability | Returns | Pipeline use |
91
+ |------------|---------|--------------|
92
+ | Annotation / proposal writer | Write operation result | **In scope** — writes annotated design proposals (notes, decision callouts) back onto frames |
93
+
94
+ GDD only ever writes **annotated proposals** — design-decision notes and callouts attached to frames. It does not author production components or replace user content. Every write goes through a **proposal → confirm** UX: the agent builds a numbered operation list and the user confirms before any write tool is called. There is no auto-approve path.
95
+
96
+ ---
97
+
98
+ ## Pipeline Integration
99
+
100
+ Framer is a **canvas-category** connection. It contributes at the **design** stage exactly as Figma and paper.design do (see `connections/figma.md`): read frames as a design source, write annotated proposals back. It does not participate in `scan`, `plan`, or `verify` as a code authority.
101
+
102
+ | Stage | What Framer provides |
103
+ |-------|----------------------|
104
+ | design (read) | Read the current selection/frames as a **design source** — geometry, hierarchy, and (when present) token/style definitions feed the design proposal. |
105
+ | design (write) | After the design proposal is built, offer to write **annotated proposals** back onto Framer frames via the proposal → confirm UX — only when `framer: available`. |
106
+ | scan / plan / verify | Not used. Framer is a design-stage source, not a code authority. |
107
+
108
+ The read path requires an open Framer project/selection. If nothing is selected, the frame reader is used for the open page; if no project is open, the live probe falls to `unavailable` and the stage continues on its non-Framer path. The write offer appears only when `framer: available` — never on `unavailable` or `not_configured`.
109
+
110
+ ---
111
+
112
+ ## Fallback Behavior
113
+
114
+ When `framer` is `not_configured` or `unavailable`, the pipeline **degrades to code-only** and **never blocks**:
115
+
116
+ - **design (read):** skip the Framer design-source step. Proceed with code-derived context and any other available canvas connection. No error is raised.
117
+ - **design (write):** skip the proposal write-back offer entirely — no prompt, no output — on both `not_configured` and `unavailable`.
118
+ - A standalone request to write proposals to Framer against `framer: not_configured` STOPs with a short install note (point the user at the Setup section above).
119
+
120
+ Framer is an **enhancement, not a requirement**. Stages do not append a `<blocker>` for a missing Framer connection. Only if a `must_have` explicitly requires Framer data (reads or writes) should a blocker be appended.
121
+
122
+ **Consumer contract.** Agents that call Framer tools MUST read the resolved prefix from `STATE.md` and construct tool names dynamically (`{prefix}<read_tool>`, `{prefix}<write_tool>`) rather than hardcoding `mcp__framer__`, and MUST treat `unavailable` and `not_configured` identically for the purpose of skipping Framer steps.
123
+
124
+ ---
125
+
126
+ > ⚠︎ **Do NOT edit the connection index here** — the Active-Connections row and the capability-matrix entry in `connections/connections.md` are added by the **37.1 wiring plan**, not by this spec. This file documents the Framer connection in isolation; wiring it into the index is a separate, tracked step.