krypticmouse/dsrs/breadboarding
Claude Code and agent skill by krypticmouse/dsrs
- community
Checking that the SKILL.md file is still in the repository.
Transform a workflow description into affordance tables showing UI and Code affordances with their wiring. Use to map existing systems or design new ones from shaped parts.
Install
npx vskill@latest install krypticmouse/dsrs/breadboardingSKILL.md
Breadboarding
Breadboarding transforms a workflow description into a complete map of affordances and their relationships. The output is always a set of tables showing numbered UI and Code affordances with their Wires Out and Returns To relationships. The tables are the truth. Mermaid diagrams are optional visualizations for humans.
Use Cases
Breadboarding serves two functions:
1. Mapping an Existing System
You don't understand how an existing system works in its concrete details. You have a workflow you're trying to understand — explaining how something happens or why something doesn't happen.
Input:
- Code repo(s) to analyze
- Workflow description (always from the perspective of an operator trying to make an effect happen — through UI or as a caller)
Output:
- UI Affordances table
- Code Affordances table
- (Optional) Mermaid visualization
Note: If the workflow spans multiple applications (frontend + backend), create ONE breadboard that tells the full story. Label places to show which system they belong to.
2. Designing from Shaped Parts
You have a new system sketched as an assembly of parts (mechanisms) per shaping. You need to detail out the concrete mechanism and show how those parts interact as a system.
Input:
- Parts list (mechanisms from shaping)
- The R (requirement/outcome) the parts are meant to achieve
- Existing system (optional) — if the new parts must interoperate with existing code
Output:
- UI Affordances table
- Code Affordances table
- (Optional) Mermaid visualization
Mixtures
Often you have both: an existing system that must remain as-is, plus new pieces or changes defined in a shape. In this case, breadboard both together — the existing affordances and the new ones — showing how they connect.
Core Concepts
Places
A Place is a bounded context of interaction. While you're in a Place:
- You have a specific set of affordances available to you
- You cannot interact with affordances outside that boundary
- You must take an action to leave
Place is perceptual, not technical. It's not about URLs or components — it's about what the user experiences as their current context. A Place is "where you are" in terms of what you can do right now.
The Blocking Test
The simplest test for whether something is a different Place: Can you interact with what's behind?
| Answer | Meaning | |
|---|---|---|
| No | You're in a different Place | |
| Yes | Same Place, with local state changes |
Examples
| UI Element | Blocking? | Place? | Why | |
|---|---|---|---|---|
| Modal | Yes | Yes | Can't interact with page behind | |
| Confirmation popover | Yes | Yes | Must respond before returning (limit case of modal) | |
| Edit mode (whole screen transforms) | Yes | Yes | All affordances changed | |
| Checkbox reveals extra fields | No | No | Surroundings unchanged | |
| Dropdown menu | No | No | Can click away, non-blocking | |
| Tooltip | No | No | Informational, non-blocking |
Local State vs Place Navigation
When a control changes state, ask: did everything change, or just a subset while the surroundings stayed the same?
| Type | What happens | How to model | |
|---|---|---|---|
| Local state | Subset of UI changes, surroundings unchanged | Same Place, conditional N → dependent Us | |
| Place navigation | Entire screen transforms, or blocking overlay | Different Places |
Mode-Based Places
When a mode (like "edit mode") transforms the entire screen — different buttons, different affordances everywhere — model as separate Places:
The state flag (e.g., editMode$) that switches between them is a navigation mechanism, not a data store. Don't include it as an S in either Place.
Three Questions for Any Control
For any UI affordance, ask:
- Where did I come from to see this?
- Where am I now?
- Where do I go if I act on it?
If the answer to #3 is "everything changes" or "I can't interact with what's behind until I respond," that's navigation to a different Place.
Labeling Conventions
| Pattern | Use | |
|---|---|---|
PLACE: Page Name | Standard page/route | |
PLACE: Page Name (Mode) | Mode-based variant of a page | |
PLACE: Modal Name | Modal dialog | |
PLACE: Backend | API/database boundary |
When spanning multiple systems, label with the system: PLACE: Checkout Page (frontend), PLACE: Payment API (backend).
Place IDs
Places are first-class elements in the data model. Each Place gets an ID:
| # | Place | Description | |
|---|---|---|---|
| P1 | CMS Page (Read Mode) | View-only state | |
| P2 | CMS Page (Edit Mode) | Editing state with page-level controls | |
| P2.1 | widget-grid (letters) | Subplace: letter editing widget within P2 | |
| P3 | Letter Form Modal | Form for adding/editing letters | |
| P4 | Backend | API resolvers and database |
Place IDs enable:
- Explicit navigation wiring — wire
→ P2instead of to an affordance inside - Containment tracking — each affordance declares which Place it belongs to
- Consistent Mermaid subgraphs — subgraph ID matches Place ID
Place References
When a nested place has lots of internal affordances and would clutter the parent, you can detach it:
- Put a reference node in the parent place using underscore prefix:
_letter-browser - Define the full place separately with all its internals
- Wire from the reference to the place:
_letter-browser --> letter-browser
The reference is a UI affordance — it represents "this widget/component renders here" in the parent context.
In affordance tables, list the reference as a UI affordance:
| # | Affordance | Control | Wires Out | |
|---|---|---|---|---|
| U1 | Edit button | click | → N1 | |
| _letter-browser | Widget reference | — | → P3 |
Style place references with a dashed border to distinguish them:
Modes as Places
When a component has distinct modes (read vs edit, viewing vs editing, collapsed vs expanded), model them as separate places — they're different perceptual states for the user.
If one mode includes everything from another plus more, show this with a place reference inside the extended place:
The reference shows composition: "everything in P3 appears here, plus these additions."
In affordance tables for P4, the reference shows inheritance:
| # | Affordance | Control | Wires Out | Notes | |
|---|---|---|---|---|---|
| _letter-browser (Read) | Inherits all of P3 | — | → P3 | ||
| U3 | Add button | click | → N3 | NEW | |
| U4 | Edit button | click | → N4 | NEW |
Subplaces
A subplace is a defined subset of a Place — a contained area that groups related affordances. Use subplaces when:
- A Place contains multiple distinct widgets or sections
- You're detailing one part of a larger Place
- You want to show what's in scope vs out of scope
Notation: Use hierarchical IDs — P2.1, P2.2, etc. for subplaces of P2.
In affordance tables, use the subplace ID to show containment:
In Mermaid: Nest the subplace subgraph inside the parent. Use the same background color (no distinct fill) — the subplace is part of the parent, not a separate Place:
Placeholder for out-of-scope content: When detailing one subplace, add a placeholder sibling to show there's more on the page:
This tells readers: "we're zooming in on P2.1, but P2 contains more that we're not detailing."
Containment vs Wiring
These are two different relationships in the data model:
| Relationship | Meaning | Where Captured | |
|---|---|---|---|
| Containment | Affordance belongs to / lives in a Place | Place column (set membership) | |
| Wiring | Affordance triggers / calls something | Wires Out column (control flow) |
Containment is set membership: U1 ∈ P1 means U1 is a member of Place P1. Every affordance belongs to exactly one Place.
Wiring is control flow: U1 → N1 means U1 triggers N1. An affordance can wire to anything — other affordances or Places.
The Place column answers: "Where does this affordance live?" The Wires Out column answers: "What does this affordance trigger?"
Navigation Wiring
When an affordance causes navigation (user "goes" somewhere), wire to the Place itself, not to an affordance inside:
This makes navigation explicit in the tables. The Place is the destination; specific affordances inside become available once you arrive.
In Mermaid, this becomes:
The subgraph ID matches the Place ID, so the wire connects to the Place boundary.
Affordances
Things you can act upon:
- UI affordances (U): inputs, buttons, displayed elements, scroll regions
- Code affordances (N): methods, subscriptions, data stores, framework mechanisms
Wiring
How affordances connect to each other:
Wires Out — What an affordance triggers or calls (control flow):
- Call wires: one affordance calls another
- Write wires: code writes to a data store
- Navigation wires: routing to a different place
Returns To — Where an affordance's output flows (data flow):
- Return wires: function returns value to its caller
- Read wires: data store is read by another affordance
This separation makes data flow explicit. Wires Out show control flow (what triggers what). Returns To show data flow (where output goes).
The Output: Affordance Tables
The tables are the truth. Every breadboard produces these:
Places Table
| # | Place | Description | |
|---|---|---|---|
| P1 | Search Page | Main search interface | |
| P2 | Detail Page | Individual result view |
UI Affordances Table
| # | Place | Component | Affordance | Control | Wires Out | Returns To | |
|---|---|---|---|---|---|---|---|
| U1 | P1 | search-detail | search input | type | → N1 | — | |
| U2 | P1 | search-detail | loading spinner | render | — | — | |
| U3 | P1 | search-detail | results list | render | — | — | |
| U4 | P1 | search-detail | result row | click | → P2 | — |
Code Affordances Table
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 86 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingdocs/specs/modules/skills/breadboarding/SKILL.md
Popularity
- Repository stars
- 265
- Repository forks
- 25
- 7-day trend score
- 28
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 15 Apr 2026, 6 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/krypticmouse/dsrs/breadboarding)