Skip to content
Report library
Purpose / Other

Lark Base Skill Security Audit

What the author says it does (original text)

飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。

Independent security check

Do not install or run it yet

Files checked
26
Risks found
7
Could it run dangerous commands?Looks for programs run straight after downloading, remote control of your computer, and hidden commands.No risks found
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: 4
High risk

Workflows can continuously send record fields to arbitrary external HTTP endpoints

Source references: 4
What we found

The workflow protocol permits dynamic field references in URLs, headers, and request bodies. Its example builds a POST body containing lead name, mobile number, company, owner, and record ID for an external CRM. This is an example rather than an automatically installed backdoor, but an enabled workflow of this form transmits data whenever triggered.

Why this matters

Customer data, personal information, or internal records may leave Lark for a third-party system. A mistaken or untrusted endpoint could cause ongoing disclosure.

This is not an automatically installed backdoor; it is a configurable behavior in a user-created Workflow. HTTPClientAction supports arbitrary methods, dynamic URLs, headers, and request bodies assembled from prior record fields. The example sends a lead name, phone number, company, owner, and record ID to an external CRM. Once such a workflow is created and enabled, matching triggers can transmit data. Users should require an explicit host, field list, trigger conditions, and credential handling, and restrict allowed destinations.

references/lark-base-workflow-schema.md:375In the instructionsOpen original file
### HTTPClientAction```json{  "method": "POST",  "url": [{ "value_type": "text", "value": "https://api.example.com/webhook" }],  "queries": [    { "key": "source", "value": [{ "value_type": "text", "value": "workflow" }] }  ],  "headers": [    { "key": "Content-Type", "value": [{ "value_type": "text", "value": "application/json" }] }  ],  "body_type": "raw",  "raw_body": [    { "value_type": "text", "value": "{\"record_id\":\"" },    { "value_type": "ref", "value": "$.step_1.recordId" },    { "value_type": "text", "value": "\"}" }  ],  "response_type": "json",  "response_value": "{\"success\":true,\"message\":\"data fetched successfully\"}"}```| 字段 | 必填 | 说明 ||------|-----|------|| `method` | 否 | 请求方法:`GET` / `POST` / `PUT` / `PATCH` / `DELETE`,默认 `POST` || `url` | 是 | ValueInfo[],请求 URL,支持 `text` / `ref` 拼接 || `queries` | 否 | KeyValue[],查询参数 || `headers` | 否 | KeyValue[],请求头 || `body_type` | 否 | 请求体类型:`none` / `raw` / `form-data` / `form-urlencoded`,默认 `raw` || `raw_body` | 否 | ValueInfo[],原始请求体,仅 `body_type=raw` 时使用 || `form_body` | 否 | KeyValue[],表单数据,仅 `body_type=form-data` 或 `body_type=form-urlencoded` 时使用 || `response_type` | 否 | 响应类型:`none` / `text` / `json`,默认 `json` || `response_value` | 否 | string,JSON 字符串形式的响应结果示例;仅当 `response_type=json` 时必填 |
Show 3 other places
references/lark-base-workflow.md:656In the instructionsOpen original file
      "next": "step_add_sync_log",      "data": {        "method": "POST",        "url": [          { "value_type": "text", "value": "https://api.example-crm.com/v1/leads/sync" }        ],        "headers": [          { "key": "Content-Type", "value": [{ "value_type": "text", "value": "application/json" }] },          { "key": "X-System", "value": [{ "value_type": "text", "value": "lark_base_workflow" }] }        ],        "body_type": "raw",        "raw_body": [          { "value_type": "text", "value": "{\"lead_name\":\"" },          { "value_type": "ref", "value": "$.step_button_trigger.fldLeadName" },          { "value_type": "text", "value": "\",\"mobile\":\"" },          { "value_type": "ref", "value": "$.step_button_trigger.fldMobile" },          { "value_type": "text", "value": "\",\"company\":\"" },          { "value_type": "ref", "value": "$.step_button_trigger.fldCompany" },          { "value_type": "text", "value": "\",\"owner\":\"" },          { "value_type": "ref", "value": "$.step_button_trigger.fldOwner" },          { "value_type": "text", "value": "\",\"source_record_id\":\"" },          { "value_type": "ref", "value": "$.step_button_trigger.recordId" },          { "value_type": "text", "value": "\"}" }        ],
references/lark-base-workflow-schema.md:400In the instructionsOpen original file
|------|-----|------|| `method` | 否 | 请求方法:`GET` / `POST` / `PUT` / `PATCH` / `DELETE`,默认 `POST` || `url` | 是 | ValueInfo[],请求 URL,支持 `text` / `ref` 拼接 || `queries` | 否 | KeyValue[],查询参数 || `headers` | 否 | KeyValue[],请求头 || `body_type` | 否 | 请求体类型:`none` / `raw` / `form-data` / `form-urlencoded`,默认 `raw` || `raw_body` | 否 | ValueInfo[],原始请求体,仅 `body_type=raw` 时使用 || `form_body` | 否 | KeyValue[],表单数据,仅 `body_type=form-data` 或 `body_type=form-urlencoded` 时使用 |
references/lark-base-workflow.md:657In the instructionsOpen original file
      "data": {        "method": "POST",        "url": [          { "value_type": "text", "value": "https://api.example-crm.com/v1/leads/sync" }        ],        "headers": [          { "key": "Content-Type", "value": [{ "value_type": "text", "value": "application/json" }] },          { "key": "X-System", "value": [{ "value_type": "text", "value": "lark_base_workflow" }] }        ],        "body_type": "raw",        "raw_body": [          { "value_type": "text", "value": "{\"lead_name\":\"" },          { "value_type": "ref", "value": "$.step_button_trigger.fldLeadName" },          { "value_type": "text", "value": "\",\"mobile\":\"" },          { "value_type": "ref", "value": "$.step_button_trigger.fldMobile" },          { "value_type": "text", "value": "\",\"company\":\"" },          { "value_type": "ref", "value": "$.step_button_trigger.fldCompany" },          { "value_type": "text", "value": "\",\"owner\":\"" },          { "value_type": "ref", "value": "$.step_button_trigger.fldOwner" },          { "value_type": "text", "value": "\",\"source_record_id\":\"" },          { "value_type": "ref", "value": "$.step_button_trigger.recordId" },          { "value_type": "text", "value": "\"}" }        ],
High risk

AI analysis can read the entire Base under the workflow maker's identity

Source references: 2
What we found

For `AIAnalysisAction`, an omitted or empty `analysis_table_names` means all tables in the current Base, while `identity_type=maker` uses the fixed workflow identity. If a trigger user has lower privileges, the analysis may still process broader data under the maker's access.

Why this matters

The AI may process sensitive tables unrelated to the task, and a lower-privileged trigger user could indirectly receive conclusions derived from data they cannot access directly.

What this evidence establishes

The source says that an omitted table list covers every table in the current Base and offers maker versus triggerPersonal identities. It does not define maker’s exact permissions, whether they exceed the triggerer’s rights, or where AI data is processed. The claimed privilege expansion is therefore not established by these lines. Users can ask for the identity and output-visibility model, explicitly list permitted tables, and prefer triggerPersonal.

This assessment concerns the code and conditions shown, not proof that harm has occurred.
references/lark-base-workflow-schema.md:478In the instructionsOpen original file
### AIAnalysisAction```json{  "analysis_task": [    { "value_type": "text", "value": "分析昨日订单趋势、异常原因,并给出行动建议" }  ],  "analysis_table_names": ["订单表", "退款表"],  "identity_type": "maker",  "output_instruction": "先给结论,再列证据与行动建议"}```| 字段 | 必填 | 说明 ||------|------|------|| `analysis_task` | 是 | TextRefItem[] 分析任务,支持 `text` / `ref` 混排;至少包含一项有效内容 || `analysis_table_names` | 否 | string[] 分析数据范围;为空数组 `[]` 或省略时表示当前 Base 的全部数据表 || `identity_type` | 是 | 数据访问身份:`maker`(固定流程身份) / `triggerPersonal`(流程触发者) || `output_instruction` | 否 | 仅支持纯文本 |
Show 1 other places
references/lark-base-workflow-schema.md:491In the instructionsOpen original file
| 字段 | 必填 | 说明 ||------|------|------|| `analysis_task` | 是 | TextRefItem[] 分析任务,支持 `text` / `ref` 混排;至少包含一项有效内容 || `analysis_table_names` | 否 | string[] 分析数据范围;为空数组 `[]` 或省略时表示当前 Base 的全部数据表 || `identity_type` | 是 | 数据访问身份:`maker`(固定流程身份) / `triggerPersonal`(流程触发者) || `output_instruction` | 否 | 仅支持纯文本 |
Medium risk

Record reads leave local NDJSON copies by default

Source references: 4
What we found

The Skill directs every record read to use `--output <path>.ndjson`, creating an artifact instead of keeping results only in memory or standard output. Exported fields may include people, contact details, business records, or attachment tokens, while the shown rules do not require encryption, restrictive permissions, or cleanup.

Why this matters

Sensitive Base data gains an additional persistent copy that may be exposed to other local users, backups, log collectors, or later tasks.

This is an active requirement of the read workflow: records are written to a local NDJSON artifact, with a separate manifest. Selected fields may include user identities, names, attachment tokens, and filenames. The shown text does not say these files are encrypted, permission-restricted, or automatically removed, so copies may be exposed on shared devices, synced folders, or to later tools. Users can require minimal field projection, a restricted temporary directory, and cleanup.

SKILL.md:117In the instructionsOpen original file
所有读取都重复传 `--field-id` 做最小字段投影,并统一写入 NDJSON artifact:`--format ndjson --output <path>.ndjson`。每行是一条 Record JSON,stdout 摘要包含 `records_count` 和 `has_more` 用于分页判断。
Show 3 other places
references/lark-base-record-query-and-analysis-sop.md:76In the instructionsOpen original file
NDJSON 每行是一条 Record,以字段 `name` 为 key,并额外包含系统 `record_id`;`field_id` 位于 manifest。字段改名会改变 NDJSON key,跨批次或长期脚本应通过 manifest 复核 `field_id → name`。| `field_type` | NDJSON 结构 | Base 特有的分析语义 || --- | --- | --- || `record_id` | `string` | 表内唯一主键,用于定位和块间去重 || `text`、`formula`、`lookup`、`auto_number`、`not_support` | `string|null` | Formula / Lookup 不保留原始计算类型;需要数值运算时必须显式验证转换规则 || `datetime`、`created_at`、`updated_at` | RFC3339 `string|null` | 带 offset;区分绝对时刻与 Base 本地日历语义 || `number` | `number|null` | 空值不是零,是否纳入分母由任务口径决定 || `checkbox` | `boolean` | 上游空值在 NDJSON 中规范化为 `false` || `select` | `array<string>` | 单选、多选都读取为选项名称数组;空值为 `[]` || `location` | `{lng,lat,full_address}|null` | 地理计算用坐标,文本范围分析用地址 || `user`、`group_chat`、`created_by`、`updated_by` | `array<{id,name}>` | 连接与去重使用 `id`,展示使用 `name` || `link` | `array<{id}>` | `id` 是 Field schema 指定目标表中的 `record_id` || `attachment` | `array<{file_token,size,name}>` | 文件 token 是稳定定位信息;数组展开会改变粒度 |
references/lark-base-record-query-and-analysis-sop.md:64In the instructionsOpen original file
`--output ./records.ndjson` 生成记录文件和同名 `.manifest.json`。高频 manifest 字段:
references/lark-base-record-query-and-analysis-sop.md:87In the instructionsOpen original file
| `location` | `{lng,lat,full_address}|null` | 地理计算用坐标,文本范围分析用地址 || `user`、`group_chat`、`created_by`、`updated_by` | `array<{id,name}>` | 连接与去重使用 `id`,展示使用 `name` || `link` | `array<{id}>` | `id` 是 Field schema 指定目标表中的 `record_id` || `attachment` | `array<{file_token,size,name}>` | 文件 token 是稳定定位信息;数组展开会改变粒度 |
Medium risk

The field extension sends row fields to an LLM and enables ongoing automatic write-back

Source references: 5
What we found

The extension uses `field_ref` prompt segments to generate a target cell from other fields in the same row. The guide says automatic updates are forced on after configuration with no disable option, and a column refresh can create many AI jobs. Later source-field changes may therefore keep invoking the LLM and rewriting the target field.

Why this matters

Sensitive referenced fields may enter AI processing, while machine-generated output can continuously overwrite a business column, causing cost, misclassification, or unreviewed data.

This is explicit plugin behavior: same-row fields are used as prompt input for an LLM, and generated content is written back to a target field. Automatic updating is forcibly enabled after configuration with no off switch, while a column refresh can start many asynchronous generation jobs. Manual refresh requires user intent, but later automatic updates remain persistent. Users can restrict referenced fields and row scope and request clear trigger, data-processing, and removal details before enabling it.

references/lark-base-field-extension.md:3In the instructionsOpen original file
字段插件用于扩展基础字段能力,当同行其他单元格更新时,触发 LLM 推理生成新单元格。当前公开支持的插件 ID 只有 `builtin_llm_completion`,已确认可用于文本、单选、数字字段,让目标字段基于 prompt 和字段引用生成内容,并可手动触发该字段的单元格异步更新任务。三个命令:- `+field-extension-get`:读取目标字段当前可识别的插件配置。- `+field-extension-update`:安装、更新或清空目标字段插件配置。- `+field-extension-update-cells`:对已配置字段插件的目标字段发起手动更新任务。
Show 4 other places
references/lark-base-field-extension.md:127In the instructionsOpen original file
`field_ref` 只能引用当前表中的其他字段,不能引用目标字段自身;附件字段和其他不支持字段不要作为引用字段。## 更新单元格`+field-extension-update-cells` 有两种范围:这是异步生成任务,响应只表示任务已创建。单元格越多,生成和写回通常耗时越久;整列更新尤其需要控制范围。
references/lark-base-field-extension.md:157In the instructionsOpen original file
## 权限和风险- `+field-extension-get` 是只读命令,权限 `base:field:read`。- `+field-extension-update` 是高风险写命令,权限 `base:field:update`,会改变目标字段的自动生成配置,执行时必须带 `--yes`。- `+field-extension-update-cells` 是高风险写命令,权限 `base:record:update`,会触发目标字段单元格异步写回,执行时必须带 `--yes`。- 用户需要具备管理目标表或目标字段插件的权限才能触发更新任务;如果接口返回权限不足,先按 Base 权限或高级权限角色确认用户权限。## 注意事项- 目标字段必须是当前字段插件已支持的字段类型;当前已确认支持文本、单选、数字字段。不要把字段插件当成任意字段类型都可用的通用能力。- 写入插件配置后,自动更新会强制开启;当前不提供关闭自动更新的参数。- 读取接口中的 `field_ref.field` 通常返回字段名称;字段名称不可用时可能返回字段 ID。- `+field-extension-update` 不返回 `input_schemas`。- `+field-extension-update-cells --type column` 可能触发大量 AI 生成任务,单元格越多耗时通常越久;除非用户明确要求整列刷新,否则优先按 `--type row` 精确更新目标记录。
references/lark-base-field-extension.md:72In the instructionsOpen original file
3. 构造 `+field-extension-update --json`。安装或更新时传 `extension_id=builtin_llm_completion` 和 `inputs.prompt`;清空时传 `{}`。4. 配置成功后,只有用户明确要立即生成或刷新已有单元格时,才调用 `+field-extension-update-cells` 发起异步生成任务。5. 需要验收结果时,等待任务完成或稍后用记录读取命令抽样查看目标字段单元格;`update_cells` 只返回任务 ID,不直接返回生成结果。
references/lark-base-field-extension.md:167In the instructionsOpen original file
- 目标字段必须是当前字段插件已支持的字段类型;当前已确认支持文本、单选、数字字段。不要把字段插件当成任意字段类型都可用的通用能力。- 写入插件配置后,自动更新会强制开启;当前不提供关闭自动更新的参数。- 读取接口中的 `field_ref.field` 通常返回字段名称;字段名称不可用时可能返回字段 ID。- `+field-extension-update` 不返回 `input_schemas`。- `+field-extension-update-cells --type column` 可能触发大量 AI 生成任务,单元格越多耗时通常越久;除非用户明确要求整列刷新,否则优先按 `--type row` 精确更新目标记录。
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

Deleting a form question also deletes its underlying field and column data by default

Source references: 3
What we found

Form questions are backed by Table fields. Running question deletion without `--keep-field` does more than hide the question: it removes the field and all values stored in that column. A user asking to “remove a question” may expect only a form-layout change.

Why this matters

The column's historical data may be permanently lost, and views, formulas, filters, or workflows that depend on the field may break.

The active command semantics directly support this risk: deleting a question also deletes its backing field and all record data in that column by default. Only `--keep-field` makes it a form-only removal. The Skill labels this high risk, but “remove the question” can reasonably sound like a UI-only change. Users should require an impact confirmation and explicitly request preservation of the field and data.

SKILL.md:217In the instructionsOpen original file
- `+form-questions-create` 支持两种形态:新建字段题目需要 `title` + `type`;已有字段题目需要 `use_existing_field:true` + `field_id`。已有字段题目只是把该字段加入表单,不创建新字段,也不改变已有记录数据;不要给该形态携带 `type`、`style`、`options` 等字段定义属性。- 创建问题前先 `+form-questions-list`。若目标标题已经存在,除非用户明确要求同名独立问题,否则优先用 `+form-questions-update` 修改题目配置,不要先创建同名问题再删除旧问题。- `+form-questions-delete` 是高风险写操作。默认会删除承载问题的底层 Field 及该字段所有记录数据;只想把题目移出表单并保留字段/数据时必须传 `--keep-field`。保留字段后可用 `+form-questions-create --questions '[{"use_existing_field":true,"field_id":"<field_id>"}]'` 加回表单。
Show 2 other places
SKILL.md:219In the instructionsOpen original file
- 创建问题前先 `+form-questions-list`。若目标标题已经存在,除非用户明确要求同名独立问题,否则优先用 `+form-questions-update` 修改题目配置,不要先创建同名问题再删除旧问题。- `+form-questions-delete` 是高风险写操作。默认会删除承载问题的底层 Field 及该字段所有记录数据;只想把题目移出表单并保留字段/数据时必须传 `--keep-field`。保留字段后可用 `+form-questions-create --questions '[{"use_existing_field":true,"field_id":"<field_id>"}]'` 加回表单。
references/lark-base-form-questions-create.md:176In the instructionsOpen original file
`+form-questions-delete` 默认会删除承载问题的数据表字段及记录数据;如果只是想把题目移出表单并保留字段,必须用 `+form-questions-delete --keep-field`。移出后可用本文的已有字段题目形态加回。
Could it bypass safety checks?Looks for skipped website security checks, excessive file access, or actions that skip your approval.Risks found: 1
High risk

“Edit” access implicitly includes adding/deleting records and editing views

Source references: 4
What we found

Although the permission guide claims least privilege, it later says that table permission `edit` includes both `add` and `delete` unless the user explicitly restricts them, and view editing defaults to enabled. This expands ordinary edit access into destructive and shared-configuration powers.

Why this matters

Role members may delete records, create records, or change shared views beyond what the user understood as edit access. Record deletion can cause business-data loss.

This is an active permission-construction rule, not merely an example. When table access is set to edit and the user gives no further limits, the Skill includes record creation/deletion and view editing. That can expand an ambiguous “can edit” request into data deletion and shared-view changes. Users can ask that deletion and view editing require explicit authorization, or explicitly forbid both.

references/lark-base-role-config.md:439In the instructionsOpen original file
## 默认权限策略与风控规则构造角色配置 JSON 时,采用 **默认拒绝与权限最小化** 策略。用户未明确提及的权限一律不开放,不因"合理猜测""常见做法"主动扩展权限范围。### 默认关闭项以下能力在用户未明确说明时**默认关闭**:| 能力 | 默认值 | 开启条件 ||------|--------|----------|| 未提及的数据表的任何访问 | `no_perm` | 用户明确提及该表 || 仪表盘访问 | 不配置 | 用户明确提及该仪表盘 || `base_rule_map.copy` | `false` | 用户明确要求"允许复制" || `base_rule_map.download` | `false` | 用户明确要求"允许下载/打印/副本" |### 默认开启项(条件性)以下能力在特定条件下**默认开启**,用户明确限制时才排除:| 能力 | 默认值 | 排除条件 ||------|--------|----------|| `record_operations` 中的 `delete` | **包含**(`perm = edit` 时) | 用户明确限制时才排除 || `view_rule.allow_edit` | **`true`**(`perm = edit` 时) | 用户明确限制"不可编辑视图"或 `perm = read_only` 时设为 `false` |
Show 3 other places
references/lark-base-role-config.md:479In the instructionsOpen original file
### 记录操作默认策略**注意**:- 用户未提及时,表权限为 `edit` 时默认同时包含 `add` 和 `delete`,默认不包含 `delete` 的情况仅适用于用户明确限制操作的场景- 阅读范围默认对齐编辑范围:用户仅描述可编辑范围、未说明阅读范围时,可阅读范围与可编辑范围保持一致,不主动扩大- 当可读范围与可编辑范围一致时,**不得**生成 `read_filter_rule_group`;应设置 `other_record_all_read = false` 且 `read_filter_rule_group = null`
references/lark-base-role-config.md:460In the instructionsOpen original file
|------|--------|----------|| `record_operations` 中的 `delete` | **包含**(`perm = edit` 时) | 用户明确限制时才排除 || `view_rule.allow_edit` | **`true`**(`perm = edit` 时) | 用户明确限制"不可编辑视图"或 `perm = read_only` 时设为 `false` |
references/lark-base-role-config.md:481In the instructionsOpen original file
**注意**:- 用户未提及时,表权限为 `edit` 时默认同时包含 `add` 和 `delete`,默认不包含 `delete` 的情况仅适用于用户明确限制操作的场景- 阅读范围默认对齐编辑范围:用户仅描述可编辑范围、未说明阅读范围时,可阅读范围与可编辑范围保持一致,不主动扩大- 当可读范围与可编辑范围一致时,**不得**生成 `read_filter_rule_group`;应设置 `other_record_all_read = false` 且 `read_filter_rule_group = null`
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.Risks found: 1
Medium risk

Formula guidance can reinterpret thresholds and reorder business-rule priority

Source references: 2
What we found

The formula guide maps “above/below/within” to inclusive boundaries and directs the agent to reorder branches it considers illogical and eliminate overlaps. Boundary inclusion and condition priority are usually business-policy decisions, not choices the Skill should make silently.

Why this matters

Pricing, risk, approval, classification, or performance formulas may produce wrong boundary results or change commercial decisions because branch priority was altered.

These are active instructions for translating natural language into formulas, not negative examples. They interpret “above/below/within” as inclusive and direct the agent to reorder branches it considers illogical and remove overlap. Boundary inclusion and priority can control pricing, eligibility, or risk decisions, so silent rewriting can change outcomes. Users can require clarification of ambiguous boundaries and overlaps and preservation of the supplied order unless explicitly authorized.

references/lark-base-field-formula.md:713In the instructionsOpen original file
## Section 14: Translating User Requirements to FormulasWhen the user describes their formula need in natural language, follow these rules to convert it into a precise expression:1. **Numbers must use precise values**: "less than 80%" → field value less than `0.8`. "above 1000" → `>= 1000`.2. **Interval boundaries**: "above/below/within" = closed (inclusive); "less than/more than/outside" = open (exclusive).3. **Branching logic** must be organized as an ordered list with a fallback branch. Each branch has a condition and output.   - Example: "return risk level for 1-3" → `IFS([Value] = 1, "low", [Value] = 2, "medium", [Value] = 3, "high")` with an `IFERROR` or trailing empty-string fallback.4. **Multi-level branches must be flattened** to a single level. Nested if-else chains → flat IFS.5. **Branch conditions must be mutually exclusive**. If the user's conditions overlap, rewrite to eliminate ambiguity.6. **Reorder branches by logical priority** if the user's order is illogical (e.g., check specific conditions before catch-all).
Show 1 other places
references/lark-base-field-formula.md:717In the instructionsOpen original file
1. **Numbers must use precise values**: "less than 80%" → field value less than `0.8`. "above 1000" → `>= 1000`.2. **Interval boundaries**: "above/below/within" = closed (inclusive); "less than/more than/outside" = open (exclusive).3. **Branching logic** must be organized as an ordered list with a fallback branch. Each branch has a condition and output.   - Example: "return risk level for 1-3" → `IFS([Value] = 1, "low", [Value] = 2, "medium", [Value] = 3, "high")` with an `IFERROR` or trailing empty-string fallback.4. **Multi-level branches must be flattened** to a single level. Nested if-else chains → flat IFS.5. **Branch conditions must be mutually exclusive**. If the user's conditions overlap, rewrite to eliminate ambiguity.6. **Reorder branches by logical priority** if the user's order is illogical (e.g., check specific conditions before catch-all).

Inside this skill

8 instruction sections

This Skill uses `lark-cli` to manage Lark Base tables, fields, records, forms, dashboards, apps, workflows, and advanced permissions. It can read data, but also create, update, delete, and change access rights.

View source
SKILL.md:2In the instructionsOpen original file
---name: lark-baseversion: 1.2.21description: "飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。"metadata:  requires:    bins: ["lark-cli"]  cliHelp: "lark-cli base --help"---
SKILL.md:59In the instructionsOpen original file
每个 Base Block 都有 `id`、`type`、可修改的 `name`、所在 Folder 的 `parent_id`,并在同级目录中具有顺序。`+base-block-list` 是统一发现入口;`+base-block-create` 创建 Block,`+base-block-rename` 修改名称,`+base-block-move` 通过 `--parent-id` 调整目录并通过 `--before-id` / `--after-id` 调整顺序,`+base-block-delete` 删除 Block。类型专属内容再由对应模块命令处理。创建时已经明确类型专属初始内容,可直接使用对应构造命令一次完成:Table 用 `+table-create --fields`,Dashboard 用 `+dashboard-create` 设置主题,Workflow 用 `+workflow-create --json` 提交完整定义;Folder 和 Docx 使用 `+base-block-create`。

Base operations default to the user's identity and switch to a bot only when explicitly requested. On permission failure, the instructions call for repairing the original identity's scope or resource ACL instead of silently changing identity.

View source
SKILL.md:15In the instructionsOpen original file
## 身份选择(优先)操作 Base 优先使用 `--as user`;用户明确要求应用身份时使用 `--as bot`。权限失败按 `lark-shared` 以原身份修复 scope 或资源 ACL;只有用户明确同意更换操作者时才切换身份。

For links or titles, the Skill requires resolving the actual token and entity type first. If a title search is ambiguous, it requires the user to choose, reducing the chance of writing to the wrong Base or resource.

View source
SKILL.md:21In the instructionsOpen original file
开始操作前先确定 `base_token` 和目标实体类型;上下文已提供 `<bitable>` / `<base_refer>` 标签及资源 ID 时直接使用。其余情况按意图选择入口:1. **URL 或分享链接:** `lark-cli base +url-resolve --url '<url>' --as user`。Base URL 根据返回的 `resource_type` / `block_type` 及 `table_id`、`view_id`、`record_id`、`dashboard_id`、`workflow_id`、`docx_token`、`share_token` 等坐标进入对应模块;BaseApp `/app/` URL 返回 `app_token`,并在链接携带时返回 `workspace_token` 和 `page_id`。实体类型以解析结果为准。2. **Base 标题或关键词:** `lark-cli base +title-resolve --title '<keyword>' --as user`。单一结果直接取得 `base_token`;多个候选结合标题、所有者和更新时间消歧,仍无法唯一确定时请用户选择。随后按下方 Base Block 资源模型定位目标实体。3. **已有 Base 候选列表:** 用户要列出已有 Base 候选,且需要按最近访问、owner、创建人、时间、类型等维度筛选/排序时,转 `lark-cli drive +search --doc-types bitable --as user`。按标题/关键词定位单个 Base 仍用 `+title-resolve`。常见候选列表命令:

The general write contract requires distinguishing full replacement from delta updates and checking the target and impact before using `--yes`. However, the specialized workflows still contain the permission-expansion, data-copying, and ongoing-write risks described below.

View source
SKILL.md:274In the instructionsOpen original file
## 通用执行契约- Update 先确认命令是完整替换还是 delta:完整替换使用可信当前配置做 read-modify-write,delta 只提交目标变更。- 优先用写入返回确认结果;返回不足以确认或任务明确要求核验时再读回目标。- 命令具有 confirmation gate 时,确认目标和影响后使用 `--yes`。
Start here · InstructionsSKILL.md
lark-base
Lines connect the instruction file to its sections, not an observed execution order. Select a section to read the source. 5 more sections are available in the original file.

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 records26 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-base-advanced-permission-and-role.mdFull text included
  • references/lark-base-app-block-data-config.mdFull text included
  • references/lark-base-app.mdFull text included
  • references/lark-base-dashboard.mdFull text included
  • references/lark-base-field-create.mdFull text included
  • references/lark-base-field-extension.mdFull text included
  • references/lark-base-field-update.mdFull text included
  • references/lark-base-filter-condition.mdFull text included
  • references/lark-base-form-detail.mdFull text included
  • references/lark-base-form-questions-create.mdFull text included
  • references/lark-base-form-questions-update.mdFull text included
  • references/lark-base-form-submit.mdFull text included
  • references/lark-base-record-history-list.mdFull text included
  • references/lark-base-record-query-and-analysis-sop.mdFull text included
  • references/lark-base-template-center.mdFull text included
  • references/lark-base-view-set-filter.mdFull text included
  • references/lark-base-workflow.mdFull text included
  • references/lark-base-dashboard-block-config.mdFull text included
  • references/lark-base-dashboard-block-get-data.mdFull text included
  • references/lark-base-data-query.mdFull text included
  • references/lark-base-field-formula.mdFull text included
  • references/lark-base-field-lookup.mdFull text included
  • references/lark-base-field-schema.mdFull text included
  • references/lark-base-role-config.mdFull text included
  • references/lark-base-workflow-schema.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
  • references/lark-base-advanced-permission-and-role.mdSupporting file
  • references/lark-base-app-block-data-config.mdSupporting file
  • references/lark-base-app.mdSupporting file
  • references/lark-base-dashboard-block-config.mdSupporting file
  • references/lark-base-dashboard-block-get-data.mdSupporting file
  • references/lark-base-dashboard.mdSupporting file
  • references/lark-base-data-query.mdSupporting file
  • references/lark-base-field-create.mdSupporting file
  • references/lark-base-field-extension.mdSupporting file
  • references/lark-base-field-formula.mdSupporting file
  • references/lark-base-field-lookup.mdSupporting file
  • references/lark-base-field-schema.mdSupporting file
  • references/lark-base-field-update.mdSupporting file
  • references/lark-base-filter-condition.mdSupporting file
  • references/lark-base-form-detail.mdSupporting file
  • references/lark-base-form-questions-create.mdSupporting file
  • references/lark-base-form-questions-update.mdSupporting file
  • references/lark-base-form-submit.mdSupporting file
  • references/lark-base-record-history-list.mdSupporting file
  • references/lark-base-record-query-and-analysis-sop.mdSupporting file
  • references/lark-base-role-config.mdSupporting file
  • references/lark-base-template-center.mdSupporting file
  • references/lark-base-view-set-filter.mdSupporting file
  • references/lark-base-workflow-schema.mdSupporting file
  • references/lark-base-workflow.mdSupporting file

Operations mentioned in code and instructions

Run commands
SKILL.md:119In the instructionsOpen original file
```bash# Example: 行数较大时先筛选 Status 包含 Doing 的记录,再导出 20 条作为局部预览
SKILL.md:134In the instructionsOpen original file
```bash# jq:对服务端筛选结果追加名称格式筛选,再投影必要字段
SKILL.md:179In the instructionsOpen original file
```bash# 新增:成功时返回 record_id_list
Read files
SKILL.md:142In the instructionsOpen original file
with open("records-preview.ndjson", encoding="utf-8") as stream:    rows = (json.loads(line) for line in stream if line.strip())
Connect to websites
SKILL.md:157In the instructionsOpen original file
  "标题": "Created from shortcut", // text: string  "官网": "[官网](https://example.com)", // text(url): 裸 URL 或 Markdown link  "联系电话": "13800000000", // text(phone): 合法电话号码字符串
references/lark-base-data-query.md:83In the instructionsOpen original file
```texthttps://example.feishu.cn/base/<base_token>?table=<block_id>```
references/lark-base-field-create.md:50In the instructionsOpen original file
- 每个字段对象最少包含:`name`、`type`。- 所有字段类型都支持可选 `description`;支持纯文本,也支持 Markdown 链接,如 `协作约定可参考[团队字段约定](https://example.com/field-spec)`。- 需要字段默认值时传 `default_value`,直接使用字段对应 CellValue;`datetime` / `user` 的动态填充用 `$slot`。完整规则见 [Field Schema](lark-base-field-schema.md)。
Lines read
8,660
File checksum (to compare versions)
d50a011aff1fc3af017d6efb408e5b1081d29be802d666c010aadd1309a5d57e