{"id":"52b574aa-f3bc-499f-92d9-5530f14a9e8d","entityType":"agent","slug":"clawhub-nickytonline-excaliclaw","name":"Excaliclaw","canonicalUrl":"https://www.xpersona.co/agent/clawhub-nickytonline-excaliclaw","canonicalPath":"/agent/clawhub-nickytonline-excaliclaw","generatedAt":"2026-10-11T17:42:36.680Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T14:34:39.456Z","emptyReason":null},"description":"Create reliable Excalidraw diagrams in OpenClaw using the Excalidraw MCP, with export-safe labels, Excalifont text, and clear system-diagram structure. Use w... Skill: Excaliclaw Owner: nickytonline Summary: Create reliable Excalidraw diagrams in OpenClaw using the Excalidraw MCP, with export-safe labels, Excalifont text, and clear system-diagram structure. Use w... Tags: latest:1.0.2 Version history: v1.0.2 | 2026-04-25T18:10:51.594Z | auto **Improved export workflow and correctness safeguards for Excalidraw diagrams in OpenClaw.** - Now requires a diagram preview via excal","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17dk2gcnd1h5ezcdyfg0txe1h85g1vv:excaliclaw","sourceUrl":"https://clawhub.ai/nickytonline/excaliclaw","homepage":"https://clawhub.ai/nickytonline/skills/excaliclaw","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/nickytonline/excaliclaw","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/nickytonline/skills/excaliclaw","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Create reliable Excalidraw diagrams in OpenClaw using the Excalidraw MCP, with export-safe labels, Excalifont text, and clear system-diagram structure. Use w..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T14:34:39.456Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T14:34:39.456Z","emptyReason":null},"stars":null,"forks":null,"downloads":1049,"packageName":null,"latestVersion":"1.0.2","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T14:34:39.383Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T14:34:39.456Z","lastCrawledAt":"2026-10-11T14:34:39.383Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T14:34:39.383Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.2","createdAt":"2026-04-25T18:10:51.594Z","changelog":"**Improved export workflow and correctness safeguards for Excalidraw diagrams in OpenClaw.** - Now requires a diagram preview via `excalidraw__create_view` as a quality check before any export, unless the user explicitly requests JSON/link only. - Full-scene export flow enforced: export always uses the complete, previewed Excalidraw scene, including all app state and files. - Editable link verification: verifies that the exported excalidraw.com link is non-empty and matches the preview; blank exports trigger a retry or fallback, never silent failure. - Explicit arrow and label binding rules: arrows and labels must always be semantically bound in both preview and export (with full `startBinding`, `endBinding`, and reciprocal `boundElements`), preventing accidental flattening or loss of editability. - On failure, clear user messaging: fallback/simplified exports are labeled as such; failed exports are explained and alternatives are offered, without silently shifting strategies.","fileCount":3,"zipByteSize":9406},{"version":"1.0.1","createdAt":"2026-04-25T16:33:02.279Z","changelog":"- Reinforces that label shortcuts (e.g. shape or arrow `label` fields) must never be used in final diagrams or exports; every visible label must be a real Excalidraw `text` element. - Adds a warning that this skill's recommendations override any conflicting Quick Add or helper documentation for the Excalidraw MCP. - Clarifies fallback guidance: if container text bindings are unreliable, use visually placed standalone `text` elements (not label shortcuts). - Updates export checks to require all labels as explicit text elements for maximum reliability, preferring visibility over editability if necessary. - Minor refinements to preflight and fallback instructions for better clarity and safety.","fileCount":2,"zipByteSize":6643},{"version":"1.0.0","createdAt":"2026-04-25T12:58:00.830Z","changelog":"Initial release of excaliclaw – create reliable Excalidraw diagrams for OpenClaw sessions. - Provides robust recipes for labeled boxes, arrows, and labels using Excalidraw MCP, avoiding export/preview pitfalls. - Implements mandatory preflight check for MCP tool availability, with user permission required for installation or environment changes. - Uses explicit Excalidraw elements and avoids MCP `label` shortcuts to ensure export/edit reliability. - Enforces diagram rules, such as binding text labels/arrow endpoints to shapes, and fallback guidance if features fail in preview/export. - Offers alternative export options (Excalidraw JSON, SVG/PNG, Mermaid) if MCP is unavailable or unsupported.","fileCount":2,"zipByteSize":6294}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17dk2gcnd1h5ezcdyfg0txe1h85g1vv:excaliclaw","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-nickytonline-excaliclaw/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-nickytonline-excaliclaw/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-nickytonline-excaliclaw/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-nickytonline-excaliclaw/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-nickytonline-excaliclaw/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-nickytonline-excaliclaw/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T17:42:36.678Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-nickytonline-excaliclaw/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-nickytonline-excaliclaw/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-nickytonline-excaliclaw/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-nickytonline-excaliclaw/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T14:34:39.456Z","emptyReason":null},"readme":"Skill: Excaliclaw\n\nOwner: nickytonline\n\nSummary: Create reliable Excalidraw diagrams in OpenClaw using the Excalidraw MCP, with export-safe labels, Excalifont text, and clear system-diagram structure. Use w...\n\nTags: latest:1.0.2\n\nVersion history:\n\nv1.0.2 | 2026-04-25T18:10:51.594Z | auto\n\n**Improved export workflow and correctness safeguards for Excalidraw diagrams in OpenClaw.**\n\n- Now requires a diagram preview via `excalidraw__create_view` as a quality check before any export, unless the user explicitly requests JSON/link only.\n- Full-scene export flow enforced: export always uses the complete, previewed Excalidraw scene, including all app state and files.\n- Editable link verification: verifies that the exported excalidraw.com link is non-empty and matches the preview; blank exports trigger a retry or fallback, never silent failure.\n- Explicit arrow and label binding rules: arrows and labels must always be semantically bound in both preview and export (with full `startBinding`, `endBinding`, and reciprocal `boundElements`), preventing accidental flattening or loss of editability.\n- On failure, clear user messaging: fallback/simplified exports are labeled as such; failed exports are explained and alternatives are offered, without silently shifting strategies.\n\nv1.0.1 | 2026-04-25T16:33:02.279Z | auto\n\n- Reinforces that label shortcuts (e.g. shape or arrow `label` fields) must never be used in final diagrams or exports; every visible label must be a real Excalidraw `text` element.\n- Adds a warning that this skill's recommendations override any conflicting Quick Add or helper documentation for the Excalidraw MCP.\n- Clarifies fallback guidance: if container text bindings are unreliable, use visually placed standalone `text` elements (not label shortcuts).\n- Updates export checks to require all labels as explicit text elements for maximum reliability, preferring visibility over editability if necessary.\n- Minor refinements to preflight and fallback instructions for better clarity and safety.\n\nv1.0.0 | 2026-04-25T12:58:00.830Z | auto\n\nInitial release of excaliclaw – create reliable Excalidraw diagrams for OpenClaw sessions.\n\n- Provides robust recipes for labeled boxes, arrows, and labels using Excalidraw MCP, avoiding export/preview pitfalls.\n- Implements mandatory preflight check for MCP tool availability, with user permission required for installation or environment changes.\n- Uses explicit Excalidraw elements and avoids MCP `label` shortcuts to ensure export/edit reliability.\n- Enforces diagram rules, such as binding text labels/arrow endpoints to shapes, and fallback guidance if features fail in preview/export.\n- Offers alternative export options (Excalidraw JSON, SVG/PNG, Mermaid) if MCP is unavailable or unsupported.\n\nArchive index:\n\nArchive v1.0.2: 3 files, 9406 bytes\n\nFiles: skill-card.md (2582b), SKILL.md (21475b), _meta.json (129b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: excaliclaw\nversion: 1.0.2\ndescription: Create reliable Excalidraw diagrams in OpenClaw using the Excalidraw MCP, with export-safe labels, Excalifont text, and clear system-diagram structure. Use when the user asks for an Excalidraw diagram, architecture diagram, system diagram, flowchart, or hand-drawn diagram.\nuser-invocable: true\nargument-hint: \"[diagram topic]\"\n---\n\n# Excaliclaw\n\nCreate diagrams with the Excalidraw MCP in a way that survives OpenClaw rendering and Excalidraw export.\n\n## Core Rule\n\nUse real Excalidraw elements, but do **not** rely on MCP `label` shortcuts for final diagrams.\n\n## MCP Availability Preflight\n\nBefore creating or exporting a diagram, verify that the Excalidraw MCP tools are available in the current OpenClaw session.\n\nExpected behavior:\n\n1. If the Excalidraw MCP tools are available, continue with the normal diagram workflow.\n2. If the tools are missing, tell the user plainly: “Excalidraw MCP is not installed or not available in this OpenClaw session.”\n3. Ask whether the user wants it installed as a Streamable HTTP MCP before changing OpenClaw configuration, installing packages, or restarting/reloading services.\n4. If the user agrees, use the current OpenClaw-supported MCP configuration path. Do not invent commands; check local OpenClaw docs or CLI help first if the install/config command is not already known.\n5. After installation, reload/restart only what is required, then verify with a minimal hello-world Excalidraw scene before attempting the requested diagram.\n6. If installation fails or the user declines, offer a fallback such as Excalidraw JSON, SVG/PNG, Mermaid, or another diagram format, and state that MCP preview/export will not be available.\n\nDo not silently auto-install the MCP just because a diagram was requested. Installing an MCP is an environment change and needs explicit user approval unless the user already asked to set it up.\n\nReliable pattern:\n\nMandatory workflow for normal diagram requests:\n\n1. Use `excalidraw__create_view` to render the diagram preview first as an internal quality gate. Do not skip the preview and jump straight to export unless the user explicitly asks for JSON-only or link-only output.\n2. Treat the editable excalidraw.com link as the normal user-facing deliverable for Excalidraw diagram requests. Include it by default after a successful export.\n3. Build the export from the same full native Excalidraw scene represented by the preview, not a simplified redraw, not a raw MCP streaming array, and not a different diagram.\n4. If `create_view` returns a checkpoint id, treat it as evidence of the previewed scene. Preserve the same elements and relationships when constructing the export payload.\n5. Export only a full Excalidraw scene object, never a bare element array. The exporter payload must be serialized JSON with `type: \"excalidraw\"`, `version`, `source`, `elements`, `appState`, and `files`.\n6. Verify the exported link before replying. If the link cannot be verified as non-empty, do not deliver it as the final artifact.\n7. On export failure, timeout, or blank-link verification, retry the same full scene once before simplifying. If simplification is necessary, say clearly that the exported link is a simplified fallback.\n8. If a non-empty editable link still cannot be produced, do not deliver a fallback artifact. Tell the user plainly that the excalidraw.com share link failed verification, keep the inline MCP preview as diagnostic evidence only, and ask whether they want another export attempt or a different format.\n9. Do not silently change tool strategy just because one export attempt failed; the known-good path is preview first, then clean full-scene export link, then verified fallback if needed.\n\nElement construction pattern:\n\n1. Draw the shape first.\n2. Draw a separate explicit `text` element for the label.\n3. Bind box labels to their shapes using Excalidraw container text fields (`containerId` on the text + matching `{ \"type\": \"text\", \"id\": ... }` in the shape's `boundElements`). This is mandatory for editable box labels unless preview/export proves it broken.\n4. Bind arrows based on meaning, not just appearance: if the arrow means “this step talks to that specific step/box,” bind it with `startBinding` and `endBinding`; route around labels if needed. Do **not** bind arrows that merely point into a lane, group, or general area without targeting a specific box.\n5. For every bound arrow, include reciprocal `{ \"type\": \"arrow\", \"id\": ... }` entries in both connected shapes' `boundElements`.\n6. Do not downgrade semantic box-to-box arrows to loose visual arrows for speed, token pressure, or because MCP `read_me` examples use simpler arrows. If an arrow would be expected to follow a box when moved, it must be bound in both preview and export.\n7. Set `fontFamily: 1` on every text element to use Excalidraw's hand-drawn Excalifont.\n7. Include `width` and `height` on every text element.\n8. Put text elements after their shapes in draw order.\n9. Label major boxes and important arrows unless the user explicitly wants an unlabeled or abstract diagram.\n10. Export/share only after checking that labels rendered correctly in the MCP preview.\n11. Before exporting, verify that the export JSON still contains `containerId`, shape `boundElements`, and arrow `startBinding`/`endBinding`. Do not flatten bound labels or connected arrows into loose visual text/lines during export.\n12. If the delivered diagram is intended to be editable, perform an explicit arrow-editability audit: every semantic box-to-box connector must have `startBinding`, `endBinding`, and matching reciprocal arrow entries in both endpoint shapes' `boundElements`.\n\n## Recommended Element Recipe\n\n### Labeled box\n\nBest default for editable diagrams: bind the text to the rectangle so Excalidraw treats it as the box label when the user drags or edits the box.\n\n```json\n[\n  {\n    \"type\": \"rectangle\",\n    \"id\": \"box-api\",\n    \"x\": 100,\n    \"y\": 100,\n    \"width\": 180,\n    \"height\": 70,\n    \"backgroundColor\": \"#d0bfff\",\n    \"fillStyle\": \"solid\",\n    \"roundness\": { \"type\": 3 },\n    \"strokeColor\": \"#8b5cf6\",\n    \"boundElements\": [{ \"type\": \"text\", \"id\": \"txt-api\" }]\n  },\n  {\n    \"type\": \"text\",\n    \"id\": \"txt-api\",\n    \"x\": 130,\n    \"y\": 123,\n    \"width\": 120,\n    \"height\": 24,\n    \"text\": \"API Server\",\n    \"fontSize\": 16,\n    \"fontFamily\": 1,\n    \"strokeColor\": \"#1e1e1e\",\n    \"containerId\": \"box-api\",\n    \"textAlign\": \"center\",\n    \"verticalAlign\": \"middle\"\n  }\n]\n```\n\nIf bound container text fails in MCP preview or export, fall back to the same explicit text element without `containerId`/`boundElements`. Keep the label visually centered, but tell the user it may not move with the box. Do not silently fall back.\n\nAvoid this shortcut for final deliverables:\n\n```json\n{\n  \"type\": \"rectangle\",\n  \"id\": \"api\",\n  \"label\": { \"text\": \"API Server\" }\n}\n```\n\nThe `label` shortcut may look convenient, but it has proven flaky in OpenClaw/Excalidraw MCP export paths. Do not use shortcut labels in either preview or export payloads for final deliverables; otherwise exported diagrams can appear correct while losing editability.\n\n### Connected arrow\n\nBind based on meaning, not just appearance. When an arrow means “this step talks to that specific step/box,” bind the endpoints to the source and target boxes. This lets Excalidraw keep the arrow attached when the user moves either box.\n\nFor arrow binding to survive editing/export, include both sides of the relationship:\n\n- The arrow has `startBinding` and `endBinding` with the connected shape IDs.\n- Each connected shape has a matching `boundElements` entry for the arrow.\n- The arrow endpoint coordinates should land on or very near the connected shapes' edges. Do not rely on bindings alone while leaving arrow geometry floating in whitespace.\n\nPrefer simple straight bound arrows first. Avoid multi-segment/elbow bound arrows unless you verify they render and remain editable correctly; they can look warped or appear unbound in Excalidraw exports. If labels or spacing make the connection awkward, fix the layout by moving boxes/labels before adding complex arrow routing.\n\nDo **not** bind arrows that only point into a lane, group, note area, or nearby whitespace. For example, in swim lane diagrams, an arrow may leave one box and point generally into another lane before the next step appears; that should remain a visually positioned arrow, not a box-bound connector.\n\n```json\n[\n  {\n    \"type\": \"rectangle\",\n    \"id\": \"box-client\",\n    \"x\": 100,\n    \"y\": 100,\n    \"width\": 140,\n    \"height\": 70,\n    \"backgroundColor\": \"#a5d8ff\",\n    \"fillStyle\": \"solid\",\n    \"roundness\": { \"type\": 3 },\n    \"boundElements\": [{ \"type\": \"arrow\", \"id\": \"arr-client-api\" }]\n  },\n  {\n    \"type\": \"rectangle\",\n    \"id\": \"box-api\",\n    \"x\": 380,\n    \"y\": 100,\n    \"width\": 140,\n    \"height\": 70,\n    \"backgroundColor\": \"#d0bfff\",\n    \"fillStyle\": \"solid\",\n    \"roundness\": { \"type\": 3 },\n    \"boundElements\": [{ \"type\": \"arrow\", \"id\": \"arr-client-api\" }]\n  },\n  {\n    \"type\": \"arrow\",\n    \"id\": \"arr-client-api\",\n    \"x\": 240,\n    \"y\": 135,\n    \"width\": 140,\n    \"height\": 0,\n    \"points\": [[0, 0], [140, 0]],\n    \"endArrowhead\": \"arrow\",\n    \"strokeColor\": \"#1e1e1e\",\n    \"startBinding\": { \"elementId\": \"box-client\", \"fixedPoint\": [1, 0.5] },\n    \"endBinding\": { \"elementId\": \"box-api\", \"fixedPoint\": [0, 0.5] }\n  }\n]\n```\n\nUse common `fixedPoint` values:\n\n- Right edge: `[1, 0.5]`\n- Left edge: `[0, 0.5]`\n- Top edge: `[0.5, 0]`\n- Bottom edge: `[0.5, 1]`\n\n### Labeled arrow\n\nPrefer a bound arrow plus a separate text element near the arrow:\n\n```json\n[\n  {\n    \"type\": \"arrow\",\n    \"id\": \"arr-client-api\",\n    \"x\": 260,\n    \"y\": 130,\n    \"width\": 120,\n    \"height\": 0,\n    \"points\": [[0, 0], [120, 0]],\n    \"endArrowhead\": \"arrow\",\n    \"strokeColor\": \"#1e1e1e\",\n    \"startBinding\": { \"elementId\": \"box-client\", \"fixedPoint\": [1, 0.5] },\n    \"endBinding\": { \"elementId\": \"box-api\", \"fixedPoint\": [0, 0.5] }\n  },\n  {\n    \"type\": \"text\",\n    \"id\": \"txt-client-api\",\n    \"x\": 290,\n    \"y\": 100,\n    \"width\": 70,\n    \"height\": 20,\n    \"text\": \"HTTPS\",\n    \"fontSize\": 14,\n    \"fontFamily\": 1,\n    \"strokeColor\": \"#757575\"\n  }\n]\n```\n\nIf arrow binding fails in MCP preview or export, fall back to visually positioned arrows and tell the user they may need to reconnect arrows manually. This is an explicit fallback, not a silent simplification.\n\nRegression guard: after a diagram looks visually correct, still inspect the generated/export JSON for every semantic connector. A beautiful render is not enough; if moving either connected box would leave the arrow behind, the diagram failed the editability requirement.\n\nUse visually positioned arrows, not bindings, when:\n\n- the arrow points to a lane or region rather than a specific box\n- the arrow lands near text, a label, or empty space inside another lane\n- the arrow represents continuation, return direction, or emphasis rather than a strict object-to-object connection\n- binding would make later manual editing more surprising than helpful\n- a multi-point/elbow bound arrow renders awkwardly or appears detached after export\n\n## Font Guidance\n\nDefault to:\n\n```json\n\"fontFamily\": 1\n```\n\nThis maps to Excalidraw's hand-drawn Excalifont in normal Excalidraw scenes.\n\nIf the user asks for font options, verify the current Excalidraw element model before giving exact numeric values. Common Excalidraw families are hand-drawn/Excalifont, normal/sans, code/monospace, and comic-style, but do not promise exact IDs without checking.\n\n## Diagram Quality Checklist\n\nBefore exporting/delivering:\n\n- Title is visible.\n- Every major element has visible text.\n- Important connections have visible labels.\n- Text uses `fontFamily: 1`.\n- Text has `width` and `height`.\n- Box labels use `containerId` + matching shape `boundElements`; if not, the final answer explicitly says labels are visually placed only.\n- Arrows that semantically connect two specific boxes use `startBinding` and `endBinding` with the correct shape IDs; if not, the final answer explicitly says arrows are visually placed only.\n- Connected boxes include reciprocal `boundElements` entries for their connected arrows.\n- Export payload preserves those same `containerId`, `boundElements`, `startBinding`, and `endBinding` fields; do not convert editable relationships into loose shapes during export.\n- Prefer straight bound arrows; only use elbow/multi-point bound arrows after preview/export verification.\n- Arrows that only point into lanes, groups, labels, whitespace, or general regions remain visually positioned and unbound.\n- Text appears after its shape in element order.\n- No text overlaps other text, arrows, or important shapes.\n- Arrows avoid crossing through text, labels, or important content wherever possible.\n- The MCP preview shows labels before exporting.\n- The export payload contains no `cameraUpdate`, `delete`, `restoreCheckpoint`, or other MCP-only pseudo-elements.\n- The export payload preserves native editability metadata: box-label `containerId`/`boundElements` and arrow `startBinding`/`endBinding` where present in the preview.\n- The exported Excalidraw link has been verified as non-empty before being delivered.\n- If the exported link cannot be verified, the reply does not present it as the final artifact and does not include a fallback artifact unless the user explicitly asks for one.\n- The exported Excalidraw link is included if requested or expected.\n\n## Preview vs Export Rule\n\nPreview and export are different artifacts:\n\n- Preview payloads may use `cameraUpdate` to guide the OpenClaw live canvas and verify readability.\n- Export payloads must be clean native Excalidraw scenes intended for excalidraw.com.\n- Clean export means removing MCP-only pseudo-elements, not flattening or stripping Excalidraw editability metadata.\n- Preserve valid native Excalidraw metadata in exports: container text (`containerId` + matching shape `boundElements`) and bound arrows (`startBinding`/`endBinding` + reciprocal shape `boundElements`).\n- The preview is mostly an internal quality gate; the editable Excalidraw link is the normal deliverable.\n\n## Final Export Payload Rule\n\n**Critical export criterion:** never include `cameraUpdate` or any other MCP-only pseudo-element in an excalidraw.com export payload.\n\n`cameraUpdate` is only stage direction for the OpenClaw live preview. It is not a real Excalidraw scene element.\n\nWhen exporting to excalidraw.com:\n\n0. Start from the already-previewed diagram whenever possible. The expected sequence is `create_view` -> inspect/preserve the preview scene -> `export_to_excalidraw` with a full native scene object.\n1. Strip all `cameraUpdate`, `delete`, `restoreCheckpoint`, and other MCP-only pseudo-elements.\n2. Do **not** strip native Excalidraw editability fields such as `containerId`, shape `boundElements`, arrow `startBinding`, arrow `endBinding`, `groupIds`, or arrow labels.\n3. **Do not pass the raw element array to `export_to_excalidraw`.** `create_view` takes an array, but the exporter needs a serialized full scene object.\n4. Export a real Excalidraw scene payload with `type`, `version`, `source`, `elements`, `appState`, and `files`.\n4. Ensure `elements` is non-empty and contains actual shapes/arrows/text, not only preview/camera metadata.\n5. After export, verify the share link before replying. Use the browser when available, or another concrete inspection path that proves the link contains non-empty scene data. Do not rely on the exporter returning a URL as proof.\n6. If the first share link opens empty or export times out, regenerate the export from the same full scene object before replying.\n7. Do not deliver an empty, camera-only, raw-array, or unrelated simplified export link.\n8. If you must simplify to recover from repeated export failures, disclose that the link is a simplified fallback and keep the inline preview as the source of truth.\n9. If verification still fails, do not provide any fallback artifact by default. Say the export failed verification and ask whether the user wants another attempt or a different requested format. No fallback is better than surprising the user with an artifact they did not ask for.\n\nMinimal export shape:\n\n```json\n{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"openclaw\",\n  \"elements\": [\n    { \"type\": \"rectangle\", \"id\": \"example\", \"x\": 0, \"y\": 0, \"width\": 160, \"height\": 80 }\n  ],\n  \"appState\": { \"viewBackgroundColor\": \"#ffffff\" },\n  \"files\": {}\n}\n```\n\n## Memory & User Preference Guidance\n\nIf a user states a durable Excalidraw preference, such as always wanting editable links with diagram replies, update the appropriate OpenClaw memory using the workspace memory policy. Keep it concise and preference-focused; do not store one-off diagram details or broken-export noise.\n\n## Artifact Progression Guidance\n\nFor blog posts, tutorials, case studies, or debugging write-ups, keep useful intermediate Excalidraw links instead of replacing them all.\n\nGood progression artifacts include:\n\n- First hello-world or minimal proof-of-life scene.\n- Broken/empty export that motivated a fix.\n- Early rough diagram before layout or label improvements.\n- Final polished diagram.\n\nUse these links as iteration evidence when they help tell the story. Do not clutter normal user deliverables with every intermediate link unless the user is writing about the process.\n\n## Fallbacks\n\nIf labels or fonts fail again:\n\n1. Regenerate with fewer, larger boxes and explicit text.\n2. Avoid all `label` shortcut fields.\n3. If bound container text fails, remove `containerId`/`boundElements` and use visually positioned standalone text.\n4. If arrow binding fails, first check that connected shapes include matching arrow `boundElements`; if it still fails, remove `startBinding`/`endBinding` and use visually positioned arrows.\n5. If still broken, use another export path such as SVG/PNG or a different diagram tool.\n6. Tell the user plainly that the MCP/export path is dropping metadata.\n\n## Style Defaults\n\n- Use Excalidraw's built-in pastel palette where possible.\n- Keep diagrams readable at Discord/web preview sizes.\n- Prefer fewer large elements over many tiny elements.\n- Use camera updates for complex diagrams, but keep the final overview clear.\n- For system diagrams, show boundaries such as cluster, control plane, worker nodes, services, storage, and external clients.\n- Do not add a legend by default. Add one only if the user asks, or if the diagram uses 3+ arrow styles/colors whose meanings are not obvious. Prefer direct labels near arrows when that is enough.\n\n## Readability Budget\n\nDefault to a readable overview unless the user explicitly asks for a dense/deep technical diagram.\n\n- Aim for roughly 8-12 major boxes or groups in the main view.\n- Use `fontSize: 16` as the minimum for normal labels and body text.\n- Use `fontSize: 20+` for titles, section headers, and key concepts.\n- Prefer overview + callout boxes over cramming every detail into one canvas.\n- If the topic needs more detail, create a secondary zoom/callout area or suggest a follow-up diagram.\n- The user can override this when they want a denser architecture map, but readability wins by default.\n\n## Arrow Routing\n\nTreat arrow routing as a first-class readability concern.\n\nBest effort rules:\n\n- Avoid drawing arrows through text, labels, or the center of important boxes.\n- Prefer orthogonal paths with bends around content when a straight arrow would cross labels.\n- Put arrow labels beside the line, not directly under another arrow.\n- Leave whitespace corridors between groups for traffic arrows.\n- If multiple arrows must cross the same area, route one above and one below rather than stacking them.\n- Use dashed arrows only for secondary/control/config flows, but still keep them away from text.\n- If a perfect route is too hard in generated coordinates, make a cleaner first draft and tell the user it may need minor manual nudging in Excalidraw.\n\n### Arrow Routing Recipes\n\nUse these common patterns before inventing custom paths:\n\n#### Left-to-right pipeline\n\n- Arrange stages horizontally with consistent spacing.\n- Route primary data flow as solid arrows from right edge to left edge.\n- Put arrow labels above the line, centered in the whitespace between boxes.\n- If a side input exists, place it above or below the relevant stage and route a short orthogonal arrow into that stage.\n\n#### Hub-and-spoke\n\n- Put the shared service, broker, bus, or control component in the center.\n- Place clients around the perimeter in clusters.\n- Route arrows radially, but bend them around central labels.\n- Use color or labels to distinguish inbound vs outbound flows.\n\n#### Top-down control plane\n\n- Put users/API/automation at the top, control plane in the middle, workers/data plane at the bottom.\n- Use vertical solid arrows for primary commands or traffic.\n- Use dashed arrows for reconciliation, discovery, metadata, health checks, and configuration.\n- Keep the control-plane box wide enough that arrows can land on edges instead of crossing its title.\n\n#### Dashed metadata/control flows\n\n- Use dashed arrows only for secondary relationships: metadata, config, coordination, replication hints, offset commits, health checks.\n- Keep dashed arrows thinner or visually lighter than primary data-path arrows.\n- Label dashed flows explicitly so they are not confused with user/data traffic.\n- Route dashed flows around the outside edge of major groups when possible.\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn7dxkpss1n6rar4t4wz00atms8156k6\",\n  \"slug\": \"excaliclaw\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1777140651594\n}\n\nFile v1.0.2:skill-card.md\n\n## Description:\n\nCreate reliable Excalidraw diagrams in OpenClaw using the Excalidraw MCP, with export-safe labels, Excalifont text, and clear system-diagram structure.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[nickytonline](https://clawhub.ai/user/nickytonline)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and technical teams use Excaliclaw to create editable Excalidraw architecture diagrams, system diagrams, flowcharts, and hand-drawn style diagrams in OpenClaw. The skill emphasizes preview-first diagram generation, export-safe native Excalidraw scenes, readable labels, and preserved editability metadata.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Diagram content may be shared externally through an editable excalidraw.com link.\n\nMitigation: Review diagram content before approving export or sharing, and only share externally when the content is acceptable.\n\nRisk: The skill may ask to install or configure an Excalidraw MCP, which changes the local agent environment.\n\nMitigation: Require explicit user approval before installation or configuration, use current OpenClaw-supported setup paths, and verify MCP availability with a minimal scene before proceeding.\n\nRisk: Exports can fail, be empty, or lose editability metadata if preview and export payloads diverge.\n\nMitigation: Preview the diagram first, export the same full native Excalidraw scene, preserve binding metadata, and verify the exported link is non-empty before delivering it.\n\n## Reference(s):\n\n- [Excaliclaw on ClawHub](https://clawhub.ai/nickytonline/skills/excaliclaw)\n- [nickytonline Publisher Profile](https://clawhub.ai/user/nickytonline)\n- [Excalidraw](https://excalidraw.com)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with JSON scene examples, shell or configuration instructions when setup is approved, and editable Excalidraw links when export succeeds.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May produce fallback diagram formats such as Excalidraw JSON, SVG/PNG, or Mermaid when MCP preview or export is unavailable.]\n\n## Skill Version(s):\n\n1.0.2 (source: frontmatter and server-resolved release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.1: 2 files, 6643 bytes\n\nFiles: SKILL.md (17138b), _meta.json (129b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: excaliclaw\nversion: 1.0.1\ndescription: Create reliable Excalidraw diagrams in OpenClaw using the Excalidraw MCP, with export-safe labels, Excalifont text, and clear system-diagram structure. Use when the user asks for an Excalidraw diagram, architecture diagram, system diagram, flowchart, or hand-drawn diagram.\nuser-invocable: true\nargument-hint: \"[diagram topic]\"\n---\n\n# Excaliclaw\n\nCreate diagrams with the Excalidraw MCP in a way that survives OpenClaw rendering and Excalidraw export.\n\n## Core Rule\n\nUse real Excalidraw elements, but do **not** rely on MCP `label` shortcuts for final diagrams.\n\nThis skill overrides Excalidraw MCP helper docs if they recommend `label` shortcuts. The shortcut can render in preview but drop labels in exported Excalidraw links. For deliverables, every visible label must be a real `text` element, either container-bound or visually placed.\n\n## MCP Availability Preflight\n\nBefore creating or exporting a diagram, verify that the Excalidraw MCP tools are available in the current OpenClaw session.\n\nExpected behavior:\n\n1. If the Excalidraw MCP tools are available, continue with the normal diagram workflow.\n2. If the tools are missing, tell the user plainly: “Excalidraw MCP is not installed or not available in this OpenClaw session.”\n3. Ask whether the user wants it installed as a Streamable HTTP MCP before changing OpenClaw configuration, installing packages, or restarting/reloading services.\n4. If the user agrees, use the current OpenClaw-supported MCP configuration path. Do not invent commands; check local OpenClaw docs or CLI help first if the install/config command is not already known.\n5. After installation, reload/restart only what is required, then verify with a minimal hello-world Excalidraw scene before attempting the requested diagram.\n6. If installation fails or the user declines, offer a fallback such as Excalidraw JSON, SVG/PNG, Mermaid, or another diagram format, and state that MCP preview/export will not be available.\n\nDo not silently auto-install the MCP just because a diagram was requested. Installing an MCP is an environment change and needs explicit user approval unless the user already asked to set it up.\n\nReliable pattern:\n\n1. Draw the shape first.\n2. Draw a separate explicit `text` element for the label. Never use shape/arrow `label` shortcut fields in deliverables.\n3. Bind box labels to their shapes using Excalidraw container text fields (`containerId` on the text + matching `{ \"type\": \"text\", \"id\": ... }` in the shape's `boundElements`) when that survives preview and export.\n4. If bound container text is unreliable, use standalone visually placed `text` elements. Do not switch to `label` shortcuts as a fallback.\n5. Bind arrows based on meaning, not just appearance: if the arrow means “this step talks to that specific step/box,” bind it with `startBinding` and `endBinding`; route around labels if needed. Do **not** bind arrows that merely point into a lane, group, or general area without targeting a specific box.\n6. For every bound arrow, include reciprocal `{ \"type\": \"arrow\", \"id\": ... }` entries in both connected shapes' `boundElements`.\n7. Set `fontFamily: 1` on every text element to use Excalidraw's hand-drawn Excalifont.\n8. Include `width` and `height` on every text element.\n9. Put text elements after their shapes in draw order.\n10. Label major boxes and important arrows unless the user explicitly wants an unlabeled or abstract diagram.\n11. Export/share only after checking that labels rendered correctly in the MCP preview and in the exported Excalidraw link.\n12. Before exporting, verify that the export JSON contains explicit `text` elements for every visible label. If using editable labels, also verify `containerId`, shape `boundElements`, and arrow `startBinding`/`endBinding`. Do not flatten connected arrows accidentally, but visible labels are more important than editability.\n\n## Recommended Element Recipe\n\n### Labeled box\n\nBest default for editable diagrams: bind the text to the rectangle so Excalidraw treats it as the box label when the user drags or edits the box.\n\n```json\n[\n  {\n    \"type\": \"rectangle\",\n    \"id\": \"box-api\",\n    \"x\": 100,\n    \"y\": 100,\n    \"width\": 180,\n    \"height\": 70,\n    \"backgroundColor\": \"#d0bfff\",\n    \"fillStyle\": \"solid\",\n    \"roundness\": { \"type\": 3 },\n    \"strokeColor\": \"#8b5cf6\",\n    \"boundElements\": [{ \"type\": \"text\", \"id\": \"txt-api\" }]\n  },\n  {\n    \"type\": \"text\",\n    \"id\": \"txt-api\",\n    \"x\": 130,\n    \"y\": 123,\n    \"width\": 120,\n    \"height\": 24,\n    \"text\": \"API Server\",\n    \"fontSize\": 16,\n    \"fontFamily\": 1,\n    \"strokeColor\": \"#1e1e1e\",\n    \"containerId\": \"box-api\",\n    \"textAlign\": \"center\",\n    \"verticalAlign\": \"middle\"\n  }\n]\n```\n\nIf bound container text fails in MCP preview or export, fall back to the same explicit text element without `containerId`/`boundElements`. Keep the label visually centered, but tell the user it may not move with the box. Do not silently fall back.\n\nAvoid this shortcut for final deliverables, including export payloads:\n\n```json\n{\n  \"type\": \"rectangle\",\n  \"id\": \"api\",\n  \"label\": { \"text\": \"API Server\" }\n}\n```\n\nThe `label` shortcut may look convenient, but it has proven flaky in OpenClaw/Excalidraw MCP export paths. Do not use shortcut labels in either preview or export payloads for final deliverables; exported diagrams can appear correct in preview while opening with missing labels on excalidraw.com.\n\nIf an export needs maximum reliability, prefer standalone explicit `text` elements over shortcut labels, even if that means labels are visually placed instead of container-bound. Accuracy of visible labels beats editability.\n\n### Connected arrow\n\nBind based on meaning, not just appearance. When an arrow means “this step talks to that specific step/box,” bind the endpoints to the source and target boxes. This lets Excalidraw keep the arrow attached when the user moves either box.\n\nFor arrow binding to survive editing/export, include both sides of the relationship:\n\n- The arrow has `startBinding` and `endBinding` with the connected shape IDs.\n- Each connected shape has a matching `boundElements` entry for the arrow.\n\nPrefer simple straight bound arrows first. Avoid multi-segment/elbow bound arrows unless you verify they render and remain editable correctly; they can look warped or appear unbound in Excalidraw exports. If labels or spacing make the connection awkward, fix the layout by moving boxes/labels before adding complex arrow routing.\n\nDo **not** bind arrows that only point into a lane, group, note area, or nearby whitespace. For example, in swim lane diagrams, an arrow may leave one box and point generally into another lane before the next step appears; that should remain a visually positioned arrow, not a box-bound connector.\n\n```json\n[\n  {\n    \"type\": \"rectangle\",\n    \"id\": \"box-client\",\n    \"x\": 100,\n    \"y\": 100,\n    \"width\": 140,\n    \"height\": 70,\n    \"backgroundColor\": \"#a5d8ff\",\n    \"fillStyle\": \"solid\",\n    \"roundness\": { \"type\": 3 },\n    \"boundElements\": [{ \"type\": \"arrow\", \"id\": \"arr-client-api\" }]\n  },\n  {\n    \"type\": \"rectangle\",\n    \"id\": \"box-api\",\n    \"x\": 380,\n    \"y\": 100,\n    \"width\": 140,\n    \"height\": 70,\n    \"backgroundColor\": \"#d0bfff\",\n    \"fillStyle\": \"solid\",\n    \"roundness\": { \"type\": 3 },\n    \"boundElements\": [{ \"type\": \"arrow\", \"id\": \"arr-client-api\" }]\n  },\n  {\n    \"type\": \"arrow\",\n    \"id\": \"arr-client-api\",\n    \"x\": 240,\n    \"y\": 135,\n    \"width\": 140,\n    \"height\": 0,\n    \"points\": [[0, 0], [140, 0]],\n    \"endArrowhead\": \"arrow\",\n    \"strokeColor\": \"#1e1e1e\",\n    \"startBinding\": { \"elementId\": \"box-client\", \"fixedPoint\": [1, 0.5] },\n    \"endBinding\": { \"elementId\": \"box-api\", \"fixedPoint\": [0, 0.5] }\n  }\n]\n```\n\nUse common `fixedPoint` values:\n\n- Right edge: `[1, 0.5]`\n- Left edge: `[0, 0.5]`\n- Top edge: `[0.5, 0]`\n- Bottom edge: `[0.5, 1]`\n\n### Labeled arrow\n\nPrefer a bound arrow plus a separate text element near the arrow:\n\n```json\n[\n  {\n    \"type\": \"arrow\",\n    \"id\": \"arr-client-api\",\n    \"x\": 260,\n    \"y\": 130,\n    \"width\": 120,\n    \"height\": 0,\n    \"points\": [[0, 0], [120, 0]],\n    \"endArrowhead\": \"arrow\",\n    \"strokeColor\": \"#1e1e1e\",\n    \"startBinding\": { \"elementId\": \"box-client\", \"fixedPoint\": [1, 0.5] },\n    \"endBinding\": { \"elementId\": \"box-api\", \"fixedPoint\": [0, 0.5] }\n  },\n  {\n    \"type\": \"text\",\n    \"id\": \"txt-client-api\",\n    \"x\": 290,\n    \"y\": 100,\n    \"width\": 70,\n    \"height\": 20,\n    \"text\": \"HTTPS\",\n    \"fontSize\": 14,\n    \"fontFamily\": 1,\n    \"strokeColor\": \"#757575\"\n  }\n]\n```\n\nIf arrow binding fails in MCP preview or export, fall back to visually positioned arrows and tell the user they may need to reconnect arrows manually.\n\nUse visually positioned arrows, not bindings, when:\n\n- the arrow points to a lane or region rather than a specific box\n- the arrow lands near text, a label, or empty space inside another lane\n- the arrow represents continuation, return direction, or emphasis rather than a strict object-to-object connection\n- binding would make later manual editing more surprising than helpful\n- a multi-point/elbow bound arrow renders awkwardly or appears detached after export\n\n## Font Guidance\n\nDefault to:\n\n```json\n\"fontFamily\": 1\n```\n\nThis maps to Excalidraw's hand-drawn Excalifont in normal Excalidraw scenes.\n\nIf the user asks for font options, verify the current Excalidraw element model before giving exact numeric values. Common Excalidraw families are hand-drawn/Excalifont, normal/sans, code/monospace, and comic-style, but do not promise exact IDs without checking.\n\n## Diagram Quality Checklist\n\nBefore exporting/delivering:\n\n- Title is visible.\n- Every major element has visible text.\n- Important connections have visible labels.\n- No shape, arrow, or other element uses the shortcut `label` field in the final preview or export payload.\n- Every visible label is represented by an explicit `text` element.\n- Text uses `fontFamily: 1`.\n- Text has `width` and `height`.\n- Box labels use `containerId` + matching shape `boundElements` when reliable; if not, standalone visually placed text is acceptable.\n- Arrows that semantically connect two specific boxes use `startBinding` and `endBinding` with the correct shape IDs when reliable; if not, visually positioned arrows are acceptable.\n- Connected boxes include reciprocal `boundElements` entries for their connected arrows when arrows are bound.\n- Export payload preserves explicit text labels. If using editable labels/arrows, also preserve `containerId`, `boundElements`, `startBinding`, and `endBinding` fields.\n- Prefer straight bound arrows; only use elbow/multi-point bound arrows after preview/export verification.\n- Arrows that only point into lanes, groups, labels, whitespace, or general regions remain visually positioned and unbound.\n- Text appears after its shape in element order.\n- No text overlaps other text, arrows, or important shapes.\n- Arrows avoid crossing through text, labels, or important content wherever possible.\n- The MCP preview shows labels before exporting.\n- The exported Excalidraw link opens a non-empty diagram and shows all labels.\n- The exported Excalidraw link is included if requested or expected.\n\n## Final Export Payload Rule\n\n`cameraUpdate` is only stage direction for the OpenClaw live preview. It is not a real Excalidraw scene element.\n\nWhen exporting to excalidraw.com:\n\n1. Strip all `cameraUpdate`, `delete`, `restoreCheckpoint`, and other MCP-only pseudo-elements.\n2. **Do not pass the raw element array to `export_to_excalidraw`.** `create_view` takes an array, but the exporter needs a serialized full scene object.\n3. Export a real Excalidraw scene payload with `type`, `version`, `source`, `elements`, `appState`, and `files`.\n4. Ensure `elements` is non-empty and contains actual shapes/arrows/text, not only preview/camera metadata.\n5. Ensure the export payload contains no `label` shortcut fields. Convert all shortcut labels into explicit `text` elements before export.\n6. If the first share link opens empty or loses labels, regenerate the export from the full scene object using explicit text elements before replying.\n7. Do not deliver an empty, camera-only, raw-array, or partially unlabeled export link.\n\nMinimal export shape:\n\n```json\n{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"openclaw\",\n  \"elements\": [\n    { \"type\": \"rectangle\", \"id\": \"example\", \"x\": 0, \"y\": 0, \"width\": 160, \"height\": 80 }\n  ],\n  \"appState\": { \"viewBackgroundColor\": \"#ffffff\" },\n  \"files\": {}\n}\n```\n\n## Artifact Progression Guidance\n\nFor blog posts, tutorials, case studies, or debugging write-ups, keep useful intermediate Excalidraw links instead of replacing them all.\n\nGood progression artifacts include:\n\n- First hello-world or minimal proof-of-life scene.\n- Broken/empty export that motivated a fix.\n- Early rough diagram before layout or label improvements.\n- Final polished diagram.\n\nUse these links as iteration evidence when they help tell the story. Do not clutter normal user deliverables with every intermediate link unless the user is writing about the process.\n\n## Fallbacks\n\nIf labels or fonts fail again:\n\n1. Regenerate with fewer, larger boxes and explicit text.\n2. Avoid all `label` shortcut fields.\n3. If bound container text fails, remove `containerId`/`boundElements` and use visually positioned standalone text.\n4. If arrow binding fails, first check that connected shapes include matching arrow `boundElements`; if it still fails, remove `startBinding`/`endBinding` and use visually positioned arrows.\n5. If still broken, use another export path such as SVG/PNG or a different diagram tool.\n6. Tell the user plainly that the MCP/export path is dropping metadata.\n\n## Style Defaults\n\n- Use Excalidraw's built-in pastel palette where possible.\n- Keep diagrams readable at Discord/web preview sizes.\n- Prefer fewer large elements over many tiny elements.\n- Use camera updates for complex diagrams, but keep the final overview clear.\n- For system diagrams, show boundaries such as cluster, control plane, worker nodes, services, storage, and external clients.\n- Do not add a legend by default. Add one only if the user asks, or if the diagram uses 3+ arrow styles/colors whose meanings are not obvious. Prefer direct labels near arrows when that is enough.\n\n## Readability Budget\n\nDefault to a readable overview unless the user explicitly asks for a dense/deep technical diagram.\n\n- Aim for roughly 8-12 major boxes or groups in the main view.\n- Use `fontSize: 16` as the minimum for normal labels and body text.\n- Use `fontSize: 20+` for titles, section headers, and key concepts.\n- Prefer overview + callout boxes over cramming every detail into one canvas.\n- If the topic needs more detail, create a secondary zoom/callout area or suggest a follow-up diagram.\n- The user can override this when they want a denser architecture map, but readability wins by default.\n\n## Arrow Routing\n\nTreat arrow routing as a first-class readability concern.\n\nBest effort rules:\n\n- Avoid drawing arrows through text, labels, or the center of important boxes.\n- Prefer orthogonal paths with bends around content when a straight arrow would cross labels.\n- Put arrow labels beside the line, not directly under another arrow.\n- Leave whitespace corridors between groups for traffic arrows.\n- If multiple arrows must cross the same area, route one above and one below rather than stacking them.\n- Use dashed arrows only for secondary/control/config flows, but still keep them away from text.\n- If a perfect route is too hard in generated coordinates, make a cleaner first draft and tell the user it may need minor manual nudging in Excalidraw.\n\n### Arrow Routing Recipes\n\nUse these common patterns before inventing custom paths:\n\n#### Left-to-right pipeline\n\n- Arrange stages horizontally with consistent spacing.\n- Route primary data flow as solid arrows from right edge to left edge.\n- Put arrow labels above the line, centered in the whitespace between boxes.\n- If a side input exists, place it above or below the relevant stage and route a short orthogonal arrow into that stage.\n\n#### Hub-and-spoke\n\n- Put the shared service, broker, bus, or control component in the center.\n- Place clients around the perimeter in clusters.\n- Route arrows radially, but bend them around central labels.\n- Use color or labels to distinguish inbound vs outbound flows.\n\n#### Top-down control plane\n\n- Put users/API/automation at the top, control plane in the middle, workers/data plane at the bottom.\n- Use vertical solid arrows for primary commands or traffic.\n- Use dashed arrows for reconciliation, discovery, metadata, health checks, and configuration.\n- Keep the control-plane box wide enough that arrows can land on edges instead of crossing its title.\n\n#### Dashed metadata/control flows\n\n- Use dashed arrows only for secondary relationships: metadata, config, coordination, replication hints, offset commits, health checks.\n- Keep dashed arrows thinner or visually lighter than primary data-path arrows.\n- Label dashed flows explicitly so they are not confused with user/data traffic.\n- Route dashed flows around the outside edge of major groups when possible.\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7dxkpss1n6rar4t4wz00atms8156k6\",\n  \"slug\": \"excaliclaw\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1777134782279\n}\n\nArchive v1.0.0: 2 files, 6294 bytes\n\nFiles: SKILL.md (15893b), _meta.json (129b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: excaliclaw\nversion: 1.0.0\ndescription: Create reliable Excalidraw diagrams in OpenClaw using the Excalidraw MCP, with export-safe labels, Excalifont text, and clear system-diagram structure. Use when the user asks for an Excalidraw diagram, architecture diagram, system diagram, flowchart, or hand-drawn diagram.\nuser-invocable: true\nargument-hint: \"[diagram topic]\"\n---\n\n# Excaliclaw\n\nCreate diagrams with the Excalidraw MCP in a way that survives OpenClaw rendering and Excalidraw export.\n\n## Core Rule\n\nUse real Excalidraw elements, but do **not** rely on MCP `label` shortcuts for final diagrams.\n\n## MCP Availability Preflight\n\nBefore creating or exporting a diagram, verify that the Excalidraw MCP tools are available in the current OpenClaw session.\n\nExpected behavior:\n\n1. If the Excalidraw MCP tools are available, continue with the normal diagram workflow.\n2. If the tools are missing, tell the user plainly: “Excalidraw MCP is not installed or not available in this OpenClaw session.”\n3. Ask whether the user wants it installed as a Streamable HTTP MCP before changing OpenClaw configuration, installing packages, or restarting/reloading services.\n4. If the user agrees, use the current OpenClaw-supported MCP configuration path. Do not invent commands; check local OpenClaw docs or CLI help first if the install/config command is not already known.\n5. After installation, reload/restart only what is required, then verify with a minimal hello-world Excalidraw scene before attempting the requested diagram.\n6. If installation fails or the user declines, offer a fallback such as Excalidraw JSON, SVG/PNG, Mermaid, or another diagram format, and state that MCP preview/export will not be available.\n\nDo not silently auto-install the MCP just because a diagram was requested. Installing an MCP is an environment change and needs explicit user approval unless the user already asked to set it up.\n\nReliable pattern:\n\n1. Draw the shape first.\n2. Draw a separate explicit `text` element for the label.\n3. Bind box labels to their shapes using Excalidraw container text fields (`containerId` on the text + matching `{ \"type\": \"text\", \"id\": ... }` in the shape's `boundElements`). This is mandatory for editable box labels unless preview/export proves it broken.\n4. Bind arrows based on meaning, not just appearance: if the arrow means “this step talks to that specific step/box,” bind it with `startBinding` and `endBinding`; route around labels if needed. Do **not** bind arrows that merely point into a lane, group, or general area without targeting a specific box.\n5. For every bound arrow, include reciprocal `{ \"type\": \"arrow\", \"id\": ... }` entries in both connected shapes' `boundElements`.\n6. Set `fontFamily: 1` on every text element to use Excalidraw's hand-drawn Excalifont.\n7. Include `width` and `height` on every text element.\n8. Put text elements after their shapes in draw order.\n9. Label major boxes and important arrows unless the user explicitly wants an unlabeled or abstract diagram.\n10. Export/share only after checking that labels rendered correctly in the MCP preview.\n11. Before exporting, verify that the export JSON still contains `containerId`, shape `boundElements`, and arrow `startBinding`/`endBinding`. Do not flatten bound labels or connected arrows into loose visual text/lines during export.\n\n## Recommended Element Recipe\n\n### Labeled box\n\nBest default for editable diagrams: bind the text to the rectangle so Excalidraw treats it as the box label when the user drags or edits the box.\n\n```json\n[\n  {\n    \"type\": \"rectangle\",\n    \"id\": \"box-api\",\n    \"x\": 100,\n    \"y\": 100,\n    \"width\": 180,\n    \"height\": 70,\n    \"backgroundColor\": \"#d0bfff\",\n    \"fillStyle\": \"solid\",\n    \"roundness\": { \"type\": 3 },\n    \"strokeColor\": \"#8b5cf6\",\n    \"boundElements\": [{ \"type\": \"text\", \"id\": \"txt-api\" }]\n  },\n  {\n    \"type\": \"text\",\n    \"id\": \"txt-api\",\n    \"x\": 130,\n    \"y\": 123,\n    \"width\": 120,\n    \"height\": 24,\n    \"text\": \"API Server\",\n    \"fontSize\": 16,\n    \"fontFamily\": 1,\n    \"strokeColor\": \"#1e1e1e\",\n    \"containerId\": \"box-api\",\n    \"textAlign\": \"center\",\n    \"verticalAlign\": \"middle\"\n  }\n]\n```\n\nIf bound container text fails in MCP preview or export, fall back to the same explicit text element without `containerId`/`boundElements`. Keep the label visually centered, but tell the user it may not move with the box. Do not silently fall back.\n\nAvoid this shortcut for final deliverables:\n\n```json\n{\n  \"type\": \"rectangle\",\n  \"id\": \"api\",\n  \"label\": { \"text\": \"API Server\" }\n}\n```\n\nThe `label` shortcut may look convenient, but it has proven flaky in OpenClaw/Excalidraw MCP export paths. Do not use shortcut labels in either preview or export payloads for final deliverables; otherwise exported diagrams can appear correct while losing editability.\n\n### Connected arrow\n\nBind based on meaning, not just appearance. When an arrow means “this step talks to that specific step/box,” bind the endpoints to the source and target boxes. This lets Excalidraw keep the arrow attached when the user moves either box.\n\nFor arrow binding to survive editing/export, include both sides of the relationship:\n\n- The arrow has `startBinding` and `endBinding` with the connected shape IDs.\n- Each connected shape has a matching `boundElements` entry for the arrow.\n\nPrefer simple straight bound arrows first. Avoid multi-segment/elbow bound arrows unless you verify they render and remain editable correctly; they can look warped or appear unbound in Excalidraw exports. If labels or spacing make the connection awkward, fix the layout by moving boxes/labels before adding complex arrow routing.\n\nDo **not** bind arrows that only point into a lane, group, note area, or nearby whitespace. For example, in swim lane diagrams, an arrow may leave one box and point generally into another lane before the next step appears; that should remain a visually positioned arrow, not a box-bound connector.\n\n```json\n[\n  {\n    \"type\": \"rectangle\",\n    \"id\": \"box-client\",\n    \"x\": 100,\n    \"y\": 100,\n    \"width\": 140,\n    \"height\": 70,\n    \"backgroundColor\": \"#a5d8ff\",\n    \"fillStyle\": \"solid\",\n    \"roundness\": { \"type\": 3 },\n    \"boundElements\": [{ \"type\": \"arrow\", \"id\": \"arr-client-api\" }]\n  },\n  {\n    \"type\": \"rectangle\",\n    \"id\": \"box-api\",\n    \"x\": 380,\n    \"y\": 100,\n    \"width\": 140,\n    \"height\": 70,\n    \"backgroundColor\": \"#d0bfff\",\n    \"fillStyle\": \"solid\",\n    \"roundness\": { \"type\": 3 },\n    \"boundElements\": [{ \"type\": \"arrow\", \"id\": \"arr-client-api\" }]\n  },\n  {\n    \"type\": \"arrow\",\n    \"id\": \"arr-client-api\",\n    \"x\": 240,\n    \"y\": 135,\n    \"width\": 140,\n    \"height\": 0,\n    \"points\": [[0, 0], [140, 0]],\n    \"endArrowhead\": \"arrow\",\n    \"strokeColor\": \"#1e1e1e\",\n    \"startBinding\": { \"elementId\": \"box-client\", \"fixedPoint\": [1, 0.5] },\n    \"endBinding\": { \"elementId\": \"box-api\", \"fixedPoint\": [0, 0.5] }\n  }\n]\n```\n\nUse common `fixedPoint` values:\n\n- Right edge: `[1, 0.5]`\n- Left edge: `[0, 0.5]`\n- Top edge: `[0.5, 0]`\n- Bottom edge: `[0.5, 1]`\n\n### Labeled arrow\n\nPrefer a bound arrow plus a separate text element near the arrow:\n\n```json\n[\n  {\n    \"type\": \"arrow\",\n    \"id\": \"arr-client-api\",\n    \"x\": 260,\n    \"y\": 130,\n    \"width\": 120,\n    \"height\": 0,\n    \"points\": [[0, 0], [120, 0]],\n    \"endArrowhead\": \"arrow\",\n    \"strokeColor\": \"#1e1e1e\",\n    \"startBinding\": { \"elementId\": \"box-client\", \"fixedPoint\": [1, 0.5] },\n    \"endBinding\": { \"elementId\": \"box-api\", \"fixedPoint\": [0, 0.5] }\n  },\n  {\n    \"type\": \"text\",\n    \"id\": \"txt-client-api\",\n    \"x\": 290,\n    \"y\": 100,\n    \"width\": 70,\n    \"height\": 20,\n    \"text\": \"HTTPS\",\n    \"fontSize\": 14,\n    \"fontFamily\": 1,\n    \"strokeColor\": \"#757575\"\n  }\n]\n```\n\nIf arrow binding fails in MCP preview or export, fall back to visually positioned arrows and tell the user they may need to reconnect arrows manually.\n\nUse visually positioned arrows, not bindings, when:\n\n- the arrow points to a lane or region rather than a specific box\n- the arrow lands near text, a label, or empty space inside another lane\n- the arrow represents continuation, return direction, or emphasis rather than a strict object-to-object connection\n- binding would make later manual editing more surprising than helpful\n- a multi-point/elbow bound arrow renders awkwardly or appears detached after export\n\n## Font Guidance\n\nDefault to:\n\n```json\n\"fontFamily\": 1\n```\n\nThis maps to Excalidraw's hand-drawn Excalifont in normal Excalidraw scenes.\n\nIf the user asks for font options, verify the current Excalidraw element model before giving exact numeric values. Common Excalidraw families are hand-drawn/Excalifont, normal/sans, code/monospace, and comic-style, but do not promise exact IDs without checking.\n\n## Diagram Quality Checklist\n\nBefore exporting/delivering:\n\n- Title is visible.\n- Every major element has visible text.\n- Important connections have visible labels.\n- Text uses `fontFamily: 1`.\n- Text has `width` and `height`.\n- Box labels use `containerId` + matching shape `boundElements`; if not, the final answer explicitly says labels are visually placed only.\n- Arrows that semantically connect two specific boxes use `startBinding` and `endBinding` with the correct shape IDs; if not, the final answer explicitly says arrows are visually placed only.\n- Connected boxes include reciprocal `boundElements` entries for their connected arrows.\n- Export payload preserves those same `containerId`, `boundElements`, `startBinding`, and `endBinding` fields; do not convert editable relationships into loose shapes during export.\n- Prefer straight bound arrows; only use elbow/multi-point bound arrows after preview/export verification.\n- Arrows that only point into lanes, groups, labels, whitespace, or general regions remain visually positioned and unbound.\n- Text appears after its shape in element order.\n- No text overlaps other text, arrows, or important shapes.\n- Arrows avoid crossing through text, labels, or important content wherever possible.\n- The MCP preview shows labels before exporting.\n- The exported Excalidraw link opens a non-empty diagram.\n- The exported Excalidraw link is included if requested or expected.\n\n## Final Export Payload Rule\n\n`cameraUpdate` is only stage direction for the OpenClaw live preview. It is not a real Excalidraw scene element.\n\nWhen exporting to excalidraw.com:\n\n1. Strip all `cameraUpdate`, `delete`, `restoreCheckpoint`, and other MCP-only pseudo-elements.\n2. **Do not pass the raw element array to `export_to_excalidraw`.** `create_view` takes an array, but the exporter needs a serialized full scene object.\n3. Export a real Excalidraw scene payload with `type`, `version`, `source`, `elements`, `appState`, and `files`.\n4. Ensure `elements` is non-empty and contains actual shapes/arrows/text, not only preview/camera metadata.\n5. If the first share link opens empty, regenerate the export from the full scene object before replying.\n6. Do not deliver an empty, camera-only, or raw-array export link.\n\nMinimal export shape:\n\n```json\n{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"openclaw\",\n  \"elements\": [\n    { \"type\": \"rectangle\", \"id\": \"example\", \"x\": 0, \"y\": 0, \"width\": 160, \"height\": 80 }\n  ],\n  \"appState\": { \"viewBackgroundColor\": \"#ffffff\" },\n  \"files\": {}\n}\n```\n\n## Artifact Progression Guidance\n\nFor blog posts, tutorials, case studies, or debugging write-ups, keep useful intermediate Excalidraw links instead of replacing them all.\n\nGood progression artifacts include:\n\n- First hello-world or minimal proof-of-life scene.\n- Broken/empty export that motivated a fix.\n- Early rough diagram before layout or label improvements.\n- Final polished diagram.\n\nUse these links as iteration evidence when they help tell the story. Do not clutter normal user deliverables with every intermediate link unless the user is writing about the process.\n\n## Fallbacks\n\nIf labels or fonts fail again:\n\n1. Regenerate with fewer, larger boxes and explicit text.\n2. Avoid all `label` shortcut fields.\n3. If bound container text fails, remove `containerId`/`boundElements` and use visually positioned standalone text.\n4. If arrow binding fails, first check that connected shapes include matching arrow `boundElements`; if it still fails, remove `startBinding`/`endBinding` and use visually positioned arrows.\n5. If still broken, use another export path such as SVG/PNG or a different diagram tool.\n6. Tell the user plainly that the MCP/export path is dropping metadata.\n\n## Style Defaults\n\n- Use Excalidraw's built-in pastel palette where possible.\n- Keep diagrams readable at Discord/web preview sizes.\n- Prefer fewer large elements over many tiny elements.\n- Use camera updates for complex diagrams, but keep the final overview clear.\n- For system diagrams, show boundaries such as cluster, control plane, worker nodes, services, storage, and external clients.\n- Do not add a legend by default. Add one only if the user asks, or if the diagram uses 3+ arrow styles/colors whose meanings are not obvious. Prefer direct labels near arrows when that is enough.\n\n## Readability Budget\n\nDefault to a readable overview unless the user explicitly asks for a dense/deep technical diagram.\n\n- Aim for roughly 8-12 major boxes or groups in the main view.\n- Use `fontSize: 16` as the minimum for normal labels and body text.\n- Use `fontSize: 20+` for titles, section headers, and key concepts.\n- Prefer overview + callout boxes over cramming every detail into one canvas.\n- If the topic needs more detail, create a secondary zoom/callout area or suggest a follow-up diagram.\n- The user can override this when they want a denser architecture map, but readability wins by default.\n\n## Arrow Routing\n\nTreat arrow routing as a first-class readability concern.\n\nBest effort rules:\n\n- Avoid drawing arrows through text, labels, or the center of important boxes.\n- Prefer orthogonal paths with bends around content when a straight arrow would cross labels.\n- Put arrow labels beside the line, not directly under another arrow.\n- Leave whitespace corridors between groups for traffic arrows.\n- If multiple arrows must cross the same area, route one above and one below rather than stacking them.\n- Use dashed arrows only for secondary/control/config flows, but still keep them away from text.\n- If a perfect route is too hard in generated coordinates, make a cleaner first draft and tell the user it may need minor manual nudging in Excalidraw.\n\n### Arrow Routing Recipes\n\nUse these common patterns before inventing custom paths:\n\n#### Left-to-right pipeline\n\n- Arrange stages horizontally with consistent spacing.\n- Route primary data flow as solid arrows from right edge to left edge.\n- Put arrow labels above the line, centered in the whitespace between boxes.\n- If a side input exists, place it above or below the relevant stage and route a short orthogonal arrow into that stage.\n\n#### Hub-and-spoke\n\n- Put the shared service, broker, bus, or control component in the center.\n- Place clients around the perimeter in clusters.\n- Route arrows radially, but bend them around central labels.\n- Use color or labels to distinguish inbound vs outbound flows.\n\n#### Top-down control plane\n\n- Put users/API/automation at the top, control plane in the middle, workers/data plane at the bottom.\n- Use vertical solid arrows for primary commands or traffic.\n- Use dashed arrows for reconciliation, discovery, metadata, health checks, and configuration.\n- Keep the control-plane box wide enough that arrows can land on edges instead of crossing its title.\n\n#### Dashed metadata/control flows\n\n- Use dashed arrows only for secondary relationships: metadata, config, coordination, replication hints, offset commits, health checks.\n- Keep dashed arrows thinner or visually lighter than primary data-path arrows.\n- Label dashed flows explicitly so they are not confused with user/data traffic.\n- Route dashed flows around the outside edge of major groups when possible.\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7dxkpss1n6rar4t4wz00atms8156k6\",\n  \"slug\": \"excaliclaw\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1777121880830\n}","readmeExcerpt":"Skill: Excaliclaw Owner: nickytonline Summary: Create reliable Excalidraw diagrams in OpenClaw using the Excalidraw MCP, with export-safe labels, Excalifont text, and clear system-diagram structure. Use w... Tags: latest:1.0.2 Version history: v1.0.2 | 2026-04-25T18:10:51.594Z | auto **Improved export workflow and correctness safeguards for Excalidraw diagrams in OpenClaw.** - Now requires a diagram preview via excal","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"[\n  {\n    \"type\": \"rectangle\",\n    \"id\": \"box-api\",\n    \"x\": 100,\n    \"y\": 100,\n    \"width\": 180,\n    \"height\": 70,\n    \"backgroundColor\": \"#d0bfff\",\n    \"fillStyle\": \"solid\",\n    \"roundness\": { \"type\": 3 },\n    \"strokeColor\": \"#8b5cf6\",\n    \"boundElements\": [{ \"type\": \"text\", \"id\": \"txt-api\" }]\n  },\n  {\n    \"type\": \"text\",\n    \"id\": \"txt-api\",\n    \"x\": 130,\n    \"y\": 123,\n    \"width\": 120,\n    \"height\": 24,\n    \"text\": \"API Server\",\n    \"fontSize\": 16,\n    \"fontFamily\": 1,\n    \"strokeColor\": \"#1e1e1e\",\n    \"containerId\": \"box-api\",\n    \"textAlign\": \"center\",\n    \"verticalAlign\": \"middle\"\n  }\n]"},{"language":"json","snippet":"{\n  \"type\": \"rectangle\",\n  \"id\": \"api\",\n  \"label\": { \"text\": \"API Server\" }\n}"},{"language":"json","snippet":"[\n  {\n    \"type\": \"rectangle\",\n    \"id\": \"box-client\",\n    \"x\": 100,\n    \"y\": 100,\n    \"width\": 140,\n    \"height\": 70,\n    \"backgroundColor\": \"#a5d8ff\",\n    \"fillStyle\": \"solid\",\n    \"roundness\": { \"type\": 3 },\n    \"boundElements\": [{ \"type\": \"arrow\", \"id\": \"arr-client-api\" }]\n  },\n  {\n    \"type\": \"rectangle\",\n    \"id\": \"box-api\",\n    \"x\": 380,\n    \"y\": 100,\n    \"width\": 140,\n    \"height\": 70,\n    \"backgroundColor\": \"#d0bfff\",\n    \"fillStyle\": \"solid\",\n    \"roundness\": { \"type\": 3 },\n    \"boundElements\": [{ \"type\": \"arrow\", \"id\": \"arr-client-api\" }]\n  },\n  {\n    \"type\": \"arrow\",\n    \"id\": \"arr-client-api\",\n    \"x\": 240,\n    \"y\": 135,\n    \"width\": 140,\n    \"height\": 0,\n    \"points\": [[0, 0], [140, 0]],\n    \"endArrowhead\": \"arrow\",\n    \"strokeColor\": \"#1e1e1e\",\n    \"startBinding\": { \"elementId\": \"box-client\", \"fixedPoint\": [1, 0.5] },\n    \"endBinding\": { \"elementId\": \"box-api\", \"fixedPoint\": [0, 0.5] }\n  }\n]"},{"language":"json","snippet":"[\n  {\n    \"type\": \"arrow\",\n    \"id\": \"arr-client-api\",\n    \"x\": 260,\n    \"y\": 130,\n    \"width\": 120,\n    \"height\": 0,\n    \"points\": [[0, 0], [120, 0]],\n    \"endArrowhead\": \"arrow\",\n    \"strokeColor\": \"#1e1e1e\",\n    \"startBinding\": { \"elementId\": \"box-client\", \"fixedPoint\": [1, 0.5] },\n    \"endBinding\": { \"elementId\": \"box-api\", \"fixedPoint\": [0, 0.5] }\n  },\n  {\n    \"type\": \"text\",\n    \"id\": \"txt-client-api\",\n    \"x\": 290,\n    \"y\": 100,\n    \"width\": 70,\n    \"height\": 20,\n    \"text\": \"HTTPS\",\n    \"fontSize\": 14,\n    \"fontFamily\": 1,\n    \"strokeColor\": \"#757575\"\n  }\n]"},{"language":"json","snippet":"\"fontFamily\": 1"},{"language":"json","snippet":"{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"openclaw\",\n  \"elements\": [\n    { \"type\": \"rectangle\", \"id\": \"example\", \"x\": 0, \"y\": 0, \"width\": 160, \"height\": 80 }\n  ],\n  \"appState\": { \"viewBackgroundColor\": \"#ffffff\" },\n  \"files\": {}\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: excaliclaw\nversion: 1.0.2\ndescription: Create reliable Excalidraw diagrams in OpenClaw using the Excalidraw MCP, with export-safe labels, Excalifont text, and clear system-diagram structure. Use when the user asks for an Excalidraw diagram, architecture diagram, system diagram, flowchart, or hand-drawn diagram.\nuser-invocable: true\nargument-hint: \"[diagram topic]\"\n---\n\n# Excaliclaw\n\nCreate diagrams with the Excalidraw MCP in a way that survives OpenClaw rendering and Excalidraw export.\n\n## Core Rule\n\nUse real Excalidraw elements, but do **not** rely on MCP `label` shortcuts for final diagrams.\n\n## MCP Availability Preflight\n\nBefore creating or exporting a diagram, verify that the Excalidraw MCP tools are available in the current OpenClaw session.\n\nExpected behavior:\n\n1. If the Excalidraw MCP tools are available, continue with the normal diagram workflow.\n2. If the tools are missing, tell the user plainly: “Excalidraw MCP is not installed or not available in this OpenClaw session.”\n3. Ask whether the user wants it installed as a Streamable HTTP MCP before changing OpenClaw configuration, installing packages, or restarting/reloading services.\n4. If the user agrees, use the current OpenClaw-supported MCP configuration path. Do not invent commands; check local OpenClaw docs or CLI help first if the install/config command is not already known.\n5. After installation, reload/restart only what is required, then verify with a minimal hello-world Excalidraw scene before attempting the requested diagram.\n6. If installation fails or the user declines, offer a fallback such as Excalidraw JSON, SVG/PNG, Mermaid, or another diagram format, and state that MCP preview/export will not be available.\n\nDo not silently auto-install the MCP just because a diagram was requested. Installing an MCP is an environment change and needs explicit user approval unless the user already asked to set it up.\n\nReliable pattern:\n\nMandatory workflow for normal diagram requests:\n\n1. Use `excalidraw__create_view` to render the diagram preview first as an internal quality gate. Do not skip the preview and jump straight to export unless the user explicitly asks for JSON-only or link-only output.\n2. Treat the editable excalidraw.com link as the normal user-facing deliverable for Excalidraw diagram requests. Include it by default after a successful export.\n3. Build the export from the same full native Excalidraw scene represented by the preview, not a simplified redraw, not a raw MCP streaming array, and not a different diagram.\n4. If `create_view` returns a checkpoint id, treat it as evidence of the previewed scene. Preserve the same elements and relationships when constructing the export payload.\n5. Export only a full Excalidraw scene object, never a bare element array. The exporter payload must be serialized JSON with `type: \"excalidraw\"`, `version`, `source`, `elements`, `appState`, and `files`.\n6. Verify the exported link before replying. If the link cannot be verified as non"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7dxkpss1n6rar4t4wz00atms8156k6\",\n  \"slug\": \"excaliclaw\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1777140651594\n}"},{"path":"skill-card.md","content":"## Description:\n\nCreate reliable Excalidraw diagrams in OpenClaw using the Excalidraw MCP, with export-safe labels, Excalifont text, and clear system-diagram structure.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[nickytonline](https://clawhub.ai/user/nickytonline)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and technical teams use Excaliclaw to create editable Excalidraw architecture diagrams, system diagrams, flowcharts, and hand-drawn style diagrams in OpenClaw. The skill emphasizes preview-first diagram generation, export-safe native Excalidraw scenes, readable labels, and preserved editability metadata.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Diagram content may be shared externally through an editable excalidraw.com link.\n\nMitigation: Review diagram content before approving export or sharing, and only share externally when the content is acceptable.\n\nRisk: The skill may ask to install or configure an Excalidraw MCP, which changes the local agent environment.\n\nMitigation: Require explicit user approval before installation or configuration, use current OpenClaw-supported setup paths, and verify MCP availability with a minimal scene before proceeding.\n\nRisk: Exports can fail, be empty, or lose editability metadata if preview and export payloads diverge.\n\nMitigation: Preview the diagram first, export the same full native Excalidraw scene, preserve binding metadata, and verify the exported link is non-empty before delivering it.\n\n## Reference(s):\n\n- [Excaliclaw on ClawHub](https://clawhub.ai/nickytonline/skills/excaliclaw)\n- [nickytonline Publisher Profile](https://clawhub.ai/user/nickytonline)\n- [Excalidraw](https://excalidraw.com)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with JSON scene examples, shell or configuration instructions when setup is approved, and editable Excalidraw links when export succeeds.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May produce fallback diagram formats such as Excalidraw JSON, SVG/PNG, or Mermaid when MCP preview or export is unavailable.]\n\n## Skill Version(s):\n\n1.0.2 (source: frontmatter and server-resolved release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Create reliable Excalidraw diagrams in OpenClaw using the Excalidraw MCP, with export-safe labels, Excalifont text, and clear system-diagram structure. Use w... Skill: Excaliclaw Owner: nickytonline Summary: Create reliable Excalidraw diagrams in OpenClaw using the Excalidraw MCP, with export-safe labels, Excalifont text, and clear system-diagram structure. Use w... Tags: latest:1.0.2 Version history: v1.0.2 | 2026-04-25T18:10:51.594Z | auto **Improved export workflow and correctness safeguards for Excalidraw diagrams in OpenClaw.** - Now requires a diagram preview via excal","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1456,"uniquenessScore":45,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T14:34:39.456Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T14:34:39.456Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T17:42:36.680Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}