breadboarding
This skill should be used when shaping a software change and needing to breadboard the solution at the right level of abstraction (places, affordances, connections), including mapping an existing system via UI + code affordances, producing a wiring diagram, a parts/BOM plan, a fit check, and (when relevant) an extract-vs-duplicate analysis.
Best use case
breadboarding is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
This skill should be used when shaping a software change and needing to breadboard the solution at the right level of abstraction (places, affordances, connections), including mapping an existing system via UI + code affordances, producing a wiring diagram, a parts/BOM plan, a fit check, and (when relevant) an extract-vs-duplicate analysis.
Teams using breadboarding should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/breadboarding/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How breadboarding Compares
| Feature / Agent | breadboarding | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
This skill should be used when shaping a software change and needing to breadboard the solution at the right level of abstraction (places, affordances, connections), including mapping an existing system via UI + code affordances, producing a wiring diagram, a parts/BOM plan, a fit check, and (when relevant) an extract-vs-duplicate analysis.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Breadboarding ## Purpose Produce a Shape Up style breadboard that is concrete enough to guide a build, without collapsing into pixel-perfect UI spec or a full-code hairball. Based on Shape Up and Ryan Singer's work. Treat **affordances** as the simplifying primitive. - **UI affordances**: things a user can do (type, click, scroll) or see (states/messages) that matter to the flow. - **Code affordances**: things the system can do (call a function, observe an observable, write/read state, navigate) that cause the UI affordances to change. Use those to build a lightweight model of the current system and the proposed change. ## When to use - Reach the “rough out the elements” stage and need to turn an idea into buildable parts. - Shape a change to a **pre-existing system** and need to understand what the system actually does today. - Compare a new concept against an existing feature and decide whether to **duplicate vs extract** shared logic. - Pick up a shaping effort after a gap and need a fast re-orientation: current state, chosen approach, and what’s still unsolved. ## Inputs to request or infer Prefer working with whatever exists. If inputs are missing, use `ask-questions-if-underspecified` skill - Appetite / timebox and any hard boundaries. - Problem statement and success definition. - Brief (problem, goals, in/out scope). If missing, pause and draft a brief first. - Requirements list (or a rough list of must-haves). - Entry point(s): where the user starts, how they discover the feature. - Existing system context: routes/screens, key components, services, data stores. - Any comparable feature(s) to analyse for reuse. ## Workflow ### 1) Establish the “right level of abstraction” - Avoid full wireframes and visual design. - Prefer **words** and **connections** over pictures. - Focus on “what’s connected to what” (topology) and “what changes state”. Use the breadboard primitives: - **Places**: screens/pages/modals/menus that can be navigated to. - **Affordances**: actions and information at a place (buttons, fields, copy, empty/loading states). - **Connection lines**: how an affordance moves between places or triggers work. ### 2) Breadboard the user flow - Start at the entry place. - List the minimum affordances needed to serve the use case. - Draw (describe) connection lines for navigation and “cause/effect” transitions. Stop when the flow answers these shaping questions: - Where in the current system does the new thing fit? - How does a user get to it? - What are the key components/interactions? - Where does it take the user next? ### 3) Inventory UI affordances Create a numbered list (recommended prefix **U**): For each UI affordance, record: - **ID**: U1, U2… - **Component / place**: where it lives - **Affordance**: “search input”, “loading spinner”, “no results message”, etc - **Control**: type/click/scroll/render/iterate - **Wires out**: what it triggers (calls, navigation, messages) - **Reads** (optional): what state/data it depends on Keep UI affordances at the interaction level, not implementation detail. ### 4) Inventory code affordances Create a numbered list (recommended prefix **N**): For each code affordance, record: - **ID**: N1, N2… - **Component/service**: where it lives - **Affordance**: function, observable subscription, store write/read - **Control**: call/observe/write/read - **Wires out**: what it calls, writes, triggers, or returns Interpretation rule: - If it’s something that can be “operated” from a whole-system POV to make something happen, it’s an affordance. ### 5) Build a wiring diagram from affordances Convert the inventories into a simple directed graph using `beautiful-mermaid` skill. - Nodes: places, UI affordances, code affordances, external services, browser events. - Edges: - **Solid** for “wires out”: calls, triggers, writes - **Dashed** for “returns/reads”: return values, store reads Keep it legible: - Draw only the parts touched by the change. - Collapse deep internals into a single node when they aren’t central to the shaped behaviour. - If it becomes a hairball, split into sub-diagrams per place or per flow. Required output format (both, not either/or): 1) **Source code**: include Mermaid source in a fenced ```mermaid block in the Markdown artefact. 2) **Static render**: generate and save a rendered diagram asset (SVG preferred) via `beautiful-mermaid`, and embed it in the Markdown artefact. 3) **Fallback**: also generate a terminal-safe ASCII/Unicode render (`.txt`) when practical. Compatibility note: - Some Markdown/SVG renderers (for example Zed) do not fully support CSS variables or `color-mix()` inside SVG. - If the render appears as black blocks, post-process the SVG to use literal color values (hex) for fill/stroke/text. Naming convention (recommended): - `<doc-base>-wiring.svg` - `<doc-base>-wiring.txt` Place static assets adjacent to the breadboard Markdown file so links stay portable. Use template `references/templates/wiring-diagram-mermaid-template.md`. ### 6) Produce a parts list (BOM) Write a numbered parts list (recommended prefix **F** for “shape/feature parts”): - Each part is a buildable chunk with a clear mechanism. - Include deletes/migrations explicitly (e.g., “remove letters from widget-grid”). For each part: - Name the part - Summarise the mechanism in 1–2 lines - Call out notable trade-offs (scope cuts, simplifications) Use `references/templates/parts-bom-template.md`. ### 7) Fit check: requirements × concept Create a simple table: - Rows: requirements (R0…) - Columns: - requirement statement - status (core goal / must-have / nice-to-have / out / undecided) - fit with current concept (✅/❌/⚠️) Then: - Call out the **unsolved** requirement(s) as explicit shaping questions. - Identify the decision needed (product/UX judgement vs technical unknown vs policy). Use `references/templates/fit-check-template.md`. ### 8) Duplicate vs extract analysis (when overlap exists) When a new change overlaps an existing feature, decide reuse via an **affordances overlap** rather than vibes. Steps: - Identify the comparable feature (existing) and the new concept. - List shared affordances and divergent affordances. - Compare requirements that drive divergence (URL shape, guards, state model, pagination mode, etc). - Estimate the real code coupling cost vs the amount of duplication avoided. Produce: - A “Keep Shared vs Duplicate” table - A recommendation (default bias: duplicate feature-level orchestration; extract infrastructure-level types/utilities) - 3–5 concrete reasons, with emphasis on: - **divergent requirements** - **lines of code vs coupling cost** Use `references/templates/extract-vs-duplicate-template.md`. ### 9) Package the breadboard as a single artefact Output a “Breadboard Pack” as Markdown: - Current State (what exists today) - Proposed Breadboard (places, affordances, connections) - UI Affordances table - Code Affordances table - Wiring diagram: - embedded static image link (`.svg`) - Mermaid code block (source of truth) - optional `.txt` fallback path - Parts/BOM - Fit check + unsolved questions - Rabbit holes / out-of-bounds / cuts - Optional: extract vs duplicate analysis Use `references/templates/breadboard-pack-template.md`. ## Quality bar - Stay rough, but solved: enough detail to unblock building, not enough to constrain visual design. - Keep a consistent numbering scheme (U*, N*, R*, F*). - Make every edge in the wiring diagram traceable back to an affordance row. - Ensure diagram portability: a reader without Mermaid support must still see the static diagram. - Prefer small, explicit trade-offs over implied complexity. ## Bundled resources - `references/shapeup-breadboarding-notes.md` — summary of Shape Up breadboarding concepts. - `references/templates/*` — reusable templates for breadboard pack, tables, diagrams, fit checks. - `references/templates/brief-template.md` — brief template used by the brief skill. - `references/examples/letter-search-example.md` — an end-to-end example using UI+code affordances. - `scripts/render_mermaid_from_edges.py` — optional helper: JSON edge list -> Mermaid code (render via `beautiful-mermaid`)
Related Skills
skill-creator
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, update or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
modular-skills-architect
Map and refactor an agent context ecosystem: skills, commands/workflows, hooks, agent files, AGENTS.md templates, and docs. Output system map, module/dependency design, Register updates, and a concrete split/consolidate/rename/delete plan. Use when routing or ownership is messy.
heal-skill
This skill should be used when fixing incorrect SKILL.md files with outdated instructions or APIs.
create-agent-skills
Expert guidance for creating, writing, and refining Claude Code Skills. Use when working with SKILL.md files, authoring new skills, improving existing skills, or understanding skill structure and best practices.
agent-native-audit
Comprehensive agent-native architecture audit with scored principles and multi-slice review. Use for system-wide health checks or periodic audits.
write-judge-prompt
Design LLM-as-Judge evaluators for subjective criteria that code-based checks cannot handle. Use when a failure mode requires interpretation (tone, faithfulness, relevance, completeness). Do NOT use when the failure mode can be checked with code (regex, schema validation, execution tests). Do NOT use when you need to validate or calibrate the judge — use validate-evaluator instead.
validate-evaluator
Calibrate an LLM judge against human labels using data splits, TPR/TNR, and bias correction. Use after writing a judge prompt (write-judge-prompt) when you need to verify alignment before trusting its outputs. Do NOT use for code-based evaluators (those are deterministic; test with standard unit tests).
generate-synthetic-data
Create diverse synthetic test inputs for LLM pipeline evaluation using dimension-based tuple generation. Use when bootstrapping an eval dataset, when real user data is sparse, or when stress-testing specific failure hypotheses. Do NOT use when you already have 100+ representative real traces (use stratified sampling instead), or when the task is collecting production logs.
evaluate-rag
Guides evaluation of RAG pipeline retrieval and generation quality. Use when evaluating a retrieval-augmented generation system, measuring retrieval quality, assessing generation faithfulness or relevance, generating synthetic QA pairs for retrieval testing, or optimizing chunking strategies.
eval-audit
Audit an LLM eval pipeline and surface problems: missing error analysis, unvalidated judges, vanity metrics, etc. Use when inheriting an eval system, when unsure whether evals are trustworthy, or as a starting point when no eval infrastructure exists. Do NOT use when the goal is to build a new evaluator from scratch (use error-analysis, write-judge-prompt, or validate-evaluator instead).
error-analysis
Help the user systematically identify and categorize failure modes in an LLM pipeline by reading traces. Use when starting a new eval project, after significant pipeline changes (new features, model switches, prompt rewrites), when production metrics drop, or after incidents.
build-review-interface
Build a custom browser-based annotation interface tailored to your data for reviewing LLM traces and collecting structured feedback. Use when you need to build an annotation tool, review traces, or collect human labels.