{"id":"20f9ad11-6aa2-4b9b-9a81-c1a1e897f726","shortId":"egkDne","kind":"skill","title":"excalidraw","tagline":"Use when user requests diagrams, flowcharts, architecture charts, or visualizations. Also use proactively when explaining systems with 3+ components, complex data flows, or relationships that benefit from visual representation. Generates .excalidraw files and exports to PNG/SVG v","description":"# Excalidraw Diagrams\n\n## Overview\n\nGenerate `.excalidraw` JSON files and export to PNG/SVG.\n\n**Two export options:**\n- **Kroki API** (`curl`) — zero install, SVG output only\n- **excalidraw-brute-export-cli** — local Firefox-based, PNG + SVG\n\n**Supported formats:** PNG (local CLI only), SVG (both options). PDF is NOT supported.\n\n## When to Use\n\n**Explicit triggers:** user says \"画图\", \"diagram\", \"visualize\", \"flowchart\", \"draw\", \"架构图\", \"流程图\"\n\n**Proactive triggers:**\n- Explaining a system with 3+ interacting components\n- Describing a multi-step process or decision tree\n- Comparing architectures or approaches side by side\n\n**Skip when:** a simple list or table suffices, or user is in a quick Q&A flow\n\n## Prerequisites\n\n### Option A: Kroki API (recommended — zero install, SVG only)\n\n```bash\n# Just needs curl (pre-installed on macOS/Linux/Windows Git Bash)\ncurl --version\n```\n\nNo additional setup. SVG rendered via `https://kroki.io`.\n\n### Option B: Local CLI (required for PNG)\n\nThe CLI uses **Firefox** (not Chromium). Check and install:\n\n```bash\nnpm install -g excalidraw-brute-export-cli\nnpx playwright install firefox\n```\n\n**macOS patch (one-time, required):**\n```bash\nCLI_MAIN=$(npm root -g)/excalidraw-brute-export-cli/src/main.js\nsed -i '' 's/keyboard.press(\"Control+O\")/keyboard.press(\"Meta+O\")/' \"$CLI_MAIN\"\nsed -i '' 's/keyboard.press(\"Control+Shift+E\")/keyboard.press(\"Meta+Shift+E\")/' \"$CLI_MAIN\"\n```\n\n**Windows/Linux:** No patch needed.\n\n## Workflow\n\n0. **Update check (notify, don't pull)** — first use per conversation. Throttle to once per 24 h via `<this-skill-dir>/.last_update`; never mutate the skill directory without explicit user consent.\n\n   - If `.last_update` exists and is <24 h old, skip this step entirely.\n   - Otherwise, fetch the latest tag from upstream:\n     ```bash\n     git -C <this-skill-dir> ls-remote --tags origin 'v*' 2>/dev/null \\\n       | awk '{print $2}' | sed 's|refs/tags/||' | sort -V | tail -1\n     ```\n   - Compare with this skill's `metadata.version` from the frontmatter. If the upstream tag is strictly newer (semver), tell the user one line and ask:\n     > \"A newer version of this skill is available: vX.Y.Z → vA.B.C. Want me to `git pull`?\"\n\n     If they say yes, run `git -C <this-skill-dir> pull --ff-only`. Refresh `.last_update` either way so the prompt doesn't repeat for 24 hours.\n   - If upstream is the same or older, refresh `.last_update` silently and continue.\n   - On any failure (offline, not a git checkout — e.g. ClawHub-installed copy, read-only path, no permission), swallow the error silently and continue with the user's task. Do not mention the failure.\n1. **Check deps** — use Kroki (curl) for SVG; use local CLI for PNG\n2. **Plan** — identify diagram type, pick a visual pattern, choose color palette\n3. **Generate** — write `.excalidraw` JSON file (section-by-section for large diagrams)\n4. **Export** — run Kroki or CLI command\n5. **Report** — tell user the output file path\n\n## Design Principles\n\n### Default style\n\n- `roughness: 0` — clean, modern look for all technical diagrams (use `1` only when user requests hand-drawn/casual style)\n- `fontFamily: 2` (Helvetica) — professional look; use `1` (Virgil) only for casual/sketch style, `3` (Cascadia) for code snippets\n- `fillStyle: \"solid\"` — default fill\n\n### Font size hierarchy\n\n| Level | Size | Use for |\n|-------|------|---------|\n| Title | 28px | Diagram title |\n| Header | 24px | Section/group headers |\n| Label | 20px | Primary element labels |\n| Description | 16px | Secondary text, descriptions |\n| Note | 14px | Annotations, fine print |\n\n### Color palette\n\nFollow the **60-30-10 rule**: 60% whitespace/neutral, 30% primary accent, 10% highlight.\n\n**Semantic fill colors** (use with `strokeColor` one shade darker):\n\n| Category | Fill | Stroke | Use for |\n|----------|------|--------|---------|\n| Primary / Input | `#dbeafe` | `#1e40af` | Entry points, APIs, user-facing |\n| Success / Data | `#dcfce7` | `#166534` | Data stores, success states |\n| Warning / Decision | `#fef9c3` | `#854d0e` | Decision points, conditions |\n| Error / Critical | `#fee2e2` | `#991b1b` | Errors, alerts, critical paths |\n| External / Storage | `#f3e8ff` | `#6b21a8` | External services, databases, AI/ML |\n| Process / Default | `#e0f2fe` | `#0369a1` | Standard process steps |\n| Trigger / Start | `#fed7aa` | `#c2410c` | Start nodes, triggers, events |\n| Neutral / Container | `#f1f5f9` | `#475569` | Groups, swimlanes, backgrounds |\n\n**Text colors:**\n\n| Level | Color |\n|-------|-------|\n| Title | `#1e293b` |\n| Label | `#334155` |\n| Description | `#64748b` |\n\n**Rule: Do not invent new colors.** Pick from this palette.\n\n### Arrow semantics\n\n| Style | Meaning |\n|-------|---------|\n| Solid (`strokeStyle: null`) | Primary flow, main path |\n| Dashed (`\"dashed\"`) | Response, async, callback |\n| Dotted (`\"dotted\"`) | Optional, reference, weak dependency |\n\n## Excalidraw JSON Structure\n\n### File skeleton\n\n```json\n{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"claude-code\",\n  \"elements\": [],\n  \"appState\": { \"viewBackgroundColor\": \"#ffffff\" }\n}\n```\n\n### Element types\n\n| type      | use for                          |\n|-----------|----------------------------------|\n| rectangle | boxes, components, modules       |\n| ellipse   | start/end nodes, databases       |\n| diamond   | decision points                  |\n| arrow     | directed connections             |\n| line      | undirected connections           |\n| text      | standalone labels                |\n\n### Element sizing\n\nCalculate element width from label text to prevent truncation:\n\n```\nLatin text:  width = max(160, charCount * 9)\nCJK text:   width = max(160, charCount * 18)\nMixed text:  estimate each character individually, sum up\n```\n\nHeight: use `60` for single-line labels, add `24` per additional line.\n\n### Required properties (all elements)\n\n```json\n{\n  \"id\": \"auth_service\",\n  \"type\": \"rectangle\",\n  \"x\": 100, \"y\": 100,\n  \"width\": 160, \"height\": 60,\n  \"angle\": 0,\n  \"strokeColor\": \"#1e40af\",\n  \"backgroundColor\": \"#dbeafe\",\n  \"fillStyle\": \"solid\",\n  \"strokeWidth\": 2,\n  \"roughness\": 0,\n  \"opacity\": 100,\n  \"seed\": 100001,\n  \"boundElements\": [\n    { \"id\": \"arrow_to_db\", \"type\": \"arrow\" },\n    { \"id\": \"label_auth\", \"type\": \"text\" }\n  ]\n}\n```\n\nUse **descriptive string IDs** (e.g., `\"api_gateway\"`, `\"arrow_gw_to_auth\"`) instead of random strings.\n\nGive each element a unique `seed` (integer). Namespace by section: 100xxx, 200xxx, 300xxx.\n\n### JSON field rules\n\n- `boundElements`: use `null` when empty, never `[]`\n- `updated`: always use `1`, never timestamps\n- Do NOT include: `frameId`, `index`, `versionNonce`, `rawText`\n- `points` in arrows: always start at `[0, 0]`\n- `seed`: must be a positive integer, unique per element\n\n### Text inside shapes (contained text)\n\nWhen text belongs inside a shape, bind them bidirectionally:\n\n```json\n{\n  \"id\": \"label_auth\",\n  \"type\": \"text\",\n  \"text\": \"Auth Service\",\n  \"fontSize\": 20,\n  \"fontFamily\": 2,\n  \"textAlign\": \"center\",\n  \"verticalAlign\": \"middle\",\n  \"strokeColor\": \"#1e293b\",\n  \"containerId\": \"auth_service\"\n}\n```\n\n**CRITICAL: Text `strokeColor` is the text color.** Always set it explicitly to a dark color from the text color palette. Never omit it — omitting `strokeColor` on text can cause invisible text that blends with the shape background.\n\nThe parent shape must list the text in its `boundElements`:\n```json\n\"boundElements\": [{ \"id\": \"label_auth\", \"type\": \"text\" }]\n```\n\n### Arrow binding (bidirectional)\n\nArrows must bind to shapes, and shapes must reference bound arrows:\n\n```json\n{\n  \"id\": \"arrow_gw_to_auth\",\n  \"type\": \"arrow\",\n  \"points\": [[0, 0], [200, 0]],\n  \"startBinding\": { \"elementId\": \"api_gateway\", \"gap\": 5, \"focus\": 0 },\n  \"endBinding\": { \"elementId\": \"auth_service\", \"gap\": 5, \"focus\": 0 }\n}\n```\n\nBoth `api_gateway` and `auth_service` must include in their `boundElements`:\n```json\n\"boundElements\": [{ \"id\": \"arrow_gw_to_auth\", \"type\": \"arrow\" }]\n```\n\n### Arrow routing\n\n**L-shaped (elbow) arrows** — orthogonal routing with 3+ points:\n\n```json\n\"points\": [[0, 0], [100, 0], [100, 150]]\n```\n\n**Elbowed arrows** — automatic right-angle routing:\n\n```json\n{\n  \"type\": \"arrow\",\n  \"points\": [[0, 0], [0, -50], [200, -50], [200, 0]],\n  \"elbowed\": true\n}\n```\n\n**Curved arrows** — smooth routing with waypoints:\n\n```json\n{\n  \"type\": \"arrow\",\n  \"points\": [[0, 0], [50, -40], [200, 0]],\n  \"roundness\": { \"type\": 2 }\n}\n```\n\n### Grouping\n\nRelated elements share `groupIds`. Nested groups list IDs innermost-first:\n\n```json\n\"groupIds\": [\"inner_group\", \"outer_group\"]\n```\n\n## Diagram Patterns\n\nChoose the right visual pattern for each diagram type.\n\n### Spacing Reference\n\n| Scenario | Spacing |\n|----------|---------|\n| Labeled arrow gap (between shapes) | 150–200px |\n| Unlabeled arrow gap | 100–120px |\n| Column spacing (labeled arrows) | 400px (220px box + 180px gap) |\n| Column spacing (unlabeled arrows) | 340px (220px box + 120px gap) |\n| Row spacing | 280–350px (150px box + 130–200px gap) |\n| Zone/container padding | 50–60px around children |\n| Zone/container opacity | 25–40 |\n| Minimum gap between any elements | 40px |\n\n### Flowchart (LR or TB)\n\n- Ellipse for start/end, diamond for decisions, rectangle for process\n- 200px horizontal spacing, 150px vertical spacing\n- Decision branches: \"Yes\" goes forward, \"No\" goes down\n- 3–10 steps (max 15)\n\n### Architecture / System Diagram\n\n- Column spacing per table above; use labeled arrow spacing when connections have labels\n- Group related services in dashed `Neutral` containers (opacity: 30, padding: 50px)\n- Gateway/entry at left or top, databases at right or bottom\n- 3–8 entities (max 12)\n\n### Sequence Diagram\n\n- 200px between participants (rectangles at top)\n- Vertical lifelines as dashed lines\n- Horizontal arrows for messages, 60px vertical spacing\n- Solid arrow = request, dashed arrow = response\n\n### Mind Map\n\n- Central node: largest (200x100), `Trigger` color\n- Level 1: 150x70, `Primary` color, radial around center\n- Level 2: 120x50, `Process` color\n- Level 3: 90x40, `Neutral` color\n- Use lines (not arrows) for connections\n- 4–6 branches (max 8), 2–4 sub-topics per branch\n\n### Swimlane\n\n- Large transparent rectangles (`Neutral` fill, `\"dashed\"` stroke, opacity: 30) as lane boundaries\n- Lane label as free-standing text at top-left of lane (not bound to rectangle), 28px font\n- Elements flow left-to-right within lanes\n- Arrows cross lanes for handoffs\n\n## Section-by-Section Construction\n\nFor diagrams with **10+ elements**, do NOT generate the entire JSON at once. Build in sections:\n\n1. **Plan all sections first** — list element IDs, positions, and cross-section bindings\n2. **Write section 1** — create the file with initial elements\n3. **Append section 2** — read the file, add new elements to the `elements` array\n4. **Repeat** — continue until all sections are done\n5. **Final pass** — verify all `boundElements` and `startBinding`/`endBinding` references are consistent\n\nNamespace element seeds by section (100xxx, 200xxx, 300xxx) to avoid collisions.\n\n## Export\n\n### Option A: Kroki API (SVG only — zero install)\n\n```bash\n# SVG via Kroki API\ncurl -s -X POST https://kroki.io/excalidraw/svg \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary \"@diagram.excalidraw\" \\\n  -o diagram.svg\n\n# Via local Kroki Docker (offline)\ncurl -s -X POST http://localhost:8000/excalidraw/svg \\\n  -H \"Content-Type: application/json\" \\\n  --data-binary \"@diagram.excalidraw\" \\\n  -o diagram.svg\n```\n\n### Option B: Local CLI (PNG + SVG)\n\n```bash\n# PNG at 2x scale (recommended)\nexcalidraw-brute-export-cli -i diagram.excalidraw -o diagram.png -f png -s 2\n\n# PNG at 1x scale\nexcalidraw-brute-export-cli -i diagram.excalidraw -o diagram.png -f png -s 1\n\n# SVG\nexcalidraw-brute-export-cli -i diagram.excalidraw -o diagram.svg -f svg -s 1\n```\n\n**Required flags:** `-f` (format: `png` or `svg`) and `-s` (scale: `1`, `2`, or `3`).\n\n## Anti-Patterns\n\n**Never put `text` on large background/zone rectangles.** Excalidraw centers text in the middle of the shape, overlapping contained elements. Instead, use a free-standing `text` element positioned at the top of the zone.\n\n**Avoid cross-zone arrows.** Long diagonal arrows create visual spaghetti. Route arrows within zones or along zone edges. If a cross-zone connection is unavoidable, route it along the perimeter.\n\n**Use arrow labels sparingly.** Labels placed at the arrow midpoint overlap on short arrows. Keep labels to ≤12 characters and ensure ≥120px clear space between connected shapes. Omit labels when the connection meaning is obvious from context.\n\n**Don't use filled backgrounds on containers that hold other elements.** Use `opacity: 30` (or 25-40 range) for zone/container rectangles so contained elements remain visible.\n\n**Always set explicit `strokeColor` on text elements.** Text `strokeColor` is the rendered text color. If omitted, text may inherit the parent shape's background color and become invisible. Use `#1e293b` (title), `#334155` (label), or `#64748b` (description) from the text color palette.\n\n## Common Mistakes\n\n| Mistake | Fix |\n|---------|-----|\n| Kroki returns error | Ensure file is valid JSON with `\"type\": \"excalidraw\"` and `\"elements\"` array |\n| Kroki only outputs SVG | Use local CLI (`excalidraw-brute-export-cli`) for PNG |\n| Export fails with \"Missing required flag\" | Always pass `-f png` and `-s 2` |\n| Export fails with \"Executable doesn't exist\" | Run `npx playwright install firefox` |\n| macOS: timeout waiting for file chooser | Apply the macOS Meta patch above |\n| Arrow `points` not relative to origin | `points` always start at `[0,0]` |\n| Missing `id` on elements | Use descriptive string IDs per element |\n| Overlapping elements | Use spacing reference table; minimum 40px gap |\n| Arrows not interactive in excalidraw.com | Add `boundElements` to shapes referencing all bound arrows/text |\n| Text not centered in shape | Set `containerId` on text AND add text to shape's `boundElements` |\n| All text same size | Use font size hierarchy: 28 → 24 → 20 → 16 → 14 |\n| Diagram looks monotone | Apply semantic colors from the palette, follow 60-30-10 rule |\n| Text invisible / same color as background | Always set `strokeColor` on text elements to a dark color (`#1e293b`, `#334155`, or `#64748b`) |\n| Text overlaps inside zone/container | Don't bind text to zone rectangles; use free-standing text at top |\n| Text truncated in shapes | Use width formula: `max(160, charCount * 9)`, double for CJK |\n| `boundElements: []` causes issues | Use `null` for empty boundElements, never `[]` |","tags":["excalidraw","skill","agents365-ai","agent-skills","claude-code","claude-code-skill","claude-skills","diagram","openclaw","openclaw-skills","skill-md","skillsmp"],"capabilities":["skill","source-agents365-ai","skill-excalidraw-skill","topic-agent-skills","topic-claude-code","topic-claude-code-skill","topic-claude-skills","topic-diagram","topic-excalidraw","topic-openclaw","topic-openclaw-skills","topic-skill","topic-skill-md","topic-skillsmp"],"categories":["excalidraw-skill"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Agents365-ai/excalidraw-skill","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Agents365-ai/excalidraw-skill","source_repo":"https://github.com/Agents365-ai/excalidraw-skill","install_from":"skills.sh"}},"qualityScore":"0.477","qualityRationale":"deterministic score 0.48 from registry signals: · indexed on github topic:agent-skills · 54 github stars · SKILL.md body (14,531 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-06T00:56:39.779Z","embedding":null,"createdAt":"2026-04-18T23:56:41.990Z","updatedAt":"2026-05-06T00:56:39.779Z","lastSeenAt":"2026-05-06T00:56:39.779Z","tsv":"'-1':308 '-10':555,1921 '-30':554,1920 '-40':1096,1715 '-50':1076,1078 '/.last_update':258 '/casual':496 '/dev/null':298 '/excalidraw-brute-export-cli/src/main.js':212 '/excalidraw/svg':1489 '/keyboard.press':218,229 '0':240,479,793,804,877,878,1002,1003,1005,1013,1021,1056,1057,1059,1073,1074,1075,1080,1093,1094,1098,1846,1847 '0369a1':623 '1':421,488,504,861,1299,1400,1417,1564,1578,1589 '10':562,1218,1387 '100':785,787,806,1058,1060,1145 '100001':808 '100xxx':846,1463 '12':1263,1679 '120px':1146,1163,1683 '120x50':1308 '130':1171 '14':1908 '14px':545 '15':1221 '150':1061,1140 '150px':1169,1206 '150x70':1300 '16':1907 '160':743,750,789,1970 '166534':592 '16px':540 '18':752 '180px':1154 '1e293':647,920,1754,1939 '1e40':581,795 '1x':1550 '2':297,301,434,499,694,802,914,1101,1307,1327,1414,1427,1547,1590,1811 '20':912,1906 '200':1004,1077,1079,1097 '200px':1141,1172,1203,1266 '200x100':1295 '200xxx':847,1464 '20px':535 '220px':1152,1161 '24':255,274,371,770,1905 '24px':531 '25':1182,1714 '28':1904 '280':1167 '28px':527,1364 '2x':1532 '3':19,105,446,510,1052,1217,1259,1312,1424,1592 '30':559,1246,1343,1712 '300xxx':848,1465 '334155':650,1757,1941 '340px':1160 '350px':1168 '4':459,1322,1328,1438 '40':1183 '400px':1151 '40px':1189,1865 '475569':638 '5':466,1011,1019,1446 '50':1095,1176 '50px':1248 '6':1323 '60':553,557,763,791,1919 '60px':1177,1281 '64748b':652,1760,1943 '6b21a8':615 '8':1260,1326 '8000/excalidraw/svg':1511 '854d0e':600 '9':745,1972 '90x40':1313 '991b1b':607 'accent':561 'add':769,1431,1872,1890 'addit':165,772 'af':582,796 'ai/ml':619 'alert':609 'along':1646,1659 'also':12 'alway':859,874,932,1725,1805,1843,1929 'angl':792,1067 'annot':546 'anti':1594 'anti-pattern':1593 'api':54,145,585,826,1008,1023,1473,1482 'append':1425 'appli':1830,1912 'application/json':1494,1516 'approach':120 'appstat':700 'architectur':8,118,1222 'around':1178,1304 'array':1437,1784 'arrow':663,719,811,815,828,873,979,982,992,995,1000,1036,1041,1042,1048,1063,1071,1084,1091,1136,1143,1150,1159,1232,1278,1285,1288,1319,1374,1634,1637,1642,1663,1670,1675,1836,1867 'arrows/text':1879 'ask':332 'async':677 'auth':780,818,831,905,909,923,976,998,1016,1026,1039 'automat':1064 'avail':340 'avoid':1467,1630 'awk':299 'b':172,648,921,1524,1755,1940 'background':641,961,1703,1748,1928 'background/zone':1601 'backgroundcolor':797 'base':69 'bash':151,161,187,206,288,1478,1529 'becom':1751 'belong':895 'benefit':27 'bidirect':901,981 'binari':1497,1519 'bind':899,980,984,1413,1950 'blend':957 'bottom':1258 'bound':991,1361,1878 'boundari':1346 'boundel':809,852,971,973,1032,1034,1451,1873,1895,1976,1983 'box':709,1153,1162,1170 'branch':1210,1324,1333 'brute':63,193,1537,1554,1568,1794 'build':1397 'c':290,354 'c2410c':630 'calcul':730 'callback':678 'cascadia':511 'casual/sketch':508 'categori':573 'caus':953,1977 'center':916,1305,1604,1882 'central':1292 'charact':757,1680 'charcount':744,751,1971 'chart':9 'check':184,242,422 'checkout':393 'children':1179 'choos':443,1122 'chooser':1829 'chromium':183 'cjk':746,1975 'claud':697 'claude-cod':696 'clawhub':396 'clawhub-instal':395 'clean':480 'clear':1684 'cli':65,76,174,179,195,207,221,233,431,464,1526,1539,1556,1570,1791,1796 'code':513,698 'collis':1468 'color':444,549,566,643,645,658,931,939,943,1297,1302,1310,1315,1738,1749,1765,1914,1926,1938 'column':1147,1156,1225 'command':465 'common':1767 'compar':117,309 'complex':21 'compon':20,107,710 'condit':603 'connect':721,724,1235,1321,1654,1687,1693 'consent':267 'consist':1457 'construct':1383 'contain':636,891,1244,1613,1705,1721 'containerid':922,1886 'content':1492,1514 'content-typ':1491,1513 'context':1698 'continu':385,410,1440 'control':216,226 'convers':250 'copi':398 'creat':1418,1638 'critic':605,610,925 'cross':1375,1411,1632,1652 'cross-sect':1410 'cross-zon':1631,1651 'curl':55,154,162,426,1483,1506 'curv':1083 'dark':938,1937 'darker':572 'dash':674,675,1242,1275,1287,1340 'data':22,590,593,1496,1518 'data-binari':1495,1517 'databas':618,715,1254 'db':813 'dbeaf':580,798 'dcfce7':591 'decis':115,598,601,717,1199,1209 'default':476,517,621 'dep':423 'depend':684 'describ':108 'descript':539,543,651,822,1761,1853 'design':474 'diagon':1636 'diagram':6,40,93,437,458,486,528,1120,1129,1224,1265,1385,1909 'diagram.excalidraw':1498,1520,1541,1558,1572 'diagram.png':1543,1560 'diagram.svg':1500,1522,1574 'diamond':716,1197 'direct':720 'directori':263 'docker':1504 'doesn':367,1816 'done':1445 'dot':679,680 'doubl':1973 'draw':96 'drawn':495 'e':228,232 'e.g':394,825 'e0f2fe':622 'edg':1648 'either':362 'elbow':1047,1062,1081 'element':537,699,703,728,731,777,838,887,1104,1188,1366,1388,1406,1423,1433,1436,1459,1614,1622,1709,1722,1731,1783,1851,1857,1859,1934 'elementid':1007,1015 'ellips':712,1194 'empti':856,1982 'endbind':1014,1454 'ensur':1682,1774 'entir':280,1393 'entiti':1261 'entri':583 'error':407,604,608,1773 'estim':755 'event':634 'excalidraw':1,32,39,43,62,192,449,685,692,1536,1553,1567,1603,1781,1793 'excalidraw-brute-export-c':61,191,1535,1552,1566,1792 'excalidraw.com':1871 'execut':1815 'exist':271,1818 'explain':16,101 'explicit':88,265,935,1727 'export':35,47,51,64,194,460,1469,1538,1555,1569,1795,1799,1812 'extern':612,616 'f':1544,1561,1575,1581,1807 'f1f5f9':637 'f3e8ff':614 'face':588 'fail':1800,1813 'failur':388,420 'fed7aa':629 'fee2e2':606 'fef9c3':599 'fetch':282 'ff':357 'ff-on':356 'ffffff':702 'field':850 'file':33,45,451,472,688,1420,1430,1775,1828 'fill':518,565,574,1339,1702 'fillstyl':515,799 'final':1447 'fine':547 'firefox':68,181,199,1823 'firefox-bas':67 'first':247,1113,1404 'fix':1770 'flag':1580,1804 'flow':23,140,671,1367 'flowchart':7,95,1190 'focus':1012,1020 'follow':551,1918 'font':519,1365,1901 'fontfamili':498,913 'fontsiz':911 'format':73,1582 'formula':1968 'forward':1213 'frameid':867 'free':1351,1619,1957 'free-stand':1350,1618,1956 'frontmatt':317 'g':190,211 'gap':1010,1018,1137,1144,1155,1164,1173,1185,1866 'gateway':827,1009,1024 'gateway/entry':1249 'generat':31,42,447,1391 'git':160,289,346,353,392 'give':836 'goe':1212,1215 'group':639,1102,1108,1117,1119,1238 'groupid':1106,1115 'gw':829,996,1037 'h':256,275,1490,1512 'hand':494 'hand-drawn':493 'handoff':1378 'header':530,533 'height':761,790 'helvetica':500 'hierarchi':521,1903 'highlight':563 'hold':1707 'horizont':1204,1277 'hour':372 'id':779,810,816,824,903,974,994,1035,1110,1407,1849,1855 'identifi':436 'includ':866,1029 'index':868 'individu':758 'inherit':1743 'initi':1422 'inner':1116 'innermost':1112 'innermost-first':1111 'input':579 'insid':889,896,1946 'instal':57,148,157,186,189,198,397,1477,1822 'instead':832,1615 'integ':842,884 'interact':106,1869 'invent':656 'invis':954,1752,1924 'issu':1978 'json':44,450,686,690,778,849,902,972,993,1033,1054,1069,1089,1114,1394,1778 'keep':1676 'kroki':53,144,425,462,1472,1481,1503,1771,1785 'kroki.io':170,1488 'kroki.io/excalidraw/svg':1487 'l':1045 'l-shape':1044 'label':534,538,649,727,734,768,817,904,975,1135,1149,1231,1237,1348,1664,1666,1677,1690,1758 'lane':1345,1347,1359,1373,1376 'larg':457,1335,1600 'largest':1294 'last':269,360,381 'latest':284 'latin':739 'left':1251,1357,1369 'left-to-right':1368 'level':522,644,1298,1306,1311 'lifelin':1273 'line':330,722,767,773,1276,1317 'list':128,966,1109,1405 'local':66,75,173,430,1502,1525,1790 'localhost':1510 'long':1635 'look':482,502,1910 'lr':1191 'ls':292 'ls-remot':291 'maco':200,1824,1832 'macos/linux/windows':159 'main':208,222,234,672 'map':1291 'max':742,749,1220,1262,1325,1969 'may':1742 'mean':666,1694 'mention':418 'messag':1280 'meta':219,230,1833 'metadata.version':314 'middl':918,1608 'midpoint':1671 'mind':1290 'minimum':1184,1864 'miss':1802,1848 'mistak':1768,1769 'mix':753 'modern':481 'modul':711 'monoton':1911 'multi':111 'multi-step':110 'must':880,965,983,989,1028 'mutat':260 'namespac':843,1458 'need':153,238 'nest':1107 'neutral':635,1243,1314,1338 'never':259,857,862,945,1596,1984 'new':657,1432 'newer':324,334 'node':632,714,1293 'note':544 'notifi':243 'npm':188,209 'npx':196,1820 'null':669,854,1980 'o':217,220,1499,1521,1542,1559,1573 'obvious':1696 'offlin':389,1505 'old':276 'older':379 'omit':946,948,1689,1740 'one':203,329,570 'one-tim':202 'opac':805,1181,1245,1342,1711 'option':52,80,142,171,681,1470,1523 'origin':295,1841 'orthogon':1049 'otherwis':281 'outer':1118 'output':59,471,1787 'overlap':1612,1672,1858,1945 'overview':41 'pad':1175,1247 'palett':445,550,662,944,1766,1917 'parent':963,1745 'particip':1268 'pass':1448,1806 'patch':201,237,1834 'path':402,473,611,673 'pattern':442,1121,1126,1595 'pdf':81 'per':249,254,771,886,1227,1332,1856 'perimet':1661 'permiss':404 'pick':439,659 'place':1667 'plan':435,1401 'playwright':197,1821 'png':70,74,177,433,1527,1530,1545,1548,1562,1583,1798,1808 'png/svg':37,49 'point':584,602,718,871,1001,1053,1055,1072,1092,1837,1842 'posit':883,1408,1623 'post':1486,1509 'pre':156 'pre-instal':155 'prerequisit':141 'prevent':737 'primari':536,560,578,670,1301 'principl':475 'print':300,548 'proactiv':14,99 'process':113,620,625,1202,1309 'profession':501 'prompt':366 'properti':775 'pull':246,347,355 'put':1597 'q':138 'quick':137 'radial':1303 'random':834 'rang':1716 'rawtext':870 'read':400,1428 'read-on':399 'recommend':146,1534 'rectangl':708,783,1200,1269,1337,1363,1602,1719,1954 'refer':682,990,1132,1455,1862 'referenc':1876 'refresh':359,380 'refs/tags':304 'relat':1103,1239,1839 'relationship':25 'remain':1723 'remot':293 'render':168,1736 'repeat':369,1439 'report':467 'represent':30 'request':5,492,1286 'requir':175,205,774,1579,1803 'respons':676,1289 'return':1772 'right':1066,1124,1256,1371 'right-angl':1065 'root':210 'rough':478,803 'round':1099 'rout':1043,1050,1068,1086,1641,1657 'row':1165 'rule':556,653,851,1922 'run':352,461,1819 's/keyboard.press':215,225 'say':91,350 'scale':1533,1551,1588 'scenario':1133 'secondari':541 'section':453,455,845,1380,1382,1399,1403,1412,1416,1426,1443,1462 'section-by-sect':452,1379 'section/group':532 'sed':213,223,302 'seed':807,841,879,1460 'semant':564,664,1913 'semver':325 'sequenc':1264 'servic':617,781,910,924,1017,1027,1240 'set':933,1726,1885,1930 'setup':166 'shade':571 'shape':890,898,960,964,986,988,1046,1139,1611,1688,1746,1875,1884,1893,1965 'share':1105 'shift':227,231 'short':1674 'side':121,123 'silent':383,408 'simpl':127 'singl':766 'single-lin':765 'size':520,523,729,1899,1902 'skeleton':689 'skill':262,312,338 'skill-excalidraw-skill' 'skip':124,277 'smooth':1085 'snippet':514 'solid':516,667,800,1284 'sort':305 'sourc':695 'source-agents365-ai' 'space':1131,1134,1148,1157,1166,1205,1208,1226,1233,1283,1685,1861 'spaghetti':1640 'spare':1665 'stand':1352,1620,1958 'standalon':726 'standard':624 'start':628,631,875,1844 'start/end':713,1196 'startbind':1006,1453 'state':596 'step':112,279,626,1219 'storag':613 'store':594 'strict':323 'string':823,835,1854 'stroke':575,1341 'strokecolor':569,794,919,927,949,1728,1733,1931 'strokestyl':668 'strokewidth':801 'structur':687 'style':477,497,509,665 'sub':1330 'sub-top':1329 'success':589,595 'suffic':131 'sum':759 'support':72,84 'svg':58,71,78,149,167,428,1474,1479,1528,1565,1576,1585,1788 'swallow':405 'swimlan':640,1334 'system':17,103,1223 'tabl':130,1228,1863 'tag':285,294,321 'tail':307 'task':415 'tb':1193 'technic':485 'tell':326,468 'text':542,642,725,735,740,747,754,820,888,892,894,907,908,926,930,942,951,955,968,978,1353,1598,1605,1621,1730,1732,1737,1741,1764,1880,1888,1891,1897,1923,1933,1944,1951,1959,1962 'textalign':915 'throttl':251 'time':204 'timeout':1825 'timestamp':863 'titl':526,529,646,1756 'top':1253,1271,1356,1626,1961 'top-left':1355 'topic':1331 'topic-agent-skills' 'topic-claude-code' 'topic-claude-code-skill' 'topic-claude-skills' 'topic-diagram' 'topic-excalidraw' 'topic-openclaw' 'topic-openclaw-skills' 'topic-skill' 'topic-skill-md' 'topic-skillsmp' 'transpar':1336 'tree':116 'trigger':89,100,627,633,1296 'true':1082 'truncat':738,1963 'two':50 'type':438,691,704,705,782,814,819,906,977,999,1040,1070,1090,1100,1130,1493,1515,1780 'unavoid':1656 'undirect':723 'uniqu':840,885 'unlabel':1142,1158 'updat':241,270,361,382,858 'upstream':287,320,374 'use':2,13,87,180,248,424,429,487,503,524,567,576,706,762,821,853,860,1230,1316,1616,1662,1701,1710,1753,1789,1852,1860,1900,1955,1966,1979 'user':4,90,133,266,328,413,469,491,587 'user-fac':586 'v':38,296,306 'va.b.c':342 'valid':1777 'verifi':1449 'version':163,335,693 'versionnonc':869 'vertic':1207,1272,1282 'verticalalign':917 'via':169,257,1480,1501 'viewbackgroundcolor':701 'virgil':505 'visibl':1724 'visual':11,29,94,441,1125,1639 'vx.y.z':341 'wait':1826 'want':343 'warn':597 'way':363 'waypoint':1088 'weak':683 'whitespace/neutral':558 'width':732,741,748,788,1967 'windows/linux':235 'within':1372,1643 'without':264 'workflow':239 'write':448,1415 'x':784,1485,1508 'y':786 'yes':351,1211 'zero':56,147,1476 'zone':1629,1633,1644,1647,1653,1953 'zone/container':1174,1180,1718,1947 '架构图':97 '流程图':98 '画图':92","prices":[{"id":"393a507d-9e7f-47cf-9d81-378f1cbccd88","listingId":"20f9ad11-6aa2-4b9b-9a81-c1a1e897f726","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Agents365-ai","category":"excalidraw-skill","install_from":"skills.sh"},"createdAt":"2026-04-18T23:56:41.990Z"}],"sources":[{"listingId":"20f9ad11-6aa2-4b9b-9a81-c1a1e897f726","source":"github","sourceId":"Agents365-ai/excalidraw-skill","sourceUrl":"https://github.com/Agents365-ai/excalidraw-skill","isPrimary":false,"firstSeenAt":"2026-04-18T23:56:41.990Z","lastSeenAt":"2026-05-06T00:56:39.779Z"}],"details":{"listingId":"20f9ad11-6aa2-4b9b-9a81-c1a1e897f726","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Agents365-ai","slug":"excalidraw-skill","github":{"repo":"Agents365-ai/excalidraw-skill","stars":54,"topics":["agent-skills","claude-code","claude-code-skill","claude-skills","diagram","excalidraw","openclaw","openclaw-skills","skill","skill-md","skillsmp"],"license":null,"html_url":"https://github.com/Agents365-ai/excalidraw-skill","pushed_at":"2026-05-05T08:20:41Z","description":"Claude Code skill for generating Excalidraw diagrams and exporting to PNG/PDF/SVG locally","skill_md_sha":"e104430b647be14ee8fc97ab94f17e1ef3c019fc","skill_md_path":"SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Agents365-ai/excalidraw-skill"},"layout":"root","source":"github","category":"excalidraw-skill","frontmatter":{"name":"excalidraw","description":"Use when user requests diagrams, flowcharts, architecture charts, or visualizations. Also use proactively when explaining systems with 3+ components, complex data flows, or relationships that benefit from visual representation. Generates .excalidraw files and exports to PNG/SVG via Kroki API or locally using excalidraw-brute-export-cli."},"skills_sh_url":"https://skills.sh/Agents365-ai/excalidraw-skill"},"updatedAt":"2026-05-06T00:56:39.779Z"}}