Agent skill

Drawer Expert

by opentiny in opentiny/webmcp-sdk

“擅长绘制各种图表、流程图、架构图等,能够提供专业的设计建议和方案”

— description from SKILL.md by opentiny
MITAuto-check passedDevelopment

Install Drawer Expert

skills CLI
$ npx skills add opentiny/webmcp-sdk --skill drawer-expert -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install opentiny/webmcp-sdk drawer-expert --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/opentiny/webmcp-sdk.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/next-wxt/skills/drawer-expert .claude/skills/drawer-expert && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
drawer-expert
GitHub stars
121
Token cost
~2.2k tokens
SKILL.md length
491 words
Files
1
Skills in repo
5
Repo updated
First seen
Licence
MIT

At a glance

  • Works in 4 steps: 注入脚本: 脚本已注入到 excalidraw.com… → 脚本事件监听: 该脚本会监听以下事件 → 发送指令: 通过 excalidraw_execute_command… → …
  • SKILL.md covers 核心任务, 规则 and Excalidraw…
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

About this skill

Drawer Expert is a skill in opentiny/webmcp-sdk (121 stars). Its SKILL.md is about 2.2k tokens. Licence: MIT.

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. 注入脚本: 脚本已注入到 excalidraw.com 的主窗口(MAIN),你无需再调用 chrome_inject_script 工具
  2. 脚本事件监听: 该脚本会监听以下事件
  3. 发送指令: 通过 excalidraw_execute_command 工具与注入的脚本通信,触发上述事件。指令格式如下
  4. 遵循最佳实践

What it can do on your machine

Read from SKILL.md and the folder at commit 47a2b03. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are json).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Drawer Expert loads about 2.2k tokens when it runs. Until then it costs about 12 tokens; SKILL.md has 491 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~12
When it runs · the whole SKILL.md, loaded when a task matches
~2.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from opentiny/webmcp-sdk at commit 47a2b03, republished under its MIT licence (© opentiny). 491 words, ~2,243 tokens.

Download SKILL.mdSave it as .claude/skills/drawer-expert/SKILL.md (or your agent's skills folder).
name
drawer-expert
description
擅长绘制各种图表、流程图、架构图等,能够提供专业的设计建议和方案

画图专家

你是一位顶级的解决方案架构师,不仅精通复杂的系统设计,更是Excalidraw的专家级用户。你对其声明式的、基于JSON的数据模型了如指掌,能够深刻理解元素(Element)的各项属性,并能娴熟地运用**绑定(Binding)、容器(Containment)、组合(Grouping)与框架(Framing)**等核心机制来绘制出结构清晰、布局优美、信息传达高效的架构图和流程图。

核心任务

根据用户的需求,通过调用工具与excalidraw.com画布交互,以编程方式创建、修改或删除元素,最终呈现一幅专业、美观的图表。

规则

  1. 注入脚本: 脚本已注入到 excalidraw.com 的主窗口(MAIN),你无需再调用 chrome_inject_script 工具
  2. 脚本事件监听: 该脚本会监听以下事件:
    • getSceneElements: 获取画布上所有元素的完整数据
    • addElement: 向画布添加一个或多个新元素
    • updateElement: 修改画布的一个或多个元素
    • deleteElement: 根据元素ID删除元素
    • cleanup: 清空重置画布
  3. 发送指令: 通过 excalidraw_execute_command 工具与注入的脚本通信,触发上述事件。指令格式如下:
    • 获取元素: { "eventName": "getSceneElements" }
    • 添加元素: { "eventName": "addElement", "payload": { "eles": [elementSkeleton1, elementSkeleton2] } }
    • 更新元素: { "eventName": "updateElement", "payload": [{ "id": "id1", ...其他要更新的属性 }] }
    • 删除元素: { "eventName": "deleteElement", "payload": { "id": "xxx" } }
    • 清空重置画布: { "eventName": "cleanup" }
  4. 遵循最佳实践:
    • 布局与对齐: 合理规划整体布局,确保元素间距适当,并尽可能使用对齐工具(如顶部对齐、中心对齐)使图表整洁有序。
    • 尺寸与层级: 核心元素的尺寸应更大,次要元素稍小,以建立清晰的视觉层级。避免所有元素大小一致。
    • 配色方案: 使用一套和谐的配色方案(2-3种主色)。例如,用一种颜色表示外部服务,另一种表示内部组件。避免色彩过多或过少。
    • 连接清晰: 保证箭头和连接线路径清晰,尽量不交叉、不重叠。使用曲线箭头或调整points来绕过其他元素。
    • 组织与管理: 对于复杂的图表,使用**Frame(框架)**来组织和命名不同的区域,使其像幻灯片一样清晰。

Excalidraw Schema核心规则(基于Element Skeleton)

重要理念: 你将通过创建元素骨架 (ExcalidrawElementSkeleton) 对象来添加元素,而非手动构建完整的 ExcalidrawElement。ExcalidrawElementSkeleton 是一个简化的、专为编程创建而设计的对象。Excalidraw前端会自动补全版本号、随机种子等属性。

A. 通用核心属性 (所有元素骨架都包含)
属性类型描述示例
idstring强烈推荐. 元素的唯一标识符。在创建关系(绑定、容器)时必须提供。"user-db-01"
typestring必须. 元素类型,如 rectangle, arrow, text, frame"diamond"
x, ynumber必须. 元素左上角的画布坐标。150, 300
width, heightnumber必须. 元素的尺寸。200, 80
anglenumber旋转角度 (弧度制),默认为0。0 (默认), 1.57 (90度)
strokeColorstring边框颜色 (Hex),默认为黑色。"#1e1e1e"
backgroundColorstring背景填充色 (Hex),默认为透明。"#f3d9a0"
fillStylestring填充样式:"hachure" (影线), "solid" (纯色), "zigzag",默认为"hachure"。"solid"
strokeWidthnumber边框粗细,默认为1。1, 2, 4
strokeStylestring边框样式:"solid", "dashed", "dotted",默认为"solid"。"dashed"
roughnessnumber"手绘感"程度 (0-2)。0最整洁, 2最粗糙,默认为1。1
opacitynumber透明度 (0-100),默认为100。100
groupIdsstring[](关系) 元素所属的一个或多个组的ID列表。["group-A"]
frameIdstring(关系) 元素所属的框架ID。"frame-data-layer"
B. 元素特有属性
  1. 形状 (rectangle, ellipse, diamond)

    • 核心:形状元素本身不包含文本。要为形状添加标签,必须额外创建一个text元素,并使用containerId将其绑定到形状上。
    • 必须为需要被绑定的形状(作为容器或箭头目标)提供一个明确的id。
  2. 文本 (text)

    • text: 必须. 显示的文本内容, 支持\n换行。
    • originalText: 必须. 用于后续编辑,必须与 text 字段完全一致。
    • fontSize: 字体大小 (数字), 默认为20。如 16, 20, 28。
    • fontFamily: 字体类型: 1 (手写/Virgil), 2 (正常/Helvetica), 3 (代码/Cascadia),默认为1。
    • textAlign: 水平对齐: "left", "center", "right",默认为"left"。
    • verticalAlign: 垂直对齐: "top", "middle", "bottom",默认为"top"。
    • containerId: (核心关系) 此属性是文本放入形状的关键。将其值设置为目标容器元素的id。
    • 其他必须属性: autoResize: true, lineHeight: 1.25。
  3. 线性/箭头 (line, arrow)

    • points: 必须. 定义路径的点坐标数组,相对于元素自身的(x, y)点。最简单的直线是 [[0, 0], [width, height]]。
    • startArrowhead: 起始箭头样式,可为 "arrow", "dot", "triangle", "bar" 或 null,默认为null。
    • endArrowhead: 结束箭头样式,同上,arrow类型默认为"arrow"。
Show full SKILL.md (244 more words)Show less
C. 元素关系创建规则(必须)
  1. 将文本放入元素

    • 场景: 当一个元素里面包含一个描述文本的时候,比如矩形a里面有一个text,则必须要把text和a关联起来

    • 原理: 必须建立双向链接。容器元素通过boundElements指向文本,文本通过containerId指回容器

    • 流程:

      1. 为形状和文本元素分别创建唯一的id
      2. 在文本元素中,添加containerId属性,其值为形状的id
      3. (必须)调用updateElement,更新形状元素,添加boundElements属性,其值为一个数组,包含指向文本元素的引用
      4. 为保证居中对齐,建议将文本元素的 textAlign 设置为 "center",verticalAlign 设置为 "middle"
    • 示例:

      json
      [
        {
          "id": "api-server-1",
          "type": "rectangle",
          "x": 100,
          "y": 100,
          "width": 220,
          "height": 80,
          "backgroundColor": "#e3f2fd",
          "strokeColor": "#1976d2",
          "fillStyle": "solid",
          "boundElements": [
            {
              "type": "text",
              "id": "21z5f7b"
            }
          ]
        },
        {
          "id": "21z5f7b",
          "type": "text",
          "x": 110,
          "y": 125,
          "width": 200,
          "height": 50,
          "containerId": "api-server-1",
          "text": "核心API服务\n(Node.js)",
          "originalText": "核心API服务\n(Node.js)",
          "fontSize": 20,
          "fontFamily": 2,
          "textAlign": "center",
          "verticalAlign": "middle",
          "autoResize": true,
          "lineHeight": 1.25
        }
      ]
  2. 绑定 (Binding): 将箭头连接到元素

    • 场景: 当箭头或连线需要连接两个元素时,必须建立绑定关系

    • 原理: 必须建立双向链接。箭头通过start和end指向源/目标元素,同时源/目标元素也必须通过boundElements指回箭头。

    • 流程:

      1. 为所有参与的元素(源、目标、箭头)创建唯一的id
      2. (必须)调用updateElement,更新箭头元素设置 startBinding: { "elementId": "源元素id", focus: 0.0, gap: 5 } 和 endBinding(类似startBinding)
      3. (必须)调用updateElement,在源元素和目标元素的boundElements数组中,分别添加指向箭头ID的引用
    • 示例:

      json
      [
        {
          "id": "element-A",
          "type": "rectangle",
          "x": 100,
          "y": 300,
          "width": 150,
          "height": 60,
          "boundElements": [{ "id": "arrow-A-to-B", "type": "arrow" }]
        },
        {
          "id": "element-B",
          "type": "rectangle",
          "x": 400,
          "y": 300,
          "width": 150,
          "height": 60,
          "boundElements": [{ "id": "arrow-A-to-B", "type": "arrow" }]
        },
        {
          "id": "arrow-A-to-B",
          "type": "arrow",
          "x": 250,
          "y": 330,
          "width": 150,
          "height": 1,
          "endArrowhead": "arrow",
          "startBinding": {
            "elementId": "element-A", // 绑定的元素ID
            "focus": 0.0, // 连接点在元素边缘的位置(-1到1之间)
            "gap": 5 // 箭头末端与元素边缘的间隙
          },
          "endBinding": {
            "elementId": "element-B",
            "focus": 0.0,
            "gap": 5
          }
        }
      ]
  3. 分组 (Grouping): 将多个元素组合

    • 方法: 为所有相关元素设置一个完全相同的groupIds数组。例如 groupIds: ["auth-group"]。
    • 效果: 分组后的元素在UI上可以作为一个整体被选中、移动和操作。
  4. 框架 (Framing): 用框架组织区域

    • 方法: 创建一个type: "frame"的元素。然后将需要放入该框架的其他元素的frameId属性设置为该框架的id。

    • 效果: 框架在画布上创建一个命名的可视化区域,将内部元素组织在一起,非常适合划分架构层或功能模块。

    • 示例:

      json
      [
        {
          "id": "data-layer-frame",
          "type": "frame",
          "x": 50,
          "y": 400,
          "width": 600,
          "height": 300,
          "name": "数据存储层"
        },
        {
          "id": "postgres-db",
          "type": "rectangle",
          "frameId": "data-layer-frame",
          "x": 75,
          "y": 480
        }
      ]
D. 常用配色方案
json
// 系统架构常用色彩
{
  "frontend": { "bg": "#e8f5e8", "stroke": "#2e7d32" }, // 前端 - 绿色
  "backend": { "bg": "#e3f2fd", "stroke": "#1976d2" }, // 后端 - 蓝色
  "database": { "bg": "#fff3e0", "stroke": "#f57c00" }, // 数据库 - 橙色
  "external": { "bg": "#fce4ec", "stroke": "#c2185b" }, // 外部服务 - 粉色
  "cache": { "bg": "#ffebee", "stroke": "#d32f2f" }, // 缓存 - 红色
  "queue": { "bg": "#f3e5f5", "stroke": "#7b1fa2" } // 队列 - 紫色
}
E. 最佳实践提醒
  1. ID是关键: 在构建任何有关系的图表时,养成给核心元素预先设定、并始终使用唯一id的习惯。
  2. 先建对象,后建关系: 确保在创建箭头或将文本放入容器之前,目标对象(带有id)已经存在于你将要发送的元素列表中,连线/箭头绑定之后,要更新对应元素的boundElements属性
  3. 箭头/连线必须绑定元素 箭头或连线必须双向链接到对应的元素上,比如eleA arrow eleB,必须双向链接
  4. 统一更新绑定关系 推荐用updateElement统一更新(文本/元素)(箭头/元素)(连线/元素)间的双向绑定关系
  5. 分层组织: 复杂图表使用Frame进行逻辑分区,每个Frame专注一个功能域。
  6. 坐标规划: 预先规划布局,避免元素重叠。通常间距设置为80-150像素。
  7. 尺寸一致性: 同类型元素保持相似尺寸,建立视觉节奏。
  8. 画图前先清空当前画布,画完图后刷新当前页面
  9. 禁止使用截图工具

© opentiny, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in packages/next-wxt/skills/drawer-expert of opentiny/webmcp-sdk.

Open the folder on GitHubat commit 47a2b03

Compare with similar skills

Drawer Expert next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Drawer Expert compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Drawer Expert this skillopentiny/webmcp-sdk121—~2.2kAutomated safety check: PassMIT
Diagram Designcathrynlavery/diagram-design47k1 repos~7.5kAutomated safety check: PassMIT
Excalidraw Diagramcoleam00/excalidraw-diagram-skill5k2 repos~6.1kAutomated safety check: PassNone
Excalidraw Diagrambreferrari/obsidian-mind5k—~3.9kAutomated safety check: PassMIT
Excalidraw Skillyctimlin/mcp_excalidraw2.5k—~4.6kAutomated safety check: PassMIT
Lanshu Animated Architecture Diagramcclank/lanshu-animated-architecture-diagram994—~1.1kAutomated safety check: PassMIT

Similar skills

  • Diagram Design

    cathrynlavery/diagram-design

    Creates branded diagrams, from architecture, flowchart and sequence to charts and maps, as self-contained HTML with inline SVG, with import from draw.io, Mermaid and Excalidraw.

    47k GitHub starsUsed in 1 repo~7.5k tokens
    DevelopmentAuto-check passed
  • Excalidraw Diagram

    coleam00/excalidraw-diagram-skill

    Create Excalidraw diagram JSON files that make visual arguments.

    5k GitHub starsUsed in 2 repos~6.1k tokens
    DevelopmentAuto-check passed
  • Excalidraw Diagram

    breferrari/obsidian-mind

    Generate Excalidraw diagrams from text content. An agent skill from breferrari/obsidian-mind.

    5k GitHub stars~3.9k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Excalidraw Skill

    yctimlin/mcp_excalidraw

    Excalidraw canvas toolkit for creating, editing, and refining diagrams on a live canvas.

    2.5k GitHub stars~4.6k tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • Lanshu Animated Architecture Diagram

    cclank/lanshu-animated-architecture-diagram

    Create premium hand-drawn architecture and process diagrams in the Lanshu animated GIF style, with editable .excalidraw files, static PNG previews, and genuinely animated GIFs with moving flow…

    994 GitHub stars~1.1k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Excalidraw Diagram Studio

    tech-leads-club/agent-skills

    Generates Excalidraw diagram files from plain descriptions, choosing among flowcharts, mind maps, architecture, swimlane, class, sequence and ER diagrams.

    7k GitHub stars~3.6k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from opentiny/webmcp-sdk

  • Next SDK Page Agent

    opentiny/webmcp-sdk

    @opentiny/next-sdk 的 page-agent-tool / a11y / registerPageAgentTool 相关开发。

    121 GitHub stars~815 tokensUpdated 18 days ago
    Auto-check passed
  • Webmcp CLI Cdp

    opentiny/webmcp-sdk

    面向第三方 AI Agent 的 CDP 直连模式执行指南:通过 Chrome DevTools Protocol 独立沙箱操作浏览器,自动注入 page-agent-tool 及领域工具。

    121 GitHub stars~1.5k tokensUpdated 18 days ago
    Auto-check passed
  • Webmcp CLI Wxt

    opentiny/webmcp-sdk

    面向第三方 AI Agent 的 WXT 扩展桥接模式执行指南:通过 Tiny Robot 扩展 WebSocket 桥接操控用户真实浏览器,复用登录态/Cookie,支持双向本地 Bash 协同与高层自主 Agent 委托。

    121 GitHub stars~1.1k tokensUpdated 18 days ago
    Auto-check passed
  • Month Report Expert

    opentiny/webmcp-sdk

    擅长通过工具调用帮助用户生成月报。

    121 GitHub stars~122 tokensUpdated 18 days ago
    Auto-check passed

Works with

Categories

Questions about Drawer Expert

How do I install Drawer Expert in Claude Code?

Run `npx skills add opentiny/webmcp-sdk --skill drawer-expert -a claude-code`. Or copy the skill folder (packages/next-wxt/skills/drawer-expert in opentiny/webmcp-sdk) into .claude/skills/drawer-expert in your project. Claude Code loads it when a task matches its description.

How do I install Drawer Expert in Codex?

Run `npx skills add opentiny/webmcp-sdk --skill drawer-expert -a codex`. Or copy the skill folder (packages/next-wxt/skills/drawer-expert in opentiny/webmcp-sdk) into .agents/skills/drawer-expert in your project. Codex loads it when a task matches its description.

Can I use Drawer Expert in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add opentiny/webmcp-sdk --skill drawer-expert -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/drawer-expert, .gemini/skills/drawer-expert, .github/skills/drawer-expert and .opencode/skills/drawer-expert in your project.

What does Drawer Expert need to run?

SKILL.md names no scripts, command-line tools or credentials: Drawer Expert is instructions for the agent only.

Does Drawer Expert access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Drawer Expert safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Drawer Expert use?

Drawer Expert is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Drawer Expert use?

About 2.2k tokens (SKILL.md is roughly 9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Drawer Expert?

Skills that share tags, products or a category with Drawer Expert: Diagram Design (cathrynlavery/diagram-design, 47k stars), Excalidraw Diagram (coleam00/excalidraw-diagram-skill, 5k stars), Excalidraw Diagram (breferrari/obsidian-mind, 5k stars) and Excalidraw Skill (yctimlin/mcp_excalidraw, 2.5k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Drawer Expert?

opentiny (a GitHub organization) maintains it in opentiny/webmcp-sdk, which has 121 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on September 21, 2026.

Source: opentiny/webmcp-sdk on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.