skills/feishu-cli-read/SKILL.md
只读操作,不修改文档内容。读取飞书云文档、知识库内容或电子表格,分析文档结构。 支持普通 docx、普通 sheet、知识库 docx 和知识库 sheet。当用户请求"查看"、"阅读"、"分析"、"读取"、 "打开"、"read"、"view" 飞书文档、知识库或电子表格时使用。支持通过文档 ID、知识库 Token 或 URL 读取。 Markdown 仅作为分析中间态存放在 /tmp(不主动落地为用户文件);如需主动导出到本地路径请用 feishu-cli-export, 写入请用 feishu-cli-write。
npx skillsauth add riba2534/feishu-cli feishu-cli-readInstall 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.
从飞书云文档、电子表格或知识库读取内容,转换为 Markdown 格式后进行分析和展示。普通电子表格使用 sheet export --format markdown,知识库 sheet 使用 wiki export。
feishu-cli auth login)docx:document 或 docx:document:readonly(普通文档)、wiki:wiki:readonly(知识库)doc export / wiki export / sheet export 等读类命令统一走"User 优先 + Tenant 兜底"——优先用 token.json 里的 User Token,未找到回落 App Token。所以读他人文档时只要 auth login 一次,后续不用再传 --user-access-token。详见下方"User Token 优先级链"小节。Markdown 作为中间态:本地文档与飞书云文档之间通过 Markdown 格式进行转换,中间文件存储在 /tmp 目录中。
feishu-cli doc export <document_id> --output /tmp/feishu_doc.md --download-images --assets-dir /tmp/feishu_assets
feishu-cli wiki export <node_token_or_url> --output /tmp/feishu_wiki.md --download-images --assets-dir /tmp/feishu_assets
feishu-cli sheet export <spreadsheet_token_or_url> --format markdown --output /tmp/feishu_sheet.md
读取文档基本信息(document_id、revision_id、title),用于在 export 之前确认目标、或拿 revision_id 作为后续 API 调用参数。同样走"User 优先 + Tenant 兜底"。
| Flag | 默认值 | 说明 |
| --- | --- | --- |
| <document_id> | 必填 | 文档 ID 或 URL(https://xxx.feishu.cn/docx/<id>) |
| -o, --output | text | 输出格式,可选 json |
| --user-access-token | 空 | 手动覆盖 User Token;不填则自动从 ~/.feishu-cli/token.json 读取 |
# 文本摘要
feishu-cli doc get ABC123def456
# JSON 输出(脚本里拿 revision_id / title)
feishu-cli doc get ABC123def456 -o json
# 从 URL 直接读
feishu-cli doc get https://xxx.feishu.cn/docx/ABC123def456
doc export 拿不到结构化块树时(例如要分析每个块的类型、定位特定块、查 raw API 响应),用 doc blocks。默认列出第一页(500 块),加 --all 自动分页拉完。
| Flag | 默认值 | 说明 |
| --- | --- | --- |
| <document_id> | 必填 | 文档 ID(不接 URL,请先 doc get 拿 ID) |
| --all | false | 自动分页获取所有块(覆盖 --page-size / --page-token) |
| --page-size | 500 | 单页块数量 |
| --page-token | 空 | 续页 token |
| --document-revision-id | -1 | 文档版本(-1 = 最新) |
| --raw | false | 输出飞书 API 原始 JSON(含未解析字段) |
| --user-id-type | open_id | 用户 ID 类型(open_id/union_id/user_id) |
| -o, --output | text | 输出格式,可选 json(CLI 归一化结构) |
| --user-access-token | 空 | 手动覆盖 User Token |
# 默认:第一页,文本摘要
feishu-cli doc blocks ABC123def456
# 全量分页 + 归一化 JSON
feishu-cli doc blocks ABC123def456 --all -o json
# 拿 API 原始响应(含未识别块类型的 raw 字段)
feishu-cli doc blocks ABC123def456 --all --raw > /tmp/blocks_raw.json
知识库的"目录结构遍历三件套",配合 wiki export 完成"找到节点 → 读内容"的链路。三个命令都走"User 优先 + Tenant 兜底"。
| Flag | 默认值 | 说明 |
| --- | --- | --- |
| <node_token \| url> | 必填 | 节点 Token 或 wiki URL |
| -o, --output | text | 输出格式,可选 json |
| --user-access-token | 空 | 手动覆盖 User Token |
返回字段:space_id / node_token / obj_token(用于文档 API) / obj_type(docx/sheet/bitable/...) / title / has_child。
| Flag | 默认值 | 说明 |
| --- | --- | --- |
| <space_id> | 必填 | 知识空间 ID(由 wiki get 或 wiki spaces 得到) |
| --parent | 空 | 父节点 Token;不填 = 列空间根节点 |
| --page-size | 50 | 单页节点数量 |
| -o, --output | text | 输出格式,可选 json |
| --user-access-token | 空 | 手动覆盖 User Token |
| Flag | 默认值 | 说明 |
| --- | --- | --- |
| --page-size | 50 | 单页空间数量 |
| -o, --output | text | 输出格式,可选 json |
| --user-access-token | 空 | 手动覆盖 User Token |
# 1. 列空间
feishu-cli wiki spaces
# 2. 看某节点信息,记下 space_id
feishu-cli wiki get https://xxx.feishu.cn/wiki/Ad8Iw0oz3iSp4kkIi7QctVhin3e
# 3. 列该节点下子文档
feishu-cli wiki nodes 7012345678901234567 --parent Ad8Iw0oz3iSp4kkIi7QctVhin3e
# 4. 找到目标后用 wiki export 读内容
feishu-cli wiki export <child_node_token> -o /tmp/child.md
sheet export --format markdown 适合"整表导出阅读";要按精确范围读单元格、或先列出工作表元信息,用下面两个命令。
| Flag | 默认值 | 说明 |
| --- | --- | --- |
| <spreadsheet_token> | 必填 | 电子表格 Token 或 URL |
| -o, --output | text | 输出格式,可选 json |
| --user-access-token | 空 | 手动覆盖 User Token |
返回 sheet_id / title / 索引 / 隐藏状态,配合 sheet read 的 SheetID!A1:C10 范围语法用。
| Flag | 默认值 | 说明 |
| --- | --- | --- |
| <spreadsheet_token> | 必填 | 电子表格 Token 或 URL |
| <range> | 必填 | 范围,例如 SheetID!A1:C10、A1:B2(配合 --sheet-id)、Sheet1!A:C 整列 |
| --sheet-id | 空 | 当 range 不带 SheetID 前缀时必填 |
| --value-render | 空 | 单元格值渲染:ToString / FormattedValue / Formula / UnformattedValue |
| --datetime-render | 空 | 日期渲染:FormattedString(不填返回数字时间戳) |
| -o, --output | text | 输出格式,可选 json |
| --user-access-token | 空 | 手动覆盖 User Token |
# 列出所有工作表
feishu-cli sheet list-sheets shtcnxxxxxx
# 读单个范围(推荐先 list-sheets 拿 sheet_id)
feishu-cli sheet read shtcnxxxxxx "0b12ab!A1:C10"
# 用工作表 ID 简化范围
feishu-cli sheet read shtcnxxxxxx "A1:C10" --sheet-id 0b12ab -o json
# 拿公式而非求值结果
feishu-cli sheet read shtcnxxxxxx "Sheet1!A1:B20" --value-render Formula
解析参数
/docx/ → 普通文档,使用 doc export/wiki/ → 知识库文档,使用 wiki export导出为 Markdown(含图片下载)
普通文档:
feishu-cli doc export <document_id> --output /tmp/feishu_doc.md --download-images --assets-dir /tmp/feishu_assets
文档内嵌电子表格块默认会自动展开为 Markdown 表格,便于直接阅读和分析;如果要保留 <sheet .../> 标签用于 roundtrip,追加 --expand-sheets=false。
doc export 会自动解析 User Access Token(如已登录),解析优先级(与 cmd/utils.go::resolveOptionalUserTokenWithFallback + internal/auth/resolve.go::ResolveUserAccessToken 实现完全一致):
--user-access-token 命令行参数(若该 token 等于 token.json 中已过期的 access_token,且 refresh_token 仍有效,自动刷新)FEISHU_USER_ACCESS_TOKEN 环境变量(同样支持本机身份延伸的自动刷新)~/.feishu-cli/token.json(通过 auth login 保存;access_token 过期则用 refresh_token 自动续期并写回)config.yaml 中的 user_access_token(静态配置,不会自动刷新)找到 User Token 时使用用户身份访问,未找到或解析失败时回退为 App Access Token(租户身份)。
若遇到 code=1770032 forBidden(App 无权限且未登录)或 code=99991679 Unauthorized(User Token 缺少 scope),需先在飞书开放平台为应用开通 docx:document:readonly,然后完成 User Token 授权:
# 第一步:在飞书开放平台 → 你的应用 → 权限管理 → 搜索 docx:document:readonly → 开通
# (或复制 README 的完整权限 JSON 一次性导入)
feishu-cli auth login
知识库文档:
feishu-cli wiki export <node_token> --output /tmp/feishu_wiki.md --download-images --assets-dir /tmp/feishu_assets
普通电子表格:
feishu-cli sheet export <spreadsheet_token> --format markdown --output /tmp/feishu_sheet.md
不指定 --sheet-id 时会读取所有可见工作表;只看单个工作表时加 --sheet-id <sheet_id>。
重要:务必使用 --download-images 参数下载文档中的图片到本地,否则只能看到 feishu://media/<token> 引用,无法理解图片内容。
可选参数:
--user-access-token:手动指定 User Access Token(不填则自动从 ~/.feishu-cli/token.json 读取)--front-matter:在 Markdown 顶部添加 YAML front matter(含标题和文档 ID)--highlight:保留文本颜色和背景色(输出为 HTML <span> 标签)--expand-mentions:展开 @用户为友好格式(默认开启,需要 contact:user.base:readonly 权限)--expand-sheets:展开文档内嵌电子表格为 Markdown 表格(默认开启;设为 false 时保留 <sheet .../> 标签)读取文本内容
读取并理解图片内容
--assets-dir 指定的目录是否有下载的图片# 列出下载的图片
ls /tmp/feishu_assets/
# 使用 Read 工具查看图片
# Read /tmp/feishu_assets/image_1.png
# Read /tmp/feishu_assets/image_2.png
报告结果
向用户报告:
| URL 格式 | 类型 | 命令 |
| ----------------------------------------- | -------- | ------------- |
| https://xxx.feishu.cn/docx/<id> | 普通文档 | doc export |
| https://xxx.feishu.cn/sheets/<token> | 普通电子表格 | sheet export --format markdown |
| https://xxx.feishu.cn/wiki/<token> | 知识库(docx/sheet) | wiki export |
| https://xxx.larkoffice.com/docx/<id> | 普通文档 | doc export |
| https://xxx.larkoffice.com/sheets/<token> | 普通电子表格 | sheet export --format markdown |
| https://xxx.larkoffice.com/wiki/<token> | 知识库(docx/sheet) | wiki export |
# 读取普通文档
feishu-cli doc export <document_id> --output /tmp/feishu_doc.md --download-images --assets-dir /tmp/feishu_assets
feishu-cli doc export https://xxx.feishu.cn/docx/<document_id> --output /tmp/feishu_doc.md
# 读取知识库文档
feishu-cli wiki export <node_token> --output /tmp/feishu_wiki.md --download-images --assets-dir /tmp/feishu_assets
feishu-cli wiki export https://xxx.feishu.cn/wiki/<node_token> --output /tmp/feishu_wiki.md
# 读取普通电子表格为 Markdown
feishu-cli sheet export <spreadsheet_token> --format markdown -o /tmp/feishu_sheet.md
导出的 Markdown 支持以下飞书特有块类型的转换:
| 飞书块类型 | Markdown 表现 |
| ------------------ | ------------------------------------------------------ |
| Callout 高亮块 | > [!NOTE]、> [!WARNING] 等 6 种 GitHub-style alert |
| 块级/行内公式 | $formula$(LaTeX 格式) |
| 画板 (Board) | [画板/Whiteboard](feishu://board/...) 链接 |
| 电子表格块 (Sheet) | 默认展开为 Markdown 表格;关闭 --expand-sheets 时输出 <sheet .../> |
| ISV 块 (Mermaid) | 画板链接 |
| QuoteContainer | > 引用语法(支持嵌套) |
| AddOns/SyncedBlock | 透明展开子块内容 |
| Iframe | <iframe> HTML 标签 |
使用 --highlight 参数时,带颜色的文本输出为 <span style="color:..."> 标签。
知识库文档可能是目录节点(包含子节点),需要特殊处理。
当导出知识库文档时,如果 Markdown 内容显示为:
[Wiki 目录 - 使用 'wiki nodes <space_id> --parent <node_token>' 获取子节点列表]
说明这是一个Wiki 目录节点(block_type=42),子文档列表存储在知识库元数据中。
# 1. 先获取节点信息,记录 space_id
feishu-cli wiki get <node_token>
# 2. 列出该节点下的子节点
feishu-cli wiki nodes <space_id> --parent <node_token>
# 步骤 1:尝试导出文档
feishu-cli wiki export <node_token> -o /tmp/doc.md
# 步骤 2:检查内容
# 如果显示 "[Wiki 目录...]",说明是目录节点
# 步骤 3:获取节点信息
feishu-cli wiki get <node_token>
# 记录 space_id 和 has_child 字段
# 步骤 4:获取子节点
feishu-cli wiki nodes <space_id> --parent <node_token>
# 步骤 5:逐个导出子节点
feishu-cli wiki export <child_node_token_1> -o /tmp/child1.md
feishu-cli wiki export <child_node_token_2> -o /tmp/child2.md
| 错误 | 原因 | 解决 |
| --------------------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| code=1770032, msg=forBidden | App Token 无权限访问该文档 | 在飞书开放平台应用权限管理页面开通 docx:document:readonly,再 auth login 授权 User Token |
| code=99991679, msg=Unauthorized | User Token 缺少 docx:document:readonly scope | 在飞书开放平台应用权限管理页面开通 docx:document:readonly,再重新 auth login |
| code=131002, param err | 参数错误 | 检查 token 格式 |
| code=131001, node not found | 节点不存在 | 检查 token 是否正确 |
| code=131003, no permission | 无权限访问 | 确认应用有 wiki:wiki:readonly 权限 |
| code=131004, space not found | 知识空间不存在 | 检查 space_id 是否正确 |
| 空内容或 Unknown block type | 特殊块类型 | 见「高级:Wiki 目录节点处理」章节 |
情况 1:文档内容为空
情况 2:图片下载失败
--assets-dir 目录是否可写情况 3:部分块类型无法识别
<!-- Unknown block type: XX -->情况 4:大型文档
feishu-cli doc blocks <doc_id> --all 自动分页如果遇到网络错误或 API 限流:
# 添加 --debug 查看详细错误信息
feishu-cli wiki export <token> --debug
# 等待几秒后重试
sleep 5 && feishu-cli wiki export <token>
Q: 提示权限不足 / no permission / forBidden
docx:document:readonly(普通文档)或 wiki:wiki:readonly(知识库)权限docx:document:readonlyfeishu-cli auth logindoc export 会自动读取,无需额外参数Q: 文档不存在 / node not found
document_id 和 node_token)/docx/ 后为 document_id,/wiki/ 后为 node_token)Q: Token 过期 / 认证失败
feishu-cli auth status 检查当前认证状态feishu-cli auth login 重新认证FEISHU_APP_ID 和 FEISHU_APP_SECRET 环境变量是否正确tools
往飞书文档里插入/更新/读取/删除「妙笔BOX」HTML 小组件块——飞书文档里**唯一能跑动画和可交互内容**的载体。 把一整页 HTML(CSS/JS)塞进块,在 iframe 沙箱里真实执行:CSS @keyframes 动画、ECharts/Three.js 图表、 Canvas、可拖拽力导向图、Dashboard、打字机/进度条/状态机动画等都能动。 当用户请求"飞书文档里做动画/能动的图/可交互图表/数据大屏/Dashboard/真实地图/地理飞线/3D 图表(map3D、3D 曲面、Three.js)/在飞书文档里放 ECharts 可视化/批量做一套图表演示"、"妙笔BOX"、"HTML 小组件"、 "在飞书文档里跑 ECharts/CSS 动画/JavaScript"、"嵌入网页/HTML 到飞书文档"、"飞书文档里的图怎么动起来"时使用。 注意:要"动"必须用本技能(妙笔BOX);画板(feishu-cli-board)的 SVG 节点会被服务端栅格化成静态图,不会动。
tools
飞书 OpenAPI 裸调。api GET/POST/PUT/DELETE/PATCH <path> 直接调用任意飞书 OpenAPI 接口, 覆盖 feishu-cli 尚未封装的接口(对齐 lark-cli 的 api 能力)。支持 --params(query)/--data(body JSON)/--data-file(从文件读 body)/ --as auto|user|bot 身份/--dry-run 预览/-o 二进制下载/--format/--jq。 当用户请求"调用 X API"、"裸调飞书接口"、"feishu-cli 没封装的接口怎么调"、"raw api"、 "用 api 命令发请求"、"下载飞书媒体/文件 binary"时使用。 不适用:仅查 schema 不调用(用 feishu-cli schema);已有专用命令的高频场景(用对应 feishu-cli <模块>)。
tools
飞书电子表格高级能力(筛选视图 + 筛选条件 + 下拉单元格 + 浮动图片 + 批量样式)。 filter-view CRUD 管理筛选视图,filter-view condition CRUD 写筛选条件(V3 API); dropdown set/get/update/delete 管理单元格下拉框(V2 dataValidation); image get/update/media-upload/write-image 操作浮动图片与单元格写图; batch-set-style 批量设置多范围单元格样式。 基础读写(read/write/style/add-rows/add-sheet)仍在 feishu-cli 主命令 sheet/bitable, 本 skill 专注高级能力。 当用户请求"筛选视图"、"筛选条件"、"加下拉框"、"数据验证"、"列下拉"、"浮动图片"、"插入图片"、"批量样式"时使用。
tools
飞书 OpenAPI 方法本地浏览 + 通用 API 透传调用。schema `service.resource.method` 三段式查路径/参数/scope(无需联网); `feishu-cli api <method> <path>` 直接调任意端点(v1.29+,覆盖 2500+ 未封装 API)。 当用户请求"飞书有没有 XX API"、"X API 的参数是什么"、"X 方法需要什么 scope"、 "OpenAPI 方法浏览"、"看 SDK 怎么调用"、"调一个没封装的飞书 API"时使用。 不适用:查在线最新 schema(请用 OpenAPI Explorer,本地元数据可能落后于飞书开放平台)。