feishu-cli-drive
飞书云盘增强命令组。分块上传大文件(≥20MB 自动 3 段式)、流式下载、 文档异步导出(markdown 快捷路径 / sheet+bitable csv / sub-id / 有界轮询 + resume)、 文档异步导入、文件/文件夹移动(folder 自动轮询)、富文本评论(text/mention_user/link + wiki URL 解析 + 局部评论)、通用异步任务查询、本地 ↔ 云盘单向镜像 (pull/push/status,SHA-256 内容 diff + --delete-* --yes 双确认)、 v2 doc_wiki/search 扁平 filter 搜索(folder-tokens / space-ids / creator-ids / only-title)。 当用户请求"上传大文件"、"下载云盘文件"、"导出为 pdf/markdown/xlsx"、"导入 docx 到云文档"、"移动文件夹"、"添加文档评论"、"@某人评论文档"、"从 wiki 链接评论"、 "查询异步任务状态"、"drive 任务 resume"、"分块上传"、"云盘镜像"、"目录同步"、 "本地与云盘对照"、"SHA 比对"、"按文件夹搜文档"、"feishu drive"、"lark drive"时使用。 本 skill 与老的 file/media/comment 命令组并存,提供更强能力(User Token 支持、 异步 resume、富文本评论),基础场景仍可用 file/media。
How do I install this agent skill?
npx skills add https://github.com/riba2534/feishu-cli --skill feishu-cli-driveIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill provides instructions for the feishu-cli tool to manage Feishu (Lark) Drive files, including uploading, downloading, and mirroring directories. It incorporates security best practices such as SSRF protection and mandatory user confirmation for destructive operations.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
- ZeroLeakspass
Score: 93/100 · 2 sections analyzed
What does this agent skill do?
飞书云盘增强(Drive)
drive 命令组提供与老 file / media / comment add 命令并存的增强能力:
分块上传、markdown 快捷导出、异步任务 resume、富文本评论、wiki 链接解析。
feishu-cli:如尚未安装,请前往 riba2534/feishu-cli 获取安装方式。
前置条件
- 认证:
- 必需 User Token(
requireUserToken,未登录直接报错):upload/download/export/export-download/import/move/add-comment/task-result/search/apply-permission,先feishu-cli auth login。 - 登录后 User 优先 + App 兜底(
resolveOptionalUserTokenWithFallback,未登录不报错):pull/push/status/inspect。已auth login自动用 User Token;未登录回落 App Token(注意 Bot 通常看不到你云盘里的私人文件)。
- 必需 User Token(
- 预检:
feishu-cli auth check --scope "drive:file:upload"可验证 scope
命令速查
0. 元数据 / 权限申请(v1.29+ 新增 ⭐)
# 解析任意文档 URL → 输出 type/title/canonical token(自动展开 wiki)
feishu-cli drive inspect --url "https://xxx.feishu.cn/docx/doxcnxxx"
feishu-cli drive inspect --url "https://xxx.feishu.cn/wiki/wikcnxxx" # 自动 wiki get_node
feishu-cli drive inspect --url doxcnxxx --type docx -o json # 裸 token + JSON
# 向文档所有者申请权限(埋藏 API,飞书文档站未收录,但 lark-cli 已实现)
# 必需 User Token + docs:permission.member:apply scope(或 drive:drive 等任一大权限)
feishu-cli drive apply-permission --token "<url 或裸 token>" --perm view --remark "申请理由"
feishu-cli drive apply-permission --token doxcnxxx --type docx --perm edit --remark "..."
feishu-cli drive apply-permission --token <url> --perm view --dry-run # 预览请求
详见 feishu-cli-toolkit/references/embedded-api-discovery.md(埋藏 API 调研方法论)。
1. 上传 / 下载
# 上传(>20MB 自动走 3 段式分块 upload_prepare/upload_part/upload_finish)
feishu-cli drive upload --file /tmp/report.pdf
feishu-cli drive upload --file /tmp/big.zip --folder-token fldxxx --name "年度报告.zip"
# 下载(流式 + 路径校验 + --overwrite + --timeout,大文件自动 Range 分片兜底)
feishu-cli drive download --file-token boxcnxxxx --output ./report.pdf
feishu-cli drive download --file-token boxcnxxxx --output ./downloads/ --overwrite
feishu-cli drive download --file-token boxcnxxxx --output ./big.zip --timeout 30m
关键点:
drive upload分块上传每片独立重试 3 次,使用io.SectionReader外层只打开文件一次drive download的--output可以是文件路径(直接用)或目录(文件名用file_token本身,暂不从响应头解析)drive download使用用户身份下载时,如果服务端返回大文件限制,会自动使用 HTTP Range 分片下载并合并- 如果需要自定义文件名,请显式传完整路径:
--output ./downloads/report.pdf
2. 文档导出(含 markdown 快捷路径)
# docx → markdown:走 /docs/v1/content 快捷路径,立即返回(不跑异步 export_tasks)
feishu-cli drive export --token docxxxx --doc-type docx --file-extension markdown --output-dir ./exports
# docx → pdf:走异步 export_tasks,有界轮询 10×5s,超时返回 next_command
feishu-cli drive export --token docxxxx --doc-type docx --file-extension pdf --output-dir ./exports
# sheet → csv 指定 sheet_id
feishu-cli drive export --token sheetxxxx --doc-type sheet --file-extension csv --sub-id sheet_1
# bitable → csv 指定 table_id
feishu-cli drive export --token basexxxx --doc-type bitable --file-extension csv --sub-id tblxxxx
支持的格式:
--doc-type:doc/docx/sheet/bitable--file-extension:docx/pdf/xlsx/csv/markdown(markdown 仅 docx 支持)
超时后的 resume 流程:
# drive export 超时会输出:
# next_command: feishu-cli drive task-result --scenario export --ticket abc --file-token xxx
# 1. 轮询任务状态
feishu-cli drive task-result --scenario export --ticket abc --file-token xxx
# 2. 任务完成后下载产物
feishu-cli drive export-download --file-token boxxxx --output-dir ./exports
3. drive export-download — 下载已完成的导出文件
feishu-cli drive export-download --file-token boxxxx --output-dir ./exports
feishu-cli drive export-download --file-token boxxxx --file-name "报告.pdf" --overwrite
4. 文档导入
# 本地文件 → 云文档(docx / sheet / bitable)
feishu-cli drive import --file report.docx --type docx
feishu-cli drive import --file data.xlsx --type sheet --folder-token fldxxx
feishu-cli drive import --file bigsheet.csv --type bitable --folder-token fldxxx
# 注意:docx/sheet 导入上限 20MB,bitable 上限 100MB
关键技术点:
- 走 官方
/medias/upload_all端点(parent_type=ccm_import_open+extra),不在用户云盘留下中间文件(这是和老doc import-file的核心区别) - 格式特定大小限制:docx 20MB / sheet 20MB / bitable 100MB。docx/sheet 超过 20MB 会直接报错,不会自动绕过格式限制。
- 有界轮询 30×2s,超时返回
next_command
5. 移动(文件夹自动轮询)
# 文件移动(同步,立即返回)
feishu-cli drive move --file-token boxxxx --type docx --folder-token fldxxx
# 文件夹移动(异步,自动轮询 task_check 30×2s)
feishu-cli drive move --file-token fldxxx --type folder --folder-token fldyyy
关键点:
- 文件夹移动自动轮询,不再是"发出去就不管了"
- 超时会返回
task_id,可用drive task-result --scenario task_check接力
6. 富文本评论(最强命令)
# 全局评论
feishu-cli drive add-comment --doc doccnxxxx --content '[{"type":"text","text":"需要修改标题"}]'
# 通过 docx URL
feishu-cli drive add-comment --doc "https://xxx.feishu.cn/docx/doccnxxxx" \
--content '[{"type":"text","text":"评论内容"}]'
# 通过 wiki URL(自动解析到真实 docx)
feishu-cli drive add-comment --doc "https://xxx.feishu.cn/wiki/nodxxxx" \
--content '[{"type":"text","text":"收到"}]'
# 局部评论(锚定到 docx block)
feishu-cli drive add-comment --doc doccnxxxx --block-id blk_xxx \
--content '[{"type":"text","text":"这段重写"}]'
# 富文本:文本 + 提及用户 + 链接混合
feishu-cli drive add-comment --doc doccnxxxx --content '[
{"type":"text","text":"请 "},
{"type":"mention_user","mention_user":"ou_xxx"},
{"type":"text","text":" 查看 "},
{"type":"link","link":"https://feishu.cn"}
]'
reply_elements 元素类型:
text— 纯文本mention_user— 提及用户(传mention_user或text字段作为 open_id)link— 链接(传link或text字段作为 URL)
文档输入格式:
docxtoken(直接传)docxURL(https://xxx.feishu.cn/docx/xxx)docURL(旧版文档)wikiURL(自动解析到真实 obj_token + obj_type)
7. 通用异步任务查询
# 查询导入任务
feishu-cli drive task-result --scenario import --ticket abcxxx
# 查询导出任务(需要额外传 file-token 作为原始文档 token)
feishu-cli drive task-result --scenario export --ticket abcxxx --file-token docxxxx
# 查询 folder move 等通用任务
feishu-cli drive task-result --scenario task_check --task-id taskxxx
三种 scenario:import / export / task_check。用于 drive export / drive import / drive move 超时后的接力完成。
8. 本地 ↔ 云盘单向镜像(pull/push/status)
把云盘文件夹与本地目录做单向镜像,含 SHA-256 内容比对和 --delete-* --yes 双确认安全开关。只镜像 type=file 条目,docx/sheet/bitable/mindnote/slides/shortcut 等在线文档不参与(没有等价本地二进制)。
# status:双向 SHA-256 对照,只读,不动文件
feishu-cli drive status --folder-token fldxxx --local-dir ./mirror
# 输出 4 个桶:new_local / new_remote / modified / unchanged
# pull:云盘 → 本地,递归下载
feishu-cli drive pull --folder-token fldxxx --local-dir ./mirror
feishu-cli drive pull --folder-token fldxxx --local-dir ./mirror --if-exists skip
feishu-cli drive pull --folder-token fldxxx --local-dir ./mirror --delete-local --yes
# push:本地 → 云盘,递归上传,自动 create_folder 镜像目录结构
feishu-cli drive push --folder-token fldxxx --local-dir ./mirror # 默认 --if-exists=skip
feishu-cli drive push --folder-token fldxxx --local-dir ./mirror --if-exists overwrite
feishu-cli drive push --folder-token fldxxx --local-dir ./mirror --delete-remote --yes
安全语义:
--local-dir走filepath.EvalSymlinks+ 限定在 cwd 子树内,防 symlink 越界--delete-local/--delete-remote必须配--yes,不传--yes直接拒绝执行- 上传/下载阶段有失败时自动跳过
--delete-*阶段,避免「已删孤儿但部分文件没传成功」的半同步状态 - pull 默认
--if-exists=overwrite(保持本地 = 远端),push 默认--if-exists=skip(不动远端已有文件,更安全)
9. v2 端点搜索(drive search,扁平 filter)
走 /open-apis/search/v2/doc_wiki/search 端点,比 search docs(v1)支持更丰富的扁平 filter:
# 关键字 + 类型过滤 + 排序
feishu-cli drive search --query "季度报告" --doc-types DOCX,SHEET --sort edit_time
# 限定在某些云盘文件夹(与 --space-ids 互斥)
feishu-cli drive search --query "API 设计" --folder-tokens fldxxx,fldyyy
# 限定在知识库 space
feishu-cli drive search --query "RFC" --space-ids spcxxx
# 仅匹配标题(避免正文里命中无关结果)
feishu-cli drive search --query "项目周会" --only-title
# 按创建人
feishu-cli drive search --query "复盘" --creator-ids ou_xxx,ou_yyy
# JSON 输出 + 分页
feishu-cli drive search --query "项目" --page-size 20 -o json
feishu-cli drive search --query "项目" --page-token "<上一页 page_token>"
关键点:
--doc-types取值大写:DOC/DOCX/SHEET/BITABLE/MINDNOTE/FILE/WIKI/FOLDER/CATALOG/SLIDES/SHORTCUT--folder-tokens与--space-ids互斥(doc / wiki 两个范围)- 标题字段含
<h>...</h>高亮标记,CLI 自动剥离 - 与
search docs(v1/suite/docs-api/search/object)共存:v1 走 owner_ids/chat_ids 简单过滤,v2 走 doc_filter+wiki_filter 双路精细过滤
典型工作流
工作流 A:大文件分块上传 + 查看进度
feishu-cli drive upload --file big_video.mp4 --folder-token fldxxx --name "会议录像.mp4"
# 自动走分块,stderr 输出分片进度
# 上传: 会议录像.mp4 (104857600 bytes)
# 分片上传: 文件大小 100.0 MB, 分片大小 4.0 MB, 共 25 个分片
# 分片 1/25 上传完成 (4.0 MB)
# ...
# file_token 返回后可直接在飞书里访问
工作流 B:docx 批量导出 markdown
# 通过 /docs/v1/content 快捷路径,秒出不用等
for doc_id in doc1 doc2 doc3; do
feishu-cli drive export --token $doc_id --doc-type docx --file-extension markdown --output-dir ./docs
done
工作流 C:导出长文档(超时 resume)
# 1. 触发导出
TICKET=$(feishu-cli drive export --token docxxxxx --doc-type docx --file-extension pdf -o json | jq -r '.ticket // empty')
# 2. 如果超时,输出会带 next_command
# 手动或脚本化接力:
feishu-cli drive task-result --scenario export --ticket $TICKET --file-token docxxxxx
# 3. 任务就绪后下载产物
feishu-cli drive export-download --file-token boxxxx --output-dir ./exports
工作流 D:wiki 链接一键评论
# 不需要先解析 wiki 到 docx,drive add-comment 自动反查
feishu-cli drive add-comment \
--doc "https://xxx.feishu.cn/wiki/nodxxxxx" \
--content '[
{"type":"text","text":"收到,已处理 "},
{"type":"mention_user","mention_user":"ou_abc123"}
]'
工作流 E:本地 docx 导入为飞书文档
# drive import 走临时媒体(不污染云盘)
feishu-cli drive import --file report.docx --type docx --folder-token fldxxx
# 20MB 以上表格文件请导入为 bitable(上限 100MB)
feishu-cli drive import --file big_sheet.xlsx --type bitable --folder-token fldxxx
工作流 F:申请文档权限(apply-permission)
碰到「没有权限查看此文档」时,不需要去飞书 IM 私聊文档所有者,直接在终端申请:
# 1. 先用 inspect 确认 token 类型(可选;apply-permission 也支持 URL 直接传)
feishu-cli drive inspect --url "https://xxx.feishu.cn/docx/doxcnxxx"
# → 输出 type=docx, title=..., token=doxcnxxx
# 2. 申请只读权限(带申请说明,会出现在发给所有者的审批卡片上)
feishu-cli drive apply-permission \
--token "https://xxx.feishu.cn/docx/doxcnxxx" \
--perm view \
--remark "调研 RFC,需要查看背景设计"
# 3. 申请编辑权限(同一接口,--perm edit)
feishu-cli drive apply-permission --token doxcnxxx --type docx --perm edit --remark "..."
# 4. 预览即将发出的请求(不实际申请)
feishu-cli drive apply-permission --token <url> --perm view --dry-run
⚠️ 这是「埋藏 API」(飞书文档站未收录但 lark-cli 已实现),必需 User Token +
docs:permission.member:applyscope(或任一大权限如drive:drive)。
工作流 G:拿到 URL → 一行命令解析出 token / 标题 / 类型(inspect)
写脚本或 Agent 编排时常需要从 URL 反查文档元信息,inspect 是最快路径:
# docx URL → 输出 type=docx + 标题 + 裸 token + canonical URL
feishu-cli drive inspect --url "https://xxx.feishu.cn/docx/doxcnxxx"
# wiki URL → 自动展开到底层文档(自动调 wiki get_node 拆 obj_token + obj_type)
feishu-cli drive inspect --url "https://xxx.feishu.cn/wiki/wikcnxxx"
# → 输出 type=docx, token=<真实 docx token>
# 裸 token + 显式 type → 拿标题做权限/分类
feishu-cli drive inspect --url doxcnxxx --type docx
# JSON 输出(脚本/Agent 友好)
TOKEN=$(feishu-cli drive inspect --url <url> -o json | jq -r '.token')
TITLE=$(feishu-cli drive inspect --url <url> -o json | jq -r '.title')
# 与其他命令串起来:解析 wiki → 导出 markdown
DOC_TOKEN=$(feishu-cli drive inspect --url "https://xxx.feishu.cn/wiki/wikcnxxx" -o json | jq -r '.token')
feishu-cli drive export --token $DOC_TOKEN --doc-type docx --file-extension markdown --output-dir ./out
与其他命令的区别:
inspect是只读、不强制 User Token(User 优先 + App 兜底),未登录也能查公开/Bot 可见的文档元信息;登录后会用 User Token 看到完整权限范围。
与老命令的对照
| 老命令 | 新 drive 命令 | 差异 |
|---|---|---|
file upload | drive upload | drive 支持 User Token + 分块 + 每片重试 |
file download | drive download | drive 支持 User Token + --overwrite + --timeout + 路径校验 |
file move | drive move | drive 文件夹移动自动轮询 task_check |
doc export-file --type pdf | drive export --doc-type docx --file-extension pdf | drive 增加 markdown 快捷路径 + sub-id + resume |
doc import-file --type docx | drive import --type docx | drive 走 /medias/upload_all(不留中间文件) |
comment add --type docx | drive add-comment --doc <url> | drive 支持富文本 + wiki 解析 + 局部评论 |
老命令不会被删除,仍然可以用(走 App Token 简单场景),但新能力只在 drive 命令组里。
权限要求
| 命令 | Token 策略 | 所需 scope |
|---|---|---|
drive upload | 必需 User Token | drive:file:upload |
drive download | 必需 User Token | drive:file:download |
drive export | 必需 User Token | docs:document:export、drive:drive.metadata:readonly(导出 markdown 还需 docs:document.content:read) |
drive export-download | 必需 User Token | drive:file:download |
drive import | 必需 User Token | docs:document:import、drive:file:upload |
drive move | 必需 User Token | drive:file:write 1 |
drive add-comment | 必需 User Token | docs:document.comment:create、docs:document.comment:write_only;wiki URL 还需 wiki:node:read;docx 局部评论还需 docx:document:readonly |
drive task-result | 必需 User Token | drive:drive.metadata:readonly(具体依 scenario:import 还需 docs:document:import;export 还需 docs:document:export) |
drive pull / status | User 优先 + App 兜底 | drive:drive.metadata:readonly、drive:file:download |
drive push | User 优先 + App 兜底 | drive:drive.metadata:readonly、drive:file:upload、space:folder:create;带 --delete-remote 还需 drive:file:delete |
drive search | 必需 User Token | search:docs:read |
drive inspect | User 优先 + App 兜底(不强制 User Token) | drive:drive.metadata:readonly;wiki URL 还需 wiki:node:read |
drive apply-permission | 必需 User Token | docs:permission.member:apply(或任一大权限:drive:drive / docs:doc / docx:document 等) |
注意事项
- Token 策略:
upload/download/export/export-download/import/move/add-comment/task-result/search/apply-permission必需 User Token;pull/push/status/inspect登录后默认 User Token,未登录回落 App Token。 - SSRF 防护:下载 URL 会被校验,拒绝 localhost / 回环 IP / 内网段 / 链路本地
- 重定向策略:下载 HTTP 重定向最多 5 次,禁止 HTTPS → HTTP 降级
- 大文件分块阈值:固定 20MB,超过自动切分片
- 导出有界轮询:10 次 × 5 秒(总共 50 秒),超时不报错而是返回
next_command - 导入有界轮询:30 次 × 2 秒(总共 60 秒),超时同上
- 文件夹移动轮询:30 次 × 2 秒
- 格式特定大小限制(import):docx 20MB / sheet 20MB / bitable 100MB
- add-comment 的 wiki 解析:只支持 obj_type 为
docx或doc的 wiki 节点;其他类型(sheet/bitable/mindnote 等)会报错 - 局部评论:仅 docx 支持
--block-id锚点,doc(旧版文档)不支持 - 文件名规则:
drive download:--output为目录时使用file_token作为文件名(不从响应头解析);要自定义名字请显式传文件路径minutes download(参见 feishu-cli-vc):从响应头按Content-Disposition > filename* > Content-Type 推导扩展名 > {token}.media优先级解析
Footnotes
-
drive:file:write是 CLI help 与代码当前声明的 scope;飞书部分 API 文档历史上也提到space:document:move,具体以飞书最新 OpenAPI 文档为准。两者覆盖同一动作,新版应用直接申请drive:file:write(更通用,写类操作通用 scope)。 ↩
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/riba2534/feishu-cli/feishu-cli-drive">View feishu-cli-drive on skillZs</a>