Install
openclaw skills install @monikazapisekstudio/figjam-storymap-llmUse when you need to parse or audit a FigJam User Story Map (Jeff Patton methodology) into LLM-readable Markdown or JSON — after a Story Mapping workshop, before publishing a Story Map template, or when feeding a Story Map to a coding agent (Cursor, Claude Code, Copilot).
openclaw skills install @monikazapisekstudio/figjam-storymap-llmTurn a FigJam Story Map into LLM-readable Markdown / JSON without manual transcription, OCR hallucinations, or loss of spatial semantics. Audits and parses FigJam boards built with Jeff Patton's User Story Mapping methodology.
Eliminate the manual transcription step after a Story Mapping workshop. Read the FigJam board via Figma REST API (deterministic, no OCR) and render a structured backlog that preserves Activity → Task → User Story hierarchy, release slicing (V1/V2/V3), acceptance criteria, owners, and connector relationships.
Built and validated on the real Story Map of a paid design-system product.
file_key from the FigJam URL (figma.com/board/{file_key}/...)FIGMA_TOKEN (env var or CLI arg)story-map.md — structured backlog: Release → Activity → Task → User Story (with AC + Owner)story-map.json — structured data you can convert into a Notion DB, Linear/Jira CSV import, or feed to PM tooling via MCPRun the Verification Prompt from references/system-prompt.md against the screenshot or JSON. The agent verifies:
[ACT_*] in Activities section and [TASK_*] in Tasks section[03_SECTION_Release_1], [04_SECTION_Release_2], [05_SECTION_Release_3][STORY] sticky starts with [STORY] [V*][P*], no @Owner) — Big Upfront Design is an anti-pattern[STORY_MAP] root SECTION[00_SECTION_AI_Readme] exists with legend, connector rules, expected outputOutput: audit-report.md with PASS/FAIL per criterion and concrete node IDs to fix.
python scripts/figjam_parser.py --file-key {FILE_KEY} --token $FIGMA_TOKEN > story-map.md
python scripts/figjam_parser.py --file-key {FILE_KEY} --token $FIGMA_TOKEN --format json > story-map.json
The parser:
/v1/files/{file_key})SECTION, STICKY, SHAPE_WITH_TEXT, CONNECTOR[STORY] to a [TASK] algorithmically by X axis:
x + width / 2)connectorStart.endpointNodeId → connectorEnd.endpointNodeId)Check story-map.md:
[STORY] has a mapped [TASK] (or is flagged UNASSIGNED)[P*], no @Owner)A --[label]--> BThe parser produces Markdown + JSON. From there you can:
User Stories [DB] with fields Release, Priority, Owner, AC, Step (relation) — conversion is manual or via Notion MCPstory-map.json to the tool's CSV import format (converter not bundled) — or push via MCP[STORY_MAP] ← root SECTION (wrapper)
├── [00_SECTION_AI_Readme] ← embedded system prompt + legend
├── [USER_SEGMENT_or_PERSONA] ← persona + Name + Description
├── [01_SECTION_BACKBONE_Activities] ← [ACT_01] Activity, [ACT_02] Activity
├── [02_SECTION_BACKBONE_User_Tasks] ← [TASK_01] Task, [TASK_02] Task, ...
├── [03_SECTION_Release_1] Core Value Proof ← V1 (full taxonomy)
├── [04_SECTION_Release_2] Business Goal ... ← V2 (clean)
└── [05_SECTION_Release_3] Business Goal ... ← V3 (clean)
[STORY] [V1] [P1] User Story sentence @DEV
Acceptance Criteria:
- Acceptance criterion 1
- Acceptance criterion 2
| Tag | Where | Meaning |
|---|---|---|
[STORY] | Release section | User Story (release slice) |
[V1] / [V2] / [V3] | In story sticky | Release identifier |
[P1] / [P2] / [P3] | V1 only | Priority (Lean UX: skip in V2/V3) |
@UX / @DEV / @PM / @QA | V1 only | Owner role (Lean UX: skip in V2/V3) |
[ACT_*] | Backbone L1 | User Activity |
[TASK_*] | Backbone L2 | User Task (Patton term — not "Step") |
Acceptance Criteria: | Inside story sticky | Acceptance criteria inline |
FigJam sections cannot form a 2D grid (Section × Section). So:
[TASK_*] backbone cardscenter_x — you can drag stories around freely in the workshop without editing IDs; the parser tracks the column automatically[STORY] has a [V1] / [V2] / [V3] prefix[P*], no @Owner)[ACT_*] in [01_SECTION_BACKBONE_Activities], [TASK_*] in [02_SECTION_BACKBONE_User_Tasks][STORY_MAP] root SECTION (no unsectioned_nodes)[STORY], below the story sentence[00_SECTION_AI_Readme] exists and contains the legend + connector rules + expected outputCopy as PNG clipping section labels)When auditing a board or coaching a team during a Story Mapping workshop, the agent acts as a Structure Guardian — actively enforcing Patton + Cohn rules instead of passively reading the map. Run these checks before declaring the map ready for parsing.
[ACT_*] / [TASK_*] written in build-first voice as anti-pattern.[TASK_*] carries at least one [STORY] in some release. Empty tasks are either stale experiments or missing discovery work. Flag and ask the team to resolve.Each [STORY] in V1 should pass a quick INVEST sniff test:
[REQUIRES] connector)SP: missing in V1, flag)references/llm-ready-figjam-guidelines.md §13).[P*] or @Owner in V2 / V3. If found, this is Big Upfront Design — Lean UX anti-pattern. Flag and recommend removing.[STORY_X_V2] --[REQUIRES]--> [STORY_Y_V1]) are valid and expected; connectors inside the same release that create cycles suggest missed dependencies or duplicate stories.When the guardian flags an issue, it does not silently fix — it reports the issue with node IDs / sticky names and proposes the smallest concrete fix:
⚠
[STORY] [V1] [P1] Build login API @DEV— build-first voice (Patton anti-pattern). Suggested rewrite:[STORY] [V1] [P1] User signs in with Google @DEV.
[TASK_01_01]). Editing dozens of cards when reorganizing = waste. Parser maps by X — don't write IDs on stories.@Owner in V2 / V3. Assigning owners to functions that may never ship = noise. V1 only.[TASK_*] numbering.startNodeId / endNodeId. Use native Connectors.[STORY_MAP] root. Stickies on the bare canvas land in unsectioned_nodes and the parser ignores them.[SECTION: RELEASE 1] vs [03_SECTION_Release_1] — the second gives deterministic prefixes for parsing. (Localized names like [SECCIÓN: VERSIÓN 1] or [SEKCJA: WERSJA 1] are the most common anti-pattern — they break prefix matching and force the agent to guess by Y position.)references/llm-ready-figjam-guidelines.md — condensed guidelines for building LLM-ready FigJam boards, with industry source linksreferences/system-prompt.md — System Prompt for an AI agent (audit mode + synthesis)references/figjam-template-spec.md — canonical FigJam template spec (colors, typography, sticky syntax, connectors, pre-publish checklist)references/figjam-executive-summary.md — human-facing canvas cover page (Executive Summary + ClawHub/GitHub links + Recommended Reading)scripts/figjam_parser.py — Python parser (Figma REST API → Markdown / JSON)[PRODUCT NAME], fill the backbone, run the parser.Full source list in references/llm-ready-figjam-guidelines.md.