Multi-agent design pipeline

Design Agent

The Design Agent is a multi-stage Claude Code pipeline that takes a product spec from a one-paragraph brief through to shipped React + Tailwind UI. It runs as six specialized subagents, each responsible for one stage and constrained to a small toolset.

This page describes the pipeline, walks through what it produced for the example project (Code Walkthroughs — A local tool that guides a reviewer through an unfamiliar codebase along meaningful execution paths, with structured review actions and classification-driven checklists.), and ends with what we'd change next time.

§ The pipeline

What the design agent is and how its six stages fit together.

Six stages, six subagents. The dispatcher (the user's main Claude Code session) only routes to the right subagent for the request — no design work happens at the dispatcher level. Each subagent reads the relevant prior artifacts on every run, keeping its own context window minimal.

  1. 1. DiscoveryTurns a spec or conversation into a brief, feature list, and user flows. The output is structured artifacts the rest of the pipeline can read.
  2. 2. Information ArchitecturePer-screen content inventories — what exists, hierarchy, priority. No coordinates, no visuals. Forces decisions about what content is load-bearing before the user has any visual vocabulary.
  3. 3. StyleGenerates several distinct token sets as design directions — colors, typography, spacing, radii — each with a small preview component. User picks one; the selected set becomes tailwind.config.js.
  4. 4. LayoutTurns content inventories into element maps with pixel coordinates. Renders "blocked" PNGs (every element shown as a labeled rectangle) so spatial choices can be reviewed before any component code exists.
  5. 5. ComponentsGenerates React + Tailwind components from the element maps, constrained to the project's tokens. Each component renders into its own visual eval; promotion to a shared component requires both shared intent and shared structure.
  6. 6. AssemblyComposes full pages from the registered components, matching the element maps and the selected tokens. Final stage of the pipeline.

Two splits are deliberate. IA before Style: content structure should be decided before the user has visual vocabulary, otherwise the style choice biases what content gets surfaced. Style before Layout: spatial positioning needs typography and color decided so density and rhythm are reasoned with real materials.

Evals run in two places — inside subagents (each stage runs eval on its own work before presenting to the user) and inside save-wrappers for tokens, components, and pages (eval runs before write; on failure nothing is saved). Evals from stage 4 onward use Claude vision: render to PNG with Playwright, feed the screenshot back, get structured findings.

§ Worked example: Code Walkthroughs

What each stage actually wrote, in pipeline order.

The rest of this page walks the actual artifacts the pipeline produced for Code Walkthroughs, stage by stage. All screenshots open full-size on click; anything that would otherwise dump a wall of images is collapsed by default.

§ Stage 1 — Discovery

A spec becomes a structured brief, feature list, and flows.

Discovery is a conversation, not a form. The subagent asks 6–10 open-ended questions about who the product is for, what problem it solves, what's not in scope, and what the visual register should be. The output is three artifacts: a brief, a features list, and one or more user flows.

Code Walkthroughs — what came out

One-liner

A local tool that guides a reviewer through an unfamiliar codebase along meaningful execution paths, with structured review actions and classification-driven checklists.

Personas (3)

Non-goals (excerpt)

Features

28 features (19 marked must). The full list is in projects/code-walkthroughs/brief/features.json.

§ Stage 2 — Information Architecture

Content inventories per screen. Decided before any visual vocabulary.

IA decides what each screen is for and what content it must hold — headings, sections, key interactive bits, alternate states. No coordinates, no token references, no styling. The output is one inventory JSON per screen plus a sitemap describing how they connect.

Splitting IA out from layout means the user has to commit to content hierarchy before they're allowed to move things around. It's where most of the "is this even the right shape of product?" conversations happen.

Code Walkthroughs — sitemap (12 screens)

ScreenPurpose
codebase_pickerSelect a local directory to ingest, or resume a previously-ingested codebase from a list of known codebases (serves as welcome/empty state on first run).
analysis_progressShow per-project analysis progress (AST parse, classification, entry-point detection, path construction) while the reviewer waits or begins prep in parallel.
prep_passTriage unresolved questions from analysis — ambiguous classifications, unresolved path branches, entry-point confirmations, possible renames — one question at a time with pre-generated answers and alternatives.
project_overviewThe project's home base — detected paths (optionally categorized by theme), synthetic walkthroughs for non-path code, entry to the file browser, progress indicators, and remaining prep questions. Absorbs the role of presenting available paths to pick from.
walkthrough_nodeThe core review surface — one node at a time with syntax-highlighted code, classification, checklist (built-in + user + project rules with origins), rule evaluations, four-state status indicator, review actions (approve / reject / request info), comments, the ability to dig into called functions and return, visibility of preamble context above the entry point, and a way to move to the next / previous node on the current path or take a fork when the path branches.
file_browserNavigable view of the project's files with per-file classification and four-state status; fallback for non-path code (configs, scripts, seeds) and free browsing.
file_viewHolistic file review — full file with syntax highlighting, file-level classification, per-function status indicators, file-level and function-level status actions with cascade resolution, and line-range/function/file comments.
comparison_setupSupply two commit refs (base and head), confirm the comparison range, and kick off a comparison-mode analysis for PR review or AI-code audit.
comparison_overviewChange summary for PR / AI-code audit — counts of new/modified/renamed/deleted functions and files, detected paths with change-touch markers, modified-since-approval counts per path, and comparison-aware entry into walkthroughs.
progress_dashboardCoverage and composition view — path coverage vs full coverage, approve/reject/info breakdown, per-project / per-path / per-file scoping, outstanding info requests, and progress reset controls.
rule_managementAuthor, edit, enable/disable, and scope rules (built-in / user / project) — pattern rules, shell-command rules, and LLM prompt rules — with origin visibility per rule and per-classification checklist previews.
settingsGlobal preferences — LLM feature opt-in/out, LLM provider configuration, syntax-highlight theme (single default for v1), data location, and cache controls.

§ Stage 3 — Style

Several token sets as distinct visual directions, each with a live preview.

Style produces three to four token sets per round, each with a small preview component that exercises typography, color, spacing, and a few affordances side-by-side. The user picks one — or rejects the whole set and asks for more boundary-pushing alternatives.

For Code Walkthroughs the user took three rounds before settling. Early candidates read as too similar; later rounds added specific thematic prompts (cyber-tactical honeycomb, gamified farm-tending, stylized two-tone clouds). The final pick — Blueprint Draft — leans into a drafting-table aesthetic that fits a document-first dev tool.

Selected
Blueprint Draft preview
Blueprint Draft chosen as final tokens

Other candidates (9)

Cobalt Forge preview
Cobalt Forge rejected
Ink And Graphite preview
Ink And Graphite rejected
Inkline Panel preview
Inkline Panel rejected
Living Canopy preview
Living Canopy rejected
Paper Terminal preview
Paper Terminal rejected
Phosphor Crt preview
Phosphor Crt rejected
Pit Boss preview
Pit Boss rejected
Recon Atlas preview
Recon Atlas rejected
Recon Grid preview
Recon Grid rejected

Each preview is a single live JSX file rendered through the same Playwright + Tailwind Play CDN sandbox the rest of the pipeline uses.

§ Stage 4 — Layout

Element maps with pixel coordinates, rendered as labeled boxes for spatial review before any UI code exists.

The layout subagent reads each screen's content inventory and produces an element map — every element placed at {x, y, width, height} — plus two rendered PNGs. The blocked view stacks every element as a labeled rectangle. The spaced view adds red gap-measurement labels so the reviewer can confirm rhythm without code.

These diagrams are useful for spatial review but, frankly, not friendly on the eyes. Two are featured below; the rest are tucked into a collapsible per screen.

Project Overview layout (spaced)
Project Overview — desktop spaced view, with red labels showing measured gaps in pixels.
Walkthrough Node layout (spaced)
Walkthrough Node — desktop spaced view, with red labels showing measured gaps in pixels.

All layouts

Codebase Picker — 2 layout artifacts
desktop_blockeddesktop_blocked
desktop_spaceddesktop_spaced
Analysis Progress — 4 layout artifacts
desktop_blockeddesktop_blocked
desktop_ingestion_failure_blockeddesktop_ingestion_failure_blocked
desktop_ingestion_failure_spaceddesktop_ingestion_failure_spaced
desktop_spaceddesktop_spaced
Prep Pass — 4 layout artifacts
desktop_blockeddesktop_blocked
desktop_empty_queue_blockeddesktop_empty_queue_blocked
desktop_empty_queue_spaceddesktop_empty_queue_spaced
desktop_spaceddesktop_spaced
Project Overview — 4 layout artifacts
desktop_blockeddesktop_blocked
desktop_empty_paths_blockeddesktop_empty_paths_blocked
desktop_empty_paths_spaceddesktop_empty_paths_spaced
desktop_spaceddesktop_spaced
Walkthrough Node — 2 layout artifacts
desktop_blockeddesktop_blocked
desktop_spaceddesktop_spaced
File Browser — 2 layout artifacts
desktop_blockeddesktop_blocked
desktop_spaceddesktop_spaced
File View — 4 layout artifacts
desktop_blockeddesktop_blocked
desktop_non_walkable_blockeddesktop_non_walkable_blocked
desktop_non_walkable_spaceddesktop_non_walkable_spaced
desktop_spaceddesktop_spaced
Comparison Setup — 2 layout artifacts
desktop_blockeddesktop_blocked
desktop_spaceddesktop_spaced
Comparison Overview — 4 layout artifacts
desktop_blockeddesktop_blocked
desktop_rebase_warning_blockeddesktop_rebase_warning_blocked
desktop_rebase_warning_spaceddesktop_rebase_warning_spaced
desktop_spaceddesktop_spaced
Progress Dashboard — 4 layout artifacts
desktop_blockeddesktop_blocked
desktop_reset_confirmation_blockeddesktop_reset_confirmation_blocked
desktop_reset_confirmation_spaceddesktop_reset_confirmation_spaced
desktop_spaceddesktop_spaced
Rule Management — 2 layout artifacts
desktop_blockeddesktop_blocked
desktop_spaceddesktop_spaced
Settings — 4 layout artifacts
desktop_blockeddesktop_blocked
desktop_llm_disabled_blockeddesktop_llm_disabled_blocked
desktop_llm_disabled_spaceddesktop_llm_disabled_spaced
desktop_spaceddesktop_spaced

§ Stage 5 — Components

React + Tailwind components, generated and visually evaluated one at a time.

Components are generated one at a time, each with a Preview export that exercises a realistic state. Every component runs through a Claude visual eval (the rendered PNG plus the JSX plus the project tokens) before it lands in the registry. Failed evals don't get registered.

By default each component is page-scoped — it lives under pages/<screen>/components/. Promotion to a shared primitive requires both shared intent and shared structure: not just "both are buttons," but two near-identical resting-state shapes that a third caller would plausibly want without opt-out props. For Code Walkthroughs the promotion pass produced four shared primitives (Button, Toggle, SegmentedControl, WorkspaceTopBar) and consciously left mismatches alone (a multi-select chip with counts and an independently-toggled chip kept different state semantics).

The component sandbox bundles local imports with IIFE-wrapped dependencies so private helpers (const sizeClasses = …) can't collide across files. Visual evals leave their PNGs on disk by default for review.

All components — 128 total, grouped by primary screen

Codebase Picker — 4 components
AddCodebasePanel preview
AddCodebasePanel eval pass
KnownCodebaseRow preview
KnownCodebaseRow eval pass
KnownCodebaseToolbar preview
KnownCodebaseToolbar eval pass
PickerTopBar preview
PickerTopBar eval pass
Analysis Progress — 7 components
AnalysisProjectRow preview
AnalysisProjectRow eval pass
IngestionFailurePanel preview
IngestionFailurePanel eval pass
IngestionSummaryPanel preview
IngestionSummaryPanel eval pass
LlmIncidentBanner preview
LlmIncidentBanner eval pass
OverallProgressPanel preview
OverallProgressPanel eval pass
ParallelPrepStrip preview
ParallelPrepStrip eval pass
PartialDetectionRow preview
PartialDetectionRow eval pass
Prep Pass — 11 components
CandidateAnswerList preview
CandidateAnswerList eval pass
CandidateAnswerRow preview
CandidateAnswerRow eval pass
CategoryFilterChip preview
CategoryFilterChip eval pass
CodeExcerptPanel preview
CodeExcerptPanel eval pass
CommitControlsFooter preview
CommitControlsFooter eval pass
ConsequencesPreview preview
ConsequencesPreview eval pass
CustomAnswerPanel preview
CustomAnswerPanel eval pass
EmptyQueuePanel preview
EmptyQueuePanel eval pass
PrepTopBar preview
PrepTopBar eval pass
QuestionFraming preview
QuestionFraming eval pass
QueueOrientationStrip preview
QueueOrientationStrip eval pass
Project Overview — 15 components
Badge preview
Badge eval pass
Button preview
Button eval pass
CategorySection preview
CategorySection eval pass
CoverageSnapshot preview
CoverageSnapshot eval pass
EmptyPathsPanel preview
EmptyPathsPanel eval pass
NonPathRail preview
NonPathRail eval pass
NonWalkableProjectsCard preview
NonWalkableProjectsCard eval pass
PathInventoryToolbar preview
PathInventoryToolbar eval pass
PathListItem preview
PathListItem eval pass
PrepBanner preview
PrepBanner eval pass
ProjectIdentityBand preview
ProjectIdentityBand eval pass
RecentActivityRail preview
RecentActivityRail eval pass
SyntheticWalkthroughItem preview
SyntheticWalkthroughItem eval pass
TopBar preview
TopBar eval pass
WorkspaceTopBar preview
WorkspaceTopBar eval pass
Walkthrough Node — 17 components
ActiveNodeCard preview
ActiveNodeCard eval pass
CallSiteRow preview
CallSiteRow eval pass
CanvasControlsCluster preview
CanvasControlsCluster eval pass
CanvasEdge preview
CanvasEdge eval pass
CanvasLegend preview
CanvasLegend eval pass
InlineCommentsList preview
InlineCommentsList eval pass
InlineDiffControls preview
InlineDiffControls eval pass
LocationInPathBand preview
LocationInPathBand eval pass
MinimapPanel preview
MinimapPanel eval pass
NodeCommentComposer preview
NodeCommentComposer eval pass
NodeReviewActions preview
NodeReviewActions eval pass
NodeReviewRail preview
NodeReviewRail eval pass
PathProgressionFooter preview
PathProgressionFooter eval pass
PreambleReveal preview
PreambleReveal eval pass
UpstreamNodeCard preview
UpstreamNodeCard eval pass
WalkthroughCanvas preview
WalkthroughCanvas eval pass
WalkthroughTopBar preview
WalkthroughTopBar eval pass
File Browser — 10 components
BrowseModeToggle preview
BrowseModeToggle eval pass
EmptyFilterState preview
EmptyFilterState eval pass
FileBrowserFilterBar preview
FileBrowserFilterBar eval pass
FileBrowserProgressRail preview
FileBrowserProgressRail eval pass
FileBrowserTopBar preview
FileBrowserTopBar eval pass
FileNavigationItem preview
FileNavigationItem eval pass
GroupNavigationItem preview
GroupNavigationItem eval pass
SegmentedControl preview
SegmentedControl shared eval pass
SyntheticWalkthroughRailItem preview
SyntheticWalkthroughRailItem eval pass
WalkthroughContextBanner preview
WalkthroughContextBanner eval pass
File View — 15 components
CascadeConflictPanel preview
CascadeConflictPanel eval pass
CommentsRail preview
CommentsRail eval pass
CrossReferencesRail preview
CrossReferencesRail eval pass
DiffControls preview
DiffControls eval pass
FileActionsRail preview
FileActionsRail eval pass
FileChangeMarker preview
FileChangeMarker eval pass
FileIdentityHeader preview
FileIdentityHeader eval pass
FileViewTopBar preview
FileViewTopBar eval pass
FileViewWalkthroughBanner preview
FileViewWalkthroughBanner eval pass
FunctionSection preview
FunctionSection eval pass
NonWalkablePanel preview
NonWalkablePanel eval pass
RuleEvaluationItem preview
RuleEvaluationItem eval pass
RuleEvaluationsRail preview
RuleEvaluationsRail eval pass
StatusHistoryFooter preview
StatusHistoryFooter eval pass
StatusSelect preview
StatusSelect eval pass
Comparison Setup — 7 components
ComparisonSetupFooter preview
ComparisonSetupFooter eval pass
PriorComparisonRail preview
PriorComparisonRail eval pass
PriorComparisonRangeCard preview
PriorComparisonRangeCard eval pass
RangeConfirmationPanel preview
RangeConfirmationPanel eval pass
RefEntryField preview
RefEntryField eval pass
RefEntryPanel preview
RefEntryPanel eval pass
SetupFraming preview
SetupFraming eval pass
Comparison Overview — 10 components
ChangedPathListItem preview
ChangedPathListItem eval pass
ChangedPathsToolbar preview
ChangedPathsToolbar eval pass
ChangeSummaryPanel preview
ChangeSummaryPanel eval pass
ComparisonOverviewTopBar preview
ComparisonOverviewTopBar eval pass
OrphanChangeRail preview
OrphanChangeRail eval pass
RangeIdentityBand preview
RangeIdentityBand eval pass
RebaseWarningPanel preview
RebaseWarningPanel eval pass
RenameQueueRail preview
RenameQueueRail eval pass
ReviewProgressPanel preview
ReviewProgressPanel eval pass
StreamingMaterializationStrip preview
StreamingMaterializationStrip eval pass
Progress Dashboard — 11 components
ActivityLogItem preview
ActivityLogItem eval pass
ActivityTrailPanel preview
ActivityTrailPanel eval pass
AttentionItemsPanel preview
AttentionItemsPanel eval pass
CompositionBreakdownPanel preview
CompositionBreakdownPanel eval pass
CoverageFlavorsPanel preview
CoverageFlavorsPanel eval pass
ProgressDashboardTopBar preview
ProgressDashboardTopBar eval pass
ResetConfirmationPanel preview
ResetConfirmationPanel eval pass
ResetControlsPanel preview
ResetControlsPanel eval pass
ScopeComparisonPanel preview
ScopeComparisonPanel eval pass
ScopePeerRow preview
ScopePeerRow eval pass
ScopeSelectorStrip preview
ScopeSelectorStrip eval pass
Rule Management — 11 components
ClassificationRosterItem preview
ClassificationRosterItem eval pass
ClassificationRosterPanel preview
ClassificationRosterPanel eval pass
EffectiveChecklistPreview preview
EffectiveChecklistPreview eval pass
LayerChip preview
LayerChip eval pass
LayerOrientationStrip preview
LayerOrientationStrip eval pass
RuleDryRunPanel preview
RuleDryRunPanel eval pass
RuleEditorPanel preview
RuleEditorPanel eval pass
RuleInventoryItem preview
RuleInventoryItem eval pass
RuleInventoryPanel preview
RuleInventoryPanel eval pass
RuleManagementTopBar preview
RuleManagementTopBar eval pass
Toggle preview
Toggle shared eval pass
Settings — 10 components
AboutSupportPanel preview
AboutSupportPanel eval pass
CacheControlsPanel preview
CacheControlsPanel eval pass
DataLocationPanel preview
DataLocationPanel eval pass
LlmFeatureControlPanel preview
LlmFeatureControlPanel eval pass
LlmProviderConfigurationPanel preview
LlmProviderConfigurationPanel eval pass
LlmProviderReadOnlyPanel preview
LlmProviderReadOnlyPanel eval pass
SettingsOrientation preview
SettingsOrientation eval pass
SettingsSection preview
SettingsSection eval pass
SettingsTopBar preview
SettingsTopBar eval pass
SyntaxThemePanel preview
SyntaxThemePanel eval pass

§ Stage 6 — Assembly

Full pages composed from the registered components.

Assembly composes the registered components into full pages, matching the element maps and the selected tokens. It's the final stage and the only one whose output looks like "a product".

For Code Walkthroughs the assembly produced 12 pages. Eight rendered cleanly on first try; four hit real composition bugs (one missing import, three filler-data shape mismatches against component prop contracts) that the static page eval missed because it checks tokens and registry resolution but doesn't actually render. Surfacing those was a useful accidental side-effect of building this docs site.

Assembled pages — click to expand

Codebase Picker — Select a local directory to ingest, or resume a previously-ingested codebase from a list of known codebases (serves as w…
Codebase Picker assembled page
Analysis Progress — Show per-project analysis progress (AST parse, classification, entry-point detection, path construction) while the revie…
Analysis Progress assembled page
Prep Pass — Triage unresolved questions from analysis — ambiguous classifications, unresolved path branches, entry-point confirmatio…
Prep Pass assembled page
Project Overview — The project's home base — detected paths (optionally categorized by theme), synthetic walkthroughs for non-path code, en…
Project Overview assembled page
Walkthrough Node — The core review surface — one node at a time with syntax-highlighted code, classification, checklist (built-in + user + …
Walkthrough Node assembled page
File Browser — Navigable view of the project's files with per-file classification and four-state status; fallback for non-path code (co…
File Browser assembled page
File View — Holistic file review — full file with syntax highlighting, file-level classification, per-function status indicators, fi…
File View assembled page
Comparison Setup — Supply two commit refs (base and head), confirm the comparison range, and kick off a comparison-mode analysis for PR rev…
Comparison Setup assembled page
Comparison Overview — Change summary for PR / AI-code audit — counts of new/modified/renamed/deleted functions and files, detected paths with …
Comparison Overview assembled page
Progress Dashboard — Coverage and composition view — path coverage vs full coverage, approve/reject/info breakdown, per-project / per-path / …
Progress Dashboard assembled page
Rule Management — Author, edit, enable/disable, and scope rules (built-in / user / project) — pattern rules, shell-command rules, and LLM …
Rule Management assembled page
Settings — Global preferences — LLM feature opt-in/out, LLM provider configuration, syntax-highlight theme (single default for v1),…
Settings assembled page

Filler content in each page is illustrative, not wired to any data source. The visuals show information density and composition, not real product state.

§ Known issues & next iteration

What the current pipeline can't express, and what we'd change.

The Code Walkthroughs run shipped on the current pipeline because the product's genre — a document-first dev tool — fits what the pipeline can express. The next iteration should fix the items below before tackling a more imagery- or motion-forward product.

Architectural gaps

Process & tooling gaps

What we'd try next

§ About

The Design Agent runs on Claude Code using its subagent feature — six specialized agents under .claude/agents/, each restricted to a small toolset, each responsible for one pipeline stage. The dispatcher (the user's main Claude Code session) only routes; no design work happens at that level.

Source is on GitHub. The example project's artifacts live under projects/code-walkthroughs/; the agent definitions are in .claude/agents/; the supporting Python tools are in tools/.

This site itself is generated by tools/build_docs.py walking the example project's artifacts. Re-run after regenerating the example to refresh the gallery.