Orchestrating Parallel Design Agents
Overview
To explore several design directions fast, dispatch one agent per direction, all building in ONE shared canvas at the same time (the user watches it fill). A canvas is shared state, but unlike a source file it is spatially partitionable: give each agent a disjoint region and writes never overlap and node IDs never clash (the tool assigns them).
Core principle: One agent per track to explore. The orchestrator centrally assigns each a disjoint canvas corridor. Don't default to sequential just because they share a file, and don't fix the count — it equals the number of directions.
When to use
- Exploring N design directions / screens at once (N = number of tracks, never a hardcoded number).
- You want the user to watch the canvas fill in real time.
- Outputs must stay visually coherent across agents.
When NOT to use
- One direction only → one agent, no corridors.
- Agents must edit the same nodes/region (true contention) → sequential.
The non-obvious part
General parallel-dispatch guidance says "shared state → run sequential." A canvas is the exception: shared file, partitionable space. Composable (not a dependency): superpowers:dispatching-parallel-agents covers general fan-out (one agent per domain, focused prompts, review/integrate); this skill adds the shared-canvas coordination it lacks.
Protocol (orchestrator side)
- One agent per track. Count = number of directions to compare. Each owns one direction end-to-end, which keeps that direction internally consistent.
- Assign corridors centrally. Give each agent an explicit, distinct x (e.g. 0 / 1700 / 3400 …, spaced wider than an artboard). NEVER let agents self-pick "the first free spot" — independent agents converge on the same coordinate and collide. (Observed failure mode.)
- Inject one shared spec into every agent. Identical design tokens (colors, type scale, radii), component specs, and exact content/copy in every prompt. This is what makes N independent outputs read as one system.
- Hand each agent the isolation contract (below).
- Diverge → review → converge. Dispatch in parallel, then screenshot each corridor, critique comparatively, converge to one direction. Agents never cross-reference each other live.
The isolation contract (paste into each agent prompt)
- Work only on the active page; never switch or create pages.
- Your corridor is x=<N>. Create your own artboards there; stack vertically with a gap.
- Touch only nodes you created. Never move/delete/edit a node you didn't create.
- Reference your nodes by the IDs returned to you. NEVER rely on get_selection
(it's global; other agents change it).
- Screenshot YOUR artboard by id, not the page, so others' work doesn't pollute your review.
- After creating an artboard, verify its position (the tool may auto-reposition); force your x if needed.
- finish_working_on_nodes only on your own artboards.
(Tool names are Paper's; adapt the equivalents for Figma.)
Presenting the explorations (optional output format)
When explorations must stay legible for review, handoff, or sharing, have each agent wrap its track in a self-describing presentation frame instead of bare stacked artboards:
- Large identifier (letter/number) — assigned centrally by the orchestrator, same as the corridor.
- Title (direction name) + light-weight subtitle (one-line pitch). Contrast a Medium/SemiBold title against a Light subtitle.
- The screens laid out inside (clone the real artboards at native size), each with a small step badge + a short caption.
- Light, airy ground; generous vertical rhythm.
Lock the format on one frame first, then fan out: later agents replicate it by inspecting that frame (reference it by node id) so every deck matches.
Quick reference
| Concern |
Rule |
| Agent count |
One per direction to explore (not fixed) |
| Region |
Orchestrator assigns a distinct x per agent |
| Node IDs |
Tool-assigned, unique; each agent tracks its own |
| Selection |
Global/shared → never drive work from it |
| Coherence |
Same spec block in every prompt |
| Coordination |
None live; review + converge after |
Common mistakes
- Hardcoding the agent count instead of one per direction → directions merged, or idle agents.
- Letting agents self-assign position → all pick "first free" → overlap. Assign centrally.
- Defaulting to sequential because they share a file → lose the speed and the live build.
- Different spec per agent → stylistic drift; outputs don't read as one system.
- Driving work via get_selection → cross-agent pollution; use explicit node IDs.
- Cloning loses position → a cloned screen inherits the source's absolute x/y and lands off-frame; reset it to 0 within its container.
- Building in the wrong file → the tool follows the active file, which changes when another file is opened; verify file/page before building, and remember clones can't cross files.
- Trusting agents' position reports → an agent may report placing its frame at x=N while the left/top never persisted, so the frame collapses to the origin and overlaps the others. After fanout, read each frame's real left/top (not the agent's summary) and correct any that didn't stick.
Related (composable, not required)
- superpowers:dispatching-parallel-agents — general fan-out mechanics.
- Paper MCP
get_guide (paper-mcp-instructions) — visual quality discipline.
- paper-desktop:design-to-code — handoff to real components afterward.
1---2name: orchestrating-parallel-design-agents3description: Use when exploring several design directions at once in one shared design file (Paper, Figma canvas) by dispatching one agent per direction, when their outputs risk colliding on the canvas or drifting apart, or when tempted to run them sequentially because they share a file. Not for a single direction, and not for choosing what the directions should be (use design-direction).4---56# Orchestrating Parallel Design Agents78## Overview9To explore several design directions fast, dispatch **one agent per direction**, all building in ONE shared canvas at the same time (the user watches it fill). A canvas is shared state, but unlike a source file it is **spatially partitionable**: give each agent a disjoint region and writes never overlap and node IDs never clash (the tool assigns them).1011**Core principle:** One agent per track to explore. The orchestrator *centrally* assigns each a disjoint canvas corridor. Don't default to sequential just because they share a file, and don't fix the count — it equals the number of directions.1213## When to use14- Exploring N design directions / screens at once (N = number of tracks, never a hardcoded number).15- You want the user to watch the canvas fill in real time.16- Outputs must stay visually coherent across agents.1718## When NOT to use19- One direction only → one agent, no corridors.20- Agents must edit the *same* nodes/region (true contention) → sequential.2122## The non-obvious part23General parallel-dispatch guidance says "shared state → run sequential." A canvas is the exception: shared *file*, partitionable *space*. **Composable (not a dependency):** superpowers:dispatching-parallel-agents covers general fan-out (one agent per domain, focused prompts, review/integrate); this skill adds the shared-canvas coordination it lacks.2425## Protocol (orchestrator side)261. **One agent per track.** Count = number of directions to compare. Each owns one direction end-to-end, which keeps that direction internally consistent.272. **Assign corridors centrally.** Give each agent an explicit, distinct x (e.g. 0 / 1700 / 3400 …, spaced wider than an artboard). NEVER let agents self-pick "the first free spot" — independent agents converge on the same coordinate and collide. (Observed failure mode.)283. **Inject one shared spec into every agent.** Identical design tokens (colors, type scale, radii), component specs, and exact content/copy in every prompt. This is what makes N independent outputs read as one system.294. **Hand each agent the isolation contract** (below).305. **Diverge → review → converge.** Dispatch in parallel, then screenshot each corridor, critique comparatively, converge to one direction. Agents never cross-reference each other live.3132## The isolation contract (paste into each agent prompt)33```34- Work only on the active page; never switch or create pages.35- Your corridor is x=<N>. Create your own artboards there; stack vertically with a gap.36- Touch only nodes you created. Never move/delete/edit a node you didn't create.37- Reference your nodes by the IDs returned to you. NEVER rely on get_selection38 (it's global; other agents change it).39- Screenshot YOUR artboard by id, not the page, so others' work doesn't pollute your review.40- After creating an artboard, verify its position (the tool may auto-reposition); force your x if needed.41- finish_working_on_nodes only on your own artboards.42```43(Tool names are Paper's; adapt the equivalents for Figma.)4445## Presenting the explorations (optional output format)46When explorations must stay legible for review, handoff, or sharing, have each agent wrap its track in a self-describing presentation frame instead of bare stacked artboards:47- **Large identifier** (letter/number) — assigned centrally by the orchestrator, same as the corridor.48- **Title** (direction name) + **light-weight subtitle** (one-line pitch). Contrast a Medium/SemiBold title against a Light subtitle.49- The screens laid out inside (clone the real artboards at native size), each with a small step badge + a short caption.50- Light, airy ground; generous vertical rhythm.5152**Lock the format on one frame first**, then fan out: later agents replicate it by inspecting that frame (reference it by node id) so every deck matches.5354## Quick reference55| Concern | Rule |56|---|---|57| Agent count | One per direction to explore (not fixed) |58| Region | Orchestrator assigns a distinct x per agent |59| Node IDs | Tool-assigned, unique; each agent tracks its own |60| Selection | Global/shared → never drive work from it |61| Coherence | Same spec block in every prompt |62| Coordination | None live; review + converge after |6364## Common mistakes65- **Hardcoding the agent count** instead of one per direction → directions merged, or idle agents.66- **Letting agents self-assign position** → all pick "first free" → overlap. Assign centrally.67- **Defaulting to sequential** because they share a file → lose the speed and the live build.68- **Different spec per agent** → stylistic drift; outputs don't read as one system.69- **Driving work via get_selection** → cross-agent pollution; use explicit node IDs.70- **Cloning loses position** → a cloned screen inherits the source's absolute x/y and lands off-frame; reset it to 0 within its container.71- **Building in the wrong file** → the tool follows the *active* file, which changes when another file is opened; verify file/page before building, and remember clones can't cross files.72- **Trusting agents' position reports** → an agent may report placing its frame at x=N while the left/top never persisted, so the frame collapses to the origin and overlaps the others. After fanout, read each frame's real left/top (not the agent's summary) and correct any that didn't stick.7374## Related (composable, not required)75- superpowers:dispatching-parallel-agents — general fan-out mechanics.76- Paper MCP `get_guide` (paper-mcp-instructions) — visual quality discipline.77- paper-desktop:design-to-code — handoff to real components afterward.