Design Runner
Preserve workflow quality. Swap provider.
$DESIGN_RUNNER selects a runner profile. Names such as
$DESIGN_RUNNER_DOCUMENT_INSPECT are abstract capabilities, not literal MCP tool
names. Resolve them before any provider call.
Start here
-
Find the nearest
.design-runner.json; if none exists, uselocal-fileswith cloud, desktop apps, and design writes denied. -
Resolve the requested workflow:
python3 ~/.agents/skills/design-runner/scripts/runner.py resolve <workflow> -
Read
references/workflows.mdfor that workflow andreferences/runners.mdfor the selected provider. -
If the selected runner is MCP-backed, call
design_mcp_connect, thendesign_mcp_loadwith the needed capability or exact tool name. Use only the dynamically loaded provider tools. -
Never silently fall back to another provider.
-
Run the quality loop below and leave a local verification artifact.
Quality loop
- Inspect source structure before editing.
- Inventory existing tokens, components, assets, and naming conventions.
- Reuse existing primitives before creating new ones.
- Make the smallest coherent change, in sections for large work.
- Render or capture the result after each meaningful batch.
- Compare structure and pixels against the source or brief; fix clipping, overlap, missing states, inaccessible contrast, and wrong assets.
- Verify final output in its real target: local browser, design provider, exported asset, slide deck, or application runtime.
For existing multi-screen mocks that must become one canvas, resolve
unified-product-flow and follow its exact consolidation sequence in
references/workflows.md.
Safety
- Treat
.design-runner.jsonpolicy as a hard boundary. - A runner requiring cloud or a desktop app is blocked unless explicitly allowed.
- Any operation marked
writesDesignis blocked unlessallowDesignWritesis true. - Missing capability means stop with the missing capability name. Do not switch to Figma, cloud, desktop, or a write tool as a fallback.
- For read-only work, never resolve an optional write capability.
- Before destructive provider operations, describe the exact change and use the provider's reversible history or duplicate-file workflow.
Switching runners
Fully local mode:
python3 ~/.agents/skills/design-runner/scripts/runner.py use local-files --project ~
Self-hosted Penpot, allowing design writes:
python3 ~/.agents/skills/design-runner/scripts/runner.py use penpot-local \
--project . --design-writes allow
Tencent Ardot Desktop, allowing its desktop app and design writes:
python3 ~/.agents/skills/design-runner/scripts/runner.py use ardot-desktop \
--project . --desktop allow --design-writes allow
Tencent Ardot Remote, agent-only with no Ardot GUI:
python3 ~/.agents/skills/design-runner/scripts/runner.py use ardot-remote \
--project . --cloud allow --desktop deny --design-writes allow
Then stay inside Pi:
- Call
design_mcp_connectwithprofile: "ardot-remote". - On first use only, complete browser OAuth. Never expose the token in chat.
- Call
design_mcp_loadwith the workflow capability, such ascanvas edit,screenshot,variables,components, or an exact Ardot tool name. - Call the loaded
ardot_remote_*tools. Do not open Ardot Desktop.
Figma Remote:
python3 ~/.agents/skills/design-runner/scripts/runner.py use figma-remote \
--project . --cloud allow --design-writes allow
Temporary runner override without changing config:
DESIGN_RUNNER=local-files \
python3 ~/.agents/skills/design-runner/scripts/runner.py resolve diagram
Provider-specific guidance
- When
figma-remoteis selected, load the matching official Figma skill before tool use. This keeps upstream quality without copying its unlicensed text. - When
ardot-remoteis selected, use the Pidesign-mcpextension. This is the only verified Ardot path that avoids Ardot GUI; it uses Ardot Cloud and one-time browser OAuth. - For Penpot and Ardot, resolve current MCP tools from the connected server. Ardot
tool names may change; use
design_mcp_loadinstead of guessing names. - Never select
ardot-desktopwhen the user requires agent-only or no-GUI operation. - For
local-files, combine local image/PDF/SVG inputs withdesign-critique,ui-ux-pro-max,frontend-design,building-components,web-animation-design,baseline-ui, andagent-browseras relevant.
References
references/contract.md: capability contract and policy semantics.references/workflows.md: mapping from Figma skill names to portable workflows.references/runners.md: runner behavior, setup boundaries, and official sources.workflows.json: machine-readable workflow requirements.runners/*.json: machine-readable runner adapters.
Verification
python3 ~/.agents/skills/design-runner/scripts/runner.py check
python3 -m unittest discover \
~/.agents/skills/design-runner/tests -p 'test_*.py'