Skip to content
Report library
Purpose / Other

Lark Whiteboard Skill Security Audit

What the author says it does (original text)

>

Independent security check

Do not install or run it yet

Files checked
79
Risks found
5
Could it run dangerous commands?Looks for programs run straight after downloading, remote control of your computer, and hidden commands.Risks found: 2
Medium risk

A floating npm package version is downloaded and executed automatically

Source references: 3
What we found

The Skill requires `npx -y @larksuite/whiteboard-cli@^0.2.13` without asking the user. `-y` accepts installation automatically, while `^0.2.13` does not identify one immutable release.

Why this matters

On first use or a cache miss, third-party code is fetched and executed. If the publisher account, package, or dependency chain is compromised, that code could access files, environment credentials, or local data within the agent's permissions.

The Skill explicitly requires running npx with `-y` without asking, using the `^0.2.13` range. On a first run or cache miss, npx can download and execute a matching package from the configured npm registry, so a later 0.2.x release may run on the user's machine. Users can require an exact pinned version with integrity verification, or preinstall and allow only an audited binary.

SKILL.md:13In the instructionsOpen original file
> [!IMPORTANT]> - 运行 `lark-cli --version`,确认可用,无需询问用户。> - 运行 `npx -y @larksuite/whiteboard-cli@^0.2.13 -v`,确认可用,无需询问用户。
Show 2 other places
routes/svg.md:35In the instructionsOpen original file
写文件   <dir>/diagram.svg渲染     npx -y @larksuite/whiteboard-cli@^0.2.13 -i <dir>/diagram.svg -o <dir>/diagram.png -f svg检查     npx -y @larksuite/whiteboard-cli@^0.2.13 -i <dir>/diagram.svg -f svg --check导出     npx -y @larksuite/whiteboard-cli@^0.2.13 -i <dir>/diagram.svg -f svg --to openapi --format json > <dir>/diagram.json```
routes/svg.md:33In the instructionsOpen original file
```建目录   ./diagrams/YYYY-MM-DDTHHMMSS/         (例:./diagrams/2026-04-15T143022/)写文件   <dir>/diagram.svg渲染     npx -y @larksuite/whiteboard-cli@^0.2.13 -i <dir>/diagram.svg -o <dir>/diagram.png -f svg检查     npx -y @larksuite/whiteboard-cli@^0.2.13 -i <dir>/diagram.svg -f svg --check导出     npx -y @larksuite/whiteboard-cli@^0.2.13 -i <dir>/diagram.svg -f svg --to openapi --format json > <dir>/diagram.json```
Medium risk

Diagram text may be placed into generated JavaScript and then executed by Node

Source references: 4
What we found

Some scenes require filling user-requested data or strings into a `.cjs` script and executing `node diagram.gen.cjs`. The visible instructions do not require safe encoding of quotes, backticks, newlines, or JavaScript syntax characters.

Why this matters

If an untrusted label is inserted without correct escaping, it could break out of its string and become local JavaScript, gaining the agent's ability to read files, access credentials, or run commands.

What this evidence establishes

The source does require some diagrams to generate a `.cjs` file and execute it with Node, and templates place titles and similar content in JavaScript strings. However, the visible material neither directs raw concatenation of user text nor shows an actual interpolation implementation, so it does not establish that quotes or backticks become code injection. Users can ask for JSON serialization, no template-string concatenation, and review of generated scripts before execution.

This assessment concerns the code and conditions shown, not proof that harm has occurred.
routes/dsl.md:21In the instructionsOpen original file
  注意:部分图形(鱼骨/飞轮/柱状/折线等)要按 scene 指南的脚本模板写 CommonJS 脚本生成 JSON:    1. 创建产物目录 ./diagrams/YYYY-MM-DDTHHMMSS/    2. 将脚本保存为 diagram.gen.cjs(必须 .cjs 后缀,脚本用 require() 写,.js 在 ESM 项目下会崩),执行 node diagram.gen.cjs 产出 diagram.json    3. 用产出的 diagram.json 进入 Step 3
Show 3 other places
scenes/flywheel.md:60In the instructionsOpen original file
// ══════════════════════════════════════════════════════════════// 只需修改这里 -- 填入用户要求的阶段数据和中心标题// ══════════════════════════════════════════════════════════════const centerTitle = '{{CENTER_TITLE}}';const centerSubtitle = '{{CENTER_SUBTITLE}}'; // 可选,不需要就留空字符串const stages = [  { title: '{{STAGE_1}}', subtitle: '{{SUB_1}}', desc: '{{DESC_1}}' },  { title: '{{STAGE_2}}', subtitle: '{{SUB_2}}', desc: '{{DESC_2}}' },  { title: '{{STAGE_3}}', subtitle: '{{SUB_3}}', desc: '{{DESC_3}}' },  { title: '{{STAGE_4}}', subtitle: '{{SUB_4}}', desc: '{{DESC_4}}' },];
scenes/flywheel.md:59In the instructionsOpen original file
// ══════════════════════════════════════════════════════════════// 只需修改这里 -- 填入用户要求的阶段数据和中心标题// ══════════════════════════════════════════════════════════════const centerTitle = '{{CENTER_TITLE}}';const centerSubtitle = '{{CENTER_SUBTITLE}}'; // 可选,不需要就留空字符串const stages = [  { title: '{{STAGE_1}}', subtitle: '{{SUB_1}}', desc: '{{DESC_1}}' },  { title: '{{STAGE_2}}', subtitle: '{{SUB_2}}', desc: '{{DESC_2}}' },  { title: '{{STAGE_3}}', subtitle: '{{SUB_3}}', desc: '{{DESC_3}}' },  { title: '{{STAGE_4}}', subtitle: '{{SUB_4}}', desc: '{{DESC_4}}' },];
scenes/flywheel.md:187In the instructionsOpen original file
writeFileSync('diagram.json', JSON.stringify({ version: 2, nodes }, null, 2));```
Could it expose your files or keys?Looks for uploads of files containing passwords or keys, and keys written directly in the code.Risks found: 1
High risk

Arbitrary URLs are fetched with redirect-following curl and may then be uploaded to a Lark board

Source references: 2
What we found

The image workflow uses `curl -L` without requiring protocol restrictions, blocking local/private addresses, or validating every redirect. It then requires images to be uploaded to the target board.

Why this matters

If an untrusted URL points to cloud metadata, localhost, or an internal service, the agent could save an internal response and upload it to Lark, disclosing sensitive data.

For a URL-sourced image, the workflow uses curl with redirect following and local output, without specifying protocol restrictions, private/loopback address blocking, or per-redirect validation. If a user or board input supplies a malicious URL, the agent could request an otherwise inaccessible address; the resulting file may then be uploaded to the target Lark whiteboard. Users can require public HTTPS only, address and redirect validation, and confirmation of source and content before upload.

elements/image.md:17In the instructionsOpen original file
| 图片来源 | 获取方式 ||---------|---------|| 本地文件 | 直接使用 || 网络 URL | `curl -L -o photo.jpg "<URL>"` || 文档中的图片 token | `lark-cli docs +media-download --token <token> --output ./photo.png` || 其他域的 Drive token | `lark-cli docs +media-download --token <token> --output ./photo.png` |
Show 1 other places
elements/image.md:49In the instructionsOpen original file
### 3. 上传到目标画板**必须**使用 `docs +media-upload --parent-type whiteboard` 上传:```bashlark-cli docs +media-upload --file ./photo1.jpg --parent-type whiteboard --parent-node <whiteboard_token># 响应: { "file_token": "<media_token>", ... }```
Could it delete files or keep running?Looks for broad file deletion, disk overwrites, and programs set to start automatically.Risks found: 1
Medium risk

Overwrite updates clear the board and permanently discard structured semantics

Source references: 6
What we found

`--overwrite` deletes all existing content before writing. Exporting and reimporting SVG also loses hierarchy, node IDs, mentions, comments, locks, and connector bindings. The SVG route requires two confirmations, but other update examples still demonstrate direct overwrite usage.

Why this matters

If the wrong board token is selected, a nonempty board is mistaken for an empty one, or the user does not understand “full rebuild,” editable structure, comments, and relationships may not be recoverable from the rewritten board.

The risk is supported, but it arises when overwrite is applied to a non-empty existing board, especially through SVG export-edit-import. Overwrite first deletes all existing content, and SVG reimport loses hierarchy, node IDs, mentions, comments, locks, connector bindings, and other semantics. The workflow requires informed confirmation and another confirmation after dry-run, reducing accidental use but not the loss itself. Users can restrict operations to append or require a raw export/backup and tested recovery first.

references/lark-whiteboard-update.md:20In the instructionsOpen original file
| `--idempotent-token` | 否  | 幂等 token,确保更新操作幂等;最少 10 个字符,建议使用时间戳 + 场景标识拼接(如 `1744800000-board-1`)。同一次逻辑更新只生成一次该 token,重试时须原样复用;切勿在每次重试时重新生成时间戳或幂等 key,否则会重复写入 || `--overwrite`        | 否  | 写入模式:带上则覆盖更新(写入前删除画板所有现有内容再写入);省略则为增量追加(保留原有内容,新内容叠加写入)。默认 false(增量追加)|| `--source`           | 是  | 输入画板内容,支持使用 `@path` 从文件读取,或 `-` 从 stdin 读取 |
Show 5 other places
routes/svg-edit.md:7In the instructionsOpen original file
## ⚠️ 有损性警告SVG 导出是**纯视觉快照**,再次导入后画板语义(思维导图层级/表格结构/连线绑定/容器类型/mention/节点 ID/锁定/评论)会丢失。**保留的信息**:形状几何(位置/大小/路径)、文本内容与基本格式(字号/粗体/斜体/对齐)、填充色/描边色/透明度(线性渐变降级为第一个 stop-color 纯色)、连接器路径形状与箭头样式、`<g>` 嵌套的基本分组关系(≥2 子元素时重建为 DirectFocusGroup)。
references/lark-whiteboard-update.md:64In the instructionsOpen original file
# 从文件读取并更新lark-cli whiteboard +update \  --whiteboard-token <画板Token> \  --input_format mermaid \  --source @./diagram.mmd \  --overwrite --as user```
references/lark-whiteboard-update.md:18In the instructionsOpen original file
|----------------------|----|--------------------------------------------|| `--whiteboard-token` | 是  | 画板 token,需要拥有画板的编辑权限                       || `--idempotent-token` | 否  | 幂等 token,确保更新操作幂等;最少 10 个字符,建议使用时间戳 + 场景标识拼接(如 `1744800000-board-1`)。同一次逻辑更新只生成一次该 token,重试时须原样复用;切勿在每次重试时重新生成时间戳或幂等 key,否则会重复写入 || `--overwrite`        | 否  | 写入模式:带上则覆盖更新(写入前删除画板所有现有内容再写入);省略则为增量追加(保留原有内容,新内容叠加写入)。默认 false(增量追加)|| `--source`           | 是  | 输入画板内容,支持使用 `@path` 从文件读取,或 `-` 从 stdin 读取 || `--input_format`     | 否  | 输入格式:`raw`、`plantuml`、`mermaid`、`svg`,默认为 `raw`  |
routes/svg-edit.md:17In the instructionsOpen original file
### 0. 用户确认(强制)执行任何编辑前,先判断**紧邻的上一条用户消息**是否已明确确认有损编辑:- **已确认**(含用户主动预授权,如"我知道有损,直接改")→ 直接进入 Step 1,不再重复警告。- **未确认或回复含糊** → 原样向用户发出下面这句话,**然后立即结束本回合等待回复** —— 同一条消息内不得附带任何导出/编辑/写回命令或工具调用:> SVG 编辑只保证视觉层面对齐,画板语义(层级/节点类型/思维导图结构/表格结构/连线绑定/容器类型/mention 等)将不可恢复,是否继续?这是**知情确认**(动手前让用户对语义丢失止损);真正的破坏性写入在 Step 4 还会再经 `--overwrite` dry-run 确认一次,二者职责不同、都不可省。
routes/svg-edit.md:68In the instructionsOpen original file
### 4. 写回画板`--overwrite` 会清空原画板内容,确认后再执行```bash# dry-run 探测lark-cli whiteboard +update \  --whiteboard-token <TOKEN> \  --source @<dir>/edited.svg \  --input_format svg \  --idempotent-token <10+字符唯一串> \  --overwrite --dry-run --as user# 用户确认后执行lark-cli whiteboard +update \  --whiteboard-token <TOKEN> \  --source @<dir>/edited.svg \  --input_format svg \  --idempotent-token <10+字符唯一串> \  --overwrite --as user```
Could it bypass safety checks?Looks for skipped website security checks, excessive file access, or actions that skip your approval.Risks found: 1
Medium risk

The supplied package contains document and directory capabilities beyond its whiteboard purpose

Source references: 6
What we found

The top-level description says document editing is out of scope, yet the source also contains lark-doc, which can read, create, and edit documents, and lark-contact, which can query names, email, departments, contact details, and personal status.

Why this matters

If an installer registers every nested SKILL.md, users expecting only whiteboard functions may also enable broader document-write and employee-profile access, increasing the impact of mistakes and privacy exposure.

Legitimate use of this code

The supplied bundle does contain separate lark-doc and lark-contact skills, but their presence alone does not show that lark-whiteboard invokes all of their capabilities. The top-level whiteboard skill excludes document-content editing; its workflow uses document commands only to obtain or create a board token, while contact lookup is conditionally used when an actual user mention must be resolved to an open_id. Users can still ask which bundled skills and permissions installation enables and grant only task-specific scopes.

This assessment concerns the code and conditions shown, not proof that harm has occurred.
SKILL.md:4In the instructionsOpen original file
version: 1.0.0description: >  飞书画板:查询和编辑飞书云文档中的画板。支持导出画板为预览图片、导出原始节点结构、使用多种格式更新画板内容。  当用户需要查看画板内容、导出画板图片、编辑画板时使用此 skill。不负责:飞书云文档内容编辑(lark-doc)、文档内嵌电子表格/Base(lark-sheets / lark-base)。metadata:
Show 5 other places
lark-doc/SKILL.md:2In the instructionsOpen original file
---name: lark-docdescription: "飞书云文档(Docx / Wiki)内容操作:读取、创建、编辑文档,插入或下载图片附件,以及操作思维笔记。用户提供文档 URL/token(包括 doubao.com 的 /docx/、/wiki/)时使用;按 URL 路径/token 而非域名路由。文档内嵌资源按读取参考中的统一规则分流。独立评论操作走 lark-drive;随正文读取评论使用 docs +fetch。表格或 Base 内部数据操作不在本 skill。"metadata:
lark-contact/SKILL.md:2In the instructionsOpen original file
---name: lark-contactversion: 1.0.0description: "飞书 / Lark 通讯录:按姓名 / 邮箱解析成 open_id,或按 open_id 反查姓名 / 部门 / 邮箱 / 联系方式 / 个人状态 / 签名,以及按关键词搜索当前用户可见的机器人 / 智能体(agent)。当用户提到一个名字要下一步发消息 / 排日程,或拿到 open_id 想查具体信息时使用。不负责部门树遍历、按部门列员工、组织架构图,这类需求走原生 OpenAPI。"metadata:
references/lark-whiteboard-workflow.md:8In the instructionsOpen original file
**Step 1:获取 board_token**| 用户给了什么 | 怎么获取 ||---|---|| 直接给了 whiteboard token(`wbcnXXX`)| 直接使用 || 文档 URL 或 doc_id,文档中已有画板 | `lark-cli docs +fetch --doc <URL> --as user`,从返回的 `<whiteboard token="xxx"/>` 提取 || 文档 URL 或 doc_id,需要新建画板 | `lark-cli docs +update --doc <doc_id> --command append --content '<whiteboard type="blank"></whiteboard>' --as user`,从响应 `data.new_blocks[0].block_token` 取得(`block_type == "whiteboard"` 的那条;参数详见 lark-doc SKILL.md)|
scenes/mention.md:7In the instructionsOpen original file
## 取值来源(强约束)- 本页只讲 @用户(mentionUser)。@文档(mentionDoc)暂不支持。- `mentionUserId` 必须是**真实的飞书用户 open_id**(形如 `ou_xxxxxxxx`)。- 用户只给出**姓名**时,先用 `lark-contact` skill 把姓名解析成 open_id,再填入 `mentionUserId`。- **无法解析出真实 open_id 时,停下向用户确认,禁止臆造 id**。假 id 会写入失败或 @ 到错误的人。
lark-contact/SKILL.md:67In the instructionsOpen original file
## 不在本 skill 范围- 发消息 / 查聊天记录 → [`lark-im`](../lark-im/SKILL.md)- 排日程 / 邀请会议 → [`lark-calendar`](../lark-calendar/SKILL.md)- 部门树 / 按部门列员工 / 组织架构 → [`lark-openapi-explorer`](../lark-openapi-explorer/SKILL.md) 查找原生接口
Could it mislead the AI or hide text?Checks the skill instructions for requests to ignore you, influence the report, or hide text in invisible characters.No risks found
Could it change links or payment recipients without asking?Looks for forced referral or payment changes combined with instructions to hide the change.No risks found

Inside this skill

3 instruction sections

The Skill uses lark-cli to read, export, and update Lark whiteboards, normally acting as the current user. It supports previews, SVG, source code, and raw node data.

View source
SKILL.md:23In the instructionsOpen original file
**身份**:画板操作默认使用 `--as user`。仅当需要以应用身份上传时使用 `--as bot`。
references/lark-whiteboard-export.md:11In the instructionsOpen original file
|----------------------|----|------------------------------------------------------------------------|| `--whiteboard-token` | 是  | 画板 token,需要拥有画板的读权限                                                    || `--output-type`      | 是  | 输出格式:`preview`(预览图片)、`svg`(SVG 矢量图)、`source`(PlantUML/Mermaid 代码)、`raw`(OpenAPI 原生画板节点格式) || `--output`           | 否  | 输出路径。当 `--output-type preview` 时必填;当 `--output-type svg/source/raw` 时可选,不填则直接输出到终端 || `--overwrite`        | 否  | 覆盖已存在的文件,默认为 false                                                     |

Writes can append or clear and rebuild the entire board. For lossy SVG editing, the workflow requires informed consent, a dry run, and another confirmation.

View source
references/lark-whiteboard-update.md:20In the instructionsOpen original file
| `--idempotent-token` | 否  | 幂等 token,确保更新操作幂等;最少 10 个字符,建议使用时间戳 + 场景标识拼接(如 `1744800000-board-1`)。同一次逻辑更新只生成一次该 token,重试时须原样复用;切勿在每次重试时重新生成时间戳或幂等 key,否则会重复写入 || `--overwrite`        | 否  | 写入模式:带上则覆盖更新(写入前删除画板所有现有内容再写入);省略则为增量追加(保留原有内容,新内容叠加写入)。默认 false(增量追加)|| `--source`           | 是  | 输入画板内容,支持使用 `@path` 从文件读取,或 `-` 从 stdin 读取 |
routes/svg-edit.md:19In the instructionsOpen original file
执行任何编辑前,先判断**紧邻的上一条用户消息**是否已明确确认有损编辑:- **已确认**(含用户主动预授权,如"我知道有损,直接改")→ 直接进入 Step 1,不再重复警告。- **未确认或回复含糊** → 原样向用户发出下面这句话,**然后立即结束本回合等待回复** —— 同一条消息内不得附带任何导出/编辑/写回命令或工具调用:> SVG 编辑只保证视觉层面对齐,画板语义(层级/节点类型/思维导图结构/表格结构/连线绑定/容器类型/mention 等)将不可恢复,是否继续?这是**知情确认**(动手前让用户对语义丢失止损);真正的破坏性写入在 Step 4 还会再经 `--overwrite` dry-run 确认一次,二者职责不同、都不可省。

Authentication and permission handling are delegated to lark-shared, which is absent from the supplied source, so this audit cannot verify credential storage, scope selection, or authentication recovery behavior.

View source
SKILL.md:17In the instructionsOpen original file
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),其中包含认证、权限处理**
Start here · InstructionsSKILL.md
lark-whiteboard
Lines connect the instruction file to its sections, not an observed execution order. Select a section to read the source.

File reference map

References: 40
Files making referencesReferenced content
Lines show actual file references, not execution order. Select a node to highlight its connections and inspect the files and source locations. Dashed lines include files that still need locating.
Files and check records79 files

Coverage and gaps

Content covered in each file

These are the source ranges included in this check, not a guarantee that every issue has been resolved.

  • SKILL.mdFull text included
  • references/lark-whiteboard-export.mdFull text included
  • references/lark-whiteboard-update.mdFull text included
  • references/lark-whiteboard-workflow.mdFull text included
  • routes/svg-edit.mdFull text included
  • elements/image.mdFull text included
  • lark-contact/references/lark-contact-get-user.mdFull text included
  • lark-contact/references/lark-contact-search-bot.mdFull text included
  • lark-contact/references/lark-contact-search-user.mdFull text included
  • lark-doc/references/genres/business-analysis.mdFull text included
  • lark-doc/references/genres/data-report.mdFull text included
  • lark-doc/references/genres/email.mdFull text included
  • lark-doc/references/genres/execution-plan.mdFull text included
  • lark-doc/references/genres/formal-doc.mdFull text included
  • lark-doc/references/genres/meeting-minutes.mdFull text included
  • lark-doc/references/genres/memo-brief.mdFull text included
  • lark-doc/references/genres/official-redhead.mdFull text included
  • lark-doc/references/genres/prd.mdFull text included
  • lark-doc/references/genres/proposal.mdFull text included
  • lark-doc/references/genres/research-report.mdFull text included
  • lark-doc/references/genres/retrospective.mdFull text included
  • lark-doc/references/genres/route-consumer.mdFull text included
  • lark-doc/references/genres/route-creative.mdFull text included
  • lark-doc/references/genres/route-knowledge.mdFull text included
  • lark-doc/references/genres/route-marketing.mdFull text included
  • lark-doc/references/genres/route-media.mdFull text included
  • lark-doc/references/genres/route-opinion.mdFull text included
  • lark-doc/references/genres/route-personal-brand.mdFull text included
  • lark-doc/references/genres/route-platform.mdFull text included
  • lark-doc/references/genres/route-report.mdFull text included
  • lark-doc/references/genres/route-workplace.mdFull text included
  • lark-doc/references/genres/sop-tutorial.mdFull text included
  • lark-doc/references/genres/technical-doc.mdFull text included
  • lark-doc/references/genres/wechat.mdFull text included
  • lark-doc/references/genres/weekly-report.mdFull text included
  • lark-doc/references/genres/white-paper.mdFull text included
  • lark-doc/references/genres/xiaohongshu.mdFull text included
  • lark-doc/references/lark-doc-create-workflow.mdFull text included
  • lark-doc/references/lark-doc-create.mdFull text included
  • lark-doc/references/lark-doc-fetch.mdFull text included
  • lark-doc/references/lark-doc-history.mdFull text included
  • lark-doc/references/lark-doc-md.mdFull text included
  • lark-doc/references/lark-doc-media-download.mdFull text included
  • lark-doc/references/lark-doc-media-insert.mdFull text included
  • lark-doc/references/lark-doc-media-preview.mdFull text included
  • lark-doc/references/lark-doc-mindnote.mdFull text included
  • lark-doc/references/lark-doc-resource-cover.mdFull text included
  • lark-doc/references/lark-doc-script.mdFull text included
  • lark-doc/references/lark-doc-update.mdFull text included
  • lark-doc/references/lark-doc-whiteboard.mdFull text included
  • lark-doc/references/lark-doc-xml-extended-blocks.mdFull text included
  • lark-doc/references/lark-doc-xml.mdFull text included
  • lark-doc/SKILL.mdFull text included
  • routes/dsl.mdFull text included
  • routes/mermaid.mdFull text included
  • routes/svg.mdFull text included
  • scenes/mention.mdFull text included
  • scenes/photo-showcase.mdFull text included
  • lark-contact/SKILL.mdFull text included
  • elements/connectors.mdFull text included
  • elements/content.mdFull text included
  • elements/layout.mdFull text included
  • elements/schema.mdFull text included
  • elements/style.mdFull text included
  • elements/typography.mdFull text included
  • scenes/architecture.mdFull text included
  • scenes/bar-chart.mdFull text included
  • scenes/comparison.mdFull text included
  • scenes/fishbone.mdFull text included
  • scenes/flowchart.mdFull text included
  • scenes/flywheel.mdFull text included
  • scenes/funnel.mdFull text included
  • scenes/line-chart.mdFull text included
  • scenes/mermaid.mdFull text included
  • scenes/milestone.mdFull text included
  • scenes/organization.mdFull text included
  • scenes/pyramid.mdFull text included
  • scenes/swimlane.mdFull text included
  • scenes/treemap.mdFull text included

This report is for the version above. We read the available code and instructions without running the skill or checking extra packages it installs. This is not a promise of safety: a different version or setup may behave differently.

  • SKILL.mdInstructions
  • elements/connectors.mdSupporting file
  • elements/content.mdSupporting file
  • elements/image.mdSupporting file
  • elements/layout.mdSupporting file
  • elements/schema.mdSupporting file
  • elements/style.mdSupporting file
  • elements/typography.mdSupporting file
  • references/lark-whiteboard-export.mdSupporting file
  • references/lark-whiteboard-update.mdSupporting file
  • references/lark-whiteboard-workflow.mdSupporting file
  • routes/dsl.mdSupporting file
  • routes/mermaid.mdSupporting file
  • routes/svg-edit.mdSupporting file
  • routes/svg.mdSupporting file
  • scenes/architecture.mdSupporting file
  • scenes/bar-chart.mdSupporting file
  • scenes/comparison.mdSupporting file
  • scenes/fishbone.mdSupporting file
  • scenes/flowchart.mdSupporting file
  • scenes/flywheel.mdSupporting file
  • scenes/funnel.mdSupporting file
  • scenes/line-chart.mdSupporting file
  • scenes/mention.mdSupporting file
  • scenes/mermaid.mdSupporting file
  • scenes/milestone.mdSupporting file
  • scenes/organization.mdSupporting file
  • scenes/photo-showcase.mdSupporting file
  • scenes/pyramid.mdSupporting file
  • scenes/swimlane.mdSupporting file
  • scenes/treemap.mdSupporting file
  • lark-doc/SKILL.mdSupporting file
  • lark-doc/references/lark-doc-whiteboard.mdSupporting file
  • lark-doc/references/lark-doc-fetch.mdSupporting file
  • lark-doc/references/lark-doc-create-workflow.mdSupporting file
  • lark-doc/references/lark-doc-create.mdSupporting file
  • lark-doc/references/lark-doc-update.mdSupporting file
  • lark-doc/references/lark-doc-script.mdSupporting file
  • lark-doc/references/lark-doc-history.mdSupporting file
  • lark-doc/references/lark-doc-media-insert.mdSupporting file
  • lark-doc/references/lark-doc-media-preview.mdSupporting file
  • lark-doc/references/lark-doc-media-download.mdSupporting file
  • lark-doc/references/lark-doc-resource-cover.mdSupporting file
  • lark-doc/references/lark-doc-mindnote.mdSupporting file
  • lark-contact/SKILL.mdSupporting file
  • lark-doc/references/genres/route-workplace.mdSupporting file
  • lark-doc/references/genres/route-report.mdSupporting file
  • lark-doc/references/genres/route-knowledge.mdSupporting file
  • lark-doc/references/genres/route-media.mdSupporting file
  • lark-doc/references/genres/route-opinion.mdSupporting file
  • lark-doc/references/genres/route-consumer.mdSupporting file
  • lark-doc/references/genres/route-marketing.mdSupporting file
  • lark-doc/references/genres/route-personal-brand.mdSupporting file
  • lark-doc/references/genres/route-creative.mdSupporting file
  • lark-doc/references/genres/route-platform.mdSupporting file
  • lark-doc/references/lark-doc-xml.mdSupporting file
  • lark-doc/references/lark-doc-xml-extended-blocks.mdSupporting file
  • lark-doc/references/lark-doc-md.mdSupporting file
  • lark-contact/references/lark-contact-search-user.mdSupporting file
  • lark-contact/references/lark-contact-search-bot.mdSupporting file
  • lark-contact/references/lark-contact-get-user.mdSupporting file
  • lark-doc/references/genres/memo-brief.mdSupporting file
  • lark-doc/references/genres/weekly-report.mdSupporting file
  • lark-doc/references/genres/proposal.mdSupporting file
  • lark-doc/references/genres/execution-plan.mdSupporting file
  • lark-doc/references/genres/formal-doc.mdSupporting file
  • lark-doc/references/genres/official-redhead.mdSupporting file
  • lark-doc/references/genres/meeting-minutes.mdSupporting file
  • lark-doc/references/genres/retrospective.mdSupporting file
  • lark-doc/references/genres/prd.mdSupporting file
  • lark-doc/references/genres/technical-doc.mdSupporting file
  • lark-doc/references/genres/sop-tutorial.mdSupporting file
  • lark-doc/references/genres/research-report.mdSupporting file
  • lark-doc/references/genres/data-report.mdSupporting file
  • lark-doc/references/genres/white-paper.mdSupporting file
  • lark-doc/references/genres/business-analysis.mdSupporting file
  • lark-doc/references/genres/xiaohongshu.mdSupporting file
  • lark-doc/references/genres/wechat.mdSupporting file
  • lark-doc/references/genres/email.mdSupporting file

Operations mentioned in code and instructions

Install extra software packages
SKILL.md:15In the instructionsOpen original file
> - 运行 `lark-cli --version`,确认可用,无需询问用户。> - 运行 `npx -y @larksuite/whiteboard-cli@^0.2.13 -v`,确认可用,无需询问用户。
elements/layout.md:339In the instructionsOpen original file
```bashnpx -y @larksuite/whiteboard-cli@^0.2.13 -i skeleton.json -o step1.png -l coords.json```
elements/schema.md:275In the instructionsOpen original file
  height?: WBSizeValue;         // 默认 48,保持正方形  name: string;                 // 图标名称,从 npx -y @larksuite/whiteboard-cli@^0.2.13 --icons 输出中选取  color?: string;               // 可选颜色覆盖,hex 格式如 '#FF6600'
Connect to websites
elements/image.md:20In the instructionsOpen original file
| 本地文件 | 直接使用 || 网络 URL | `curl -L -o photo.jpg "<URL>"` || 文档中的图片 token | `lark-cli docs +media-download --token <token> --output ./photo.png` |
elements/schema.md:224In the instructionsOpen original file
- 包含 `viewBox` 属性(如 `viewBox="0 0 24 24"`),引擎依赖它确定坐标系- 包含 `xmlns="http://www.w3.org/2000/svg"`(SVG 作为独立 `image/svg+xml` 解析时,XML 规范要求声明命名空间)
elements/schema.md:248In the instructionsOpen original file
    { "type": "svg", "x": 0, "y": 0, "width": 1400, "height": 680,      "svg": { "code": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1400 680\" ...>...</svg>" } },    { "type": "rect", "x": 100, "y": 50, "width": 200, "height": 40,
Run commands
elements/image.md:40In the instructionsOpen original file
```bashls -l *.jpg   # 确认每张文件大小不同;若大小相同则内容可能重复,需重新下载
elements/image.md:53In the instructionsOpen original file
```bashlark-cli docs +media-upload --file ./photo1.jpg --parent-type whiteboard --parent-node <whiteboard_token>
elements/image.md:60In the instructionsOpen original file
```bashlark-cli docs +media-upload --file ./photo1.jpg --parent-type whiteboard --parent-node <whiteboard_token>  # → <media_token_1>
Read files
references/lark-whiteboard-update.md:38In the instructionsOpen original file
# 编写 PlantUML 代码cat > diagram.puml << 'EOF'@startuml
references/lark-whiteboard-update.md:46In the instructionsOpen original file
# 通过管道传递给命令cat diagram.puml | lark-cli whiteboard +update \  --whiteboard-token <画板Token> \
references/lark-whiteboard-update.md:56In the instructionsOpen original file
# 编写 Mermaid 代码cat > diagram.mmd << 'EOF'graph TD
Change files
scenes/bar-chart.md:186In the instructionsOpen original file
```javascriptconst { writeFileSync } = require('fs');```
scenes/fishbone.md:185In the instructionsOpen original file
fs.writeFileSync('diagram.json', JSON.stringify({ version: 2, nodes }, null, 2));```
scenes/flywheel.md:57In the instructionsOpen original file
```javascriptconst { writeFileSync } = require('fs');
Lines read
7,659
File checksum (to compare versions)
c03553862b5b99ffa2cc678da8121ee80ebdfa0c7fff98631a5a6d8ae39f7925