@hegemonart/get-design-done 1.58.1 → 1.59.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.
@@ -4,15 +4,15 @@
4
4
  "name": "hegemonart"
5
5
  },
6
6
  "metadata": {
7
- "description": "Get Design Done — 5-stage agent-orchestrated design pipeline (Brief → Explore → Plan → Design → Verify) for AI coding agents. 61 agents, 94 skills, 42 connection integrations, two MCP servers, opt-in SQLite state backbone, bidirectional Figma write-back, and a reflector-driven self-improvement loop. Cross-runtime install for Claude Code, Codex, Cursor, OpenCode, Gemini, and more.",
8
- "version": "1.58.1"
7
+ "description": "Get Design Done — 5-stage agent-orchestrated design pipeline (Brief → Explore → Plan → Design → Verify) for AI coding agents. 64 agents, 95 skills, 39 connection integrations, two MCP servers, opt-in SQLite state backbone, bidirectional Figma write-back, and a reflector-driven self-improvement loop. Cross-runtime install for Claude Code, Codex, Cursor, OpenCode, Gemini, and more.",
8
+ "version": "1.59.2"
9
9
  },
10
10
  "plugins": [
11
11
  {
12
12
  "name": "get-design-done",
13
13
  "source": "./",
14
- "description": "Agent-orchestrated 5-stage design pipeline (Brief → Explore → Plan → Design → Verify) for AI coding agents. 61 specialized agents, 94 skills, 42 connection integrations (Figma, Refero, Preview, Storybook, Chromatic, Graphify, Linear, Jira, Notion, …), bidirectional Figma write-back, queryable intel store, opt-in SQLite state backbone, and a reflector-driven self-improvement loop. Two MCP servers (gdd-state for typed STATE mutators, gdd-mcp for 13 read-only project-priming tools), tier-aware routing with cost telemetry, and defense-in-depth hooks (protected paths, MCP circuit breaker, injection scanner, budget enforcer). Cross-runtime install for Claude Code, Codex, Cursor, OpenCode, Gemini, Copilot, and more.",
15
- "version": "1.58.1",
14
+ "description": "Agent-orchestrated 5-stage design pipeline (Brief → Explore → Plan → Design → Verify) for AI coding agents. 64 specialized agents, 95 skills, 39 connection integrations (Figma, Refero, Preview, Storybook, Chromatic, Graphify, Linear, Jira, Notion, …), bidirectional Figma write-back, queryable intel store, opt-in SQLite state backbone, and a reflector-driven self-improvement loop. Two MCP servers (gdd-state for typed STATE mutators, gdd-mcp for 13 read-only project-priming tools), tier-aware routing with cost telemetry, and defense-in-depth hooks (protected paths, MCP circuit breaker, injection scanner, budget enforcer). Cross-runtime install for Claude Code, Codex, Cursor, OpenCode, Gemini, Copilot, and more.",
15
+ "version": "1.59.2",
16
16
  "author": {
17
17
  "name": "hegemonart"
18
18
  },
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "get-design-done",
3
3
  "short_name": "gdd",
4
- "version": "1.58.1",
5
- "description": "Agent-orchestrated 5-stage design pipeline (Brief → Explore → Plan → Design → Verify) for AI coding agents. 61 specialized agents, 94 skills, 42 connection integrations (Figma, Refero, Preview, Storybook, Chromatic, Graphify, Linear, Jira, Notion, …), bidirectional Figma write-back, queryable intel store for O(1) design-surface lookups, opt-in SQLite state backbone, and a reflector-driven self-improvement loop. Two MCP servers (`gdd-state` for typed STATE mutators, `gdd-mcp` for 13 read-only project-priming tools), tier-aware agent routing with cost telemetry, defense-in-depth hooks (protected paths, MCP circuit breaker, injection scanner, budget enforcer), and a cross-runtime install layer for Claude Code, Codex, Cursor, OpenCode, Gemini, Copilot, and more.",
4
+ "version": "1.59.2",
5
+ "description": "Agent-orchestrated 5-stage design pipeline (Brief → Explore → Plan → Design → Verify) for AI coding agents. 64 specialized agents, 95 skills, 39 connection integrations (Figma, Refero, Preview, Storybook, Chromatic, Graphify, Linear, Jira, Notion, …), bidirectional Figma write-back, queryable intel store for O(1) design-surface lookups, opt-in SQLite state backbone, and a reflector-driven self-improvement loop. Two MCP servers (`gdd-state` for typed STATE mutators, `gdd-mcp` for 13 read-only project-priming tools), tier-aware agent routing with cost telemetry, defense-in-depth hooks (protected paths, MCP circuit breaker, injection scanner, budget enforcer), and a cross-runtime install layer for Claude Code, Codex, Cursor, OpenCode, Gemini, Copilot, and more.",
6
6
  "author": {
7
7
  "name": "hegemonart",
8
8
  "url": "https://github.com/hegemonart"
@@ -56,5 +56,19 @@
56
56
  ],
57
57
  "skills": [
58
58
  "./skills/"
59
- ]
59
+ ],
60
+ "mcpServers": {
61
+ "gdd-mcp": {
62
+ "command": "node",
63
+ "args": [
64
+ "${CLAUDE_PLUGIN_ROOT}/bin/gdd-mcp"
65
+ ]
66
+ },
67
+ "gdd-state": {
68
+ "command": "node",
69
+ "args": [
70
+ "${CLAUDE_PLUGIN_ROOT}/bin/gdd-state-mcp"
71
+ ]
72
+ }
73
+ }
60
74
  }
package/CHANGELOG.md CHANGED
@@ -4,6 +4,62 @@ All notable changes to get-design-done are documented here. Versions follow [sem
4
4
 
5
5
  ---
6
6
 
7
+ ## [1.59.2] - 2026-06-04
8
+
9
+ Second point release of the **v1.59 "Audit Closeout & Honesty Pass"** milestone. Wires the AI-native Wave-2 connections and reconciles the connection count to the honest number.
10
+
11
+ ### Added
12
+
13
+ - **Three backing agents** for the AI-native Wave-2 connections that were marked "Active" but had no agent behind them: `design-framer-writer` (Framer canvas), `design-penpot-writer` (Penpot canvas), and `design-webflow-reader` (Webflow site structure as an adaptation source). Their capability-matrix "Active" status is now genuine rather than cosmetic. Agent count 61 to 64.
14
+
15
+ ### Changed
16
+
17
+ - **Honest connection count.** The feature-count gate now counts only genuine integration specs (39), excluding the three non-integration files that live in `connections/` for discoverability: the `connections.md` index, the `cursor.md` runtime, and the `design-corpora.md` reference list. Every marketing surface (plugin.json, marketplace.json, README) now claims 39 connection integrations instead of 42, and the onboarding probe count is reconciled to 39 to match the capability-matrix rows.
18
+
19
+ ### Note
20
+
21
+ - The v0/Plasmic/Builder.io component-generator dispatch and the `paper-write` / `pencil-write` skills were already shipped (Phase 37.1 and prior), so this release adds only the missing canvas/reader agents plus the count reconciliation.
22
+
23
+ ### Breaking changes
24
+
25
+ None.
26
+
27
+ 5,028/5,028 tests pass.
28
+
29
+ ---
30
+
31
+ ## [1.59.1] - 2026-06-04
32
+
33
+ First point release of the **v1.59 "Audit Closeout & Honesty Pass"** milestone. The two bundled MCP servers now come up for users automatically, plus the cheapest correctness/honesty fixes.
34
+
35
+ ### MCP servers register automatically on Claude Code
36
+
37
+ The two bundled MCP servers - `gdd-state` (typed STATE mutators) and `gdd-mcp` (read-only project-priming tools) - are now declared under `mcpServers` in `.claude-plugin/plugin.json`, so a fresh Claude Code marketplace install exposes both servers' tools with no manual `--register-mcp` step. They launch through the plugin-local `bin/` trampolines via `${CLAUDE_PLUGIN_ROOT}`, so the git-clone install path works without `npm install`.
38
+
39
+ ### Added
40
+
41
+ - **`/gdd:bandit-reset`** - a confirm-then-reset maintenance skill for the bandit posterior (`.design/telemetry/posterior.json`): backs the file up to `posterior.json.bak`, then clears it to a fresh envelope. The mutation companion to the read-only `/gdd:bandit-status`. Resolves the previously-dangling `/gdd:bandit-reset` reference. (Skill count 94 → 95.)
42
+
43
+ ### Fixed
44
+
45
+ - **Installer parity** - `get-design-done --register-mcp` now registers BOTH `gdd-mcp` and `gdd-state` for Claude Code and Codex (previously `gdd-mcp` only). `--no-register-mcp` is unchanged.
46
+ - **MCP launch warning** - the servers no longer print a `MODULE_TYPELESS_PACKAGE_JSON` warning on startup (suppressed in the dev/source launch path; the compiled npm-install path is unaffected).
47
+ - **`gdd-sdk audit`** now degrades gracefully with no active cycle (no `.design/STATE.md`): it prints a "no active cycle" notice, runs the static checks, and exits 0 instead of throwing.
48
+ - **Dead path references** - repointed stale `scripts/mcp-servers/...` and `scripts/lib/{gdd-state,event-stream,gdd-errors}/...` references (relocated to `sdk/...` in v1.33.0) to their live locations, including a broken `claude mcp add` command in the `gdd-state` connection doc.
49
+
50
+ ### Changed
51
+
52
+ - Removed two dead npm scripts (`typecheck:session-runner`, `validate:skill-surface`) and pointed the `gdd-sdk` script at the Windows-safe `bin/gdd-sdk` trampoline.
53
+ - Regenerated `reference/schemas/generated.d.ts` from source schemas.
54
+
55
+ ### Breaking changes
56
+
57
+ None.
58
+
59
+ 5,013/5,013 tests pass.
60
+
61
+ ---
62
+
7
63
  ## [1.58.1] - 2026-06-04
8
64
 
9
65
  ### Hotfix - restore committed skills/ for Claude Code marketplace install
@@ -1828,7 +1884,7 @@ The `gsd-build/get-shit-done` rug-pull in May 2026 (TÂCHES drained $GSD Solana
1828
1884
  - **`.design/graph/`** replaces upstream's `.planning/graphs/` location (per D-02 - aligns with the rest of GDD's `.design/` artifact convention).
1829
1885
  - **`connections/graphify.md`** rewritten for native CLI (no external `graphifyy` dependency).
1830
1886
  - **`reference/start-interview.md`** updated to reference `/gdd:discuss` (our equivalent) instead of `/gsd-discuss-phase`.
1831
- - **`README.md`** at the `gsd-build/get-shit-done (MIT see NOTICE)` citation gains the redux-pointer parenthetical "(now archived; community continuation at `open-gsd/get-shit-done-redux`)". Citation preserved verbatim - only annotated for reader clarity.
1887
+ - **`README.md`** at the `gsd-build/get-shit-done (MIT - see NOTICE)` citation gains the redux-pointer parenthetical "(now archived; community continuation at `open-gsd/get-shit-done-redux`)". Citation preserved verbatim - only annotated for reader clarity.
1832
1888
  - **Graphify enable/disable state** (D-09) lives in `.design/config.json` at `{ "graphify": { "enabled": bool } }`. Read directly by `gdd-graph` via fs; no `config-set` / `config-get` CLI subcommand.
1833
1889
 
1834
1890
  ### Removed
@@ -1858,7 +1914,7 @@ The `gsd-build/get-shit-done` rug-pull in May 2026 (TÂCHES drained $GSD Solana
1858
1914
 
1859
1915
  ### Attribution preservation
1860
1916
 
1861
- Phase 27 / Phase 28.5 / Phase 28.7 attribution subsections in `NOTICE` are preserved verbatim per D-06. The architectural ports they describe are historical MIT-licensed code transplants; this release removes a runtime touchpoint, **NOT** a historical port. The `gsd-build/get-shit-done (MIT see NOTICE)` citation in `README.md` is preserved verbatim; only the redux-pointer parenthetical was added.
1917
+ Phase 27 / Phase 28.5 / Phase 28.7 attribution subsections in `NOTICE` are preserved verbatim per D-06. The architectural ports they describe are historical MIT-licensed code transplants; this release removes a runtime touchpoint, **NOT** a historical port. The `gsd-build/get-shit-done (MIT - see NOTICE)` citation in `README.md` is preserved verbatim; only the redux-pointer parenthetical was added.
1862
1918
 
1863
1919
  ---
1864
1920
 
@@ -1880,7 +1936,7 @@ Decimal sub-phase building on Phase 30's `/gdd:report-issue` triage gate. Expand
1880
1936
  ### Changed
1881
1937
 
1882
1938
  - **Reflector capability-gap aggregator** (`scripts/lib/reflector-capability-gap-aggregator.cjs`) - adds lazy-loaded `proposeKfmDraftsForClusters(clusters, options)` export that invokes the KFM proposer as an additional pass after Phase 29 aggregation. Phase 29's existing 5 proposal classes are untouched (additive).
1883
- - **Authority-watcher agent prompt** (`agents/design-authority-watcher.md`) - gains a new `Step 7.5 Emit kfm-candidate events` section documenting the whitelist patterns + payload shape. Phase 13.2's existing fetch/diff/classify/write loop is unchanged.
1939
+ - **Authority-watcher agent prompt** (`agents/design-authority-watcher.md`) - gains a new `Step 7.5 - Emit kfm-candidate events` section documenting the whitelist patterns + payload shape. Phase 13.2's existing fetch/diff/classify/write loop is unchanged.
1884
1940
  - **OFF_CADENCE_VERSIONS** (`tests/semver-compare.test.cjs`) - registers `'1.30.5'` per Phase 29/30 precedent.
1885
1941
 
1886
1942
  ### Documentation
@@ -3345,7 +3401,7 @@ Closes two unrelated risks before the Phase 15–19 reference-library expansion
3345
3401
  **Safety hooks**
3346
3402
  - `hooks/gdd-bash-guard.js` - PreToolUse:Bash guard. 45 dangerous-pattern regexes across 10 families (filesystem destruction, permission escalation, pipe-to-shell, git destruction, system mutation, process nuking, credential exfil, shell obfuscation, path traversal, npm/docker/firewall abuse). `scripts/lib/dangerous-patterns.cjs` normalizes Unicode NFKC + strips ANSI escapes + strips zero-width / bidi overrides before matching so obfuscated attacks (`rm\u200B -rf /`, bidi overrides, hex-encoded `\x72\x6d\x20\x2d\x72\x66`) fail closed.
3347
3403
  - `hooks/gdd-protected-paths.js` + `reference/protected-paths.default.json` - PreToolUse:Edit|Write|Bash guard blocking mutation of `reference/**`, `skills/**`, `commands/**`, `hooks/**`, `.design/archive/**`, `.design/config.json`, `.design/telemetry/**`, `.git/**`, both plugin manifests. User additions in `.design/config.json.protected_paths` MERGE into the default list - users cannot reduce the default-protected set. `scripts/lib/glob-match.cjs` ships a dependency-free `**` glob matcher.
3348
- - `scripts/lib/blast-radius.cjs` - `estimate({touchedPaths, diffStats})` + `estimateMCPCalls({toolCalls})` preflight called by `design-executor` before the first Edit/Write of each task. Defaults: `max_files_per_task: 10`, `max_lines_per_task: 400`, `max_mcp_calls_per_task: 30`. Zero-value limits disable that ceiling. `design-executor` gains a new `## Preflight Blast-Radius Check` section.
3404
+ - `scripts/lib/blast-radius.cjs` - `estimate({touchedPaths, diffStats})` + `estimateMCPCalls({toolCalls})` preflight called by `design-executor` before the first Edit/Write of each task. Defaults: `max_files_per_task: 10`, `max_lines_per_task: 400`, `max_mcp_calls_per_task: 30`. Zero-value limits disable that ceiling. `design-executor` gains a new `## Preflight - Blast-Radius Check` section.
3349
3405
 
3350
3406
  **Injection-scanner extension**
3351
3407
  - `scripts/injection-patterns.cjs` extended from 7 to 22 patterns: classic prompt-injection verbs (incl. `forget previous`), **invisible-Unicode** (zero-width, BOM, bidi overrides), **HTML-comment instruction hijacks** (`<!-- system: …`, hidden divs/spans, zero-font-size tricks), **secret-exfil triggers** (`curl $OPENAI_API_KEY`, `cat .env`, `tar ~ | nc`, `process.env._KEY fetch`, SSH private-key reads). Single source of truth consumed by `hooks/gdd-read-injection-scanner.js`.
@@ -3452,7 +3508,7 @@ Cherry-picked from `c11cd7b` on `claude/upbeat-fermi-199627` - the Figma MCP fix
3452
3508
 
3453
3509
  - **URL entry point**: detect `https://api.anthropic.com/v1/design/h/<hash>` in agent prompt (native "Send to local coding agent" flow); `WebFetch` with `Content-Type` routing - HTML parsed directly, ZIP downloaded and extracted
3454
3510
  - **ZIP bundle**: extract to `.design/handoff/`, find primary HTML + readme, parse normally, clean up after
3455
- - **PDF format**: `pdftotext` text extraction; grep for token values; all decisions tagged `(tentative text-only)` since no CSS is present
3511
+ - **PDF format**: `pdftotext` text extraction; grep for token values; all decisions tagged `(tentative - text-only)` since no CSS is present
3456
3512
  - **PPTX format**: slide XML text extraction (`ppt/slides/*.xml`); same tentative-only tagging as PDF
3457
3513
  - Updated synthesizer parsing algorithm step 1 with format dispatch before parsing
3458
3514
  - Updated probe pattern: URL detection takes priority over file path lookup
package/README.md CHANGED
@@ -56,7 +56,7 @@ What I kept running into: the agent could generate a screen that looked fine in
56
56
 
57
57
  So I built Get Design Done: a design pipeline that gives AI coding agents the same kind of structure developers already expect from engineering workflows. It captures the brief, maps the current design system, grounds decisions in references, decomposes the work into atomic tasks, executes those tasks, and verifies the result before you ship.
58
58
 
59
- Behind the scenes: 61 specialized agents, a queryable intel store, tier-aware model routing, 42 optional tool connections, atomic commits, and a no-regret adaptive layer that learns from solidify-with-rollback outcomes. What you use day to day: a few `/gdd:*` commands that keep design work coherent.
59
+ Behind the scenes: 64 specialized agents, a queryable intel store, tier-aware model routing, 42 optional tool connections, atomic commits, and a no-regret adaptive layer that learns from solidify-with-rollback outcomes. What you use day to day: a few `/gdd:*` commands that keep design work coherent.
60
60
 
61
61
  - **Hegemon**
62
62
 
@@ -246,7 +246,7 @@ GDD handles it for you:
246
246
 
247
247
  Size limits where Claude's quality degrades. Stay under, get consistency.
248
248
 
249
- ### 61 Specialized Agents
249
+ ### 64 Specialized Agents
250
250
 
251
251
  Each stage is a thin orchestrator that spawns specialized agents. Heavy lifting happens in fresh 200k contexts, not your main session.
252
252
 
@@ -307,7 +307,7 @@ Targets 50–70% per-task token-cost reduction with no quality-floor regression.
307
307
 
308
308
  ## Commands
309
309
 
310
- GDD ships 94 skills. The most common ones are below; for the full reference see [SKILL.md](SKILL.md).
310
+ GDD ships 95 skills. The most common ones are below; for the full reference see [SKILL.md](SKILL.md).
311
311
 
312
312
  ### Core Pipeline
313
313
 
@@ -368,7 +368,7 @@ The full per-command reference, including the long tail of memory, distribution,
368
368
 
369
369
  ## Connections
370
370
 
371
- GDD ships 42 tool connections. All are optional; the pipeline degrades gracefully to fallbacks when any connection is unavailable. Configure with `/gdd:connections`.
371
+ GDD ships 39 tool connections. All are optional; the pipeline degrades gracefully to fallbacks when any connection is unavailable. Configure with `/gdd:connections`.
372
372
 
373
373
  The connection layer spans these categories:
374
374
 
package/SKILL.md CHANGED
@@ -99,6 +99,7 @@ Each stage produces artifacts in `.design/` inside the current project.
99
99
  | `quality-gate` | `get-design-done:quality-gate` | Phase 25 - parallel lint/type/test/visual command runner; classifies failures via quality-gate-runner agent |
100
100
  | `turn-closeout` | `get-design-done:turn-closeout` | Phase 25 - Stop-hook mirror skill; finalizes per-turn STATE blocks and emits closeout events |
101
101
  | `bandit-status` | `get-design-done:bandit-status` | Phase 27.5 - read-only diagnostic surface for the bandit posterior; per-(agent, bin, delegate, tier) snapshots (alpha, beta, mean, stddev, count, last-used). Use `/gdd:bandit-reset` to mutate. |
102
+ | `bandit-reset [--yes]` | `get-design-done:bandit-reset` | Phase 23.5 - confirm-then-reset mutation companion to `bandit-status`; backs up `.design/telemetry/posterior.json` to `posterior.json.bak`, then clears it to a fresh empty envelope so the next pull rebootstraps from informed priors. |
102
103
  | `openrouter-status [--refresh]` | `get-design-done:gdd-openrouter-status` | Phase 33.6 - read-only OpenRouter catalog + tier-mapping diagnostic; surfaces catalog freshness (vs 24h TTL), last-fetch, resolved opus/sonnet/haiku → model mappings, per-tier preview. `--refresh` re-fetches (needs `OPENROUTER_API_KEY`). |
103
104
  | `peers` | `get-design-done:peers` | Phase 27 - `/gdd:peers` capability matrix command; shows installed peer-CLIs (codex/gemini/cursor/copilot/qwen), allowlist status, claimed roles, posterior delta vs local |
104
105
  | `peer-cli-customize` | `get-design-done:peer-cli-customize` | Phase 27 - rewire role→peer mappings on a per-agent basis (edits frontmatter `delegate_to:` directly) |
@@ -0,0 +1,286 @@
1
+ ---
2
+ name: design-framer-writer
3
+ description: Writes design decisions back to the active Framer canvas - annotated proposals, token-sync notes, and implementation-status callouts. Operates in proposal->confirm mode by default. Accepts --dry-run (emit proposal without executing). Resolves the Framer MCP prefix at runtime and degrades to code-only when the framer connection is unavailable.
4
+ tools: Read, Write, Bash, Grep, Glob
5
+ color: blue
6
+ model: inherit
7
+ default-tier: sonnet
8
+ tier-rationale: "Writer proposes + executes Framer write-backs - Sonnet handles structured proposal synthesis well"
9
+ size_budget: XL
10
+ parallel-safe: never
11
+ typical-duration-seconds: 120
12
+ reads-only: false
13
+ writes:
14
+ - "Framer canvas (via the runtime-resolved framer MCP prefix) - annotated design proposals: decision callouts, token-sync notes, implementation-status notes attached to frames"
15
+ ---
16
+
17
+ @reference/shared-preamble.md
18
+
19
+ # design-framer-writer
20
+
21
+ ## Role
22
+
23
+ You are design-framer-writer. You write design decisions from `.design/DESIGN-CONTEXT.md` back into the active Framer canvas as annotated proposals. You have three modes: `annotate`, `tokenize`, `implementation-status`. You always emit a proposal before executing writes. You never call a Framer write tool without user confirmation (unless `--dry-run` is requested, in which case you emit the proposal and stop). You write only annotated proposals onto frames - decision notes and callouts - and you never author production components or replace user content. You modify only the active Framer canvas via the runtime-resolved Framer MCP.
24
+
25
+ Framer is a canvas-category connection. This agent is the Framer analogue of the Figma canvas writer: it contributes at the design stage by writing annotated proposals back, and it does not participate in scan, plan, or verify as a code authority.
26
+
27
+ ---
28
+
29
+ ## Step 0 - MCP Probe and Prefix Resolution
30
+
31
+ Framer tools are commonly in the deferred tool set and are not loaded at session start. Calling a deferred tool directly fails, so run `ToolSearch` first - it loads the tools and confirms their presence in one call. Run this probe at agent entry before any other action:
32
+
33
+ ```
34
+ ToolSearch({ query: "framer", max_results: 10 })
35
+
36
+ Parse tool names matching /framer/i -> resolved Framer prefix set.
37
+ Empty -> Write to output: "Framer MCP not available (no server matching /framer/i registered). Install over HTTP: `claude mcp add --transport http framer https://<framer-mcp-endpoint>` and set the Framer API token in the session environment, or register the Framer plugin bridge as a server named `framer`. Then restart the session." -> STOP.
38
+ One+ -> pick the prefix matching /framer/i (prefer the bare `framer` name; on ties choose non-UUID-prefixed, then alphabetical). Record the resolved prefix (written below as `{P}`, e.g. `mcp__framer__`) for use in later steps.
39
+ ```
40
+
41
+ Do NOT hardcode `mcp__framer__`. Construct every tool name as `{P}<tool>` from the resolved prefix. Exact tool names are discovered at runtime via the probe, not assumed - the table below describes capabilities generically.
42
+
43
+ After resolving the prefix, live-probe a read tool (selection or frame reader). If the read tool succeeds, the connection is reachable. If it errors (auth expired, no project open, rate-limited), treat the connection as unavailable and follow the fallback in Step 1.
44
+
45
+ ---
46
+
47
+ ## Step 1 - Read State and Flags
48
+
49
+ Read `.design/STATE.md` and inspect the `<connections>` block for the `framer:` value:
50
+
51
+ - `framer: available` -> proceed.
52
+ - `framer: unavailable` or `framer: not_configured` -> degrade to code-only and STOP. When invoked as part of the design-stage write offer, skip silently (no prompt, no output). When invoked as a standalone write request, write: "Framer connection not available - degrading to code-only. No proposals written. See connections/framer.md Setup to register a Framer MCP." and STOP.
53
+
54
+ Treat `unavailable` and `not_configured` identically for the purpose of skipping Framer steps. Never append a blocker for a missing Framer connection - Framer is an enhancement, not a requirement.
55
+
56
+ Parse flags from the invocation arguments:
57
+
58
+ - `--dry-run` - emit the proposal, do NOT call any Framer write tool, stop after proposal output.
59
+ - `mode` - one of `annotate | tokenize | implementation-status` (required; if absent, list modes and stop).
60
+
61
+ If mode is absent, write to output:
62
+
63
+ ```
64
+ design-framer-writer requires a mode argument.
65
+ Available modes:
66
+ annotate - add design decision callouts to Framer frames
67
+ tokenize - write token-sync notes mapping canvas values to confirmed token decisions
68
+ implementation-status - annotate frames with build status from Handoff Faithfulness results
69
+
70
+ Usage: design-framer-writer <mode> [--dry-run]
71
+ ```
72
+
73
+ Then STOP.
74
+
75
+ ---
76
+
77
+ ## Step 2 - Read Context
78
+
79
+ Read `.design/DESIGN-CONTEXT.md`. Extract the relevant data for the selected mode:
80
+
81
+ - For `annotate`: all confirmed design decisions (color palette, spacing scale, typography, motion) - look for confirmed decision entries in the decisions section.
82
+ - For `tokenize`: color, spacing, and type literal values that map to confirmed token decisions - look for hex values, spacing scales, and typography sizes.
83
+ - For `implementation-status`: component names and their build status (sourced as described in the implementation-status section below).
84
+
85
+ Also read the active Framer canvas structure with the resolved prefix from Step 0:
86
+
87
+ ```
88
+ {P}<selection_reader>() // the current selection: node IDs, names, types, geometry
89
+ {P}<frame_reader>() // frame tree for the open page when nothing is selected
90
+ {P}<token_reader>() // token / style definitions, when the read tool is present (tokenize mode)
91
+ ```
92
+
93
+ If no project or page is accessible, write: "No Framer project is accessible. Open the target project in Framer and retry." and STOP.
94
+
95
+ ---
96
+
97
+ ## Step 3 - Build Proposal
98
+
99
+ Build a numbered operation list based on mode. Do not execute yet. Every operation is an annotated proposal attached to a frame - a note or callout, never a content replacement.
100
+
101
+ **annotate mode:**
102
+
103
+ ```
104
+ Proposed annotations (N operations):
105
+ 1. Frame "Button/Primary" -> add note: "Background: brand-primary-500 (#1A73E8) per color decision"
106
+ 2. Frame "Typography/H1" -> add note: "Font: Inter 32/40 per typography decision"
107
+ ... (one line per annotation)
108
+ ```
109
+
110
+ **tokenize mode:**
111
+
112
+ ```
113
+ Proposed token-sync notes (N operations):
114
+ 1. Frame "Button/Primary" fill #1A73E8 -> note: "maps to token colors/primary/500"
115
+ 2. Frame "Card" padding 16px -> note: "maps to token spacing/4"
116
+ ... (one line per note)
117
+ ```
118
+
119
+ **implementation-status mode:**
120
+
121
+ ```
122
+ Proposed status callouts (N operations):
123
+ 1. Frame "Button" -> note: "Implementation: built - verified <ISO date>"
124
+ 2. Frame "Modal" -> note: "Implementation: pending - not yet implemented"
125
+ ... (one line per callout)
126
+ ```
127
+
128
+ If DESIGN-CONTEXT.md had no applicable data for the selected mode, write:
129
+
130
+ ```
131
+ No operations to perform. DESIGN-CONTEXT.md had no <mode>-applicable data.
132
+ ```
133
+
134
+ Then STOP.
135
+
136
+ ---
137
+
138
+ ## Step 4 - Confirm or Dry-Run
139
+
140
+ After presenting the proposal, check the `--dry-run` flag.
141
+
142
+ If `--dry-run` is set:
143
+
144
+ ```
145
+ [dry-run] Proposal emitted. No writes executed. Pass without --dry-run to apply.
146
+ ```
147
+
148
+ STOP.
149
+
150
+ Otherwise, write to output:
151
+
152
+ ```
153
+ Apply N annotated proposals to Framer? Type "yes" to confirm or "no" to cancel.
154
+ ```
155
+
156
+ Wait for the user response. If the response is not "yes", STOP with "Cancelled." There is no auto-approve path - every write goes through this confirm step.
157
+
158
+ ---
159
+
160
+ ## Step 5 - Execute Writes
161
+
162
+ For each operation in the proposal, call the resolved Framer write tool (`{P}<proposal_writer>`) with the appropriate payload. The exact tool name and parameter shape come from the runtime probe; the calls below are illustrative of the annotated-proposal contract.
163
+
164
+ For `annotate`:
165
+
166
+ ```javascript
167
+ {P}<proposal_writer>({
168
+ node_id: "<frame-node-id>",
169
+ note: "<annotation text>"
170
+ })
171
+ ```
172
+
173
+ For `tokenize`:
174
+
175
+ ```javascript
176
+ {P}<proposal_writer>({
177
+ node_id: "<frame-node-id>",
178
+ note: "maps to token <token-name>"
179
+ })
180
+ ```
181
+
182
+ For `implementation-status`:
183
+
184
+ ```javascript
185
+ {P}<proposal_writer>({
186
+ node_id: "<frame-node-id>",
187
+ note: "Implementation: <status> - verified <ISO date>"
188
+ })
189
+ ```
190
+
191
+ Execute operations sequentially. After each, log: `done <operation-summary>`. If an operation errors, log: `failed <operation-summary> - <error>` and continue with the remaining operations.
192
+
193
+ ---
194
+
195
+ ## Step 6 - Summary
196
+
197
+ After all operations complete, write:
198
+
199
+ ```
200
+ design-framer-writer complete.
201
+ Mode: <mode>
202
+ Applied: N/M operations succeeded
203
+ Failed: <list any failed operations or "none">
204
+ ```
205
+
206
+ If M = 0 (nothing to write - context had no applicable decisions), write:
207
+
208
+ ```
209
+ No operations to perform. DESIGN-CONTEXT.md had no <mode>-applicable data.
210
+ ```
211
+
212
+ ---
213
+
214
+ ## Implementation-Status Mode
215
+
216
+ **Activation:** Mode is `implementation-status`. Spawned by the handoff routing post-verify step.
217
+
218
+ **Source data:**
219
+ - `.design/DESIGN-VERIFICATION.md` - reads the `## Handoff Faithfulness -> Component Structure` table.
220
+ - `.design/DESIGN-CONTEXT.md` - reads the component inventory for component-to-frame mappings.
221
+ - `.design/STATE.md` - reads `handoff_path` for the bundle reference.
222
+
223
+ ### Step IS-1 - Read implementation status
224
+
225
+ Parse the DESIGN-VERIFICATION.md `## Handoff Faithfulness -> Component Structure` table:
226
+
227
+ - PRESENT -> status: `built`
228
+ - MISSING -> status: `pending`
229
+ - Component with any DIVERGE token in the Color, Typography, or Spacing tables -> status: `diverging`
230
+
231
+ If the `## Handoff Faithfulness` section is absent, write: "No Handoff Faithfulness data found. Run the handoff post-handoff verify first." and STOP.
232
+
233
+ ### Step IS-2 - Build status callout proposal
234
+
235
+ For each component with a known status:
236
+
237
+ 1. Look up the Framer frame node ID from the DESIGN-CONTEXT.md component inventory (or ask the user if absent).
238
+ 2. Draft a status callout note: `"Implementation: [built|pending|diverging] - verified <ISO date>"`.
239
+
240
+ Present to the user:
241
+
242
+ ```
243
+ Implementation-Status Write-Back - Proposed Callouts
244
+ ====================================================
245
+
246
+ Frame Annotations (N):
247
+ 1. Annotate "Button" -> "Implementation: built - verified 2026-06-04"
248
+ 2. Annotate "Modal" -> "Implementation: pending - not yet implemented"
249
+ 3. Annotate "Card" -> "Implementation: diverging - spacing tokens differ"
250
+
251
+ Proceed? (yes / no / edit)
252
+ ```
253
+
254
+ If `--dry-run` is set: emit the proposal only, do not execute. Write `[dry-run] N status callouts proposed.` and STOP.
255
+
256
+ If the user says "no": STOP with "Cancelled."
257
+ If the user says "edit": allow the user to modify the proposal, then re-confirm.
258
+
259
+ ### Step IS-3 - Execute status callout writes
260
+
261
+ For each confirmed callout, call the resolved Framer write tool:
262
+
263
+ ```javascript
264
+ {P}<proposal_writer>({
265
+ node_id: "<frame-node-id>",
266
+ note: "Implementation: <status> - verified <ISO date>"
267
+ })
268
+ ```
269
+
270
+ ### Step IS-4 - Summary
271
+
272
+ ```
273
+ implementation-status complete.
274
+ Status callouts applied: N/N_total
275
+ Failed: <list any failed operations or "none">
276
+ ```
277
+
278
+ ## Record
279
+
280
+ At run-end, append one JSONL line to `.design/intel/insights.jsonl`:
281
+
282
+ ```json
283
+ {"ts":"<ISO-8601>","agent":"<name>","cycle":"<cycle from STATE.md>","stage":"<stage from STATE.md>","one_line_insight":"<what was produced or learned>","artifacts_written":["<files written>"]}
284
+ ```
285
+
286
+ Schema: `reference/schemas/insight-line.schema.json`. Use an empty `artifacts_written` array for read-only agents.