miro-code-spec
Use when the user wants to extract a Miro board's specs (documents, diagrams, prototypes, tables, frames, images) to local `.miro/specs/` files for AI-assisted planning and implementation — accepts a board URL or single-item URL.
What this skill does
# Extract Miro Specs
Extract specification content from a Miro board or item and save to `.miro/specs/` so it can be referenced during planning and implementation without repeated API calls.
The user provides one URL: a board URL (extract all spec items) or an item URL with a `moveToWidget` / `focusWidget` parameter (extract that single item). Miro MCP must be available.
## Workflow
### 1. Identify the URL from the user's request
- If the user provided a Miro URL, use it.
- If not, ask the user for one.
### 2. Determine URL Scope
Decide whether the user gave a **board URL** (extract every spec item on the
board) or a **single-item URL** — i.e. a board URL with a `moveToWidget` or
`focusWidget` query parameter naming one item. Pass the URL through to Miro
MCP as-is — MCP handles the URL.
### 3. Check/Prepare Output Directory
- Check if `.miro/specs/` exists and has content.
- If it has content, ask the user:
- "The `.miro/specs/` directory already contains files. What should I do?"
- Options:
- "Clean and extract fresh" — remove existing content
- "Add to existing" — keep existing files
- "Cancel" — abort operation
- Create the directory structure if needed:
```
.miro/specs/
├── documents/ # Markdown documents
├── diagrams/ # Diagram descriptions
├── prototypes/ # Containers (Markdown) and screens (HTML)
├── tables/ # Table JSON data
├── frames/ # Frame summaries
├── other/ # Unknown types (slides, etc.)
└── images/ # Extracted images
```
### 4. Discover Items to Extract
**For Board URLs:**
- Use the Miro MCP board-overview tool with the board URL.
- Each returned item includes its type, URL (with `moveToWidget` parameter), and title.
- Collect all items with their types, URLs, and titles for extraction.
**For Item URLs:**
- Create a single-item URL list.
### 5. Create Tasks for Extraction (MANDATORY)
🚨 **THIS STEP IS MANDATORY — DO NOT SKIP**
Create an internal checklist item for EVERY item discovered so nothing is missed.
**Task structure:**
- **Subject:** "Extract [type]: [title]" (use title if available from the board-overview tool, otherwise use id)
- **Description:** Include item type, id, URL, and target file path
- **activeForm:** "Extracting [type]: [title]" (use title if available, otherwise use id)
**Example with title:**
```
Subject: "Extract document: Product Requirements"
Description: "Extract document item 3458764612345 from board. Save to .miro/specs/documents/3458764612345.md"
activeForm: "Extracting document: Product Requirements"
```
**Example without title:**
```
Subject: "Extract diagram: 3458764612347"
Description: "Extract diagram item 3458764612347 from board. Save to .miro/specs/diagrams/3458764612347.md"
activeForm: "Extracting diagram: 3458764612347"
```
**⚠️ IMPORTANT: Task Count by Type**
Create tasks according to this exact breakdown:
- Each document → **1 task**
- Each diagram → **1 task**
- Each prototype container → **1 task**
- Each prototype screen → **3 tasks** (HTML + Images + URLs)
1. "Get and save HTML: [title]"
2. "Extract images: [title]"
3. "Update image URLs: [title]"
- Each frame → **1 task**
- Each table → **1 task**
- Each other item → **1 task**
- Final step → **1 task** "Finalize metadata index"
**Critical:** Prototype screens are NOT 1 task, they are 3 tasks. If you create only 1 task per screen, images will be missed.
**Naming Convention:**
- Use titles from the board-overview tool for readability
- Use item IDs in file paths for uniqueness and filesystem safety
**This task creation step ensures:**
✓ All items are tracked
✓ Nothing gets skipped
✓ Progress is visible
✓ Extraction workflow is structured
### 6. Initialize Metadata Index
Create `.miro/specs/index.json` with initial structure:
```json
{
"board_url": "original board URL",
"extracted_at": "ISO timestamp",
"items": [],
"images": [],
"summary": {
"total_items": 0,
"by_type": {},
"total_images": 0
}
}
```
This file will be updated progressively as each item is extracted.
### 7. Extract Content from Each Item
**CRITICAL: You MUST write all content received from MCP tools to the file system immediately. Do not skip the file-writing step.**
**Workflow for each item (with task tracking and progressive index updates):**
**For most items (documents, diagrams, containers, frames, tables, other):**
1. Update your internal checklist to mark the item's entry as `in_progress`
2. Call the appropriate MCP tool to get content
3. **IMMEDIATELY** write the content to disk
4. Read current `index.json`, add this item to the items array, then write the updated `index.json`
5. Update your internal checklist to mark the item's entry as `completed`
**For prototype screens (MANDATORY subagent workflow):**
- Launch a subagent for each screen to avoid context bloat
- The subagent performs all 3 steps: Get HTML → Extract images → Update URLs
- Large HTML content stays in subagent context, never enters main context
**Document items:**
- Call the appropriate Miro MCP item-retrieval tool with the item URL
- **MUST write** content to `.miro/specs/documents/<board item ID>.md`
- Extract title from content if available
- Update `index.json` with this item
**Diagram items:**
- Call the appropriate Miro MCP item-retrieval tool with the item URL
- **MUST write** content to `.miro/specs/diagrams/<board item ID>.md`
- Update `index.json` with this item
**Prototype container items:**
- Call the appropriate Miro MCP item-retrieval tool with the item URL
- **MUST write** to `.miro/specs/prototypes/<board item ID>-container.md`
- Update `index.json` with this item
**Prototype screen items (MANDATORY 3-task workflow via subagent):**
⚠️ **EACH PROTOTYPE SCREEN REQUIRES A SUBAGENT WITH 3 SEPARATE TASKS**
**Why subagent:** the Miro MCP context tool returns large HTML for prototype screens, which bloats the main agent's context. A subagent keeps this contained — the large HTML never enters the main conversation.
For each prototype screen, launch a **single subagent** (with `subagent_type: "general-purpose"`) that performs all 3 steps sequentially. Pass the subagent all necessary context:
**Subagent prompt template:**
```
Extract prototype screen and its images from Miro board.
Context:
- Miro board URL targeting the prototype screen: [url]
Execute these 3 tasks in order:
Task 1: Get and save HTML
- Call the appropriate Miro MCP item-retrieval tool with the item URL
- Save the returned raw HTML to .miro/specs/prototypes/<board item ID>-screen.html
- Read index.json, add this item to items array, Write updated index.json
Task 2: Extract images
- Read the saved HTML file
- Parse HTML for ALL image URLs in `src` attributes
- For EACH image URL found:
1. Extract resource ID from URL path
2. Call the appropriate Miro MCP image tool to obtain a download URL for the image
3. Take the download URL from response
4. Download: `curl -sL -o .miro/specs/images/<image resource ID>.png "[download_url]"`
5. Read index.json, add image entry to images array, Write updated index.json:
{"id": "<image resource ID>", "path": "images/<image resource ID>.png", "referenced_by": ["prototypes/<board item ID>-screen.html"]}
- If any download fails: log warning, continue with others
Task 3: Update image URLs in HTML
- Read the HTML file from .miro/specs/prototypes/<board item ID>-screen.html
- Replace ALL original image URLs with relative paths: src="../images/<image resource ID>.png"
- Save the updated HTML
- Verify all image src attributes now point to ../images/
Report back: number of images found, downloaded, and any failures.
```
**Main agent workflow for each screen:**
1. Update your internal checklist to mark "Get and save HTML: [title]" as `in_progress`
2. Launch subagent with the prompt above
3. When subagent completes, mark all 3 tasks for this screen as `completed`
4. Move to next screen
**⚠️ CRITICAL REQUIREMENTS FOR PROTOTYPE SCRERelated in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.