skills/larksuite/lark-base/SKILL.md
当需要用 lark-cli 操作飞书多维表格(Base)时调用:适用于建表、字段管理、记录读写、视图配置、历史查询,以及角色/表单/仪表盘管理;也适用于把旧的 +table / +field / +record 写法改成当前命令写法。涉及字段设计、公式字段、查找引用、跨表计算、行级派生指标、数据分析需求时也必须使用本 skill。
npx skillsauth add aiskillstore/marketplace lark-baseInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
前置条件: 先阅读
../lark-shared/SKILL.md。 执行前必做: 执行任何base命令前,必须先阅读对应命令的 reference 文档,再调用命令。 命名约定: 仅使用lark-cli base +...形式的命令。
+data-queryfrom/select/where/aggregate → lookup 字段+record-list / +record-get+field-list 或 +table-get+record-list 当聚合分析引擎+record-upsert 的写入目标lark-cli api GET /open-apis/bitable/v1/...obj_type=bitable 就去找 bitable.*;在本 CLI 里应继续使用 lark-cli base +...+record-upsert 写入,例如文本、数字、日期、单选、多选、人员、关联。附件字段例外:对 agent 而言,文件上传必须走 +record-upload-attachment。+record-upsert 入参。+data-query 或公式字段在 Base 内完成。+data-query
+record-list / +record-get
+record-list 当分析引擎;它负责取明细,不负责聚合计算。formula-field-guide.mdlookup-field-guide.mdtype=formula 必须提供 expressiontype=lookup 必须提供 from / select / where,必要时补 aggregate+table-list / +table-get / +field-list 的真实返回,禁止凭语义猜测改写。执行任何 workflow 命令前,必须先读两份文档:对应的命令文档 + lark-base-workflow-schema.md
+workflow-create → 先读 lark-base-workflow-create.md + schema+workflow-update → 先读 lark-base-workflow-update.md + schema+workflow-list → 先读 lark-base-workflow-list.md + schema+workflow-get → 先读 lark-base-workflow-get.md + schema+workflow-enable → 先读 lark-base-workflow-enable.md + schema+workflow-disable → 先读 lark-base-workflow-disable.md + schematype 值(如把"新增记录"猜成 CreateTrigger),必须从 schema 的 StepType 枚举中复制准确的类型名称创建前确认依赖信息
+table-list / +field-list 获取真实的表名、字段名+table-list / +table-get / +field-create / +record-upsert / +view-set-filter / +record-history-list / +base-get 这类一命令一动作的写法,不使用旧聚合式 +table / +field / +record / +view / +history / +workspace+field-list 获取字段结构,再读 lark-base-shortcut-record-value.md 确认各字段类型的写入值格式+field-create/+field-update 的 JSON 结构+view-set-filter + +record-list 组合完成筛选读取+data-query 进行数据筛选聚合的服务端计算+data-query(服务端计算),禁止用 +record-list 拉全量记录再手动计算;反之,+data-query 不返回原始记录,取数场景仍走 +record-list / +record-get+xxx-list 禁止并发调用 — +table-list / +field-list / +record-list / +view-list / +record-history-list / +role-list 只能串行执行--base-token,不使用旧 --app-token+data-query+field-create / +field-update 维护字段定义外,不要把这些字段作为记录写入目标+view-rename 在目标视图和新名称都明确时可直接执行;+record-delete / +field-delete / +table-delete 在用户已经明确要求删除且目标明确时也可直接执行,不需要再补一次确认,并且执行删除命令时要主动补上 --yes;只有目标不明确时才继续追问+form-list(先拿 form-id)+form-get+form-questions-list+form-questions-delete+form-questions-create / +form-questions-update| 意图 | 推荐命令 | 备注 |
|------|---------|------|
| 列表 / 获取数据表 | lark-cli base +table-list / +table-get | 原子命令 |
| 创建 / 更新 / 删除数据表 | lark-cli base +table-create / +table-update / +table-delete | 一命令一动作 |
| 列表 / 获取字段 | lark-cli base +field-list / +field-get | 原子命令 |
| 创建 / 更新字段 | lark-cli base +field-create / +field-update | 使用 --json |
| 创建 / 更新公式字段 | lark-cli base +field-create / +field-update | type=formula;先读 formula guide,再创建 / 更新 |
| 创建 / 更新 lookup 字段 | lark-cli base +field-create / +field-update | type=lookup;先读 lookup guide,再创建 / 更新,默认先判断 formula 是否更合适 |
| 列表 / 获取记录 | lark-cli base +record-list / +record-get | 原子命令,如果需要聚合计算,分组统计 推荐走 +data-query |
| 创建 / 更新记录 | lark-cli base +record-upsert | --table-id [--record-id] --json |
| 聚合分析 / 比较排序 / 求最值 / 筛选统计 | lark-cli base +data-query | 不要用 +record-list 拉全量数据再手动计算,需使用 +data-query 走服务端计算 |
| 配置 / 查询视图 | lark-cli base +view-* | list/get/create/delete/get-*/set-*/rename |
| 查看记录历史 | lark-cli base +record-history-list | 按表和记录查询变更历史 |
| 按视图筛选查询 | lark-cli base +view-set-filter + lark-cli base +record-list | 组合调用 |
| 创建 / 获取 / 复制 Base | lark-cli base +base-create / +base-get / +base-copy | 原子命令 |
| 列表 / 获取工作流 | lark-cli base +workflow-list / +workflow-get | 原子命令 |
| 创建 / 更新工作流 | lark-cli base +workflow-create / +workflow-update | 使用 --json,必须阅读 schema |
| 启用 / 停用工作流 | lark-cli base +workflow-enable / +workflow-disable | 一命令一动作 |
| 启用 / 停用高级权限 | lark-cli base +advperm-enable / +advperm-disable | 启用后才能使用自定义角色;停用会使已有角色失效 |
| 列表 / 获取角色 | lark-cli base +role-list / +role-get | 查看角色摘要或完整配置 |
| 创建 / 更新 / 删除角色 | lark-cli base +role-create / +role-update / +role-delete | 管理自定义角色权限 |
| 列表 / 获取表单 | lark-cli base +form-list / +form-get | 原子命令 |
| 创建 / 更新 / 删除表单 | lark-cli base +form-create / +form-update / +form-delete | 一命令一动作 |
| 列表 / 创建 / 更新 / 删除表单问题 | lark-cli base +form-questions-list / +form-questions-create / +form-questions-update / +form-questions-delete | 一命令一动作 |
| 列表 / 获取仪表盘 | lark-cli base +dashboard-list / +dashboard-get | 原子命令 |
| 创建 / 更新 / 删除仪表盘 | lark-cli base +dashboard-create / +dashboard-update / +dashboard-delete | 一命令一动作 |
| 列表 / 获取仪表盘 Block | lark-cli base +dashboard-block-list / +dashboard-block-get | 原子命令 |
| 创建 / 更新 / 删除仪表盘 Block | lark-cli base +dashboard-block-create / +dashboard-block-update / +dashboard-block-delete | 一命令一动作 |
--base-token+xxx-list 调用纪律:+table-list / +field-list / +record-list / +view-list / +record-history-list / +role-list / +dashboard-list / +dashboard-block-list / +workflow-list 禁止并发调用;批量执行时只能串行+record-list limit 上限:--limit 最大 200。需要更多数据时必须用分页(offset 递增)分批拉取,禁止单次传超过 200+record-upload-attachment 这条链路(读字段 → 读记录 → 上传素材 → 回写记录)user_id_type 与执行身份(user / bot)差异+record-history-list 按 table-id + record-id 查询记录历史,不支持整表历史扫描+base-create / +base-get / +base-copy+base-create / +base-copy 结果返回规范:创建或复制成功后,回复中必须主动返回新 Base 的标识信息。若返回结果里带可访问链接(如 base.url),要一并返回+base-create / +base-copy 友好性规则:--folder-token、--time-zone、复制时的 --name 都是可选项。用户没有特别要求时,不要为了这些可选参数额外打断;能直接创建/复制就直接执行+base-create / +base-copy 权限处理(bot 创建):若 Base 由应用身份(bot)创建,创建或复制成功后默认继续使用 bot 身份为当前可用 user(指当前 CLI 中 auth 模块已登录且可用的用户身份)添加 full_access(管理员)权限,并在回复中明确授权结果(成功 / 无可用 user / 授权失败及原因)。若授权未完成,要继续给出后续引导(稍后重试授权或继续用 bot);owner 转移必须单独确认,禁止擅自执行+dashboard-create 创建后返回 dashboard_id;Block 的 data_config 通过 JSON 字符串传入,支持 @file.json 读取文件+advperm-enable 启用高级权限后才能管理角色(+role-*);+advperm-disable 是高风险操作,停用后已有自定义角色全部失效;操作用户必须为 Base 管理员;先读 lark-base-advperm-enable.md / lark-base-advperm-disable.md+role-create 仅支持 custom_role;+role-update 采用 Delta Merge(role_name 和 role_type 必须始终提供);+role-delete 不可逆且仅支持自定义角色;角色配置支持 base_rule_map(Base 级复制/下载)、table_rule_map(表级权限含记录/字段粒度)、dashboard_rule_map(仪表盘权限)、docx_rule_map(文档权限);写角色前先读 role-config.md+form-list 获取;+form-create 返回的 id 即 form-id,可用于 +form-questions-* 操作+workflow-list 返回的不是完整树状结构,若需读取完整结构请使用 +workflow-get。+data-query 前必须先阅读 lark-base-data-query.md 了解 DSL 结构、支持的字段类型、聚合函数和限制条件;DSL 中的 field_name 必须与表字段名精确匹配,构造前先用 +field-list 获取真实字段名+view-rename 直接执行即可,不需要再补一句确认+record-delete / +field-delete / +table-delete 可直接执行,不需要再补一次确认;执行时直接带 --yes 通过 CLI 的高风险写入校验。只有目标仍有歧义时,再先用 +record-get / +field-get / +table-get 或 list 命令确认知识库链接(/wiki/TOKEN)背后可能是云文档、电子表格、多维表格等不同类型的文档。不能直接假设 URL 中的 token 就是 file_token,必须先查询实际类型和真实 token。
使用 wiki.spaces.get_node 查询节点信息
lark-cli wiki spaces get_node --params '{"token":"<wiki_token>"}'
从返回结果中提取关键信息
node.obj_type:文档类型(docx/doc/sheet/bitable/slides/file/mindnote)node.obj_token:真实的文档 token(用于后续操作)node.title:文档标题根据 obj_type 选择后续命令
| obj_type | 说明 | 后续命令 |
|----------|------|-----------|
| docx | 新版云文档 | drive file.comments.*、docx.* |
| doc | 旧版云文档 | drive file.comments.* |
| sheet | 电子表格 | sheets.* |
| bitable | 多维表格 | lark-cli base +...(优先);如果 shortcut 不覆盖,再用 lark-cli base <resource> <method>;不要改走 lark-cli api /open-apis/bitable/v1/... |
| slides | 幻灯片 | drive.* |
| file | 文件 | drive.* |
| mindnote | 思维导图 | drive.* |
把 wiki 解析出的 obj_token 当成 Base token 使用
obj_type=bitable 时,node.obj_token 就是后续 base 命令应使用的真实 token。/wiki/... 链接,不要把 wiki_token 直接塞给 --base-token。如果已经报了 token 错,再回退检查 wiki
param baseToken is invalid、base_token invalid、not found,并且用户最初给的是 /wiki/... 链接或 wiki_token,优先怀疑“把 wiki token 当成了 base token”。bitable/v1 API;应立即重新执行 lark-cli wiki spaces get_node,确认 obj_type=bitable 后,改用 node.obj_token 重新执行 lark-cli base +...。# 查询 wiki 节点
lark-cli wiki spaces get_node --params '{"token":"Pgrr***************UnRb"}'
返回结果示例:
{
"node": {
"obj_type": "docx",
"obj_token": "UAJ***************E9nic",
"title": "ai friendly 测试 - 1 副本",
"node_type": "origin",
"space_id": "6946843325487906839"
}
}
| 链接类型 | 格式 | 处理方式 |
|---------|------|---------|
| 直接 Base 链接 | /base/{token} | 直接提取作为 --base-token |
| Wiki 知识库链接 | /wiki/{token} | 先调用 wiki.spaces.get_node,取 node.obj_token |
https://{domain}/base/{base-token}?table={table-id}&view={view-id}
/base/{token} → --base-token?table={id} → --table-id?view={id} → --view-id--base-token 参数传入--base-token| 错误码 | 含义 | 解决方案 |
|--------|------|----------|
| 1254064 | 日期格式错误 | 用毫秒时间戳,非字符串 / 秒级 |
| 1254068 | 超链接格式错误 | 用 {text, link} 对象 |
| 1254066 | 人员字段错误 | 用 [{id:"ou_xxx"}],并确认 user_id_type |
| 1254045 | 字段名不存在 | 检查字段名(含空格、大小写) |
| 1254015 | 字段值类型不匹配 | 先 +field-list,再按类型构造 |
| param baseToken is invalid / base_token invalid | 把 wiki token、workspace token 或其他 token 当成了 base_token | 如果输入来自 /wiki/...,先用 lark-cli wiki spaces get_node 取真实 obj_token;当 obj_type=bitable 时,用 node.obj_token 作为 --base-token 重试,不要改走 bitable/v1 |
| formula / lookup 创建失败 | 指南未读或结构不合法 | 先读 formula-field-guide.md / lookup-field-guide.md,再按 guide 重建请求 |
| 系统字段 / 公式字段写入失败 | 只读字段被当成可写字段 | 改为写存储字段,计算结果交给 formula / lookup / 系统字段自动产出 |
| 1254104 | 批量超 500 条 | 分批调用 |
| 1254291 | 并发写冲突 | 串行写入 + 批次间延迟 |
+field-create/+field-update JSON 规范(推荐)+record-upsert 值格式规范(推荐)+advperm-enable 启用高级权限+advperm-disable 停用高级权限+role-list 列出角色+role-get 获取角色详情+role-create 创建角色+role-update 更新角色+role-delete 删除角色+workflow-create/+workflow-update JSON body 数据结构详解,包含触发器及各类节点的配置规则(强烈推荐)+data-query 聚合分析(DSL 结构、支持字段类型、聚合函数)执行前必做: 从下表定位到命令后,务必先阅读对应命令的 reference 文档,再调用命令。
| 命令分组 | 说明 |
|----------|------|
| table commands | +table-list / +table-get / +table-create / +table-update / +table-delete |
| field commands | +field-list / +field-get / +field-create / +field-update / +field-delete / +field-search-options |
| record commands | +record-list / +record-get / +record-upsert / +record-upload-attachment / +record-delete |
| view commands | +view-list / +view-get / +view-create / +view-delete / +view-get-* / +view-set-* / +view-rename |
| data-query commands | +data-query |
| history commands | +record-history-list |
| base / workspace commands | +base-create / +base-get / +base-copy |
| advperm commands | +advperm-enable / +advperm-disable |
| role commands | +role-list / +role-get / +role-create / +role-update / +role-delete |
| form commands | +form-list / +form-get / +form-create / +form-update / +form-delete |
| form questions commands | +form-questions-list / +form-questions-create / +form-questions-update / +form-questions-delete |
| workflow commands | +workflow-list / +workflow-get / +workflow-create / +workflow-update / +workflow-enable / +workflow-disable |
| dashboard commands | +dashboard-list / +dashboard-get / +dashboard-create / +dashboard-update / +dashboard-delete |
| dashboard block commands | +dashboard-block-list / +dashboard-block-get / +dashboard-block-create / +dashboard-block-update / +dashboard-block-delete |
development
Apple Human Interface Guidelines for content display components. Use this skill when the user asks about charts component, collection view, image view, web view, color well, image well, activity view, lockup, data visualization, content display, displaying images, rendering web content, color pickers, or presenting collections of items in Apple apps. Also use when the user says how should I display charts, what's the best way to show images, should I use a web view, how do I build a grid of items, what component shows media, or how do I present a share sheet. Cross-references: hig-foundations for color/typography/accessibility, hig-patterns for data visualization patterns, hig-components-layout for structural containers, hig-platforms for platform-specific component behavior.
tools
Automate HelpDesk tasks via Rube MCP (Composio): list tickets, manage views, use canned responses, and configure custom fields. Always search tools first for current schemas.
testing
Expert Haskell engineer specializing in advanced type systems, pure functional design, and high-reliability software. Use PROACTIVELY for type-level programming, concurrency, and architecture guidance.
tools
GraphQL gives clients exactly the data they need - no more, no less. One endpoint, typed schema, introspection. But the flexibility that makes it powerful also makes it dangerous. Without proper controls, clients can craft queries that bring down your server. This skill covers schema design, resolvers, DataLoader for N+1 prevention, federation for microservices, and client integration with Apollo/urql. Key insight: GraphQL is a contract. The schema is the API documentation. Design it carefully.