Excalidraw CLI
用文本 DSL、JSON 或 Graphviz DOT 生成可编辑的 Excalidraw 图表,适合 agent 与脚本使用。
- Star 数
- ★ 315
- 最近更新
- 今天
- License
- MIT
- 主语言
- TypeScript
- FA 评分
- 67/100 · 存在缺口
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台Codex · Claude Code
- 费用
- 免费,无需付费服务
- 上手难度
- 低 · 几分钟可跑通
- 开始前需要
- 典型场景
- 开发者从 CLI 或脚本中用一行 DSL 快速生成流程图,再在 Excalidraw 中微调。
- 不适合
- 需要在浏览器中手动拖拽绘制或实时协作画图的用户
- 无法安装 Node.js 20.19+ 的运行环境
- 源码审查
- 67/100 · 存在缺口
这个 Agent 能做什么,适合哪些场景?
excalidraw-cli 是一个基于 Node.js 的命令行工具,把文本 DSL、JSON 或 Graphviz DOT 转换成可编辑的 .excalidraw 文件。它内置 ELK.js 自动布局,支持 TB、BT、LR、RL 四种流向,并能把已有文件导出为 PNG 或 SVG。除了 CLI,它还提供 createFlowchartFromDSL、createFlowchartFromJSON、convertToSVG、convertToPNG 等编程 API。项目附带 Claude Code、Codex、Cursor 的 skill,以及 Gemini CLI 扩展和 Claude Code 插件,方便 agent 调用。产出文件可以在 Excalidraw 或 Obsidian 的 Excalidraw 插件中打开继续编辑。
执行 excalidraw-cli create 时,工具读取文件、--inline 字符串或 stdin,解析 DSL、JSON 或 DOT 输入,构建节点与边图,再调用 ELK.js 计算布局,最终写出 .excalidraw 文件。DSL 支持 [Label] 矩形、{Label} 菱形、(Label) 椭圆、[[Label]] 数据库、![path] 图片节点,以及 ->、<-、<->、--> 等箭头和带引号标签。@direction、@spacing 指令和 @node 样式块可配置流向、间距与填充样式。convert 子命令把已有 .excalidraw 文件导出为 PNG 或 SVG,支持 --scale、--dark、--no-export-background。parse 子命令只解析并打印图结构,不生成文件。
- 开发者从 CLI 或脚本中用一行 DSL 快速生成流程图,再在 Excalidraw 中微调。
- Claude Code、Codex 或 Cursor 用户安装 skill 后,让 agent 根据代码结构自动产出架构图。
- 需要把 Graphviz DOT 现有图表迁移为可编辑 Excalidraw 文件的团队。
- 在 CI 或文档流水线中把
.excalidraw批量导出为 PNG 或 SVG 的工程团队。 - 在 TypeScript 项目中通过 createFlowchartFromJSON 以编程方式生成图表的应用开发者。
如何安装或部署这个 Agent?
需要 Node.js >=20.19.0。
通过 npm 全局安装:
npm install -g @swiftlysingh/excalidraw-cli或通过 Homebrew 安装(会自动安装 Node.js):
brew install swiftlysingh/tap/excalidraw-cli不全局安装也可直接运行:
npx --yes @swiftlysingh/excalidraw-cli create --inline "[A] -> [B]" -o diagram.excalidraw从源码构建:
git clone https://github.com/swiftlysingh/excalidraw-cli.git
cd excalidraw-cli
npm install
npm run build
npm link为 agent 安装 skill:
npx skills add swiftlysingh/excalidraw-cliClaude Code 插件:
/plugin marketplace add swiftlysingh/excalidraw-cli
/plugin install excalidraw-cli@excalidraw-cli如何使用这个 Agent?
从内联 DSL 创建:
excalidraw-cli create --inline "(Start) -> [Process] -> {Decision?}" -o flow.excalidraw从文件或 stdin 创建:
excalidraw-cli create flowchart.dsl -o diagram.excalidraw
echo "[A] -> [B] -> [C]" | excalidraw-cli create --stdin -o diagram.excalidraw从 DOT 创建:
excalidraw-cli create --format dot --inline 'digraph { A [label="Start"]; B [label="Process"]; A -> B; }' -o flow.excalidraw导出为 PNG 或 SVG:
excalidraw-cli convert diagram.excalidraw --format png --scale 2 --dark
excalidraw-cli convert diagram.excalidraw --format svg --no-export-backgroundJSON 输入示例:
{
"nodes": [
{ "id": "start", "type": "ellipse", "label": "Start" },
{ "id": "process", "type": "rectangle", "label": "Process" },
{ "id": "end", "type": "ellipse", "label": "End" }
],
"edges": [
{ "from": "start", "to": "process" },
{ "from": "process", "to": "end" }
],
"options": { "direction": "TB", "nodeSpacing": 50 }
}编程调用:
import { createFlowchartFromDSL } from '@swiftlysingh/excalidraw-cli';
const json = await createFlowchartFromDSL('(Start) -> [Process] -> (End)');这个 Agent 有哪些优点和局限?
- 内置 ELK.js 自动布局,无需手动摆放节点即可得到整齐的图。
- 同一套 CLI 同时接受 DSL、JSON 和 Graphviz DOT 三种输入,迁移成本低。
- 除
.excalidraw外还能直接导出 PNG/SVG,支持暗色模式、缩放与内边距。 - 提供 Claude Code、Codex、Cursor 的 skill 和 Claude Code 插件,agent 集成路径明确。
- 以 MIT 许可证发布,并提供 npm 包与 Homebrew tap,安装方式多样。
- 必须安装 Node.js >=20.19.0,旧版 Node 18 已不再支持。
- 仅支持本地图片节点,
![path]不指向远程 URL。 - DOT 子图会被扁平化,复杂 Graphviz 属性未必完全保留。
- 边缘标签必须使用完整的
[A] -> "label" -> [B]形式,混合写法会被拒绝。 - 没有仓库内的 AGENTS.md 或额外集成指南,agent 侧能力以 README 描述为准。
这个 Agent 与同类方案有什么区别?
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| Excalidraw CLI 当前 | 67 · 存在缺口 | 命令行工具免费 | ★ 315 | 今天 | TypeScript | Codex · Claude Code |
| Microsoft Learn MCP Server | 43 · 缺口较多 | MCP 服务器免费 | ★ 2k | 6 天前 | TypeScript | ChatGPT · Codex · Claude Code · Claude.ai |
| CC Workflow Studio | 50 · 缺口较多 | IDE 插件免费 + 模型费 | ★ 5.4k | 3 个月前 | TypeScript | ChatGPT · Codex · Claude Code |
| Deep Code CLI | 49 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 2.2k | 今天 | TypeScript | — |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
本地 CLI 工具,默认只读写用户指定的文件,权限面较小(least_privilege 2);但 create/convert 直接写文件、无覆盖确认或 dry-run(user_confirmation 1),也无回滚机制(rollback 1)。数据流基本透明:输入来自文件/内联/stdin,输出到指定路径或 stdout(data_flow_transparency 2)。图片节点仅限本地文件,但 README 未说明敏感数据处理策略(sensitive_data_handling 1)。依赖含 jsdom、@resvg/resvg-js、elkjs 等,无锁文件审计或漏洞扫描证据(dependency_security 1)。外部副作用限于本地文件写入,无网络外发(external_effects 2)。来源归属在 README/package.json 中明确作者与仓库(source_attribution 2)。
README 的 CLI 参考、DSL 语法与测试用例相互一致(self_consistency 2)。依赖均为公开 npm 包且版本范围明确,Node 引擎约束清晰(dependency_availability 2)。测试显示对无效选项、未闭合 DSL、错误输出扩展名给出明确错误信息(failure_messages 3)。
面向 agent、脚本与开发者,覆盖 DSL/JSON/DOT 多输入与 PNG/SVG 导出,场景覆盖充分(audience_and_scenarios 3)。能力边界有说明(DOT 子图扁平化、图片仅本地),但部分高级特性指向 man page 而非内联说明(capability_boundaries 2)。触发精度依赖文件扩展名与 --format 覆盖,规则清晰但混合形式被拒的边界需读者推断(trigger_precision 2)。环境适配限于 Node>=20.19.0,Homebrew 自动装 Node,但无 Windows 等平台说明(environment_fit 2)。
README 结构清晰,含安装、快速开始、CLI 参考、API、示例(information_architecture 3)。npm/Homebrew/源码/npx 多种安装方式说明详尽(install_notes 3)。命名与版本在 package.json 与 README 一致,但版本策略仅靠 release 工作流,无显式语义化承诺(naming_stability 2)。示例丰富含 DSL、JSON、导出(examples_and_faq 3)。已知限制仅零散提及,无专门章节(known_limitations 1)。MIT 许可证文件完整(license 3)。有 release 工作流与版本号,但无 CHANGELOG 文件(versioning_changelog 2)。维护责任由单一作者承担,发布流程自动化但无治理说明(maintenance_responsibility 2)。
输出为可编辑 .excalidraw 及 PNG/SVG,可直接在 Excalidraw/Obsidian 使用(output_usability 3)。对 agent 生成图表有实际价值,但同类工具存在,边际价值中等(marginal_value 2)。安装与使用成本低,但依赖较重(jsdom、resvg)(cost_benefit 2)。
README 声明与测试、工作流可部分对应(claim_traceability 2)。测试与 CI 工作流相互印证部分行为(cross_source_corroboration 2)。但 README 中部分能力(如 scatter 指令、man page 内容)未在提供的文件中体现,事实与推断边界不够清晰(fact_inference_separation 1)。
- create/convert 直接写文件,无覆盖确认或 dry-run,误覆盖风险需用户自行防范。
- 依赖较重(jsdom、@resvg/resvg-js、elkjs),未提供锁文件审计或漏洞扫描证据,建议安装前核查依赖。
- README 提及的 scatter 指令、man page 内容等未在提供的文件中体现,部分能力声明无法静态核实。
- 无 CHANGELOG,版本变更需依赖 release 工作流与 GitHub Releases 推断。
- 发布者身份未经 FollowAgents 企业注册表验证,维护责任集中于单一作者。
常见问题
它需要调用外部 LLM 或付费 API 吗?
生成的文件能在哪些工具里打开?
.excalidraw 文件可直接在 Excalidraw 网页版打开,也能导入 Obsidian 的 Excalidraw 插件继续编辑。Graphviz DOT 支持到什么程度?
man excalidraw-cli 手册为准,复杂属性可能无法完整保留。PNG 导出有哪些限制?
appState.viewBackgroundColor,缺失则回退到 #ffffff;PNG 缩放值会被限制在 0.1 到 10 之间。