跳到正文
cccskills
免费在 GitHub 公开中文介绍

Excalidraw

在Excalidraw实时画布上绘制手绘风格的图,并可整理已有画布或.excalidraw文件、转换Mermaid图。图表可导出;含图片时需用能保留图片数据的文件传递。

原文查看原文说明

Sketches ideas as hand-drawn Excalidraw diagrams on a live local canvas via the pinned mcp-excalidraw-server CLI, with mermaid conversion, file I/O, and share links. USE WHEN excalidraw, whiteboard, canvas, sketch a diagram, draw this on a canvas, hand-drawn diagram, draw my idea, architecture sketch, live canvas, put this on the whiteboard, read my canvas, organize my whiteboard, .excalidraw file, mermaid to excalidraw. NOT FOR polished images (Art), web UI (Webdesign), video (HyperFrames).

danielmiessler/LifeOS星标 19,635(GitHub 19,635 + cccskills 0)

实测评分 未实测

查看安装方法

适用场景

  • 把想法画成手绘风格图
  • 整理粗略的白板内容
  • 将Mermaid图转为Excalidraw
  • 导出含图片的图表

中文介绍

功能

Excalidraw可在实时画布上把想法和结构绘制成手绘风格的图。它能够读取已有画布或.excalidraw文件,整理其中的元素,也能把Mermaid语法编写的图转换为Excalidraw图。完成后可以导出文件;如果图中不含图片,也可以创建分享链接。含图片的图需要通过能保留图片数据的格式传递,例如.excalidraw文件。

适用场景

想在白板上梳理思路,或用草图说明系统结构和操作流程时,可以使用此技能。已有图表需要重新整理,使分组和关系更清楚时,也适用。

使用示例

  • “把这个三阶段流程画成图。”
  • “整理画布上的这些想法。”
  • “把这张Mermaid图转换为Excalidraw。”

注意事项

需要使用mcp-excalidraw-server的CLI。实时画布在本地运行,需要在浏览器中打开画布查看。含图片的图不能通过分享链接传递,应使用.excalidraw文件等格式。

本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。

文档检查

AI 根据 SKILL.md 的内容检查了需要注意的操作和使用前提。评分只依据实际运行的结果(实测对比)。

安全性发送数据、删除文件、执行命令等是否有说明
B部分不足资料要求先快照并提醒空画布风险,但仍涉及有风险的画布操作。
安装难易度所需工具和 API 密钥是否少且有说明
B部分不足需要bun、固定版本CLI和浏览器标签页,但此处未列出安装步骤。

不计入评分。 由 AI(OpenAI Codex)于 2026年10月28日 评估。仅供参考,安装前请同时查看原文。

如果您认为评估有误,请申请复核

请写明哪一项有误以及原因。无需登录。我们会对照 SKILL.md 重新评估,并在此处更新结果。

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

包含的文件(8)

  • SKILL.md9.7 KB
  • Intents/RefineDiagram.md2.2 KB
  • Intents/SketchDiagram.md3.7 KB
  • References/Cheatsheet.md5.9 KB
  • Tools/AddImage.ts6.2 KB
  • Tools/Canvas.ts765 B
  • Tools/ContrastCheck.ts4.3 KB
  • Tools/Share.ts2.8 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Excalidraw

Drives a live Excalidraw canvas from the command line via the community mcp-excalidraw-server package (MIT), version-pinned through Tools/Canvas.ts. The canvas runs locally; the user watches the diagram draw itself at the canvas URL and can hand-edit the moment the model stops. Two directions: model → canvas (sketch ideas) and canvas → model (describe reads a human's rough canvas back as structured data).

Ideal State

  • Every diagram left behind is readable by the person it is for: no truncated or overlapping text, label style set at creation, and Tools/ContrastCheck.ts exiting 0 against the real ground, which holds in light and dark themes alike.
  • What leaves the machine is the form that renders correctly: a link from Tools/Share.ts for a scene without images, the exported .excalidraw file (or a PNG flattened from it) for a scene carrying screenshots, and never a local canvas screenshot as final art.
  • The canvas is driven only through Tools/Canvas.ts, so the pinned package version and port hold, and the skill registers no MCP server.
  • A human's canvas is read back faithfully and nothing they drew is lost: risky changes are snapshotted first, and the detached server is stopped when the drawing work is done unless the user keeps using it.

Intent Routing

IntentTriggerFile
SketchDiagram"sketch a diagram", "draw this", "put this on a canvas"Intents/SketchDiagram.md
RefineDiagram"refine the diagram", "read my canvas", "organize my whiteboard", edit an existing .excalidrawIntents/RefineDiagram.md
FileRead when
References/Cheatsheet.mdwriting element JSON or using a command the intents do not show: full command list, element format, palette and sizing, layout anti-patterns, quality checklist, error recovery, raw REST API

Data & Config

User customizations live at <configRoot>/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Excalidraw/ (configRoot is $CLAUDE_CONFIG_DIR when set, else ~/.claude). When the directory exists, its PREFERENCES.md (default export directory, preferred palette, canvas port override) applies; when it is absent, the defaults stand.

Quick Reference

  • Tool: bun ~/.claude/skills/Excalidraw/Tools/Canvas.ts <command> [...] — pins mcp-excalidraw-server@2.0.0 and port 3579; all commands pass through.
  • Canvas URL: http://127.0.0.1:3579 — the user opens this to watch live and hand-edit. Any canvas-touching command auto-starts the server.
  • Contrast gate: bun ~/.claude/skills/Excalidraw/Tools/ContrastCheck.ts [--bg <hex>] — deterministic WCAG check of every text element against its effective background; MUST exit 0 before any diagram is declared done.
  • Embed an image: bun ~/.claude/skills/Excalidraw/Tools/AddImage.ts <image> --x N --y N [--w N --h N] or --replace <shapeId> to fit a screenshot inside an existing box. Registers the bytes as a data-URL file and adds an image element; the file travels inside the exported .excalidraw. Use for real screenshots as diagram nodes (e.g. a dashboard capture as the "Agents Dashboard" node).
  • Black-canvas share: bun ~/.claude/skills/Excalidraw/Tools/Share.ts <scene.excalidraw> [--bg <hex>] — uploads to excalidraw.com with the canvas background baked in (default #111114). Use it, never the CLI share (which hardcodes a white canvas). The shared-link editor does not reliably honor the file's viewBackgroundColor alone, so a non-white scene also carries a backdrop rectangle (Gotchas).
  • Exit codes: 0 ok, 1 error, 2 usage, 3 canvas unreachable, 4 browser tab required.
  • Files: exported .excalidraw files open at excalidraw.com (File → Open) or in the Excalidraw VS Code extension. A .excalidraw.md export targets the Obsidian plugin's native format.

Gotchas

  • Label styling is set at CREATION, deterministically — the export/share expansion gives each bound label its shape's strokeColor and the shape's fontSize prop (default 16). So: put fontSize: 20 on labeled shapes, choose stroke colors that read on the fill, and give solid-color focal boxes a PALE fill with a saturated stroke (never saturated fill + dark stroke, which makes the label invisible). No post-add patching, no free-text label workaround — free labels detach from shapes and were retracted after live use (2026-08-26). The viewer's dark mode inverts the whole canvas, so colored text on colored fill can vanish even when a light-mode screenshot looks fine; run Tools/ContrastCheck.ts before declaring done. Inversion preserves contrast ratios, so a passing check holds in both themes.
  • Embedded images do NOT survive an anonymous excalidraw.com share LINK — they render as a broken-image placeholder. Excalidraw stores image bytes in a separate encrypted file backend that the #json= link path doesn't populate; only the scene travels. Images DO survive the exported .excalidraw FILE (open it via File→Open / the VS Code extension / desktop app and the picture renders). So a diagram carrying screenshots ships as the FILE, or as a flattened PNG rendered from the file — never as a share link.
  • Loading a share link on excalidraw.com shows a "Load from link" dialog — the user must click "Replace my content" (their previous excalidraw.com scene is overwritten; mention it when handing over a link).
  • The bundled live-canvas app mismeasures API-created text (upstream bug, v2.0.0) — the interactive layer renders text at ~2× its stored size, clipping bound AND free labels, and its screenshot/export renders can be mangled too. The scene DATA stays correct: excalidraw.com renders the same elements perfectly. Until fixed upstream: treat the local canvas as watch-it-draw preview only; the editing surface and any final render is excalidraw.com via Tools/Share.ts (or the exported .excalidraw file). Never ship a local screenshot as final art without eyeballing it.
  • Fresh browser tabs race the initial scene load and can show an EMPTY canvas while the server holds the full scene. Repaint every connected tab with export + import --replace (full rebroadcast). Warn the user never to click the app's "Sync to Backend" button in a blank tab — it pushes the empty scene over the server (snapshot first regardless).
  • Always go through Tools/Canvas.ts, never bare bunx mcp-excalidraw-server — the wrapper pins version and port; a bare invocation on default port 3000 collides with dev servers and drifts on @latest.
  • Screenshots, mermaid, image export, and viewport need an open browser tab (exit code 4) — the rendering runs in the frontend. Element CRUD, describe, export/import work headless. For automated visual verification, open the canvas URL via the browser-automation skill; otherwise ask the user to open it.
  • The scene background is not controllable from the CLI — import does not apply appState.viewBackgroundColor (verified). For a non-white ground, draw an explicit locked backdrop rectangle first (created first = behind everything) and pass its color to ContrastCheck.ts --bg.
  • Never put text on a large background-zone rectangle — the bound label centers mid-zone, overlapping everything inside, and cannot be repositioned. Use a free-standing text element at the zone's top-left instead.
  • zsh echo mangles element JSON — it expands \n inside strings. Write specs to a file and pass the path, or pipe with printf '%s'.
  • Duplicate text elements after clear/re-add — the frontend auto-sync can re-inject cached bound labels. Find them with query --type text (look for containerId), delete, let sync settle.
  • fontFamily must be a string ("1"–"8" or a name like "helvetica"); a bare number fails.
  • Raw REST uses a stricter format than CLI (label: {text}, start/end: {id}) — only relevant when POSTing to the API directly.
  • stop when the session's drawing work is done if the user won't keep using the canvas — the server runs detached and survives the session.
  • This skill deliberately registers no MCP server — the same package ships one, but the LifeOS standard is CLI-first; don't add it to any mcpServers block, and never run the upstream install-skill command (it writes a non-canonical skill dir).

Examples

Example 1: Idea to diagram

User: "Sketch the three-stage pipeline as a diagram"
→ SketchDiagram intent
→ The live canvas URL with the pipeline drawn, ContrastCheck passing, and an exported .excalidraw file or verified share link

Example 2: Structure a rough canvas

User: "I dumped ideas on the canvas — organize them"
→ RefineDiagram intent
→ The user's own elements, clustered into labelled zones and connected with bound arrows, visible live on the canvas

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

AnnualReports

免费有简介

按类别或厂商查找并获取网络安全报告,比较威胁、勒索软件、数据泄露、云安全和AI趋势。分析会注明每项数据的厂商、年份及报告,并分别呈现来源间的分歧。

  • 按类别查找威胁报告
  • 获取指定厂商的报告
  • 比较多家厂商的勒索软件趋势
danielmiessler/LifeOS2万2026年10月28日 更新

ApertureOscillation

免费有简介

通过三轮分析,对比单个功能或组件的设计需求与整个系统的目标,梳理两者的冲突、合适的实现范围,以及方案是否符合整体方向。

  • 判断服务或库是否应拆分
  • 比较功能需求与产品方向
  • 检查新组件是否符合现有系统
danielmiessler/LifeOS2万2026年10月28日 更新

Aphorisms

免费有简介

按文章主题寻找格言或引文,按相关程度排序,并附上作者和推荐理由。可添加带出处的引文、按主题研究思想家的言论、整理使用记录,帮助避免重复引用。

  • 为新闻简报寻找引文
  • 保存有出处且不重复的引文
  • 按主题研究思想家的言论
danielmiessler/LifeOS2万2026年10月28日 更新

Art

免费有简介

按用途选择制作流程,生成博客插图、技术图解、比较图、漫画和图标等视觉内容,并输出供预览的图像。

  • 制作博客标题图
  • 解释系统结构
  • 展示比较或时间线
danielmiessler/LifeOS2万2026年10月28日 更新

ArtDirection

免费有简介

依据简报和制作标准评估图片、影片、幻灯片及网站页面截图,由视觉评审给出评分和缺陷优先级,支持有限轮次的修改;通过评审后才能交付,并可记录人工评分供后续校准。

  • 按优先级整理图片修改项
  • 依标准评估影片或幻灯片
  • 发布前检查视觉效果
danielmiessler/LifeOS2万2026年10月28日 更新

ArXiv

免费有简介

按主题、研究领域或论文编号查找 arXiv 论文,并整理标题、作者、摘要和链接;查看新投稿,也可在有内容时获取 AlphaXiv 的人工智能生成概述。

  • 查看人工智能和机器学习新论文
  • 查找特定主题的论文
  • 按论文编号或 arXiv 网址查询
danielmiessler/LifeOS2万2026年10月28日 更新

查看 danielmiessler 的全部技能

报告此技能的问题