关于 excalidraw
excalidraw 是使用 Excalidraw 格式生成手绘风格图表的技能,适合将结构、流程和关系转化为图形。它通过 Canvas 面板交互式呈现图表,并提供多种图表类型与元素格式指引。
主要功能
- 01生成手绘风格图表
- 02支持流程图和架构图
- 03支持思维导图与关系图
- 04提供泳道、时序和 ER 图模式
- 05通过 Canvas 面板交互呈现
适用场景
- 01绘制系统组件与依赖关系
- 02展示流程步骤和决策
- 03梳理概念层级与关联
- 04表达对象随时间的交互
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ aws-samples/ sample-strands-agent-with-agentcore --skill excalidraw安装后在 Claude Code 中输入/excalidraw确认已加载。
附带文件diagram-patterns.md
详细介绍
Excalidraw 图表
使用 Excalidraw 格式创建手绘风格的图表、流程图、架构图和思维导图。图表会在 Canvas 面板中交互式呈现。
何时使用此技能
当用户想要可视化结构、流程或关系,而非原始数字时,请使用 create_excalidraw_diagram。
| 适合使用此技能的场景…… | 适合使用可视化技能的场景…… |
|---|---|
| 系统架构图 | 按季度划分的销售数据 |
| 流程图或决策树 | 调查回应百分比 |
| 序列图/交互图 | 随时间变化的股价 |
| 思维导图或概念图 | 市场份额细分 |
| 形状、方框、箭头、标签 | 任何 x/y 或分段/数值数据 |
图表类型
根据用户意图选择。对于泳道图、类图、序列图、ER 图和 DFD 图,生成前请阅读 diagram-patterns.md。
| 意图 | 类型 | 模式 |
|---|---|---|
| 流程步骤、工作流、决策 | 流程图 | 矩形 + 菱形 + 箭头(参见示例) |
| 系统组件、依赖关系 | 架构图 | 区域矩形 + 方框 + 箭头 |
| 概念层级、头脑风暴 | 思维导图 | 中心节点 + 放射状分支箭头 |
| 实体连接、关联 | 关系图 | 方框 + 带标签的箭头 |
| 跨职能工作流、参与者职责 | 泳道图 | diagram-patterns.md |
| OOP 类结构、继承关系 | 类图 | diagram-patterns.md |
| 对象随时间的交互 | 序列图 | diagram-patterns.md |
| 数据库实体和关系 | ER 图 | diagram-patterns.md |
| 数据转换、数据移动 | DFD | diagram-patterns.md |
可用工具
- create_excalidraw_diagram(elements, title, background_color):根据 Excalidraw 元素 JSON 生成图表
配色方案
在所有图表中统一使用以下颜色。
主色(描边、箭头、文本)
| 名称 | 十六进制 | 用途 |
|---|---|---|
| 蓝色 | #4a9eed | 主要操作、链接 |
| 琥珀色 | #f59e0b | 警告、突出显示 |
| 绿色 | #22c55e | 成功、积极 |
| 红色 | #ef4444 | 错误、消极 |
| 紫色 | #8b5cf6 | 点缀、特殊项目 |
| 青色 | #06b6d4 | 信息、次要内容 |
填充色(形状背景)
| 颜色 | 十六进制 | 适用场景 |
|---|---|---|
| 浅蓝色 | #a5d8ff | 输入、来源、主要节点 |
| 浅绿色 | #b2f2bb | 成功、输出、已完成 |
| 浅橙色 | #ffd8a8 | 警告、待处理、外部内容 |
| 浅紫色 | #d0bfff | 处理、中间件 |
| 浅红色 | #ffc9c9 | 错误、关键内容 |
| 浅黄色 | #fff3bf | 注释、决策 |
| 浅青绿色 | #c3fae8 | 存储、数据 |
背景区域颜色(用于 opacity: 35,对图层分组)
| 颜色 | 十六进制 | 适用场景 |
|---|---|---|
| 蓝色区域 | #dbe4ff | UI/前端层 |
| 紫色区域 | #e5dbff | 逻辑/Agent 层 |
| 绿色区域 | #d3f9d8 | 数据/工具层 |
元素格式
必填字段(所有元素)
type、id(唯一字符串)、x、y、width、height
默认值(使用这些值时可省略)
strokeColor="#1e1e1e"、backgroundColor="transparent"、fillStyle="solid"、strokeWidth=2、roughness=1、opacity=100
形状类型
矩形
{ "type": "rectangle", "id": "r1", "x": 100, "y": 100, "width": 200, "height": 80,
"roundness": { "type": 3 }, "backgroundColor": "#a5d8ff", "fillStyle": "solid" }
roundness: { type: 3 }表示圆角
椭圆
{ "type": "ellipse", "id": "e1", "x": 100, "y": 100, "width": 150, "height": 150 }
菱形
{ "type": "diamond", "id": "d1", "x": 100, "y": 100, "width": 150, "height": 150 }
形状上的标签(推荐——无需单独的文本元素)
{ "type": "rectangle", "id": "r1", "x": 100, "y": 100, "width": 200, "height": 80,
"label": { "text": "My Label", "fontSize": 20 } }
- 适用于矩形、椭圆和菱形
- 文本自动居中;容器自动调整大小以适应文本
- 也适用于箭头:
"label": { "text": "connects" }
独立文本(仅用于标题和注释)
{ "type": "text", "id": "t1", "x": 150, "y": 50, "text": "Title", "fontSize": 24 }
x是左边缘。若要在位置cx居中:设置x = cx - text.length × fontSize × 0.25
箭头
{ "type": "arrow", "id": "a1", "x": 300, "y": 150, "width": 150, "height": 0,
"points": [[0,0],[150,0]], "endArrowhead": "arrow",
"startBinding": { "elementId": "r1", "fixedPoint": [1, 0.5] },
"endBinding": { "elementId": "r2", "fixedPoint": [0, 0.5] } }
points:相对于元素x, y的[dx, dy]偏移量endArrowhead:null|"arrow"|"bar"|"dot"|"triangle"strokeStyle:"solid"|"dashed"|"dotted"- 用于绑定的
fixedPoint:顶部[0.5,0]、底部[0.5,1]、左侧[0,0.5]、右侧[1,0.5]
伪元素(不绘制——用于控制行为)
cameraUpdate — 设置视口
{ "type": "cameraUpdate", "width": 800, "height": 600, "x": 0, "y": 0 }
x, y:可视区域的左上角(场景坐标)- 必须采用 4:3 比例:400×300、600×450、800×600、1200×900、1600×1200
- 始终将
cameraUpdate放在第一个元素,以框定图表 - 无需
id
delete — 按 ID 移除元素
{ "type": "delete", "ids": "r1,a1,t2" }
- 以逗号分隔的待移除元素 ID
- 更新现有图表以添加替代元素前,使用此项移除原有元素
- 切勿重新使用已删除的 ID——为替代元素分配新 ID
摄像机尺寸指南
图表显示宽度约为 700px。使用以下标准尺寸:
| 尺寸 | 宽 × 高 | 适用场景 |
|---|---|---|
| S | 400 × 300 | 2–3 个元素,近景 |
| M | 600 × 450 | 小型图表区域 |
| L | 800 × 600 | 标准(默认) |
| XL | 1200 × 900 | 大型概览 |
| XXL | 1600 × 1200 | 非常复杂的图表 |
字体大小规则:
- 正文 / 标签:最小 16
- 标题 / 标题文本:最小 20
- 注释:最小 14(谨慎使用)
- XL/XXL 摄像机:将最小字号提高约 4px
元素尺寸规则:
- 带标签的矩形/椭圆:最小 120 × 60
- 元素之间留出 20–30px 间距
更新现有图表
用户要求修改图表时,上下文中会提供当前元素。请使用完整更新后的元素数组进行回复:
- 未更改的元素保留相同的
id - 修改需要更改的元素字段
- 省略需要移除的元素
- 使用此前未用过的唯一 ID 添加新元素
示例:流程图
[
{ "type": "cameraUpdate", "width": 800, "height": 600, "x": 0, "y": 0 },
{ "type": "rectangle", "id": "el-1",
"x": 300, "y": 60, "width": 160, "height": 60,
"strokeColor": "#4a9eed", "backgroundColor": "#a5d8ff",
"fillStyle": "solid", "roundness": { "type": 3 },
"label": { "text": "Start", "fontSize": 18 } },
{ "type": "diamond", "id": "el-2",
"x": 280, "y": 170, "width": 200, "height": 90,
"strokeColor": "#f59e0b", "backgroundColor": "#fff3bf",
"fillStyle": "solid",
"label": { "text": "Decision?", "fontSize": 16 } },
{ "type": "arrow", "id": "el-3",
"x": 380, "y": 120, "width": 0, "height": 50,
"points": [[0,0],[0,50]], "endArrowhead": "arrow",
"startBinding": { "elementId": "el-1", "fixedPoint": [0.5, 1] },
"endBinding": { "elementId": "el-2", "fixedPoint": [0.5, 0] } },
{ "type": "rectangle", "id": "el-4",
"x": 300, "y": 320, "width": 160, "height": 60,
"strokeColor": "#22c55e", "backgroundColor": "#b2f2bb",
"fillStyle": "solid", "roundness": { "type": 3 },
"label": { "text": "End", "fontSize": 18 } },
{ "type": "arrow", "id": "el-5",
"x": 380, "y": 260, "width": 0, "height": 60,
"points": [[0,0],[0,60]], "endArrowhead": "arrow",
"startBinding": { "elementId": "el-2", "fixedPoint": [0.5, 1] },
"endBinding": { "elementId": "el-4", "fixedPoint": [0.5, 0] } }
]
应避免的常见错误
- 摄像机必须采用精确的 4:3 比例——非 4:3 视口会导致失真
- 始终以 cameraUpdate 开头——否则视口位置不可预测
- 元素数组中不得包含注释——
elements必须是有效的 JSON。切勿在数组中添加//或/* */注释,否则会导致 JSON 解析失败 - 文本对比度——切勿在白色背景上使用浅灰色。白色背景上的文本颜色最低为
#757575。浅色填充上的文本使用深色变体(#15803d,而非#22c55e) - 箭头标签需要留出空间——长标签会溢出短箭头;请缩短标签或加长箭头
- 不要使用表情符号——Excalidraw 的字体无法渲染表情符号
- 元素重叠——检查标签、方框和区域叠层是否彼此重叠(至少留出 20px 间距)
- 摄像机留白——在摄像机框架内留出空白;不要让摄像机尺寸与内容尺寸完全一致
UI 指南(来自 tools-config)
元素格式:
- 必填:type、x、y、id
- 形状(矩形/椭圆/菱形):添加 width、height
- 箭头/线条:添加 width、height、points [[0,0],[dx,dy]]
- 文本:添加 text、fontSize
- 在形状上使用 label 字段来显示居中文本
- 使用带 points 路径的箭头元素连接形状
评论
支持 Markdown