SuperAPI AI Directory

xmind

General & other

View repository

Updated 10-15 16:51

About this skill

XMind Mind Map Skill

Create, read, and analyze .xmind mind map files. Supports natural Chinese and English interaction.

Natural language routing

This skill supports both Chinese and English. When the user makes a request, identify the intent and route to the correct script and action. Respond in the same language the user uses.

Creation intents → create_xmind.mjs

User says (Chinese) User says (English) Route to
"Help me make a mind map" / "Create a mind map" / "Draw a mind map" / "Generate xmind" / "Make a mind map" "create a mind map" / "make an xmind" / "build a brainstorm" create_xmind.mjs — standard mind map
"Make a project plan" / "Gantt chart" / "Schedule" / "Timeline" / "Project schedule" / "Milestone" "project plan" / "Gantt chart" / "timeline" / "schedule" / "milestones" create_xmind.mjs — use planned tasks with durationDays + dependencies
"Draw a flowchart" / "Logic diagram" / "Algorithm diagram" / "Draw a program flow" "flowchart" / "logic diagram" / "algorithm diagram" create_xmind.mjs — use freePositioning: true + detachedTopics + straight relationships
"Organizational chart" / "Organization structure" / "Personnel structure" "org chart" / "organization structure" create_xmind.mjs — use org.xmind.ui.org-chart.down layout
"Fishbone diagram" / "Causal analysis" / "Root cause analysis" "fishbone" / "cause and effect" / "root cause" create_xmind.mjs — use org.xmind.ui.fishbone.leftHeaded layout
"To-do list" / "Task list" / "todo" "todo list" / "checklist" / "task list" create_xmind.mjs — use taskStatus: "todo"/"done"
"Organize this PDF/document/content into a mind map" / "Summarize into a mind map" "summarize as mind map" / "turn this into a mind map" Read the source content first, then create_xmind.mjs

Read/analysis intents → read_xmind.mjs

User says (Chinese) User says (English) Action Extra params
"Open this xmind" / "Take a look at this mind map" / "Analyze this mind map" / "Read this file" "open this xmind" / "read this mind map" / "analyze this file" read path
"Find the xmind file" / "What mind maps are there" / "List all mind maps" "find xmind files" / "list mind maps" / "what xmind files are there" list directory
"Search mind maps" / "Find mind maps containing xxx" / "Which xmind has xxx" "search mind maps for..." / "find the xmind with..." search_files pattern, directory
"Compare these mind maps" / "Open these files at the same time" / "Compare these two mind maps" "compare these maps" / "read multiple files" read_multiple paths
"Find the xxx node" / "Locate xxx" / "Where is xxx" "find the node about..." / "locate..." / "where is..." extract_node path, searchQuery
"Find all to-dos" / "Which tasks are not completed" / "What else is not done" / "See which ones are done" "find all todos" / "what tasks are incomplete" / "show done tasks" search_nodes taskStatus: "todo" or "done"
"Search note content" / "Find xxx in notes" / "Which node's notes mention xxx" "search in notes for..." / "find notes mentioning..." search_nodes searchIn: ["notes"], query
"Search tags" / "Find ones with the xxx tag" "find nodes with label..." / "search labels" search_nodes searchIn: ["labels"], query
"Search xxx" / "Find xxx in the mind map" / "Full-text search" "search for..." / "find in map..." search_nodes query (searches all fields)

Routing tips

  • When the user provides a .xmind file path and asks to "look at" / "check" / "看看" / "打开" it, use read action
  • When the user says "这个脑图里有什么关于xxx的" (what does this map say about xxx), use search_nodes
  • When the user asks about task progress ("进度怎么样" / "完成了多少"), use search_nodes with searchIn: ["tasks"]
  • When the user mentions multiple files, use read_multiple
  • When the request is vague about location ("找到那个关于后端的节点"), use extract_node for fuzzy matching
  • Always respond in the language the user used — if they speak Chinese, reply in Chinese

How to create an XMind file

  1. Build a JSON object with path and sheets fields (see format below)
  2. Write it to a temp file, then run:
node <skill-dir>/scripts/create_xmind.mjs < /tmp/xmind_input.json

Where <skill-dir> is the directory containing this SKILL.md file.

Updating an existing file (theme/style preservation)

If path points to a file that already exists (e.g. you're adding/editing a branch in a mind map someone already styled), create_xmind.mjs automatically preserves that file's visual theme, layout extensions, and embedded resources (like Thumbnails/thumbnail.png) — matched per-sheet by title. You do NOT need to read the old theme, back up the file, or manually merge anything yourself; just include the unchanged sheets/branches in your input JSON (with the same sheet titles) alongside the new/edited content, and the script carries the styling forward.

This only applies to the modern zen format. If you rewrite a sheet under a different title than it had before, it's treated as a brand-new sheet and gets a fresh default theme — keep sheet titles stable across updates when you want styling preserved.

Format compatibility

Both scripts handle two XMind format families:

Format Files inside ZIP XMind version Default
zen (modern) content.json, metadata.json, manifest.json XMind Zen, XMind 2020+ Yes
legacy (XML) content.xml, meta.xml, META-INF/manifest.xml XMind 3–8 (2008–2019) No

Reading: Auto-detects format — no configuration needed. Checks for content.json first (zen), then content.xml (legacy). All 8 actions work identically on both formats.

Creating: Add "format" to the input JSON. Accepts many version aliases:

{
  "path": "/tmp/old_format.xmind",
  "format": "xmind8",
  "sheets": [...]
}
Alias examples Resolved format
"zen", "json", "latest", "modern", "new" Modern (JSON)
"xmind2024", "2024", "xmind2020", "2020" Modern (JSON)
"legacy", "xml", "old" Legacy (XML)
"xmind8", "xmind7", "xmind6", "8", "7" Legacy (XML)
"2013", "2012", "2008" Legacy (XML)
"pro8", "pro7" Legacy (XML)

Heuristic for numeric values: version ≤ 9 → legacy (XMind 3–8), version ≥ 10 → zen (XMind 10+), year ≤ 2019 → legacy, year ≥ 2020 → zen.

Checking format: Use format_info action to inspect an existing file:

echo '{"action": "format_info", "path": "/path/to/file.xmind"}' | node <skill-dir>/scripts/read_xmind.mjs

When the user says "兼容旧版" / "XMind 8格式" / "旧版本格式" / "old format" / "XMind 8 compatible" / "兼容其他编辑器", use "format": "legacy". Otherwise use the default zen format.

JSON Input Format

{
  "path": "/Users/user/Desktop/my_mindmap.xmind",
  "sheets": [
    {
      "title": "Sheet 1",
      "rootTopic": {
        "title": "Central Topic",
        "children": [
          {
            "title": "Branch 1",
            "notes": "Plain text note",
            "children": [
              { "title": "Sub-topic A" },
              { "title": "Sub-topic B" }
            ]
          }
        ]
      },
      "relationships": [
        { "sourceTitle": "Sub-topic A", "targetTitle": "Sub-topic B", "title": "related" }
      ]
    }
  ]
}

Topic Properties

Each topic object supports:

Field Type Description
title string (required) Topic title
children array of topics Child topics
notes string or {plain?, html?} Notes. HTML supports: <strong>, <u>, <ul>, <ol>, <li>, <br>. NOT <code>.
href string External URL link
attachment string Absolute path to a file to attach (embedded in the .xmind). Mutually exclusive with href.
linkToTopic string Title of another topic to link to (internal xmind:#id link, works across sheets)
labels string[] Tags/labels
markers string[] Marker IDs: task-done, task-start, priority-1 to priority-9
callouts string[] Callout text bubbles
boundaries {range, title?}[] Visual grouping of children. Range: "(start,end)"
summaryTopics {range, title}[] Summary topics spanning children ranges
structureClass string Layout (see below)
shape string Topic shape (see shapes below)
position {x, y} Absolute position (only for detached topics in free-positioning sheets)

Topic shapes

  • org.xmind.topicShape.roundedRect — rounded rectangle (default)
  • org.xmind.topicShape.diamond — diamond (use for conditions/decisions)
  • org.xmind.topicShape.ellipserect — ellipse (use for start/end)
  • org.xmind.topicShape.rect — rectangle
  • org.xmind.topicShape.underline — underline only
  • org.xmind.topicShape.circle — circle
  • org.xmind.topicShape.parallelogram — parallelogram (use for I/O)

Layout structures

  • org.xmind.ui.map.clockwise — balanced map
  • org.xmind.ui.map.unbalanced — unbalanced map
  • org.xmind.ui.logic.right — logic chart (right)
  • org.xmind.ui.org-chart.down — org chart (down)
  • org.xmind.ui.tree.right — tree (right)
  • org.xmind.ui.fishbone.leftHeaded — fishbone
  • org.xmind.ui.timeline.horizontal — timeline

Task properties

Simple checkbox (no dates needed):

  • taskStatus: "todo" or "done"

Planned tasks (for Gantt/timeline view in XMind):

Field Type Description
progress number 0.0-1.0 Completion progress
priority number 1-9 Priority (1=highest)
startDate ISO 8601 string Start date, e.g. "2026-02-01T00:00:00Z"
dueDate ISO 8601 string Due date
durationDays number Duration in days (preferred for relative planning)
dependencies array {targetTitle, type, lag?} — type: FS, FF, SS, SF

Two approaches for planned tasks:

  1. Relative (preferred): Use durationDays + dependencies. XMind auto-calculates dates.
  2. Absolute: Use startDate + dueDate for fixed dates.

When the user mentions "planning", "schedule", "timeline", "Gantt", "project", "phases", "排期", "甘特图", "项目计划", "时间线", "里程碑", use RELATIVE planned tasks unless specific dates are given.

Sheet properties

Field Type Description
title string (required) Sheet title
rootTopic topic (required) Root topic
relationships array {sourceTitle, targetTitle, title?, shape?} — connects topics by title. shape: "org.xmind.relationshipShape.curved" (default) or "org.xmind.relationshipShape.straight"
detachedTopics array of topics Free-floating topics (require freePositioning: true and position on each topic)
freePositioning boolean Enable free topic positioning (for logic/flow diagrams)

Logic / Flow diagrams

For flowcharts, logic diagrams, or algorithmic diagrams, use free positioning with detached topics and straight relationships:

{
  "path": "/tmp/flowchart.xmind",
  "sheets": [{
    "title": "Algorithm",
    "freePositioning": true,
    "rootTopic": {
      "title": "START",
      "shape": "org.xmind.topicShape.ellipserect",
      "structureClass": "org.xmind.ui.map.clockwise"
    },
    "detachedTopics": [
      {"title": "IS X > 0?", "position": {"x": 0, "y": 130}, "shape": "org.xmind.topicShape.diamond"},
      {"title": "PRINT YES", "position": {"x": 200, "y": 130}},
      {"title": "PRINT NO", "position": {"x": -200, "y": 130}},
      {"title": "END", "position": {"x": 0, "y": 260}, "shape": "org.xmind.topicShape.ellipserect"}
    ],
    "relationships": [
      {"sourceTitle": "START", "targetTitle": "IS X > 0?", "shape": "org.xmind.relationshipShape.straight"},
      {"sourceTitle": "IS X > 0?", "targetTitle": "PRINT YES", "title": "YES", "shape": "org.xmind.relationshipShape.straight"},
      {"sourceTitle": "IS X > 0?", "targetTitle": "PRINT NO", "title": "NO", "shape": "org.xmind.relationshipShape.straight"},
      {"sourceTitle": "PRINT YES", "targetTitle": "END", "shape": "org.xmind.relationshipShape.straight"},
      {"sourceTitle": "PRINT NO", "targetTitle": "END", "shape": "org.xmind.relationshipShape.straight"}
    ]
  }]
}

Conventions: Use ellipse for start/end, diamond for conditions, rectangle (default) for actions, parallelogram for I/O. Use "org.xmind.relationshipShape.straight" for all connectors. Position topics on a grid (y increments of ~130px, x offsets of ~200px for branches).

When the user mentions "flowchart", "algorithm", "logic diagram", "流程图", "逻辑图", "算法图", "程序流程", use this pattern.

Working with large files

When reading a PDF or other large file fails (e.g. "PDF too large"), extract text using CLI tools before building the mind map:

# Preferred: pdftotext (install: apt install poppler-utils)
pdftotext input.pdf /tmp/extracted.txt

# Fallback if pdftotext unavailable:
python3 -c "
import subprocess, pathlib, sys
p = sys.argv[1]
try:
    subprocess.run(['pdftotext', p, '/tmp/extracted.txt'], check=True)
except FileNotFoundError:
    subprocess.run(['pip', 'install', 'pymupdf'], check=True, capture_output=True)
    import importlib; fitz = importlib.import_module('fitz')
    doc = fitz.open(p)
    pathlib.Path('/tmp/extracted.txt').write_text('\n'.join(page.get_text() for page in doc))
" input.pdf

Then read /tmp/extracted.txt to build the mind map.

How to read and analyze XMind files

Pipe a JSON object with an action field to the read script:

echo '{"action": "read", "path": "/path/to/file.xmind"}' | node <skill-dir>/scripts/read_xmind.mjs

Available actions

Action Input fields Description
read path Parse a .xmind file and return full mind map structure as JSON
list directory Recursively scan a directory for .xmind files
search_files pattern, directory Search for .xmind files by name or content
read_multiple paths (array) Read multiple .xmind files at once
extract_node path, searchQuery Fuzzy path search — returns top 5 matches ranked by confidence
extract_node_by_id path, nodeId Extract a specific node by its XMind ID
search_nodes path, query, searchIn?, caseSensitive?, taskStatus? Advanced multi-field search
format_info path Detect XMind format version (zen/legacy) and list internal files

Action details

read — Parse a complete mind map:

echo '{"action": "read", "path": "/path/to/file.xmind"}' | node <skill-dir>/scripts/read_xmind.mjs

Returns an array of sheets, each with a root topic containing the full tree structure including notes, labels, markers, task status, relationships, etc.

list — Find .xmind files in a directory:

echo '{"action": "list", "directory": "/Users/user/Documents"}' | node <skill-dir>/scripts/read_xmind.mjs

search_files — Search by filename or content:

echo '{"action": "search_files", "pattern": "project", "directory": "/Users/user"}' | node <skill-dir>/scripts/read_xmind.mjs

Filename matches are returned first, then content matches.

extract_node — Fuzzy search when you don't know the exact path:

echo '{"action": "extract_node", "path": "/path/to/file.xmind", "searchQuery": "Backend API"}' | node <skill-dir>/scripts/read_xmind.mjs

Returns top 5 matches with confidence scores. Use when exploring complex maps.

extract_node_by_id — Direct ID lookup (fastest):

echo '{"action": "extract_node_by_id", "path": "/path/to/file.xmind", "nodeId": "abc123def456"}' | node <skill-dir>/scripts/read_xmind.mjs

search_nodes — Advanced search with filters:

echo '{"action": "search_nodes", "path": "/path/to/file.xmind", "query": "auth", "searchIn": ["title", "notes"], "taskStatus": "todo"}' | node <skill-dir>/scripts/read_xmind.mjs

searchIn options: title, notes, labels, callouts, tasks. Default: all fields.

When to use each action

  • Browsing/understanding a map: Use read to get the full structure
  • Finding .xmind files: Use list or search_files
  • Navigating to a specific topic: Use extract_node (fuzzy) or extract_node_by_id (exact)
  • Finding content across a map: Use search_nodes with appropriate searchIn filters
  • Filtering tasks: Use search_nodes with taskStatus: "todo" or "done"
  • Comparing maps: Use read_multiple to load several files at once

Important rules

  • NEVER use unzip, zipinfo, or any external ZIP tool on .xmind files. Both scripts handle ZIP internally — create_xmind.mjs writes ZIP with built-in code, read_xmind.mjs reads ZIP with built-in code. Just pipe JSON to the script and it handles everything. There is no need to extract, decompress, or inspect the .xmind file yourself.
  • When editing/adding to an existing .xmind file, always include every sheet with its original title — even sheets you aren't changing — so create_xmind.mjs can match them up and preserve their theme/styling/thumbnail (see "Updating an existing file" above). Only omit or retitle a sheet when you intentionally want it reset to default styling.
  • The output path MUST end with .xmind
  • Always write the file where the user requests (e.g. ~/Downloads, ~/Desktop)
  • IDs are generated automatically
  • Topic references in relationships and dependencies are resolved by title
  • HTML notes: only <strong>, <u>, <ul>, <ol>, <li>, <br> are supported. <code> is NOT supported by XMind.
  • Internal links (linkToTopic) work across sheets
  • Notes should be substantial and detailed — don't just repeat the topic title. Use notes to add explanations, context, definitions, examples, key points, or reasoning. Aim for 2-5 sentences minimum per note. Use HTML notes with <strong>, <ul>/<li>, <br> for well-structured content. Most topics should have notes unless they are self-explanatory leaf nodes.
  • The read script outputs JSON to stdout — pipe or redirect as needed
  • All read actions require the action field in the input JSON