miroapp/miro-ai/miro-code-spec
Claude Code and agent skill by miroapp/miro-ai
- community
Checking that the SKILL.md file is still in the repository.
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.
Install
npx vskill@latest install miroapp/miro-ai/miro-code-specSKILL.md
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
moveToWidgetparameter), 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:
Example without title:
⚠️ 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)
- "Get and save HTML: [title]"
- "Extract images: [title]"
- "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:
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):
- Update your internal checklist to mark the item's entry as
in_progress - Call the appropriate MCP tool to get content
- IMMEDIATELY write the content to disk
- Read current
index.json, add this item to the items array, then write the updatedindex.json - 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.jsonwith 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.jsonwith 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.jsonwith 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:
Main agent workflow for each screen:
- Update your internal checklist to mark "Get and save HTML: [title]" as
in_progress - Launch subagent with the prompt above
- When subagent completes, mark all 3 tasks for this screen as
completed - Move to next screen
⚠️ CRITICAL REQUIREMENTS FOR PROTOTYPE SCREENS:
- ✗ DO NOT call the Miro MCP context tool for screens from the main agent (context bloat)
- ✓ ALWAYS use a subagent for each prototype screen
- ✓ CREATE 3 tasks per prototype screen (for visibility)
- ✓ Subagent completes all 3 tasks: HTML → Images → URLs
- ✓ Use the Miro MCP image tool to obtain a download URL, then curl to download
- ✓ ALL image URLs must be replaced with local paths before moving on
Frame items:
- Call the appropriate Miro MCP item-retrieval tool with the item URL
- MUST write content to
.miro/specs/frames/<board item ID>.md - Update
index.jsonwith this item
Table items:
- Call the appropriate Miro MCP table-retrieval tool for the table item
- MUST write JSON content to
.miro/specs/tables/<board item ID>.json - Include column definitions and all row data in JSON
- Update
index.jsonwith this item
Unknown/Other item types (e.g., slides, or any new types):
- Call the appropriate Miro MCP item-retrieval tool with the item URL
- MUST write content to
.miro/specs/other/<board item ID>.md - Preserve original type name in metadata for reference
- Update
index.jsonwith this item
8. Finalize Metadata Index
Read the current index.json and calculate the summary section:
- Count
total_itemsfrom items array - Count
by_type(group items by type field) - Count
total_imagesfrom images array
Update index.json with the calculated summary:
MUST write the updated index.json.
9. Verify and Display Summary
Verification Checklist (MUST DO):
- [ ] Count files actually written to
.miro/specs/directories - [ ] Verify file count matches number of items processed
- [ ] If mismatch, identify and save any missing items
- [ ] Prototype screens: Verify all image URLs have been replaced with local paths
- [ ] Check that all tasks have been marked as completed
- [ ] Count images in
.miro/specs/images/matchesindex.jsontotal_images
Display to user:
- Total items extracted (by type)
- Total files written to disk
- Total images downloaded and embedded
- Output directory path
- Next steps: "Use these specs for planning and implementation"
If verification fails, DO NOT report success:
- If any prototype screens still have original image URLs in HTML → Images won't work locally
- If task count doesn't match item count → Some items were skipped
- Re-extract missing items before finishing
Common Mistakes to Avoid
🚨 These are the most common reasons extraction fails or is incomplete:
- NOT CREATING TASKS
- ✗ Wrong: Extract all items without creating tasks
- ✓ Correct: Create an internal checklist item for every single item before extraction
- Result: Items get skipped, no visibility into progress
- TREATING PROTOTYPE SCREENS AS 1 TASK
- ✗ Wrong: Create 1 task for a prototype screen
- ✓ Correct: Create 3 tasks (HTML, Images, URLs) and use a subagent
- Result: Images are never extracted
- CALLING THE MCP CONTEXT TOOL FOR SCREENS FROM MAIN AGENT
- ✗ Wrong: Call the Miro MCP context tool for prototype screens directly from the main agent (large HTML bloats context)
- ✓ Correct: Launch a subagent for each screen — HTML stays in subagent context
- Result: Main agent context overflows, extraction fails
- NOT PARSING HTML FOR IMAGES
- ✗ Wrong: Skip parsing HTML, assume no images exist
- ✓ Correct: Search for all image
srcattributes in HTML - Result: Images aren't discovered or downloaded
- NOT UPDATING IMAGE URLS IN HTML
- ✗ Wrong: Download images but leave original URLs in HTML
- ✓ Correct: Replace ALL original URLs with
../images/[id].png - Result: HTML still references remote URLs instead of local files
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/miro-code-spec/SKILL.md
Popularity
- Repository stars
- 121
- Repository forks
- 14
- 7-day trend score
- 24
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 20 Jun 2026, 4 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/miroapp/miro-ai/miro-code-spec)