1. Gate-scored bidirectional loop: Claude Code β Claude Design. Brief β DESIGN.md β Generate β Implement β Score β Refine.
2. Runs locally with open-design β no Pro+ required Β· 71 brand systems Β· auto-detected engine.
Stop guessing if your implementation matches the design. Let the loop prove it.
Picasso connects Claude Code to Claude Design in a closed feedback loop β structured brief in, verified code out, with a mathematically scored fidelity gate between them. No more "looks close enough." Either the score hits 9.0 / 10 or the loop keeps going.
# 01 Β· Install (one-liner β patches ~/.claude automatically)
curl -fsSL https://cdn.jsdelivr.net/gh/RazvanGabrielNiculae/picasso-claude-design-claude-code-bridge-loop@main/scripts/install-oneliner.sh | bash
# 02 Β· Verify everything is wired correctly
picasso-bridge verify --smoke
# 03 Β· Run your first bridge loop
/picasso --design-loop "hero cinematic for B2B SaaS" --scope complexπ‘ Need a guided setup? Add
--wizardto the install command. It walks you through gate, max rounds, and hook wiring interactively.
flowchart LR
A([picasso]) --> B[ASSUMPTIONS] --> C[DESIGN.md] --> D[Claude Design] --> E[Implement] --> F[Render] --> G[Score] --> H{Gate 9.0}
H -- "β
" --> I([APPROVED])
H -- "π" --> J([STAGNATED])
H -- "π refine" --> D
style A fill:#ff2d95,stroke:#ff4fa8,color:#fff
style B fill:#2a1420,stroke:#ff2d95,color:#ffa2cf
style C fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style D fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style E fill:#1a1a2e,stroke:#7cf0a0,color:#7cf0a0
style F fill:#1a1a2e,stroke:#7cf0a0,color:#7cf0a0
style G fill:#2a2000,stroke:#ffd83d,color:#ffd83d
style H fill:#2a2000,stroke:#ffd83d,color:#fff59d
style I fill:#0d2e1a,stroke:#4caf50,color:#7cf0a0
style J fill:#2e1a0d,stroke:#ff9800,color:#ffb14a
- Brief β Describe your design goal in plain language (
/picasso --design-loop "hero for B2B SaaS") - ASSUMPTIONS β Picasso surfaces inferred tokens as an explicit block before any browser call β you correct inline
- DESIGN.md β Structured 9-section spec is generated: colors Β· typography Β· layout Β· motion Β· responsive Β· accessibility
- Claude Design β Picasso sends a structured prompt, captures the visual proposal via screenshot
- Implement β Zero-context subagent applies only the changed
DESIGN.mdsections (~200 tok vs 2,000 naive) - Render β Desktop always Β· mobile only if previous responsive score < 8.0
- Score β Weighted gate: ΞE colors (25%) Β· typography (20%) Β· layout (20%) Β· components (15%) Β· motion (10%) Β· responsive (10%)
- Gaps β 3 lines max Β· goal-declared format:
current β targetΒ· passed to next round - Gate β
score β₯ 9.0β β APPROVED Β· plateau β STAGNATED Β· else β refine and repeat from step 4
| Metric | Value | What it means |
|---|---|---|
| π― Default gate | 9.0 / 10 | Weighted fidelity across 6 visual criteria |
| π Loop modes | 5 | loop Β· solo Β· critique Β· reference Β· iterate |
| π Steps per round | 7 | request β extract β implement β render β score β gaps β gate |
| π§© Orchestration patterns | 9+ | Token-aware, stagnation-proof by design |
| π§ Karpathy principles | 4 | Baked into the conductor β not optional extras |
| β‘ Token savings | 3Γ | vs. naive full-context loop (zero-context subagent + lazy reads) |
| Tool | Version | Role |
|---|---|---|
| π€ Claude Code | β₯ 0.2.0 | CLI host β custom commands + subagents + hooks |
| π¨ Claude plan | Pro Β· Max Β· Team Β· Enterprise | Required for claude.ai/design Β· optional if running open-design locally |
| π Chrome | latest | Authenticated session on claude.ai |
| π chrome-mcp | latest | MCP browser transport β navigate, click, screenshot |
| π webdesign-mcp | latest | Scrape tokens Β· render previews Β· compute score |
| π¦ Node | β₯ 18 | MCP server runtimes |
| π οΈ jq Β· bash | any | Used by hooks and install scripts |
flowchart LR
S1[Request] --> S2[Extract] --> S3[Implement] --> S4[Render] --> S5[Score] --> S6[Gaps] --> S7{Gate}
S7 -- "β
β₯9.0" --> AP([APPROVED])
S7 -- "π plateau" --> ST([STAGNATED])
S7 -- "π retry" --> S1
style S1 fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style S2 fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style S3 fill:#1a1a2e,stroke:#7cf0a0,color:#7cf0a0
style S4 fill:#1a1a2e,stroke:#7cf0a0,color:#7cf0a0
style S5 fill:#2a2000,stroke:#ffd83d,color:#ffd83d
style S6 fill:#2a2000,stroke:#ffd83d,color:#ffd83d
style S7 fill:#2a1420,stroke:#ff2d95,color:#ffa2cf
style AP fill:#0d2e1a,stroke:#4caf50,color:#7cf0a0
style ST fill:#2e1a0d,stroke:#ff9800,color:#ffb14a
| Step | Name | What happens |
|---|---|---|
01 |
π‘ Request | browser_batch: navigate β form_input β wait β screenshot(800px) β get_text |
02 |
π Extract | scrape_reference with SHA-256 hash cache β skipped entirely if HTML unchanged |
03 |
π¨ Implement | Zero-context subagent. Only changed DESIGN.md sections. ~200 tok vs 2,000 naive. |
04 |
πΈ Render | Desktop always. Mobile only if previous responsive score < 8.0. |
05 |
π― Score | Fast model: ΞE colors + grid pixels + token match. Standard: gap synthesis. |
06 |
π Gaps | 3 lines max Β· goal-declared format: current β target Β· 15 words each. |
07 |
πͺ Gate | total β₯ gate β β APPROVED Β· plateau β STAGNATED Β· else β next round |
flowchart LR
subgraph CC["Claude Code"]
PC[picasso] --> PDL[pdl-conductor]
HK[6 hooks] --> PDL
PDL --> DM["DESIGN.md"]
end
subgraph MCP["MCP"]
CMCP[chrome-mcp]
WMCP[webdesign-mcp]
end
CD[Claude Design]
PDL --> CMCP --> CD
CD --> CMCP --> PDL
PDL --> WMCP
style CC fill:#1b0d14,stroke:#ff2d95,color:#ffa2cf
style MCP fill:#0a1520,stroke:#5ce1ff,color:#8eecff
style PC fill:#2a1420,stroke:#ff2d95,color:#ffa2cf
style PDL fill:#ff2d95,stroke:#ff4fa8,color:#fff
style HK fill:#2a1420,stroke:#ff2d95,color:#ffa2cf
style DM fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style CMCP fill:#0a1520,stroke:#5ce1ff,color:#8eecff
style WMCP fill:#0a1520,stroke:#5ce1ff,color:#8eecff
style CD fill:#0d2e1a,stroke:#7cf0a0,color:#7cf0a0
linkStyle 0 stroke:#ffd83d,stroke-width:2px
linkStyle 1 stroke:#ffd83d,stroke-width:2px
linkStyle 2 stroke:#ffd83d,stroke-width:2px
linkStyle 3 stroke:#ffd83d,stroke-width:2px
linkStyle 4 stroke:#ffd83d,stroke-width:2px
linkStyle 5 stroke:#ffd83d,stroke-width:2px
linkStyle 6 stroke:#ffd83d,stroke-width:2px
linkStyle 7 stroke:#ffd83d,stroke-width:2px
| Tag | Component | Role |
|---|---|---|
CORE Β· ORCHESTRATOR |
Claude Code CLI | Hosts /picasso, pdl-conductor subagent, six lifecycle hooks |
CORE Β· DESIGN SIDE |
Claude Design (web) | Visual proposal engine driven through authenticated browser tab |
TRANSPORT |
chrome-mcp | MCP browser transport β navigate, click, type, upload, screenshot |
MEASUREMENT |
webdesign-mcp | Extracts tokens, renders candidate previews, returns weighted fidelity score |
PROTOCOL |
Model Context Protocol | Wire format for both MCP servers β any MCP client can swap in |
CONVENTION |
DESIGN.md (9 sections) | Single-source design contract: colors Β· typography Β· components Β· layout Β· motion Β· depth Β· brand Β· responsive Β· accessibility |
flowchart LR
S([picasso]) --> LOOP[design-loop]
S --> SOLO[design-solo]
S --> CRIT[design-critique]
S --> REF[design-reference]
S --> SRC[from-site or from-figma]
LOOP --> AP{APPROVED}
AP -- "polish" --> ITER[design-iterate]
AP -- "ship" --> DONE([Done])
ITER --> DONE
style S fill:#ff2d95,stroke:#ff4fa8,color:#fff
style LOOP fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style SOLO fill:#1a1a2e,stroke:#7cf0a0,color:#7cf0a0
style CRIT fill:#1a1a2e,stroke:#7cf0a0,color:#7cf0a0
style REF fill:#1a1a2e,stroke:#7cf0a0,color:#7cf0a0
style SRC fill:#1a1a2e,stroke:#7cf0a0,color:#7cf0a0
style ITER fill:#2a2000,stroke:#ffd83d,color:#ffd83d
style AP fill:#2a1420,stroke:#ff2d95,color:#ffa2cf
style DONE fill:#0d2e1a,stroke:#4caf50,color:#7cf0a0
| Flag | Name | Description | Best for |
|---|---|---|---|
--design-loop |
π Loop β | Full bidirectional loop. Rounds until gate is met. Default mode. | Any front-end feature from scratch |
--design-solo |
β‘ Solo | Single pass: one Claude Design turn β implement β stop. | Quick exploration / prototypes |
--design-critique <path> |
π¬ Critique | Claude Design audits your existing implementation and scores it. | Design-debt audit on existing code |
--design-reference <url> |
π Reference | Reverse-engineer design tokens from any live site. Seeds DESIGN.md. |
"Make it feel like linear.app" |
--design-iterate |
β¨ Iterate | Polish pass after APPROVED. Gate auto-set to prior score + 0.3. | Motion + micro-interaction polish |
| Flag | Description | When to use |
|---|---|---|
--from-site <url> |
Extract DESIGN.md tokens from any live site β seed round-0 |
"Build something with stripe.com's design system" |
--from-figma --figma <key> |
Use Figma MCP as design source instead of Claude Design | You have Figma designs ready |
--feedback drawbridge |
Import Drawbridge browser annotations as pre-populated gaps | Designer annotated the preview |
--multi-page |
Enable SITE.md cross-page consistency contract |
Multi-page sites |
# Seed from live site (no Claude Design Pro needed for the design foundation)
/picasso --from-site https://stripe.com "pricing page for fintech"
# Use Figma as source
/picasso --from-figma --figma ABC123xyz "implement hero from Figma"
# Include designer browser annotations in the loop
/picasso --design-loop --feedback drawbridge "hero for B2B SaaS"
# Multi-page site with cross-page consistency
/picasso --design-loop --multi-page --scope mega "5-page marketing site"| Scope | Gate | Rounds | Fallback manual | Example |
|---|---|---|---|---|
--scope simple |
8.0 | 3 | no | pricing toggle |
--scope medium |
8.5 | 5 | no | pricing section |
--scope complex |
9.0 | 7 | yes | full landing page |
--scope mega |
9.0 | 10 | yes | 5-page site |
/picasso --design-loop "hero cinematic for a B2B SaaS, dark elite"
/picasso --design-solo "sticky promo banner, warm palette"
/picasso --design-critique ./src/components/hero
/picasso --design-reference https://linear.app
/picasso --design-iterate "tighten motion choreography"
/picasso --scope complex "full marketing landing"pie title Gate Score Weights
"Colors - ΞE CIE2000" : 25
"Typography" : 20
"Layout and Spacing" : 20
"Components" : 15
"Motion" : 10
"Responsive" : 10
| Criterion | Weight | How it's measured |
|---|---|---|
| π¨ Colors | 25% | ΞE CIE2000 palette comparison per design token |
| π€ Typography | 20% | Font family Β· scale ratio Β· weight Β· line-height |
| π Layout & spacing | 20% | Grid alignment Β· margin/padding Β· Β±2px tolerance |
| π§© Components | 15% | Structural match: presence, hierarchy, nesting |
| π¬ Motion | 10% | Duration Β· easing Β· transition type |
| π± Responsive | 10% | 8 breakpoints tested: 320px β 1920px |
π― Default gate: 9.0 / 10. Raise to 9.5 for critical landings (increases stagnation risk). Lower to 8.5 for fast prototypes.
The loop degrades gracefully as context fills. It never crashes silently β it checkpoints and exits
PAUSEDso you can resume in a fresh session.
flowchart LR
N([NORMAL]) -- "60pct" --> W([WARN]) -- "75pct" --> D([DEGRADE]) -- "85pct" --> SW([SWITCH]) -- "95pct" --> P([PAUSED])
style N fill:#0d2e1a,stroke:#4caf50,color:#7cf0a0
style W fill:#2a2000,stroke:#ffd83d,color:#ffd83d
style D fill:#2a1800,stroke:#ff9800,color:#ffb14a
style SW fill:#2e0d0d,stroke:#f44336,color:#ff8a80
style P fill:#1a1a2e,stroke:#7cf0a0,color:#7cf0a0
| Context used | State | What happens |
|---|---|---|
| < 60% | β
NORMAL |
All steps enabled β full fidelity |
| 60β75% | WARN |
Skip mobile render if responsive β₯ 8.5 |
| 75β85% | πΆ DEGRADE |
Cache-only extraction Β· lazy section reads |
| 85β95% | π΄ SWITCH |
Fast model everywhere Β· 2-line gaps max |
| > 95% | πΎ PAUSED |
checkpoint.json saved β exit β resumable next session |
Not guidelines. Mechanisms. Every one maps to a concrete component in the conductor. Inspired by Andrej Karpathy's public notes on LLM coding pitfalls β specifically his observations on silent assumptions, minimal code, surgical edits, and goal-declared targets.
flowchart LR
K1[Think First] --> K2[Simplicity] --> K3[Surgical Edits] --> K4[Goal-Led State]
style K1 fill:#2a1420,stroke:#ff2d95,color:#ffa2cf
style K2 fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style K3 fill:#1a1a2e,stroke:#7cf0a0,color:#7cf0a0
style K4 fill:#2a2000,stroke:#ffd83d,color:#ffd83d
linkStyle 0 stroke:#ffd83d,stroke-width:2px
linkStyle 1 stroke:#ffd83d,stroke-width:2px
linkStyle 2 stroke:#ffd83d,stroke-width:2px
| # | Principle | What the loop does |
|---|---|---|
01 |
π€ Think First | Inferred tokens surface as an explicit ASSUMPTIONS: block before the first browser call. You correct inline β zero silent assumptions. β ASSUMPTIONS: colors Β· typography Β· components Β· brand |
02 |
πͺΆ Simplicity | The implementation subagent is hard-constrained: minimum code to close the gap. No refactors. No speculative features. No drive-by cleanups. β CONSTRAINTS: no refactor Β· no new features Β· no noise |
03 |
π¬ Surgical Edits | Subagent touches only files tied to changed DESIGN.md sections. sha256 idempotency check blocks spurious git diffs. β idempotent writes Β· changed sections only |
04 |
π― Goal-Led State | Gaps are state declarations, not imperatives. The gate score is the objective function. β motion: 400ms β 600ms not "increase duration" |
Every pattern exists to solve a specific failure mode in naive "loop and hope" approaches.
flowchart TD
subgraph TOK["Token Efficiency"]
direction LR
P01[Structured] --> P04[Lazy reads] --> P05[Model route] --> P06[Adaptive] --> P07[Zero-ctx]
end
subgraph DED["Dedup and Cache"]
direction LR
P02[Hash cache] --> P03[Fingerprint] --> P08[Idempotent]
end
subgraph RES["Resilience"]
direction LR
P09[Backpressure]
end
style P01 fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style P04 fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style P05 fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style P06 fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style P07 fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style P02 fill:#2a1420,stroke:#ff2d95,color:#ffa2cf
style P03 fill:#2a1420,stroke:#ff2d95,color:#ffa2cf
style P08 fill:#2a1420,stroke:#ff2d95,color:#ffa2cf
style P09 fill:#0d2e1a,stroke:#7cf0a0,color:#7cf0a0
linkStyle 0 stroke:#ffd83d,stroke-width:1.5px
linkStyle 1 stroke:#ffd83d,stroke-width:1.5px
linkStyle 2 stroke:#ffd83d,stroke-width:1.5px
linkStyle 3 stroke:#ffd83d,stroke-width:1.5px
linkStyle 4 stroke:#ffd83d,stroke-width:1.5px
linkStyle 5 stroke:#ffd83d,stroke-width:1.5px
| # | Pattern | Problem it solves | Impact |
|---|---|---|---|
01 |
π Structured prompts | Prose prompts are verbose and inconsistent | 5Γ compression on Round-N prompts |
02 |
#οΈβ£ Content-hash cache | scrape_reference called even on identical output |
Saves 1 MCP call/round on average |
03 |
π Fingerprint dedup | Same visual output, different HTML β infinite loop | Instant STAGNATED exit β no wasted rounds |
04 |
π Lazy section reads | Reading all 9 DESIGN.md sections every round | ~50 tok vs 450 tok after round 1 |
05 |
π¦ Model routing | Large model used for simple arithmetic scoring | ~40% cost reduction per round |
06 |
π± Adaptive rendering | Mobile render every round even when stable | Saves 1 render call in most rounds after round 2 |
07 |
π§Ή Zero-context subagent | Implementer inherits full 2,000 tok loop history | ~200 tok vs ~2,000 tok β 10Γ cleaner context |
08 |
β Idempotency check | Files re-written with no actual change β git noise | Clean diffs β unchanged files never touched |
09 |
π‘οΈ Context backpressure | Loop crashes or degrades silently at context limit | Resumable sessions via checkpoint |
Six hooks. Drop them in
~/.claude/hooks/. Edit a stub to activate. Delete to disable.
flowchart LR
AD([autodetect]) --> PRE[pre-round] --> LOOP([round]) --> POST[post-round]
LOOP -- plateau --> STAG[stagnation]
LOOP -- pass --> APP[approved]
LOOP -- fail --> FAIL[failed]
style AD fill:#2a1420,stroke:#ff2d95,color:#ffa2cf
style PRE fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style LOOP fill:#ff2d95,stroke:#ff4fa8,color:#fff
style POST fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style STAG fill:#2a2000,stroke:#ffd83d,color:#ffd83d
style APP fill:#0d2e1a,stroke:#4caf50,color:#7cf0a0
style FAIL fill:#2e0d0d,stroke:#f44336,color:#ff8a80
| Hook | Fires on | What it does |
|---|---|---|
pdl-autodetect |
π UserPromptSubmit |
Detects handoff phrases ("claude.ai/design", "export") and auto-suggests /picasso |
pdl-pre-round |
β±οΈ Pre-round | Budget guard β aborts if .pdl/ > 50 MB or remaining budget < round estimate |
pdl-post-round |
π Post-round | Cache report + economy.jsonl append Β· exit 2 = force APPROVED Β· exit 3 = force abort |
pdl-stagnation |
π Stagnation | Customizable β lower gate, switch mode, or send alert on score plateau |
pdl-approved |
β Approved | Customizable β auto-commit, open PR, send Slack/Discord notification |
pdl-failed |
β Failed | Customizable β alert, cleanup, save trajectory log for post-mortem |
See docs/HOOKS.md for full reference.
curl -fsSL https://cdn.jsdelivr.net/gh/RazvanGabrielNiculae/picasso-claude-design-claude-code-bridge-loop@main/scripts/install-oneliner.sh | bashWizard mode (prompts for gate, rounds, hook wiring):
... | bash -s -- --wizardgit clone https://github.com/RazvanGabrielNiculae/picasso-claude-design-claude-code-bridge-loop.git
cd picasso-claude-design-claude-code-bridge-loop
bash scripts/install.sh --wizard
bash scripts/verify.sh --smokegit clone https://github.com/RazvanGabrielNiculae/picasso-claude-design-claude-code-bridge-loop.git
cd picasso-claude-design-claude-code-bridge-loop
pwsh -File scripts\install.ps1
pwsh -File scripts\verify.ps1The installer patches ~/.claude/settings.json automatically (timestamped backup). Use --no-hook to skip auto-wiring.
.pdl/
βββ round-0/
β βββ DESIGN.md β inferred tokens + ASSUMPTIONS block
β βββ prompt.md β Round-0 brief (~250 tok)
βββ round-1/
β βββ prompt.md β Round-N delta (~100 tok)
β βββ design-output.png
β βββ tokens.json
β βββ impl-desktop.png
β βββ impl-mobile.png β only if responsive < 8.0
β βββ score.json
β βββ gaps.md
βββ APPROVED.md β or FAILED.md
| Code | Meaning |
|---|---|
β
APPROVED |
score β₯ gate β code implemented, .pdl/APPROVED.md written |
π STAGNATED |
2 rounds without progress, or fingerprint dedup match |
π EXHAUSTED |
rounds_max reached without hitting gate |
β EARLY_ABORT |
trajectory analysis: gate mathematically unreachable |
πΎ PAUSED |
context > 95% β checkpoint saved, resumable in new session |
π BLOCKED |
prerequisite missing (Chrome MCP / Claude Design / plan) |
β ERROR |
technical failure β see .pdl/error.log |
nexu-io/open-design (3.6kβ Β· MIT) is a local-first alternative to
claude.ai/design. Run the complete PDL loop on your machine β no Pro+ account, no browser, no Chrome MCP required.
flowchart LR
A{Pro+ account?} -- "yes" --> B[claude.ai/design]
A -- "no" --> C{open-design\ndaemon running?}
C -- "yes" --> D[open-design local]
C -- "no" --> E[webdesign-mcp\nstandalone]
B --> F([Full PDL loop])
D --> F
E --> G([Implement only\nno loop])
style A fill:#2a2000,stroke:#ffd83d,color:#ffd83d
style B fill:#0d2e1a,stroke:#4caf50,color:#7cf0a0
style C fill:#2a2000,stroke:#ffd83d,color:#ffd83d
style D fill:#0d2e1a,stroke:#4caf50,color:#7cf0a0
style E fill:#2a1420,stroke:#ff2d95,color:#ffa2cf
style F fill:#0d1f2d,stroke:#5ce1ff,color:#8eecff
style G fill:#1a1a2e,stroke:#7cf0a0,color:#7cf0a0
/picasso auto-detects the active engine via GET /api/design-systems β no flag needed.
| Capability | Value |
|---|---|
| 71 brand design systems | Stripe Β· Linear Β· Vercel Β· Apple Β· Tesla Β· Notion Β· Figma Β· Framer Β· GitHub Β· Cursor Β· PostHog + 60 others |
| DESIGN.md auto-seed | Brand tokens injected before round 0 β replaces manual CSS extraction, saves 1β2 rounds to gate |
| 5 visual directions | editorial Β· modern-minimal Β· tech-utility Β· brutalist Β· soft-warm |
| 19 skill templates | web-prototype Β· dashboard Β· deck Β· landing Β· e-commerce + 14 more |
| Anti-slop 5D critique | Automatic self-critique aligned with the 9.0 gate |
| Multi-agent routing | Claude Code Β· Cursor Β· Gemini CLI Β· Qwen Β· GitHub Copilot as coding engine |
# Clone once
git clone --depth 1 https://github.com/nexu-io/open-design.git ~/.claude/skill-library/open-design
cd ~/.claude/skill-library/open-design && npm install
# Start before each design session
npm run dev # β http://localhost:3000Then run /picasso --design-loop as usual β it probes :3000/api/design-systems automatically.
# 71 brand systems available instantly β no CSS extraction needed
/picasso --design-loop "hero for fintech, linear style"
# Explicit brand reference
/picasso --design-loop --ref linear "pricing page"Picasso handles the loop. These tools extend it at the input, feedback, and scale layers.
| Tool | Layer | What it adds |
|---|---|---|
| nexu-io/open-design β3.6k | Input + Engine | Local PDL engine β no Pro+ required. 71 brand systems, 5 visual directions, 19 templates. Auto-detected. |
| bergside/design-md-chrome β542 | Input | Extract DESIGN.md from any live site β --from-site |
| Figma MCP | Input | Figma designs as design source β --from-figma |
| breschio/drawbridge | Feedback | Browser annotations β DOM-anchored gaps β --feedback drawbridge |
| HermeticOrmus/LibreUIUX-Claude-Code | Scale | 152 UI/UX agents for complex builds |
| wilwaldon/Frontend-Design-Toolkit | Scale | Curated toolkit: tokens, Playwright, accessibility |
| hemangjoshi37a/claude-code-frontend-dev | Visual QA | Post-APPROVED visual testing with closed-loop fixes |
See docs/companion-tools.md for integration guides.
- Adds: open-design local PDL engine β run the full loop without a Pro+ account. Auto-detected via
GET /api/design-systemsprobe. No flag needed. - Adds: 71 brand design systems (Stripe, Linear, Vercel, Apple, Tesla, Notion + 66 others) as DESIGN.md seed β replaces manual CSS extraction, saves 1β2 rounds to gate
- Adds: 5 visual directions (
editorial,modern-minimal,tech-utility,brutalist,soft-warm) β structured style vocabulary for PDL prompts - Adds: Auto Design-Extract from
--ref <url>β color palette, typography, spacing, component patterns, motion hints auto-extracted intodesign-tokens-extracted.json - Adds: DESIGN.md references β 68 real-world brand examples (awesome-design-md)
- Adds: Platform trade-offs table β Next.js vs Astro vs Remix vs Webflow vs Framer with budget brackets ($30K / $30-150K / $150K+)
- Adds: Arsenal tables β TIER 1/2/3 detailed with roles, star counts, notes
- Updates: Fallback matrix β "Fallback & recovery" β Pro+ absent now routes to open-design daemon before falling back to loop-less mode
- Docs:
docs/companion-tools.mdβ open-design as first Input Layer entry with API reference
- Adds:
--from-site(design-md-chrome pattern),--from-figma(Figma MCP source) - Adds:
--feedback drawbridge(browser annotation integration) - Adds:
--multi-page+SITE.mdcross-page consistency (jezweb/design-loop pattern) - Adds: visual scoring tiers (PASS / PASS WITH NOTES / ITERATE / FAIL)
- Adds: expanded fallback matrix for all new input modes
- Docs:
docs/companion-tools.mdintegration guide
- Unified public repo: v0.1 narrative + v0.2 operator additions
- Adds: context backpressure Β· 10 token-optimizations Β· Karpathy principles Β· 5 modes + 4 scope presets
- Adds: model routing Β· zero-context subagent Β· trajectory abort Β· idempotent writes
- Adds: 6 lifecycle hooks Β· wizard installer Β· economy.jsonl tracking
- Adds: reference mode Β· iterate mode Β· critique mode
- Conductor phases 1β4 Β· ASSUMPTIONS surfacing Β· DESIGN.md delta reads
- STAGNATED Β· EARLY_ABORT Β· PAUSED states Β· fingerprint deduplication
- Budget preflight Β· economy.jsonl Β· daily cap enforcement
/picasso --design-loopcommand Β·pdl-conductoragent- 6 round steps Β· gate scoring Β·
pdl-autodetecthook - One-liner installer (macOS / Linux / WSL / PowerShell)
| Architecture | System overview and component map |
| Bridge loop walkthrough | Phase-by-phase execution |
| Modes & scope presets | 5 loop variants |
| Gate scoring | Weighted criteria + tuning guide |
| Design patterns | 9 orchestration patterns + Karpathy |
| Token optimization | 3Γ overhead reduction |
| Lifecycle hooks | Hook system reference |
| Prompt templates | Round-0 and Round-N formats |
| Installation | Full install guide |
| Troubleshooting | Common issues + fixes |
bash scripts/uninstall.shThen remove the hook block from ~/.claude/settings.json manually.
This project only orchestrates user-owned sessions of those tools. Β· MIT License