跳转到正文
报告库
用途分类 / 其他用途

Lark Base Skill 安全审计

作者说它能做什么(原文)

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

第三方安全检查结论

先别安装或运行

已检查文件
26
发现的风险
7
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。未发现风险
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。发现 4 项风险
高风险

工作流可把记录字段持续发送到任意外部 HTTP 地址

原文依据:4 处
发现了什么

工作流协议支持 URL、请求头和请求体中的动态字段引用。示例把线索名称、手机号、公司、负责人和记录 ID 拼入请求体并 POST 到外部 CRM。虽然这是示例而非自动安装的后门,但创建并启用类似工作流后,每次触发都会执行该传输。

为什么需要注意

客户资料、个人信息或内部记录可能离开飞书并进入第三方系统;错误或不可信的目标地址会造成持续数据泄露。

该能力不是自动安装的后门,而是用户创建的 Workflow 中可配置的活动行为。HTTPClientAction 允许任意请求方法、动态 URL、请求头和由前序记录字段拼接的正文;示例确实把姓名、手机号、公司、负责人和记录 ID 发往外部 CRM。创建并启用此类流程后,每次匹配触发都可能外传数据。用户应要求明确列出目标域名、字段、触发条件和凭据处理,并限制允许的外部主机。

references/lark-base-workflow-schema.md:375来自说明文档打开原文件
### 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` 时必填 |
查看另外 3 个位置
references/lark-base-workflow.md:656来自说明文档打开原文件
      "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:400来自说明文档打开原文件
|------|-----|------|| `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:657来自说明文档打开原文件
      "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": "\"}" }        ],
高风险

AI 分析步骤可默认读取整个 Base,并以流程创建者身份访问

原文依据:2 处
发现了什么

`AIAnalysisAction` 允许省略或传空 `analysis_table_names`,其语义是分析当前 Base 的全部数据表;`identity_type=maker` 使用固定流程身份。若触发者权限较低,这种配置仍可能让分析步骤按创建者权限处理更广的数据。

为什么需要注意

AI 可能处理与当前任务无关的敏感表,触发者还可能间接获得基于其自身权限无法访问的数据所形成的分析结果。

这段证据能说明什么

来源明确说明省略表名单会覆盖当前 Base 全部表,也提供 maker 与 triggerPersonal 两种身份;但没有说明 maker 的具体权限、是否能超过触发者,或 AI 数据是否离开既有安全边界。因此“低权限触发者借创建者权限读取更广数据”在所给行中尚未证实。用户可要求作者说明两种身份的权限继承与输出可见性,并始终显式列出分析表、优先使用 triggerPersonal。

这项判断针对展示的代码和适用条件,不表示风险已经实际发生。
references/lark-base-workflow-schema.md:478来自说明文档打开原文件
### 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` | 否 | 仅支持纯文本 |
查看另外 1 个位置
references/lark-base-workflow-schema.md:491来自说明文档打开原文件
| 字段 | 必填 | 说明 ||------|------|------|| `analysis_task` | 是 | TextRefItem[] 分析任务,支持 `text` / `ref` 混排;至少包含一项有效内容 || `analysis_table_names` | 否 | string[] 分析数据范围;为空数组 `[]` 或省略时表示当前 Base 的全部数据表 || `identity_type` | 是 | 数据访问身份:`maker`(固定流程身份) / `triggerPersonal`(流程触发者) || `output_instruction` | 否 | 仅支持纯文本 |
中风险

记录读取默认在本地留下 NDJSON 数据副本

原文依据:4 处
发现了什么

Skill 要求所有记录读取都使用 `--output <path>.ndjson` 写入 artifact,而不是只在内存或标准输出中处理。导出的内容可以包含人员、联系方式、业务记录、附件 token 等字段;文档没有在所示规则中要求加密、限制权限或清理这些文件。

为什么需要注意

敏感 Base 数据会在执行环境中形成额外持久副本,可能被同机用户、备份、日志收集器或后续任务读取。

这是实际读取流程的强制要求:记录被写入本地 NDJSON artifact,并另外生成 manifest。所选字段可能包含人员标识、姓名、附件 token 和文件名。证据没有说明这些文件会自动加密、限制权限或清理,因此共享设备、同步目录或后续工具可能接触副本。用户可要求仅投影必要字段、把输出放入受限临时目录并约定清理。

SKILL.md:117来自说明文档打开原文件
所有读取都重复传 `--field-id` 做最小字段投影,并统一写入 NDJSON artifact:`--format ndjson --output <path>.ndjson`。每行是一条 Record JSON,stdout 摘要包含 `records_count` 和 `has_more` 用于分页判断。
查看另外 3 个位置
references/lark-base-record-query-and-analysis-sop.md:76来自说明文档打开原文件
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:64来自说明文档打开原文件
`--output ./records.ndjson` 生成记录文件和同名 `.manifest.json`。高频 manifest 字段:
references/lark-base-record-query-and-analysis-sop.md:87来自说明文档打开原文件
| `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 是稳定定位信息;数组展开会改变粒度 |
中风险

字段插件会把同行字段交给 LLM,并在配置后持续自动写回

原文依据:5 处
发现了什么

插件通过 prompt 中的 `field_ref` 使用同一行其他字段生成内容。文档说明写入配置后自动更新被强制开启且没有关闭参数,整列刷新还可产生大量 AI 任务。即使初次手动触发范围较小,后续源字段变化也可能持续调用 LLM 并改写目标字段。

为什么需要注意

被引用字段中的敏感内容可能进入 AI 处理流程,目标列也可能持续被机器生成结果覆盖,产生费用、错误分类或未经复核的业务数据。

这是明确的插件行为:它将同行字段作为 prompt 输入触发 LLM,并把生成结果写回目标字段。配置成功后自动更新被强制开启且没有关闭参数;整列操作还可能启动大量异步生成任务。虽然手动刷新只应在用户明确要求时执行,但后续自动更新仍是持续风险。用户可限制可引用字段、只按记录刷新,并在启用前要求说明自动触发条件、LLM 数据处理和停用/清空方式。

references/lark-base-field-extension.md:3来自说明文档打开原文件
字段插件用于扩展基础字段能力,当同行其他单元格更新时,触发 LLM 推理生成新单元格。当前公开支持的插件 ID 只有 `builtin_llm_completion`,已确认可用于文本、单选、数字字段,让目标字段基于 prompt 和字段引用生成内容,并可手动触发该字段的单元格异步更新任务。三个命令:- `+field-extension-get`:读取目标字段当前可识别的插件配置。- `+field-extension-update`:安装、更新或清空目标字段插件配置。- `+field-extension-update-cells`:对已配置字段插件的目标字段发起手动更新任务。
查看另外 4 个位置
references/lark-base-field-extension.md:127来自说明文档打开原文件
`field_ref` 只能引用当前表中的其他字段,不能引用目标字段自身;附件字段和其他不支持字段不要作为引用字段。## 更新单元格`+field-extension-update-cells` 有两种范围:这是异步生成任务,响应只表示任务已创建。单元格越多,生成和写回通常耗时越久;整列更新尤其需要控制范围。
references/lark-base-field-extension.md:157来自说明文档打开原文件
## 权限和风险- `+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:72来自说明文档打开原文件
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:167来自说明文档打开原文件
- 目标字段必须是当前字段插件已支持的字段类型;当前已确认支持文本、单选、数字字段。不要把字段插件当成任意字段类型都可用的通用能力。- 写入插件配置后,自动更新会强制开启;当前不提供关闭自动更新的参数。- 读取接口中的 `field_ref.field` 通常返回字段名称;字段名称不可用时可能返回字段 ID。- `+field-extension-update` 不返回 `input_schemas`。- `+field-extension-update-cells --type column` 可能触发大量 AI 生成任务,单元格越多耗时通常越久;除非用户明确要求整列刷新,否则优先按 `--type row` 精确更新目标记录。
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。发现 1 项风险
中风险

删除表单题目默认同时删除底层字段及整列记录数据

原文依据:3 处
发现了什么

表单题目由 Table Field 承载;不带 `--keep-field` 执行题目删除时,不只是把题目从表单隐藏,还会删除字段及其所有记录值。用户说“移除题目”时很容易只预期界面变化。

为什么需要注意

对应整列历史数据可能永久丢失,并可能破坏依赖该字段的视图、公式、筛选或工作流。

风险由活动命令语义直接支持:题目删除默认同时删除承载它的底层字段和该列所有记录数据;只有加 `--keep-field` 才只是从表单移除题目。Skill 本身称其为高风险,但“移除题目”容易被理解为界面配置变化。用户应要求执行前明确说明字段和数据影响,并在只想隐藏/移出表单时明确使用保留字段模式。

SKILL.md:217来自说明文档打开原文件
- `+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>"}]'` 加回表单。
查看另外 2 个位置
SKILL.md:219来自说明文档打开原文件
- 创建问题前先 `+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:176来自说明文档打开原文件
`+form-questions-delete` 默认会删除承载问题的数据表字段及记录数据;如果只是想把题目移出表单并保留字段,必须用 `+form-questions-delete --keep-field`。移出后可用本文的已有字段题目形态加回。
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。发现 1 项风险
高风险

授予“编辑”权限时会默认同时授予新增、删除记录和编辑视图

原文依据:4 处
发现了什么

权限文档虽声称采用最小权限,但随后规定:只要表权限为 `edit`,即使用户没有提到删除,也默认加入 `add` 和 `delete`,并默认允许编辑视图。这把普通“可编辑”请求扩大为可删除数据和改变共享视图。

为什么需要注意

角色成员可能删除记录、创建记录或修改团队视图,超出用户以为自己授予的编辑范围;删除操作可造成业务数据丢失。

这是生效的权限构造规则,不是示例:当表权限设为 edit 且用户未另行限制时,Skill 默认加入新增、删除记录,并允许编辑共享视图。这会把含糊的“可编辑”授权扩大到数据删除和视图变更。用户可要求作者将 delete 和视图编辑改为显式授权项,或在使用时明确限制为不可删除、不可编辑视图。

references/lark-base-role-config.md:439来自说明文档打开原文件
## 默认权限策略与风控规则构造角色配置 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` |
查看另外 3 个位置
references/lark-base-role-config.md:479来自说明文档打开原文件
### 记录操作默认策略**注意**:- 用户未提及时,表权限为 `edit` 时默认同时包含 `add` 和 `delete`,默认不包含 `delete` 的情况仅适用于用户明确限制操作的场景- 阅读范围默认对齐编辑范围:用户仅描述可编辑范围、未说明阅读范围时,可阅读范围与可编辑范围保持一致,不主动扩大- 当可读范围与可编辑范围一致时,**不得**生成 `read_filter_rule_group`;应设置 `other_record_all_read = false` 且 `read_filter_rule_group = null`
references/lark-base-role-config.md:460来自说明文档打开原文件
|------|--------|----------|| `record_operations` 中的 `delete` | **包含**(`perm = edit` 时) | 用户明确限制时才排除 || `view_rule.allow_edit` | **`true`**(`perm = edit` 时) | 用户明确限制"不可编辑视图"或 `perm = read_only` 时设为 `false` |
references/lark-base-role-config.md:481来自说明文档打开原文件
**注意**:- 用户未提及时,表权限为 `edit` 时默认同时包含 `add` 和 `delete`,默认不包含 `delete` 的情况仅适用于用户明确限制操作的场景- 阅读范围默认对齐编辑范围:用户仅描述可编辑范围、未说明阅读范围时,可阅读范围与可编辑范围保持一致,不主动扩大- 当可读范围与可编辑范围一致时,**不得**生成 `read_filter_rule_group`;应设置 `other_record_all_read = false` 且 `read_filter_rule_group = null`
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。未发现风险
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。发现 1 项风险
中风险

公式规则会自行改写阈值含义和分支优先级

原文依据:2 处
发现了什么

公式指南把英文 “above/below/within” 统一解释为包含边界,并要求在认为用户顺序“不合逻辑”时重排分支,还要求自行消除重叠。阈值是否包含边界、哪个条件优先通常是业务政策,不应由 Skill 自动决定。

为什么需要注意

计费、风控、审批、分级或绩效公式可能在边界值上得出错误结果,或因分支顺序变化而改变商业决策。

这些是把自然语言转换为公式时的生效指令,不是错误示例。它把 “above/below/within” 解释为闭区间,还要求 Agent 自行重排其认为不合理的分支并消除重叠。边界包含性和优先级可能决定价格、资格、风控等业务结果,擅自改写会产生错误决策。用户可要求所有含糊边界和重叠条件先确认,并保持用户给定顺序,除非获得明确授权。

references/lark-base-field-formula.md:713来自说明文档打开原文件
## 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).
查看另外 1 个位置
references/lark-base-field-formula.md:717来自说明文档打开原文件
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).

Skill 逻辑拆解

8 个说明模块

该 Skill 通过 `lark-cli` 管理飞书多维表格,覆盖表、字段、记录、表单、仪表盘、应用、工作流和高级权限;它不仅执行读取,也能创建、更新、删除及改变权限。

查看原文
SKILL.md:2来自说明文档打开原文件
---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:59来自说明文档打开原文件
每个 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 操作默认使用用户身份;只有用户明确要求时才切换为机器人身份。权限失败时,说明要求先修复原身份的 scope 或资源 ACL,而不是自动换身份。

查看原文
SKILL.md:15来自说明文档打开原文件
## 身份选择(优先)操作 Base 优先使用 `--as user`;用户明确要求应用身份时使用 `--as bot`。权限失败按 `lark-shared` 以原身份修复 scope 或资源 ACL;只有用户明确同意更换操作者时才切换身份。

对于链接或标题,Skill 要求先解析真实 token 和对象类型;标题匹配不能唯一确定时应让用户选择。这降低了对错误 Base 或错误资源执行写入的概率。

查看原文
SKILL.md:21来自说明文档打开原文件
开始操作前先确定 `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`。常见候选列表命令:

通用写入规则要求区分完整替换与增量更新,并在命令有确认门时确认目标和影响后使用 `--yes`。但各专项文档仍存在下述可能扩大权限、复制数据或持续自动写入的风险。

查看原文
SKILL.md:274来自说明文档打开原文件
## 通用执行契约- Update 先确认命令是完整替换还是 delta:完整替换使用可信当前配置做 read-modify-write,delta 只提交目标变更。- 优先用写入返回确认结果;返回不足以确认或任务明确要求核验时再读回目标。- 命令具有 confirmation gate 时,确认目标和影响后使用 `--yes`。
从这里开始 · 工作说明SKILL.md
lark-base
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。 另有 5 个章节,可在原文件中查看。

文件引用关系图

40 处引用
哪些文件发起引用引用了什么
连线表示真实的文件引用,不是运行顺序。点击节点可高亮相关连线,并查看具体文件和原文位置。虚线表示还有文件需要定位。
文件与检查记录26 个文件

检查范围与遗漏

逐文件查看涉及的内容

下方列出本次涉及的原文范围;纳入检查不代表已查清所有问题。

  • SKILL.md已纳入全文
  • references/lark-base-advanced-permission-and-role.md已纳入全文
  • references/lark-base-app-block-data-config.md已纳入全文
  • references/lark-base-app.md已纳入全文
  • references/lark-base-dashboard.md已纳入全文
  • references/lark-base-field-create.md已纳入全文
  • references/lark-base-field-extension.md已纳入全文
  • references/lark-base-field-update.md已纳入全文
  • references/lark-base-filter-condition.md已纳入全文
  • references/lark-base-form-detail.md已纳入全文
  • references/lark-base-form-questions-create.md已纳入全文
  • references/lark-base-form-questions-update.md已纳入全文
  • references/lark-base-form-submit.md已纳入全文
  • references/lark-base-record-history-list.md已纳入全文
  • references/lark-base-record-query-and-analysis-sop.md已纳入全文
  • references/lark-base-template-center.md已纳入全文
  • references/lark-base-view-set-filter.md已纳入全文
  • references/lark-base-workflow.md已纳入全文
  • references/lark-base-dashboard-block-config.md已纳入全文
  • references/lark-base-dashboard-block-get-data.md已纳入全文
  • references/lark-base-data-query.md已纳入全文
  • references/lark-base-field-formula.md已纳入全文
  • references/lark-base-field-lookup.md已纳入全文
  • references/lark-base-field-schema.md已纳入全文
  • references/lark-base-role-config.md已纳入全文
  • references/lark-base-workflow-schema.md已纳入全文

这份报告只针对上方版本。我们看了拿到的代码和说明文件,没有实际运行 Skill,也没有检查它另外安装的软件包。因此,这不是“保证安全”的承诺;换了版本或使用环境,结果也可能不同。

  • SKILL.md工作说明
  • references/lark-base-advanced-permission-and-role.md配套文件
  • references/lark-base-app-block-data-config.md配套文件
  • references/lark-base-app.md配套文件
  • references/lark-base-dashboard-block-config.md配套文件
  • references/lark-base-dashboard-block-get-data.md配套文件
  • references/lark-base-dashboard.md配套文件
  • references/lark-base-data-query.md配套文件
  • references/lark-base-field-create.md配套文件
  • references/lark-base-field-extension.md配套文件
  • references/lark-base-field-formula.md配套文件
  • references/lark-base-field-lookup.md配套文件
  • references/lark-base-field-schema.md配套文件
  • references/lark-base-field-update.md配套文件
  • references/lark-base-filter-condition.md配套文件
  • references/lark-base-form-detail.md配套文件
  • references/lark-base-form-questions-create.md配套文件
  • references/lark-base-form-questions-update.md配套文件
  • references/lark-base-form-submit.md配套文件
  • references/lark-base-record-history-list.md配套文件
  • references/lark-base-record-query-and-analysis-sop.md配套文件
  • references/lark-base-role-config.md配套文件
  • references/lark-base-template-center.md配套文件
  • references/lark-base-view-set-filter.md配套文件
  • references/lark-base-workflow-schema.md配套文件
  • references/lark-base-workflow.md配套文件

代码和说明中提到的操作

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