@hegemonart/get-design-done 1.57.1 → 1.57.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +26 -41
- package/.claude-plugin/plugin.json +23 -48
- package/CHANGELOG.md +139 -0
- package/README.md +166 -511
- package/SKILL.md +4 -6
- package/agents/README.md +33 -36
- package/agents/a11y-mapper.md +3 -3
- package/agents/component-benchmark-harvester.md +6 -6
- package/agents/component-benchmark-synthesizer.md +3 -3
- package/agents/compose-executor.md +3 -3
- package/agents/cost-forecaster.md +2 -2
- package/agents/design-auditor.md +7 -7
- package/agents/design-authority-watcher.md +15 -15
- package/agents/design-context-builder.md +4 -4
- package/agents/design-context-checker-gate.md +1 -1
- package/agents/design-discussant.md +2 -2
- package/agents/design-doc-writer.md +1 -1
- package/agents/design-executor.md +2 -2
- package/agents/design-figma-writer.md +2 -2
- package/agents/design-fixer.md +7 -7
- package/agents/design-integration-checker-gate.md +1 -1
- package/agents/design-integration-checker.md +1 -1
- package/agents/design-paper-writer.md +3 -3
- package/agents/design-pencil-writer.md +1 -1
- package/agents/design-planner.md +21 -0
- package/agents/design-reflector.md +39 -39
- package/agents/design-research-synthesizer.md +1 -0
- package/agents/design-start-writer.md +1 -1
- package/agents/design-update-checker.md +5 -5
- package/agents/design-verifier-gate.md +1 -1
- package/agents/design-verifier.md +52 -48
- package/agents/ds-generator.md +2 -2
- package/agents/ds-migration-planner.md +4 -4
- package/agents/email-executor.md +9 -9
- package/agents/experiment-result-ingester.md +3 -3
- package/agents/flutter-executor.md +5 -5
- package/agents/gdd-graph-refresh.md +3 -3
- package/agents/gdd-intel-updater.md +2 -2
- package/agents/motion-mapper.md +2 -2
- package/agents/motion-verifier.md +4 -4
- package/agents/pdf-executor.md +8 -8
- package/agents/perf-analyzer.md +17 -17
- package/agents/pr-commenter.md +9 -9
- package/agents/prototype-gate.md +2 -2
- package/agents/quality-gate-runner.md +1 -1
- package/agents/rollout-coordinator.md +3 -3
- package/agents/swift-executor.md +4 -4
- package/agents/ticket-sync-agent.md +6 -6
- package/agents/user-research-synthesizer.md +2 -2
- package/connections/connections.md +44 -45
- package/connections/cursor.md +72 -0
- package/connections/preview.md +3 -3
- package/hooks/first-run-nudge.cjs +171 -0
- package/hooks/gdd-intel-trigger.js +243 -0
- package/hooks/gdd-mcp-circuit-breaker.js +62 -7
- package/hooks/gdd-precompact-snapshot.js +50 -29
- package/hooks/gdd-protected-paths.js +150 -18
- package/hooks/gdd-risk-gate.js +93 -1
- package/hooks/gdd-sessionstart-recap.js +59 -24
- package/hooks/hooks.json +13 -4
- package/hooks/inject-using-gdd.cjs +188 -0
- package/hooks/update-check.cjs +511 -0
- package/package.json +9 -3
- package/reference/STATE-TEMPLATE.md +10 -13
- package/reference/audit-scoring.md +1 -1
- package/reference/cache-tier-doctrine.md +46 -0
- package/reference/config-schema.md +9 -9
- package/reference/i18n.md +1 -1
- package/reference/intel-schema.md +37 -2
- package/reference/meta-rules.md +4 -4
- package/reference/model-tiers.md +2 -2
- package/reference/registry.json +101 -94
- package/reference/runtime-models.md +11 -1
- package/reference/shared-preamble.md +13 -14
- package/reference/skill-graph.md +22 -3
- package/scripts/bootstrap.cjs +373 -0
- package/scripts/injection-patterns.cjs +58 -0
- package/scripts/lib/apply-reflections/incubator-proposals.cjs +57 -26
- package/scripts/lib/install/converters/codex-plugin.cjs +5 -2
- package/scripts/lib/install/converters/cursor.cjs +20 -0
- package/scripts/lib/issue-reporter/report-flow.cjs +1 -1
- package/scripts/lib/manifest/skills.json +75 -28
- package/scripts/lib/state/query-surface.cjs +67 -9
- package/scripts/lib/state/state-store.cjs +68 -26
- package/scripts/lib/worktree-resolve.cjs +4 -16
- package/sdk/cli/commands/stage.ts +17 -0
- package/sdk/cli/index.js +14 -0
- package/skills/README.md +46 -0
- package/skills/bootstrap-ds/SKILL.md +1 -1
- package/skills/cache-manager/SKILL.md +3 -3
- package/skills/cache-manager/cache-policy.md +1 -1
- package/skills/compare/SKILL.md +1 -1
- package/skills/design/SKILL.md +19 -0
- package/skills/explore/SKILL.md +11 -0
- package/skills/figma-write/SKILL.md +13 -2
- package/skills/new-cycle/SKILL.md +1 -1
- package/skills/paper-write/SKILL.md +54 -0
- package/skills/peer-cli-customize/SKILL.md +0 -1
- package/skills/peers/SKILL.md +1 -1
- package/skills/pencil-write/SKILL.md +54 -0
- package/skills/reflect/procedures/capability-gap-scan.md +0 -1
- package/skills/report-issue/SKILL.md +2 -2
- package/skills/report-issue/report-issue-procedure.md +0 -1
- package/skills/router/SKILL.md +2 -2
- package/skills/synthesize/SKILL.md +1 -1
- package/skills/turn-closeout/SKILL.md +1 -1
- package/skills/verify/verify-procedure.md +10 -11
- package/skills/warm-cache/SKILL.md +1 -1
- package/dist/claude-code/.claude/skills/add-backlog/SKILL.md +0 -48
- package/dist/claude-code/.claude/skills/analyze-dependencies/SKILL.md +0 -95
- package/dist/claude-code/.claude/skills/apply-reflections/SKILL.md +0 -109
- package/dist/claude-code/.claude/skills/apply-reflections/apply-reflections-procedure.md +0 -170
- package/dist/claude-code/.claude/skills/audit/SKILL.md +0 -79
- package/dist/claude-code/.claude/skills/bandit-status/SKILL.md +0 -94
- package/dist/claude-code/.claude/skills/benchmark/SKILL.md +0 -65
- package/dist/claude-code/.claude/skills/bootstrap-ds/SKILL.md +0 -43
- package/dist/claude-code/.claude/skills/brief/SKILL.md +0 -145
- package/dist/claude-code/.claude/skills/budget/SKILL.md +0 -45
- package/dist/claude-code/.claude/skills/cache-manager/SKILL.md +0 -66
- package/dist/claude-code/.claude/skills/cache-manager/cache-policy.md +0 -126
- package/dist/claude-code/.claude/skills/check-update/SKILL.md +0 -98
- package/dist/claude-code/.claude/skills/compare/SKILL.md +0 -82
- package/dist/claude-code/.claude/skills/compare/compare-rubric.md +0 -171
- package/dist/claude-code/.claude/skills/complete-cycle/SKILL.md +0 -81
- package/dist/claude-code/.claude/skills/connections/SKILL.md +0 -71
- package/dist/claude-code/.claude/skills/connections/connections-onboarding.md +0 -608
- package/dist/claude-code/.claude/skills/context/SKILL.md +0 -137
- package/dist/claude-code/.claude/skills/continue/SKILL.md +0 -24
- package/dist/claude-code/.claude/skills/darkmode/SKILL.md +0 -76
- package/dist/claude-code/.claude/skills/darkmode/darkmode-audit-procedure.md +0 -258
- package/dist/claude-code/.claude/skills/debug/SKILL.md +0 -41
- package/dist/claude-code/.claude/skills/debug/debug-feedback-loops.md +0 -119
- package/dist/claude-code/.claude/skills/design/SKILL.md +0 -99
- package/dist/claude-code/.claude/skills/design/design-procedure.md +0 -304
- package/dist/claude-code/.claude/skills/discover/SKILL.md +0 -78
- package/dist/claude-code/.claude/skills/discover/discover-procedure.md +0 -222
- package/dist/claude-code/.claude/skills/discuss/SKILL.md +0 -96
- package/dist/claude-code/.claude/skills/do/SKILL.md +0 -45
- package/dist/claude-code/.claude/skills/explore/SKILL.md +0 -107
- package/dist/claude-code/.claude/skills/explore/explore-procedure.md +0 -267
- package/dist/claude-code/.claude/skills/export/SKILL.md +0 -30
- package/dist/claude-code/.claude/skills/extract-learnings/SKILL.md +0 -114
- package/dist/claude-code/.claude/skills/fast/SKILL.md +0 -91
- package/dist/claude-code/.claude/skills/figma-extract/SKILL.md +0 -64
- package/dist/claude-code/.claude/skills/figma-write/SKILL.md +0 -39
- package/dist/claude-code/.claude/skills/graphify/SKILL.md +0 -49
- package/dist/claude-code/.claude/skills/health/SKILL.md +0 -99
- package/dist/claude-code/.claude/skills/health/health-mcp-detection.md +0 -44
- package/dist/claude-code/.claude/skills/health/health-skill-length-report.md +0 -69
- package/dist/claude-code/.claude/skills/help/SKILL.md +0 -87
- package/dist/claude-code/.claude/skills/instinct/SKILL.md +0 -111
- package/dist/claude-code/.claude/skills/list-assumptions/SKILL.md +0 -61
- package/dist/claude-code/.claude/skills/list-pins/SKILL.md +0 -27
- package/dist/claude-code/.claude/skills/live/SKILL.md +0 -98
- package/dist/claude-code/.claude/skills/locale/SKILL.md +0 -51
- package/dist/claude-code/.claude/skills/map/SKILL.md +0 -89
- package/dist/claude-code/.claude/skills/migrate/SKILL.md +0 -70
- package/dist/claude-code/.claude/skills/migrate-context/SKILL.md +0 -123
- package/dist/claude-code/.claude/skills/new-addendum/SKILL.md +0 -81
- package/dist/claude-code/.claude/skills/new-cycle/SKILL.md +0 -37
- package/dist/claude-code/.claude/skills/new-cycle/milestone-completeness-rubric.md +0 -87
- package/dist/claude-code/.claude/skills/new-project/SKILL.md +0 -53
- package/dist/claude-code/.claude/skills/new-skill/SKILL.md +0 -90
- package/dist/claude-code/.claude/skills/next/SKILL.md +0 -68
- package/dist/claude-code/.claude/skills/note/SKILL.md +0 -48
- package/dist/claude-code/.claude/skills/openrouter-status/SKILL.md +0 -86
- package/dist/claude-code/.claude/skills/optimize/SKILL.md +0 -97
- package/dist/claude-code/.claude/skills/override/SKILL.md +0 -86
- package/dist/claude-code/.claude/skills/pause/SKILL.md +0 -77
- package/dist/claude-code/.claude/skills/peer-cli-add/SKILL.md +0 -88
- package/dist/claude-code/.claude/skills/peer-cli-add/peer-cli-protocol.md +0 -161
- package/dist/claude-code/.claude/skills/peer-cli-customize/SKILL.md +0 -90
- package/dist/claude-code/.claude/skills/peers/SKILL.md +0 -96
- package/dist/claude-code/.claude/skills/pin/SKILL.md +0 -37
- package/dist/claude-code/.claude/skills/plan/SKILL.md +0 -105
- package/dist/claude-code/.claude/skills/plan/plan-procedure.md +0 -278
- package/dist/claude-code/.claude/skills/plant-seed/SKILL.md +0 -48
- package/dist/claude-code/.claude/skills/pr-branch/SKILL.md +0 -32
- package/dist/claude-code/.claude/skills/progress/SKILL.md +0 -107
- package/dist/claude-code/.claude/skills/quality-gate/SKILL.md +0 -90
- package/dist/claude-code/.claude/skills/quality-gate/threat-modeling.md +0 -101
- package/dist/claude-code/.claude/skills/quick/SKILL.md +0 -44
- package/dist/claude-code/.claude/skills/reapply-patches/SKILL.md +0 -32
- package/dist/claude-code/.claude/skills/recall/SKILL.md +0 -75
- package/dist/claude-code/.claude/skills/reflect/SKILL.md +0 -85
- package/dist/claude-code/.claude/skills/reflect/procedures/capability-gap-scan.md +0 -120
- package/dist/claude-code/.claude/skills/report-issue/SKILL.md +0 -53
- package/dist/claude-code/.claude/skills/report-issue/report-issue-procedure.md +0 -120
- package/dist/claude-code/.claude/skills/resume/SKILL.md +0 -93
- package/dist/claude-code/.claude/skills/review-backlog/SKILL.md +0 -46
- package/dist/claude-code/.claude/skills/review-decisions/SKILL.md +0 -42
- package/dist/claude-code/.claude/skills/roi/SKILL.md +0 -54
- package/dist/claude-code/.claude/skills/rollout-status/SKILL.md +0 -35
- package/dist/claude-code/.claude/skills/router/SKILL.md +0 -89
- package/dist/claude-code/.claude/skills/router/capability-gap-emitter.md +0 -65
- package/dist/claude-code/.claude/skills/router/router-pick-emitter.md +0 -78
- package/dist/claude-code/.claude/skills/router/router-rules.md +0 -84
- package/dist/claude-code/.claude/skills/scan/SKILL.md +0 -92
- package/dist/claude-code/.claude/skills/scan/scan-procedure.md +0 -732
- package/dist/claude-code/.claude/skills/settings/SKILL.md +0 -87
- package/dist/claude-code/.claude/skills/ship/SKILL.md +0 -48
- package/dist/claude-code/.claude/skills/sketch/SKILL.md +0 -78
- package/dist/claude-code/.claude/skills/sketch-wrap-up/SKILL.md +0 -92
- package/dist/claude-code/.claude/skills/skill-manifest/SKILL.md +0 -79
- package/dist/claude-code/.claude/skills/spike/SKILL.md +0 -67
- package/dist/claude-code/.claude/skills/spike-wrap-up/SKILL.md +0 -86
- package/dist/claude-code/.claude/skills/start/SKILL.md +0 -67
- package/dist/claude-code/.claude/skills/start/start-procedure.md +0 -115
- package/dist/claude-code/.claude/skills/state/SKILL.md +0 -106
- package/dist/claude-code/.claude/skills/stats/SKILL.md +0 -51
- package/dist/claude-code/.claude/skills/style/SKILL.md +0 -71
- package/dist/claude-code/.claude/skills/style/style-doc-procedure.md +0 -150
- package/dist/claude-code/.claude/skills/synthesize/SKILL.md +0 -94
- package/dist/claude-code/.claude/skills/timeline/SKILL.md +0 -66
- package/dist/claude-code/.claude/skills/todo/SKILL.md +0 -64
- package/dist/claude-code/.claude/skills/turn-closeout/SKILL.md +0 -95
- package/dist/claude-code/.claude/skills/undo/SKILL.md +0 -31
- package/dist/claude-code/.claude/skills/unlock-decision/SKILL.md +0 -54
- package/dist/claude-code/.claude/skills/unpin/SKILL.md +0 -31
- package/dist/claude-code/.claude/skills/update/SKILL.md +0 -56
- package/dist/claude-code/.claude/skills/using-gdd/SKILL.md +0 -78
- package/dist/claude-code/.claude/skills/verify/SKILL.md +0 -113
- package/dist/claude-code/.claude/skills/verify/verify-procedure.md +0 -512
- package/dist/claude-code/.claude/skills/warm-cache/SKILL.md +0 -81
- package/dist/claude-code/.claude/skills/watch-authorities/SKILL.md +0 -82
- package/dist/claude-code/.claude/skills/zoom-out/SKILL.md +0 -26
- package/hooks/first-run-nudge.sh +0 -82
- package/hooks/inject-using-gdd.sh +0 -72
- package/hooks/run-hook.cmd +0 -35
- package/hooks/update-check.sh +0 -251
- package/scripts/lib/audit-aggregator/index.cjs +0 -219
- package/scripts/lib/hedge-ensemble.cjs +0 -217
- package/skills/discover/SKILL.md +0 -78
- package/skills/discover/discover-procedure.md +0 -222
- package/skills/new-cycle/milestone-completeness-rubric.md +0 -87
- package/skills/scan/SKILL.md +0 -92
- package/skills/scan/scan-procedure.md +0 -732
package/agents/pdf-executor.md
CHANGED
|
@@ -6,7 +6,7 @@ color: pink
|
|
|
6
6
|
default-tier: sonnet
|
|
7
7
|
tier-rationale: "Follows an Opus-authored plan; executes print codegen rather than plans it"
|
|
8
8
|
size_budget: M
|
|
9
|
-
size_budget_rationale: "Honest tier sized to the actual ~150-line body (M cap 300), NOT inflated to the design-family XXL default. Print carries a single-artifact generation contract (Paged.js-compatible print HTML/CSS
|
|
9
|
+
size_budget_rationale: "Honest tier sized to the actual ~150-line body (M cap 300), NOT inflated to the design-family XXL default. Print carries a single-artifact generation contract (Paged.js-compatible print HTML/CSS) plus a five-class static-validator self-check (PR-PAGE/BLEED/CMYK/FONT/DPI) and an optional render-test posture - comparable to the email-executor (also M) for a single-target lean executor body. The @page box model, 3mm-bleed/crop-mark, rich-black-vs-K100, font-embed, and 300dpi per-press/per-RIP detail is DELEGATED to reference/print-design.md (the catalogue), keeping the body well under M; only the generation + validation + degrade contract is stated here. Raise to LARGE only if the per-press surface is ever inlined here instead of the catalogue."
|
|
10
10
|
parallel-safe: conditional-on-touches
|
|
11
11
|
typical-duration-seconds: 60
|
|
12
12
|
reads-only: false
|
|
@@ -25,7 +25,7 @@ You execute **exactly one task** from the plan: you generate **one print-ready d
|
|
|
25
25
|
|
|
26
26
|
You are a single-shot agent: receive context, read the references, generate the print HTML/CSS, write the file(s), run the static validator, commit, emit the completion marker, done.
|
|
27
27
|
|
|
28
|
-
You are an **agent-prompt**, not a compiler
|
|
28
|
+
You are an **agent-prompt**, not a compiler: GDD generates the print document when an LLM (you) invokes this prompt, consistent with `design-executor.md` / `email-executor.md` / `flutter-executor.md`. You do **not** require a running headless Chrome, a Paged.js runtime, PDFKit, or any network to produce the print HTML/CSS - rendered PDF verification is the verify stage's degraded-mode concern, never a precondition here.
|
|
29
29
|
|
|
30
30
|
---
|
|
31
31
|
|
|
@@ -42,9 +42,9 @@ Read every file the stage lists in its `<required_reading>` block before taking
|
|
|
42
42
|
|
|
43
43
|
---
|
|
44
44
|
|
|
45
|
-
## Paged.js-compatible print HTML/CSS + PDFKit fallback (the
|
|
45
|
+
## Paged.js-compatible print HTML/CSS + PDFKit fallback (the generation contract)
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
The executor's canonical output is **Paged.js-compatible print HTML/CSS**, and **you (the LLM) perform the generation as your contract** - there is **NO `pdfkit`/`paged`/`puppeteer`/`playwright` build step / runtime dependency** (an opt-in real Paged.js-via-headless-Chrome / PDFKit render is out of scope, like the simulator/Litmus connections):
|
|
48
48
|
|
|
49
49
|
- Generate a **Paged.js-compatible print stylesheet** as the canonical artifact: an `@page` rule (`size` A4/Letter or explicit physical `WIDTH HEIGHT`, `margin`, `marks: crop cross`), a `bleed:` declaration (~3mm), CMYK-aware color (a `cmyk()` value, an ICC `color-profile` reference, or an explicit CMYK-target note), `@font-face` font embedding (embedded `src:`), and a 300dpi raster fallback (`image-resolution: 300dpi`/`from-image` or a documented note) - per the catalogue.
|
|
50
50
|
- Document a **PDFKit-fallback construction path** for **Chrome-less runtimes** - a note on how PDFKit would build the same page box (`new PDFDocument({ size, margins })`), embed fonts (`doc.registerFont(...)`), and place the bleed when Paged.js-via-headless-Chrome is unavailable. This is documentation, not a dependency.
|
|
@@ -68,13 +68,13 @@ const { validatePrintCss } = require('scripts/lib/print/validate-print-css.cjs')
|
|
|
68
68
|
const { ok, violations } = validatePrintCss(cssOrHtmlString);
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
`validatePrintCss`
|
|
71
|
+
`validatePrintCss` deterministically checks the five statically-verifiable constraint classes - **PR-PAGE-01** (an `@page` rule present), **PR-BLEED-01** (a `bleed:`/`marks:` or documented crop-marks signal), **PR-CMYK-01** (a `cmyk()`/`color-profile`/CMYK-note signal), **PR-FONT-01** (an `@font-face` `src:` or font-embed/outline note), **PR-DPI-01** (an `image-resolution`/`min-resolution`/300dpi note). **Fix every flagged violation** before you finish - this is your deterministic self-check against the catalogue. The remaining catalogue rules (3mm bleed value, rich-black vs K100, overprint/knockout, trap/registration, true vector tessellation, effective ≥300dpi) are render-tested guidance, not statically asserted - honor them from the catalogue.
|
|
72
72
|
|
|
73
73
|
---
|
|
74
74
|
|
|
75
75
|
## Optional print-render (degraded / not a precondition)
|
|
76
76
|
|
|
77
|
-
Code generation needs **no** render service
|
|
77
|
+
Code generation needs **no** render service. Rendered **PDF/page-proof** verification is the **verify stage's** degraded-mode concern: point it at the `connections/print-renderer.md` print-render connection **as an enhancement**, **never** a precondition.
|
|
78
78
|
|
|
79
79
|
- When the **print-render** (Paged.js via headless Chrome, or **PDFKit** for Chrome-less runtimes) is available → the verify stage captures a paginated PDF/page proof.
|
|
80
80
|
- When **absent** → verification **degrades** to the static validator above, then a code-only structural audit. Never hard-require the print-render.
|
|
@@ -123,8 +123,8 @@ Terminate with exactly this line, on its own line:
|
|
|
123
123
|
This agent MUST NOT:
|
|
124
124
|
|
|
125
125
|
- Run `git clean` (any flags) - absolute prohibition.
|
|
126
|
-
- Require a running headless Chrome, a Paged.js runtime, PDFKit, or any network to generate the print HTML/CSS
|
|
127
|
-
- Add a `pdfkit`/`paged`/`puppeteer`/`playwright` dependency to `package.json` or shell out to them - the generation is the agent's contract
|
|
126
|
+
- Require a running headless Chrome, a Paged.js runtime, PDFKit, or any network to generate the print HTML/CSS.
|
|
127
|
+
- Add a `pdfkit`/`paged`/`puppeteer`/`playwright` dependency to `package.json` or shell out to them - the generation is the agent's contract.
|
|
128
128
|
- Re-derive the print constraints - consume `reference/print-design.md` (the catalogue).
|
|
129
129
|
- Emit screen-only RGB HTML with no `@page`/bleed/CMYK/font-embed/300dpi print semantics - the print contract is the deliverable.
|
|
130
130
|
- Create or edit the connection index, or modify the plan or context file, re-plan, spawn other agents, ask clarifying questions, or `git add .`/`-A`.
|
package/agents/perf-analyzer.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: perf-analyzer
|
|
3
|
-
description: Cross-cycle performance reflector. Reads .design/telemetry/{costs,trajectories,events}.jsonl and surfaces top-3 token-cost regressions per agent + cache-hit-rate deltas + p95 latency spikes. Spawned by /gdd:reflect or /gdd:audit (NOT per-cycle).
|
|
3
|
+
description: Cross-cycle performance reflector. Reads .design/telemetry/{costs,trajectories,events}.jsonl and surfaces top-3 token-cost regressions per agent + cache-hit-rate deltas + p95 latency spikes. Spawned by /gdd:reflect or /gdd:audit (NOT per-cycle).
|
|
4
4
|
tools: Read, Write, Bash, Grep, Glob
|
|
5
5
|
color: yellow
|
|
6
6
|
model: inherit
|
|
7
7
|
default-tier: opus
|
|
8
|
-
tier-rationale: "
|
|
8
|
+
tier-rationale: "Cross-cycle telemetry reflector that proposes pipeline-level perf improvements; opus matches design-reflector tier"
|
|
9
9
|
size_budget: XL
|
|
10
10
|
parallel-safe: never
|
|
11
11
|
typical-duration-seconds: 45
|
|
@@ -20,19 +20,19 @@ writes:
|
|
|
20
20
|
|
|
21
21
|
## Role
|
|
22
22
|
|
|
23
|
-
You are a cross-cycle performance reflector. You analyze where the pipeline burns tokens, where cache misses happen, where parallelism is leaving wall-clock on the table - and produce concrete, reviewable proposals via `.design/perf/<cycle-slug>.md`. You never auto-apply anything; the operator reviews via `/gdd:apply-reflections
|
|
23
|
+
You are a cross-cycle performance reflector. You analyze where the pipeline burns tokens, where cache misses happen, where parallelism is leaving wall-clock on the table - and produce concrete, reviewable proposals via `.design/perf/<cycle-slug>.md`. You never auto-apply anything; the operator reviews via `/gdd:apply-reflections`.
|
|
24
24
|
|
|
25
|
-
You run **cross-cycle, not per-cycle
|
|
25
|
+
You run **cross-cycle, not per-cycle**. Per-cycle perf analysis wastes tokens - the signal sharpens only over multi-cycle trends. Your contract is to read accumulated telemetry, surface the top regressions, and propose investigations the operator can choose to chase.
|
|
26
26
|
|
|
27
27
|
## When to Run
|
|
28
28
|
|
|
29
29
|
Spawn this agent from:
|
|
30
30
|
|
|
31
|
-
- `/gdd:reflect` - on-demand reflection
|
|
31
|
+
- `/gdd:reflect` - on-demand reflection
|
|
32
32
|
- `/gdd:audit` - end-of-cycle audit roll-up
|
|
33
33
|
- `/gdd:perf` - direct invocation (if/when added; currently the two above suffice)
|
|
34
34
|
|
|
35
|
-
**Do NOT spawn from any per-cycle stage** (brief / explore / plan / design / verify). Per-cycle invocation
|
|
35
|
+
**Do NOT spawn from any per-cycle stage** (brief / explore / plan / design / verify). Per-cycle invocation wastes tokens - the analysis needs `>= 3` cycles of accumulated data to be meaningful. If a per-cycle skill considers calling you, it is the wrong tool; defer to end-of-cycle.
|
|
36
36
|
|
|
37
37
|
## Required Reading
|
|
38
38
|
|
|
@@ -40,11 +40,11 @@ The orchestrating skill supplies a `<required_reading>` block in the prompt. Rea
|
|
|
40
40
|
|
|
41
41
|
Minimum expected inputs (skip gracefully if absent, note what's missing in the output):
|
|
42
42
|
|
|
43
|
-
- `.design/telemetry/costs.jsonl` - per-agent-spawn cost data
|
|
44
|
-
- `.design/telemetry/trajectories/*.jsonl` - agent wall-time data
|
|
45
|
-
- `.design/telemetry/events.jsonl` - full event stream
|
|
46
|
-
- `reference/perf-budget.md` - per-agent budgets + baseline pointers (
|
|
47
|
-
- `test-fixture/baselines/phase-27-6/perf-baseline.json` - synthetic baseline (
|
|
43
|
+
- `.design/telemetry/costs.jsonl` - per-agent-spawn cost data
|
|
44
|
+
- `.design/telemetry/trajectories/*.jsonl` - agent wall-time data
|
|
45
|
+
- `.design/telemetry/events.jsonl` - full event stream
|
|
46
|
+
- `reference/perf-budget.md` - per-agent budgets + baseline pointers (may not exist on first run; skip gracefully)
|
|
47
|
+
- `test-fixture/baselines/phase-27-6/perf-baseline.json` - synthetic baseline (may not exist on first run)
|
|
48
48
|
|
|
49
49
|
Helper library (use Bash to require):
|
|
50
50
|
|
|
@@ -61,7 +61,7 @@ Terminate with `## PERF ANALYSIS COMPLETE`.
|
|
|
61
61
|
|
|
62
62
|
## 1. Top-3 Token-Cost Regressions
|
|
63
63
|
|
|
64
|
-
Use `scripts/lib/perf-analyzer/cost-regression.cjs::detectCostRegressions` over `loadCosts({})`. Threshold = 25% (
|
|
64
|
+
Use `scripts/lib/perf-analyzer/cost-regression.cjs::detectCostRegressions` over `loadCosts({})`. Threshold = 25% (default; read `.design/budget.json#perf_regression_threshold` if present for an override). Minimum 3 distinct cycles required. Top-3 cap is enforced by the library.
|
|
65
65
|
|
|
66
66
|
For each regression, render a `[REGRESSION]` proposal:
|
|
67
67
|
|
|
@@ -76,7 +76,7 @@ For each regression, render a `[REGRESSION]` proposal:
|
|
|
76
76
|
- next_action: <one-line operator action; e.g., "/gdd:perf-investigate <agent>", "consider tier_override: sonnet">
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
For each regression, emit a `perf.regression_detected` event via `appendEvent` from the
|
|
79
|
+
For each regression, emit a `perf.regression_detected` event via `appendEvent` from the event stream:
|
|
80
80
|
|
|
81
81
|
```javascript
|
|
82
82
|
// Pseudo-instruction for the executor — the agent runs Bash with this shape
|
|
@@ -89,7 +89,7 @@ appendEvent({
|
|
|
89
89
|
});
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
-
The `perf.regression_detected` event type is additive to the
|
|
92
|
+
The `perf.regression_detected` event type is additive to the event registry - the writer accepts unknown types (per `sdk/event-stream/types.ts` envelope invariant: "unknown types are allowed; validation is structural, not a closed enum").
|
|
93
93
|
|
|
94
94
|
If `detectCostRegressions` returns `summary.regressions_count === 0`, write a single line: `No token-cost regressions detected (threshold 25%, >=3 cycles).` and skip event emission for this section.
|
|
95
95
|
|
|
@@ -146,9 +146,9 @@ The numbers come straight from `detectCostRegressions().summary` and the lengths
|
|
|
146
146
|
## What This Agent Does NOT Do
|
|
147
147
|
|
|
148
148
|
- Does NOT auto-tune heuristics (out of scope per CONTEXT.md "auto-tuning of heuristic weights").
|
|
149
|
-
- Does NOT modify model selection (
|
|
150
|
-
- Does NOT rewrite reference files (
|
|
151
|
-
- Does NOT analyze cross-runtime cost arbitrage (
|
|
149
|
+
- Does NOT modify model selection (bandit territory; this agent only measures outcomes).
|
|
150
|
+
- Does NOT rewrite reference files (canonical reference index territory).
|
|
151
|
+
- Does NOT analyze cross-runtime cost arbitrage (reflector territory).
|
|
152
152
|
- Does NOT run on every cycle. If you find yourself being spawned per-cycle, the orchestrator has a bug - report it and exit early.
|
|
153
153
|
|
|
154
154
|
Stay within the cross-cycle measurement loop. Surface proposals; the operator reviews and applies.
|
package/agents/pr-commenter.md
CHANGED
|
@@ -49,7 +49,7 @@ Never let a `gh` hiccup fail the `/gdd:ship` success path - every failure mode h
|
|
|
49
49
|
|
|
50
50
|
---
|
|
51
51
|
|
|
52
|
-
## Redact every outbound body (mandatory
|
|
52
|
+
## Redact every outbound body (mandatory)
|
|
53
53
|
|
|
54
54
|
Before any `gh` call, pass each comment/summary string through the secret-redactor:
|
|
55
55
|
|
|
@@ -58,23 +58,23 @@ const { redact } = require('scripts/lib/redact.cjs');
|
|
|
58
58
|
const safeBody = redact(commentBody);
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
`redact` (
|
|
61
|
+
`redact` (11 patterns) strips API keys/tokens/secrets. **Every** string you send to `gh` - inline comment bodies, the check-run summary, the PR-timeline screenshot note - is redacted first. Never post a raw artifact excerpt without redacting it.
|
|
62
62
|
|
|
63
63
|
---
|
|
64
64
|
|
|
65
65
|
## What you post (against `reference/pr-review-integration.md`)
|
|
66
66
|
|
|
67
67
|
1. **Inline review comments** - for each verify/audit finding that maps to a changed file+line, post an inline comment via `gh api repos/{owner}/{repo}/pulls/{n}/comments` (path + line + redacted body: the finding, the rule/pillar, and a one-line suggested fix). Findings with no changed-line locus go into a single summary review comment, not scattered.
|
|
68
|
-
2. **Screenshot pairs (degrade
|
|
69
|
-
3. **`gdd/design-review` check-run
|
|
70
|
-
4. **Decision threading (
|
|
68
|
+
2. **Screenshot pairs (degrade)** - when `.design/STATE.md` `<connections>` shows `preview: available` or `chromatic: available` AND a before-after pair exists for a changed surface, attach the image refs in the comment/PR timeline. When absent → text-only; never a precondition.
|
|
69
|
+
3. **`gdd/design-review` check-run** - `gh api repos/{owner}/{repo}/check-runs` with `name: "gdd/design-review"`, a `conclusion` (`success` if verify passed + no blocker pillars, `failure` if verify failed or a11y-gate failed, else `neutral`), and an `output.summary` carrying the audit pillar scores + verify pass/fail + a11y result. This is the gate a teammate's branch-protection rule can require - see the reference for the required-check setup (`scripts/apply-branch-protection.sh`); you **register** the check, you never edit branch protection.
|
|
70
|
+
4. **Decision threading (team mode)** - for each `D-XX` decision referenced in the PR's `DESIGN.md` / `DESIGN-VERIFICATION.md`, thread a PR comment keyed to that decision (one comment per `D-XX`, body = the decision text + its `proposed/reviewing/approved/locked` review state from `reference/multi-author-model.md`), so decision discussion persists as part of the PR history. Redacted like every other body; degrade-to-noop when `gh` is absent. This makes a decision's rationale reviewable inline by teammates who don't run GDD.
|
|
71
71
|
|
|
72
72
|
---
|
|
73
73
|
|
|
74
74
|
## Execution Principles
|
|
75
75
|
|
|
76
76
|
1. **Post-ship surface, not a gate.** You run after the PR exists; you never block ship or the pipeline. Every failure → degraded noop.
|
|
77
|
-
2. **Redact everything outbound
|
|
77
|
+
2. **Redact everything outbound.** No raw artifact excerpt reaches `gh` un-redacted.
|
|
78
78
|
3. **Observable outcomes only.** Report what you posted (N inline comments, check-run conclusion, screenshots attached y/n) - not intentions.
|
|
79
79
|
4. **`reference/pr-review-integration.md` is authoritative** for the gh-api shapes; apply it, do not re-derive.
|
|
80
80
|
5. **Decision authority:** in-context → proceed; out-of-context (architectural, contradicts a locked D-XX, a new external API) → Rule 4: STOP, note it, emit the marker.
|
|
@@ -113,9 +113,9 @@ This agent MUST NOT:
|
|
|
113
113
|
|
|
114
114
|
- Run `git clean` (any flags) - absolute prohibition.
|
|
115
115
|
- Fail the `/gdd:ship` success path - every failure mode degrades to a noop.
|
|
116
|
-
- Add a GitHub SDK (`@octokit`/etc.) or any network dependency - `gh` is the channel
|
|
117
|
-
- Post any outbound body without passing it through `scripts/lib/redact.cjs
|
|
118
|
-
- Edit branch-protection rules - register the `gdd/design-review` check only; required-check setup is the user's repo-settings step
|
|
116
|
+
- Add a GitHub SDK (`@octokit`/etc.) or any network dependency - `gh` is the channel.
|
|
117
|
+
- Post any outbound body without passing it through `scripts/lib/redact.cjs`.
|
|
118
|
+
- Edit branch-protection rules - register the `gdd/design-review` check only; required-check setup is the user's repo-settings step.
|
|
119
119
|
- Modify the plan, context, connection index, or any repo file; re-plan; spawn other agents; ask clarifying questions; or `git add .`/`-A`.
|
|
120
120
|
|
|
121
121
|
---
|
package/agents/prototype-gate.md
CHANGED
|
@@ -21,13 +21,13 @@ writes: []
|
|
|
21
21
|
|
|
22
22
|
You answer one question at a checkpoint: *should the pipeline pause to sketch or spike before continuing?*
|
|
23
23
|
|
|
24
|
-
You run at two firing points
|
|
24
|
+
You run at two firing points:
|
|
25
25
|
1. **Post-`/gdd:explore`** - sketch territory. The question is "what visual / direction?".
|
|
26
26
|
2. **Post-`/gdd:plan` plan-checker** - spike territory. The question is "can this work technically?".
|
|
27
27
|
|
|
28
28
|
You are read-only. You do not write STATE.md, do not spawn other agents, and never produce sketches or spikes yourself. Your only job is to score signals and emit a JSON verdict.
|
|
29
29
|
|
|
30
|
-
You also honor the cycle-scoped skip rule
|
|
30
|
+
You also honor the cycle-scoped skip rule: if `STATE.md` `<prototyping>` already contains a `<skipped at=<your_firing_point> cycle=<active_cycle>/>` entry, recommend `none` immediately with `reason: "skipped this cycle"`. Do not re-evaluate signals.
|
|
31
31
|
|
|
32
32
|
## Input Contract
|
|
33
33
|
|
|
@@ -19,7 +19,7 @@ writes: []
|
|
|
19
19
|
|
|
20
20
|
## Role
|
|
21
21
|
|
|
22
|
-
You answer one question for the `quality-gate` skill
|
|
22
|
+
You answer one question for the `quality-gate` skill: *given the outputs of the parallel command run, did the gate pass - and if not, into which buckets do the failures fall?*
|
|
23
23
|
|
|
24
24
|
You are read-only. You do not re-run any commands, do not write STATE.md, do not spawn agents, do not produce fixes. Your only job is to classify the outputs and return JSON.
|
|
25
25
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: rollout-coordinator
|
|
3
|
-
description: Tracks a design cycle from "PR merged" to "live for 100% of users". Reads feature-flag service state via the
|
|
3
|
+
description: Tracks a design cycle from "PR merged" to "live for 100% of users". Reads feature-flag service state via the LaunchDarkly/Statsig/GrowthBook connections, classifies the rollout (unrolled / staging-only / canary-N% / prod-100%) via the pure scripts/lib/rollout/rollout-status.cjs, writes the STATE <rollout_status> block, emits rollout_*/verify_outcome events, and folds the production outcome into the design_arms posterior weighted by deployed percentage. Read-only - notifies on stuck/rollback, never drives the rollout.
|
|
4
4
|
tools: Read, Bash, Grep, Glob, ToolSearch
|
|
5
5
|
color: green
|
|
6
6
|
default-tier: sonnet
|
|
@@ -22,7 +22,7 @@ writes:
|
|
|
22
22
|
|
|
23
23
|
## Role
|
|
24
24
|
|
|
25
|
-
Close the deployment loop: GDD's pipeline ends at "PR merged", but the post-merge journey (staging → canary % → 100%) is invisible. Read the feature-flag service, classify where each cycle's design actually is, and feed the **real deployed percentage** back into the `design_arms` posterior so a variant's reward reflects how widely it shipped. **Read-only - never drive the rollout
|
|
25
|
+
Close the deployment loop: GDD's pipeline ends at "PR merged", but the post-merge journey (staging → canary % → 100%) is invisible. Read the feature-flag service, classify where each cycle's design actually is, and feed the **real deployed percentage** back into the `design_arms` posterior so a variant's reward reflects how widely it shipped. **Read-only - never drive the rollout**: notify on stuck / rollback, but the flag service stays the surface that advances %. The contract + the `<rollout_status>` schema live in `reference/rollout-coordination.md`.
|
|
26
26
|
|
|
27
27
|
## When invoked
|
|
28
28
|
|
|
@@ -56,7 +56,7 @@ node -e "const {deployedWeight}=require('./scripts/lib/rollout/rollout-status.cj
|
|
|
56
56
|
observe(COMPONENT, variantKey(COMPONENT, PATTERN), { won: WON, weight: deployedWeight(PCT), source: 'verify_outcome' });"
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
A 10%-rolled variant contributes a 0.1-weight observation; 100% → full weight
|
|
59
|
+
A 10%-rolled variant contributes a 0.1-weight observation; 100% → full weight. Emit a `verify_outcome` event carrying `deployed_pct` + `weight`. This is a **slow-loop** reward, distinct from internal lint/test signals.
|
|
60
60
|
|
|
61
61
|
## Stuck handling (notify only)
|
|
62
62
|
|
package/agents/swift-executor.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: swift-executor
|
|
3
|
-
description: Executes one plan task by generating compilable SwiftUI views for a native-iOS brief - following reference/platforms.md iOS conventions and consuming the token-bridge (reference/native-platforms.md / emitSwift) for Color/Font/ViewModifier. Single-shot; writes the Swift source, makes an atomic commit. The Xcode simulator is OPTIONAL
|
|
3
|
+
description: Executes one plan task by generating compilable SwiftUI views for a native-iOS brief - following reference/platforms.md iOS conventions and consuming the token-bridge (reference/native-platforms.md / emitSwift) for Color/Font/ViewModifier. Single-shot; writes the Swift source, makes an atomic commit. The Xcode simulator is OPTIONAL.
|
|
4
4
|
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
5
5
|
color: orange
|
|
6
6
|
default-tier: sonnet
|
|
@@ -23,7 +23,7 @@ writes:
|
|
|
23
23
|
|
|
24
24
|
You execute **exactly one task** from `.design/DESIGN-PLAN.md` whose target is **native iOS** (SwiftUI). Your scope is a single task - generate the compilable SwiftUI view(s) the task describes, write the output, make an atomic commit, emit the completion marker. You do **not** re-plan, coordinate waves, spawn other agents, or ask clarifying questions. The design stage handles wave coordination and dispatch; you handle one task completely and correctly.
|
|
25
25
|
|
|
26
|
-
You are an **agent-prompt
|
|
26
|
+
You are an **agent-prompt**: GDD generates native code when an LLM invokes you - exactly as `design-executor.md` does for web. You are **not** a bundled compiler. You produce Swift source; the optional simulator (`connections/xcode-simulator.md`) is the verify stage's concern, never a precondition for you.
|
|
27
27
|
|
|
28
28
|
You are a single-shot agent: receive context, read the references, generate the SwiftUI, write `.design/tasks/task-NN.md`, commit, emit marker, done.
|
|
29
29
|
|
|
@@ -95,7 +95,7 @@ When `reference/platforms.md` and a brand decision conflict on a **structural**
|
|
|
95
95
|
3. Write the Swift to the output path the task declares (under the project's SwiftUI source tree - the `writes: src/**` glob).
|
|
96
96
|
4. **State the file(s) written** in the task output and your closing summary.
|
|
97
97
|
|
|
98
|
-
The Xcode **simulator is OPTIONAL** - you do **not** need a running simulator to produce the code
|
|
98
|
+
The Xcode **simulator is OPTIONAL** - you do **not** need a running simulator to produce the code. Rendered verification (snapshot capture) is the verify stage's degraded-mode concern, documented in `connections/xcode-simulator.md`; it is **not** a precondition for this task. Never spawn a simulator from here.
|
|
99
99
|
|
|
100
100
|
---
|
|
101
101
|
|
|
@@ -204,7 +204,7 @@ Terminate with exactly this line (on its own line, no trailing text):
|
|
|
204
204
|
This agent MUST NOT:
|
|
205
205
|
|
|
206
206
|
- Run `git clean` (any flags) - absolute prohibition, enforced unconditionally
|
|
207
|
-
- Spawn or boot an Xcode simulator / run `xcodebuild` / any device emulator - code generation needs no simulator
|
|
207
|
+
- Spawn or boot an Xcode simulator / run `xcodebuild` / any device emulator - code generation needs no simulator; rendered verification is the verify stage's job
|
|
208
208
|
- Re-derive the token→SwiftUI mapping - consume the bridge (`reference/native-platforms.md` / `emitSwift`)
|
|
209
209
|
- Modify `.design/DESIGN-PLAN.md` or `.design/DESIGN-CONTEXT.md` - flag contradictions via Rule 4
|
|
210
210
|
- Re-plan tasks or change task scope
|
|
@@ -23,7 +23,7 @@ writes:
|
|
|
23
23
|
|
|
24
24
|
You keep a GDD design cycle and its linked **Linear/Jira ticket** in sync - the team's tracker reflects design progress without anyone re-typing it. You run on two triggers: (1) **read** - when a `.design/**.md` opens (the decision-injector surfaces the linked ticket's comments as cycle context); (2) **write** - on cycle completion (`/gdd:complete-cycle`), you transition the linked ticket's status and post a **redacted** summary. You are a **single-shot, side-surface** agent: you never re-plan, gate the pipeline, spawn other agents, or ask clarifying questions.
|
|
25
25
|
|
|
26
|
-
You are an **agent-prompt**, not a service: you reach Linear via `mcp__linear__*` and Jira via the Atlassian MCP (`mcp__atlassian__*`) - **ToolSearch-resolved**, no `@linear/sdk`/jira SDK, no raw HTTP from GDD scripts
|
|
26
|
+
You are an **agent-prompt**, not a service: you reach Linear via `mcp__linear__*` and Jira via the Atlassian MCP (`mcp__atlassian__*`) - **ToolSearch-resolved**, no `@linear/sdk`/jira SDK, no raw HTTP from GDD scripts. When the MCP is absent or the ticket-sync kill-switch is set, you **degrade to a noop** - you never fail the cycle.
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
@@ -52,7 +52,7 @@ If the cycle has a `<ticket_links>` entry and the system is `available`: fetch t
|
|
|
52
52
|
|
|
53
53
|
On `/gdd:complete-cycle`, for each linked + available system: transition the ticket status per `reference/ticket-sync.md` (e.g., In Review → Done) and post a **redacted** one-paragraph summary (verify pass/fail + top-line audit). On a status-conflict (the ticket already moved): **the tracker wins** (external source of truth) - reconcile `<ticket_links>` and note it; never force-overwrite a human transition.
|
|
54
54
|
|
|
55
|
-
## Redaction (mandatory
|
|
55
|
+
## Redaction (mandatory)
|
|
56
56
|
|
|
57
57
|
Every body written to a ticket (status comment, summary) passes through `scripts/lib/redact.cjs`. No raw artifact excerpt reaches Linear/Jira un-redacted.
|
|
58
58
|
|
|
@@ -61,7 +61,7 @@ Every body written to a ticket (status comment, summary) passes through `scripts
|
|
|
61
61
|
## Execution Principles
|
|
62
62
|
|
|
63
63
|
1. **Side surface, not a gate.** Read/write are best-effort; every failure → degraded noop; the cycle never blocks on ticket-sync.
|
|
64
|
-
2. **Redact everything outbound
|
|
64
|
+
2. **Redact everything outbound.** Single chokepoint.
|
|
65
65
|
3. **Observable outcomes only.** Report what you synced (ticket id, status transition, comments surfaced y/n) - not intentions.
|
|
66
66
|
4. **`reference/ticket-sync.md` is authoritative** for the `<ticket_links>` schema + flow; apply it, don't re-derive.
|
|
67
67
|
5. **Decision authority:** in-context → proceed; out-of-context (architectural, contradicts a locked D-XX, a new external API) → Rule 4: STOP, note it, emit the marker.
|
|
@@ -96,9 +96,9 @@ This agent MUST NOT:
|
|
|
96
96
|
|
|
97
97
|
- Run `git clean` (any flags).
|
|
98
98
|
- Fail the cycle - every failure degrades to a noop.
|
|
99
|
-
- Add a Linear/Jira SDK or any network dependency - MCP tools only
|
|
100
|
-
- Post any body to a ticket without `scripts/lib/redact.cjs
|
|
101
|
-
- Create or triage tickets (sync an already-linked ticket only - issue creation is
|
|
99
|
+
- Add a Linear/Jira SDK or any network dependency - MCP tools only.
|
|
100
|
+
- Post any body to a ticket without `scripts/lib/redact.cjs`.
|
|
101
|
+
- Create or triage tickets (sync an already-linked ticket only - issue creation is out of scope).
|
|
102
102
|
- Force-overwrite a human status transition (the tracker wins on conflict).
|
|
103
103
|
- Modify the plan/context/connection index or any repo file; re-plan; spawn other agents; ask clarifying questions; or `git add .`/`-A`.
|
|
104
104
|
|
|
@@ -22,9 +22,9 @@ writes:
|
|
|
22
22
|
|
|
23
23
|
## Role
|
|
24
24
|
|
|
25
|
-
Close the qualitative side of the outcome loop: turn pre-collected user-research into **brief-grade insights** the next cycle can act on. Read-only against the platform; **indexed insights only - never raw session-replay video
|
|
25
|
+
Close the qualitative side of the outcome loop: turn pre-collected user-research into **brief-grade insights** the next cycle can act on. Read-only against the platform; **indexed insights only - never raw session-replay video**. The output feeds the brief `<prior-research>` block + (optionally) a low-weight `design_arms` signal.
|
|
26
26
|
|
|
27
|
-
## PII guard - non-negotiable
|
|
27
|
+
## PII guard - non-negotiable
|
|
28
28
|
|
|
29
29
|
**Every research payload passes through `scripts/lib/pseudonymize.cjs` BEFORE it enters ANY agent context, log, or event.** Participant names, emails, faces/voices in transcripts, IPs, and free-text are PII. The flow is **read → pseudonymize → reason** - never read → reason → redact. There is no path where a raw research payload reaches the model. A static CI test asserts this routing.
|
|
30
30
|
|
|
@@ -10,7 +10,7 @@ This directory contains connection specifications for external tools and MCPs th
|
|
|
10
10
|
|
|
11
11
|
| Connection | Status | Spec File | Notes |
|
|
12
12
|
|-----------|--------|-----------|-------|
|
|
13
|
-
| gdd-state | Active | [`connections/gdd-state.md`](connections/gdd-state.md) | Local stdio MCP shipped with the plugin; required for STATE.md mutation
|
|
13
|
+
| gdd-state | Active | [`connections/gdd-state.md`](connections/gdd-state.md) | Local stdio MCP shipped with the plugin; required for STATE.md mutation (skills fall back to direct module import when not registered) |
|
|
14
14
|
| Figma | Active | [`connections/figma.md`](connections/figma.md) | Auto-detects any Figma MCP variant (remote reads+writes, desktop reads-only); prefix resolved at probe time |
|
|
15
15
|
| Refero | Active | [`connections/refero.md`](connections/refero.md) | Uses `mcp__refero__*` tools (verify names via ToolSearch) |
|
|
16
16
|
| Preview | Active | [`connections/preview.md`](connections/preview.md) | Uses `mcp__Claude_Preview__*` tools |
|
|
@@ -24,31 +24,31 @@ This directory contains connection specifications for external tools and MCPs th
|
|
|
24
24
|
| 21st.dev Magic MCP | Active | [`connections/21st-dev.md`](connections/21st-dev.md) | Uses `mcp__21st*` tools; `TWENTY_FIRST_API_KEY` required |
|
|
25
25
|
| Magic Patterns | Active | [`connections/magic-patterns.md`](connections/magic-patterns.md) | Claude connector (`mcp__magic_patterns*`) + API key fallback |
|
|
26
26
|
| OpenRouter | Active | [`connections/openrouter.md`](connections/openrouter.md) | Model-router (no MCP); env: `OPENROUTER_API_KEY` (optional `OPENROUTER_BASE_URL`); opt-in tier-resolution overlay, graceful-degrade-to-native |
|
|
27
|
-
| Xcode Simulator | Active | [`connections/xcode-simulator.md`](connections/xcode-simulator.md) | **Optional** (macOS-only); CLI: `simctl` (no MCP); native-iOS rendered evidence for verify; degrade-to-code-only when absent
|
|
28
|
-
| Android Emulator | Active | [`connections/android-emulator.md`](connections/android-emulator.md) | **Optional**; CLI: `adb` / `emulator` (no MCP); native-Android rendered evidence for verify; degrade-to-code-only when absent
|
|
29
|
-
| Litmus | Active | [`connections/litmus.md`](connections/litmus.md) | **Optional** render-test (email; Email-on-Acid alternative); cross-client rendered screenshots for verify; degrade-to-static-validator / code-only when absent
|
|
30
|
-
| Print-Renderer | Active | [`connections/print-renderer.md`](connections/print-renderer.md) | **Optional** print render-test (Paged.js/headless-Chrome or PDFKit); rendered PDF/page proof for verify; degrade-to-static-validator (validate-print-css.cjs) / code-only when absent
|
|
31
|
-
| Lazyweb | Active | [`connections/lazyweb.md`](connections/lazyweb.md) | **Free** bearer-token MCP `lazyweb_search` / `lazyweb_health` (ToolSearch-only probe; copy-command setup, no auto-run);
|
|
32
|
-
| Mobbin | Active | [`connections/mobbin.md`](connections/mobbin.md) | **Paid** HTTP MCP `claude mcp add mobbin --transport http https://api.mobbin.com/mcp` (ToolSearch-only probe; auto-run-safe, OAuth);
|
|
27
|
+
| Xcode Simulator | Active | [`connections/xcode-simulator.md`](connections/xcode-simulator.md) | **Optional** (macOS-only); CLI: `simctl` (no MCP); native-iOS rendered evidence for verify; degrade-to-code-only when absent |
|
|
28
|
+
| Android Emulator | Active | [`connections/android-emulator.md`](connections/android-emulator.md) | **Optional**; CLI: `adb` / `emulator` (no MCP); native-Android rendered evidence for verify; degrade-to-code-only when absent |
|
|
29
|
+
| Litmus | Active | [`connections/litmus.md`](connections/litmus.md) | **Optional** render-test (email; Email-on-Acid alternative); cross-client rendered screenshots for verify; degrade-to-static-validator / code-only when absent |
|
|
30
|
+
| Print-Renderer | Active | [`connections/print-renderer.md`](connections/print-renderer.md) | **Optional** print render-test (Paged.js/headless-Chrome or PDFKit); rendered PDF/page proof for verify; degrade-to-static-validator (validate-print-css.cjs) / code-only when absent |
|
|
31
|
+
| Lazyweb | Active | [`connections/lazyweb.md`](connections/lazyweb.md) | **Free** bearer-token MCP `lazyweb_search` / `lazyweb_health` (ToolSearch-only probe; copy-command setup, no auto-run); explore **Tier 1** — tried first |
|
|
32
|
+
| Mobbin | Active | [`connections/mobbin.md`](connections/mobbin.md) | **Paid** HTTP MCP `claude mcp add mobbin --transport http https://api.mobbin.com/mcp` (ToolSearch-only probe; auto-run-safe, OAuth); explore **Tier 2** — mobile/flow-level |
|
|
33
33
|
| Slack | Active | [`connections/slack.md`](connections/slack.md) | **Notify** (Team Surfaces) — `SLACK_WEBHOOK_URL` incoming webhook; routed+redacted pipeline events; `GDD_DISABLE_SLACK` kill-switch; degrade-to-noop |
|
|
34
34
|
| Discord | Active | [`connections/discord.md`](connections/discord.md) | **Notify** (Team Surfaces) — `DISCORD_WEBHOOK_URL` channel webhook; parity with Slack; `GDD_DISABLE_DISCORD` kill-switch; degrade-to-noop |
|
|
35
35
|
| Linear | Active | [`connections/linear.md`](connections/linear.md) | **Ticket-sync** (Team Surfaces) — `mcp__linear__*` (ToolSearch probe); bidirectional cycle↔issue; redact + `GDD_DISABLE_LINEAR` kill-switch; degrade-to-noop |
|
|
36
36
|
| Jira | Active | [`connections/jira.md`](connections/jira.md) | **Ticket-sync** (Team Surfaces) — Atlassian MCP `mcp__atlassian__*` (ToolSearch probe); parity with Linear; `GDD_DISABLE_JIRA` kill-switch; degrade-to-noop |
|
|
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
|
-
| 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
|
|
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
|
|
40
|
-
| Framer | Active | [`connections/framer.md`](connections/framer.md) | **AI-native** (
|
|
41
|
-
| Penpot | Active | [`connections/penpot.md`](connections/penpot.md) | **AI-native** (
|
|
42
|
-
| Webflow | Active | [`connections/webflow.md`](connections/webflow.md) | **AI-native** (
|
|
43
|
-
| v0.dev | Active | [`connections/v0-dev.md`](connections/v0-dev.md) | **AI-native** (
|
|
44
|
-
| Plasmic | Active | [`connections/plasmic.md`](connections/plasmic.md) | **AI-native** (
|
|
45
|
-
| Builder.io | Active | [`connections/builder-io.md`](connections/builder-io.md) | **AI-native** (
|
|
46
|
-
| LaunchDarkly | Active | [`connections/launchdarkly.md`](connections/launchdarkly.md) | **Outcome** (experiment-source) — read-only A/B results (`LAUNCHDARKLY_API_KEY`/MCP); `experiment-result-ingester` → `design_arms`; `GDD_DISABLE_LAUNCHDARKLY`; degrade-to-noop
|
|
47
|
-
| Statsig | Active | [`connections/statsig.md`](connections/statsig.md) | **Outcome** (experiment-source) — read-only experiment/pulse results (`STATSIG_API_KEY`/MCP); → `design_arms`; `GDD_DISABLE_STATSIG`; degrade-to-noop
|
|
48
|
-
| GrowthBook | Active | [`connections/growthbook.md`](connections/growthbook.md) | **Outcome** (experiment-source) — read-only results (`GROWTHBOOK_API_KEY`, self-hosted/cloud, /MCP); → `design_arms`; `GDD_DISABLE_GROWTHBOOK`; degrade-to-noop
|
|
49
|
-
| UserTesting | Active | [`connections/usertesting.md`](connections/usertesting.md) | **Outcome** (user-research) — read-only test reports; **pseudonymize-first** → `user-research-synthesizer` → brief `<prior-research>`; `GDD_DISABLE_USERTESTING`; degrade-to-noop
|
|
50
|
-
| Maze | Active | [`connections/maze.md`](connections/maze.md) | **Outcome** (user-research) — read-only usability metrics; **pseudonymize-first** → `user-research-synthesizer`; `GDD_DISABLE_MAZE`; degrade-to-noop
|
|
51
|
-
| Hotjar | Active | [`connections/hotjar.md`](connections/hotjar.md) | **Outcome** (user-research) — read-only indexed insights (no raw video); **pseudonymize-first** → `user-research-synthesizer`; `GDD_DISABLE_HOTJAR`; degrade-to-noop
|
|
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 |
|
|
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 |
|
|
40
|
+
| Framer | Active | [`connections/framer.md`](connections/framer.md) | **AI-native** (canvas) — read frames + write proposals; MCP probe; degrade-to-code-only |
|
|
41
|
+
| Penpot | Active | [`connections/penpot.md`](connections/penpot.md) | **AI-native** (canvas) — open-source Figma alt; self-hosted-vs-cloud probe; degrade-to-code-only |
|
|
42
|
+
| Webflow | Active | [`connections/webflow.md`](connections/webflow.md) | **AI-native** (generator) — read site structure as an adaptation source (not CMS authoring); degrade-to-code-only |
|
|
43
|
+
| v0.dev | Active | [`connections/v0-dev.md`](connections/v0-dev.md) | **AI-native** (generator) — Vercel v0; MCP-first → REST + `V0_API_KEY`; component-generator `v0` impl |
|
|
44
|
+
| Plasmic | Active | [`connections/plasmic.md`](connections/plasmic.md) | **AI-native** (dual) — canvas read + code emission; component-generator `plasmic` impl |
|
|
45
|
+
| Builder.io | Active | [`connections/builder-io.md`](connections/builder-io.md) | **AI-native** (generator) — Visual Copilot, pull-only currently; component-generator `builder-io` impl |
|
|
46
|
+
| LaunchDarkly | Active | [`connections/launchdarkly.md`](connections/launchdarkly.md) | **Outcome** (experiment-source) — read-only A/B results (`LAUNCHDARKLY_API_KEY`/MCP); `experiment-result-ingester` → `design_arms`; `GDD_DISABLE_LAUNCHDARKLY`; degrade-to-noop |
|
|
47
|
+
| Statsig | Active | [`connections/statsig.md`](connections/statsig.md) | **Outcome** (experiment-source) — read-only experiment/pulse results (`STATSIG_API_KEY`/MCP); → `design_arms`; `GDD_DISABLE_STATSIG`; degrade-to-noop |
|
|
48
|
+
| GrowthBook | Active | [`connections/growthbook.md`](connections/growthbook.md) | **Outcome** (experiment-source) — read-only results (`GROWTHBOOK_API_KEY`, self-hosted/cloud, /MCP); → `design_arms`; `GDD_DISABLE_GROWTHBOOK`; degrade-to-noop |
|
|
49
|
+
| UserTesting | Active | [`connections/usertesting.md`](connections/usertesting.md) | **Outcome** (user-research) — read-only test reports; **pseudonymize-first** → `user-research-synthesizer` → brief `<prior-research>`; `GDD_DISABLE_USERTESTING`; degrade-to-noop |
|
|
50
|
+
| Maze | Active | [`connections/maze.md`](connections/maze.md) | **Outcome** (user-research) — read-only usability metrics; **pseudonymize-first** → `user-research-synthesizer`; `GDD_DISABLE_MAZE`; degrade-to-noop |
|
|
51
|
+
| Hotjar | Active | [`connections/hotjar.md`](connections/hotjar.md) | **Outcome** (user-research) — read-only indexed insights (no raw video); **pseudonymize-first** → `user-research-synthesizer`; `GDD_DISABLE_HOTJAR`; degrade-to-noop |
|
|
52
52
|
|
|
53
53
|
---
|
|
54
54
|
|
|
@@ -56,8 +56,8 @@ This directory contains connection specifications for external tools and MCPs th
|
|
|
56
56
|
|
|
57
57
|
Each cell describes what the connection contributes at that pipeline stage, or `—` if it is not used.
|
|
58
58
|
|
|
59
|
-
| Connection |
|
|
60
|
-
|
|
59
|
+
| Connection | brief | explore | plan | design | verify | canvas | generator | notify | ticket-sync |
|
|
60
|
+
|-----------|-------|---------|------|--------|--------|--------|-----------|--------|------------|
|
|
61
61
|
| gdd-state | STATE mutation (init position, probe_connections, add_decision) | STATE mutation (add_decision, add_must_have, transition gate) | STATE mutation (locked decisions, must_haves, transition gate) | STATE mutation (update_progress, resolve_blocker, transition gate) | STATE mutation (must_have pass/fail, add_blocker, set_status) | — | — | — | — |
|
|
62
62
|
| Figma | token augmentation via `get_variable_defs` (CONN-03) | decisions pre-populate via `get_variable_defs` (CONN-04) | — | write tokens/annotations/Code Connect via `use_figma` (FWR-01..04) | — | — | — | — | — |
|
|
63
63
|
| Refero | — | reference search via `mcp__refero__search`; fallback → awesome-design-md (CONN-05) | — | — | — | — | — | — | — |
|
|
@@ -66,35 +66,35 @@ Each cell describes what the connection contributes at that pipeline stage, or `
|
|
|
66
66
|
| Chromatic | — | — | change-risk scoping (CHR-02) | — | visual delta narration (CHR-01) | — | — | — | — |
|
|
67
67
|
| Graphify | — | — | dependency scoping (GRF-03) | — | orphan detection (GRF-04) | — | — | — | — |
|
|
68
68
|
| Pinterest | probe only | visual reference search via `pinterest_search`; fallback → Refero → awesome-design-md | — | — | — | — | — | — | — |
|
|
69
|
-
| Claude Design | bundle probe → `claude_design: available` | synthesizer handoff mode — parses bundle →
|
|
69
|
+
| Claude Design | bundle probe → `claude_design: available` | synthesizer handoff mode — parses bundle → decisions; discussant `--from-handoff` confirms | — (skipped in handoff) | — (skipped in handoff) | Handoff Faithfulness section; bidirectional write-back via figma-writer `implementation-status` mode | — | — | — | — |
|
|
70
70
|
| paper.design | — | canvas read: `get_selection`, `get_jsx`, `get_computed_styles` | — | paper-writer: annotate/tokenize/roundtrip | `get_screenshot` for `? VISUAL` | ✓ | — | — | — |
|
|
71
71
|
| pencil.dev | `.pen` discovery | `.pen` as canonical design source | — | pencil-writer: annotate/roundtrip | spec-vs-impl diff | ✓ | — | — | — |
|
|
72
72
|
| 21st.dev | — | prior-art gate: marketplace search before greenfield build | — | component-generator (21st impl) | — | — | ✓ | — | — |
|
|
73
73
|
| Magic Patterns | — | — | — | component-generator (magic-patterns impl) | preview_url → `? VISUAL` check | — | ✓ | — | — |
|
|
74
74
|
| OpenRouter | — | — | — | — | — | — | ✓ (model-router: tier→model resolution, all stages) | — | — |
|
|
75
|
-
| Xcode Simulator | — | — | — | native iOS code-gen target (swift-executor / emitSwift) | rendered SwiftUI snapshot when simulator available, else degrade to code-only structural audit
|
|
76
|
-
| Android Emulator | — | — | — | native Android code-gen target (compose-executor / emitCompose) | rendered Compose screenshot when emulator available, else degrade to code-only structural audit
|
|
77
|
-
| Litmus | — | — | — | email render-test target (email-executor) | cross-client rendered evidence when Litmus available, else degrade to the static email-HTML validator / code-only
|
|
78
|
-
| 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
|
|
79
|
-
| Lottie | — | — | — | — | Lottie-export motion check: `validate-motion.cjs` (MO-FR/DUR/IMG/BUDGET) when present, WARN-never-block
|
|
80
|
-
| Rive | — | — | — | — | Rive-export motion check: size + RIVE-header floor; state-machine graph via opt-in runtime, else manual-review advisory; WARN
|
|
75
|
+
| Xcode Simulator | — | — | — | native iOS code-gen target (swift-executor / emitSwift) | rendered SwiftUI snapshot when simulator available, else degrade to code-only structural audit | — | — | — | — |
|
|
76
|
+
| Android Emulator | — | — | — | native Android code-gen target (compose-executor / emitCompose) | rendered Compose screenshot when emulator available, else degrade to code-only structural audit | — | — | — | — |
|
|
77
|
+
| Litmus | — | — | — | email render-test target (email-executor) | cross-client rendered evidence when Litmus available, else degrade to the static email-HTML validator / code-only | — | — | — | — |
|
|
78
|
+
| 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 | — | — | — | — |
|
|
79
|
+
| Lottie | — | — | — | — | Lottie-export motion check: `validate-motion.cjs` (MO-FR/DUR/IMG/BUDGET) when present, WARN-never-block | — | — | — | — |
|
|
80
|
+
| Rive | — | — | — | — | Rive-export motion check: size + RIVE-header floor; state-machine graph via opt-in runtime, else manual-review advisory; WARN | — | — | — | — |
|
|
81
81
|
| Framer | — | — | — | canvas source (read frames, write proposals) | — | ✓ | — | — | — |
|
|
82
82
|
| Penpot | — | — | — | canvas source (read boards/components) | — | ✓ | — | — | — |
|
|
83
83
|
| Webflow | — | — | — | structure / adaptation source | — | — | ✓ | — | — |
|
|
84
84
|
| v0.dev | — | — | — | component-generator (v0 impl) | — | — | ✓ | — | — |
|
|
85
85
|
| Plasmic | — | — | — | component-generator (plasmic impl) + canvas read | — | ✓ | ✓ | — | — |
|
|
86
86
|
| Builder.io | — | — | — | component-generator (builder-io impl) | — | — | ✓ | — | — |
|
|
87
|
-
| Lazyweb | — | reference search via `lazyweb_search` (**Tier 1 — free, tried first
|
|
88
|
-
| Mobbin | — | reference search via mobbin tools (**Tier 2 — paid, mobile/flow-level
|
|
89
|
-
| Slack | — | — | — | — | — | — | — | verify-fail/audit-pass/ship → Slack webhook (routed, redacted, degrade-to-noop
|
|
87
|
+
| Lazyweb | — | reference search via `lazyweb_search` (**Tier 1 — free, tried first**); complements refero/pinterest | — | — | — | — | — | — | — |
|
|
88
|
+
| Mobbin | — | reference search via mobbin tools (**Tier 2 — paid, mobile/flow-level**); complements refero/lazyweb | — | — | — | — | — | — | — |
|
|
89
|
+
| Slack | — | — | — | — | — | — | — | verify-fail/audit-pass/ship → Slack webhook (routed, redacted, degrade-to-noop) | — |
|
|
90
90
|
| Discord | — | — | — | — | — | — | — | parity with Slack — events → Discord webhook (routed, redacted, degrade-to-noop) | — |
|
|
91
|
-
| Linear | — | — | — | — | — | — | — | — | bidirectional cycle↔issue: read comments (decision-injector) + transition + redacted summary on completion
|
|
91
|
+
| Linear | — | — | — | — | — | — | — | — | bidirectional cycle↔issue: read comments (decision-injector) + transition + redacted summary on completion |
|
|
92
92
|
| Jira | — | — | — | — | — | — | — | — | parity with Linear — Atlassian MCP; transition + redacted summary on completion |
|
|
93
93
|
|
|
94
94
|
**Column definitions:**
|
|
95
95
|
|
|
96
|
-
- **
|
|
97
|
-
- **
|
|
96
|
+
- **brief** — what the connection provides when the brief stage runs (design tokens, source metadata)
|
|
97
|
+
- **explore** — what the connection provides during exploration (visual references, design decisions)
|
|
98
98
|
- **plan** — what the connection contributes to planning artifacts
|
|
99
99
|
- **design** — what the connection provides during design execution
|
|
100
100
|
- **verify** — what the connection checks or surfaces during verification
|
|
@@ -235,7 +235,7 @@ Step G1 — Bash: test -n "$DISCORD_WEBHOOK_URL"
|
|
|
235
235
|
→ non-empty → discord: available
|
|
236
236
|
```
|
|
237
237
|
|
|
238
|
-
Note: Lazyweb + Mobbin probes are ToolSearch-only (no live call). The
|
|
238
|
+
Note: Lazyweb + Mobbin probes are ToolSearch-only (no live call). The explore stage resolves reference sources **cost-aware: Lazyweb (free) → Mobbin / Refero (paid, whichever is bound + subscribed) → Pinterest → awesome-design-md → WebFetch.**
|
|
239
239
|
|
|
240
240
|
---
|
|
241
241
|
|
|
@@ -294,7 +294,7 @@ Note: First Chromatic run has no baseline — all stories become new snapshots.
|
|
|
294
294
|
**Graphify probe (execute at agent entry, before using graph):**
|
|
295
295
|
|
|
296
296
|
```
|
|
297
|
-
Step G1 — Config check (
|
|
297
|
+
Step G1 — Config check (direct read, no CLI subcommand):
|
|
298
298
|
Bash: node -e "try{const c=JSON.parse(require('fs').readFileSync('.design/config.json','utf8'));process.stdout.write(String(c.graphify?.enabled===true))}catch{process.stdout.write('false')}"
|
|
299
299
|
→ false → graphify: not_configured
|
|
300
300
|
→ true → proceed to Step G2
|
|
@@ -328,19 +328,18 @@ To add a new connection to the pipeline:
|
|
|
328
328
|
|
|
329
329
|
4. **Declare the MCP.** If the connection uses an MCP server, ensure the server is declared in `.claude-plugin/plugin.json` or documented as a user-supplied MCP in the spec file. For read+write remote MCPs, use `connections/figma.md` as the model. For read-only remote MCPs with headless / API-key-free setup, use `connections/pinterest.md`.
|
|
330
330
|
|
|
331
|
-
5. **Wire into stage skills
|
|
331
|
+
5. **Wire into stage skills.** Update the relevant stage `SKILL.md` files to probe the connection at entry and write its status to `.design/STATE.md <connections>`.
|
|
332
332
|
|
|
333
|
-
6. **Update relevant agents
|
|
333
|
+
6. **Update relevant agents.** If agents will use the connection's tools, list the MCP tools in the agent's `tools` frontmatter field.
|
|
334
334
|
|
|
335
335
|
---
|
|
336
336
|
|
|
337
337
|
## Notes
|
|
338
338
|
|
|
339
|
-
- `connections/` is infrastructure scaffolding
|
|
340
|
-
-
|
|
341
|
-
-
|
|
342
|
-
-
|
|
343
|
-
- The capability matrix columns map to the five pipeline stages: `scan | discover | plan | design | verify`, plus `canvas` and `generator` sub-categories.
|
|
339
|
+
- `connections/` is the infrastructure scaffolding that catalogs external integrations. Stage integration wires detection and graceful degradation into each pipeline stage.
|
|
340
|
+
- AI-native design tool connections (paper.design, pencil.dev, 21st.dev, Magic Patterns) populate the canvas/generator capability columns.
|
|
341
|
+
- `gdd-state` is a local stdio MCP server shipped with the plugin that owns STATE.md mutation across every pipeline stage. Unlike external connections, `gdd-state` is required (fallback to direct module import preserves mutation safety but loses event telemetry). See [`connections/gdd-state.md`](connections/gdd-state.md).
|
|
342
|
+
- The capability matrix columns map to the five pipeline stages: `brief | explore | plan | design | verify`, plus `canvas` and `generator` sub-categories.
|
|
344
343
|
|
|
345
344
|
---
|
|
346
345
|
|