老爹疯狂厨房
125.32M · 2026-03-31
2026年3月,飞书开源了官方命令行工具 lark-cli。这不是一个普通的 CLI,而是面向 AI Agent 时代的企业级基础设施。本文将从架构、设计理念、实战应用三个维度,全面解读这个项目的创新之处。
过去四十年,软件界面的进化方向一直是 CLI → GUI:从黑底白字的命令行,到图形化界面,让普通人也能用上电脑。
但2026年,方向反过来了。飞书 、Google、Stripe、ElevenLabs、网易云音乐,一众看起来毫不相关的公司,不约而同在做同一件事:发布CLI工具。
这个新用户叫 Agent。
Agent的本质是"文字进、文字出"的智能体。GUI是给眼睛看的,Agent没有眼睛;CLI是纯文字的,Agent天生就在这个世界里运作。
# GUI时代:人眼看到按钮,鼠标点击
打开飞书 → 点日历 → 找明天 → 看日程
# CLI时代:Agent直接调用命令
lark-cli calendar +agenda --date tomorrow
一行命令,AI直接调用。不需要截图识别按钮,不需要模拟鼠标点击,没有中间商赚差价。
这让我想起移动端适配的早期:设计师以为在手机上缩小桌面版就行,结果按钮小到点不到。同样,"为AI设计"和"在AI中验证"是两件事。
AI不需要看到按钮,不需要花里胡哨的动画。AI需要的是:一个接口,告诉我能做什么,我来调用。
过去的 CLI 和现在的 CLI,虽然都叫 CLI,已经是两种东西了:
传统 CLI(给程序员用):
新一代 CLI(假设调用者可能是 AI):
--dry-run 预览项目:https://github.com/larksuite/cli
语言:Go 1.23+
协议:MIT
lark-cli/
├── cmd/ # 命令行入口
│ ├── root.go # 根命令
│ ├── auth.go # 认证相关
│ ├── api.go # API 命令
│ └── schema.go # Schema 查询
├── internal/ # 核心逻辑
│ ├── auth/ # 认证模块
│ ├── client/ # 飞书 SDK 封装
│ ├── registry/ # 元数据注册中心
│ ├── validate/ # 输入验证(防注入)
│ ├── keychain/ # 系统原生密钥存储
│ └── output/ # 输出格式化
├── shortcuts/ # 高级快捷命令
│ ├── calendar/ # 日历相关
│ ├── im/ # 消息相关
│ ├── doc/ # 文档相关
│ ├── sheets/ # 电子表格
│ ├── base/ # 多维表格
│ ├── mail/ # 邮件
│ ├── task/ # 任务
│ └── ... # 其他业务域
├── skills/ # AI Agent Skills 定义(19个)
└── scripts/ # 元数据抓取脚本
飞书开放平台有 2500+ 个 API,手写命令显然不现实。项目采用了元数据驱动的设计。
核心逻辑在 cmd/service/service.go:
func RegisterServiceCommands(parent *cobra.Command, f *cmdutil.Factory) {
for _, project := range registry.ListFromMetaProjects() {
spec := registry.LoadFromMeta(project)
if spec == nil {
continue
}
specName := registry.GetStrFromMap(spec, "name")
servicePath := registry.GetStrFromMap(spec, "servicePath")
// 根据元数据动态注册命令
registerService(parent, spec, resources, f)
}
}
项目用 Python 脚本 scripts/fetch_meta.py 从飞书开放平台文档抓取 API 元数据,自动生成命令。
这意味着:飞书平台新增 API,CLI 重新构建即可同步,无需手写代码。
飞书CLI设计了三层命令架构,从易用到全覆盖:
带 + 前缀的快捷命令,封装了常见场景:
# 查看日程
lark-cli calendar +agenda
# 发送消息
lark-cli im +messages-send --ch@t-id "oc_xxx" --text "Hello"
# 查询忙闲
lark-cli calendar +freebusy --user-ids "ou_xxx,ou_yyy"
# 创建日历事件
lark-cli calendar +create --title "周会" --start "2026-04-01 14:00"
与飞书平台 API 一一对应,参数更明确:
lark-cli calendar events instance_view
--params '{"calendar_id":"primary"}'
直接调用任意飞书开放平台端点,覆盖 2500+ API:
lark-cli api GET /open-apis/calendar/v4/calendars
这种渐进式复杂度设计,让不同熟练度的用户都能找到合适的调用方式。
飞书CLI从设计之初就假设调用者可能是AI,有几个值得学习的细节:
AI遇到陌生工具,第一件事是问"你能干什么"。飞书CLI提供了 schema 命令:
lark-cli schema calendar.agenda.create
返回内容包括:
AI读完就知道怎么调用了,无需查阅文档。
所有可能产生副作用的命令都支持 --dry-run:
lark-cli base records delete --data '{"record_ids":[...]}' --dry-run
AI先跑一遍,返回"将要删除47条记录:2025-05的过期任务23条,已归档项目24条。未做任何实际修改。"
确认无误再真正执行。这是为AI设计的安全网。
传统API返回 Permission denied,AI就卡住了。飞书CLI的做法:
Error: 缺少权限 "calendar:calendar:readonly"
修复命令:lark-cli auth login --scope "calendar:calendar:readonly"
告诉AI缺什么、怎么补,AI能自己修复问题继续干活。
每一条错误信息都包含三个要素:
支持多种输出格式:
lark-cli calendar +agenda --output json # AI友好
lark-cli calendar +agenda --output table # 人眼友好
lark-cli calendar +agenda --output csv # 导出分析
提供分页参数 --page-limit 和过滤参数,避免返回一万行日志炸掉上下文。
lark-cli calendar +agenda --as user # 以你的身份
lark-cli calendar +agenda --as bot # 以应用身份
用户身份登录后,Agent以你的名义操作,能访问你个人的日历、私信、收件箱,适合个人场景。
应用身份调用时,Agent以一个飞书应用的身份运行,适合企业级Agent和自动化工作流。
飞书CLI提供了19个Agent Skills,覆盖11个业务域:
| Skill | 能力 |
|---|---|
lark-shared | 认证、权限管理(所有技能依赖) |
lark-calendar | 日历、日程、忙闲查询、会议推荐 |
lark-im | 消息发送、群组管理、文件上传下载、表情回应 |
lark-doc | 文档创建、读写、评论、Markdown转换 |
lark-sheets | 电子表格读写、批量追加、条件查找、导出 |
lark-base | 多维表格、数据表管理、视图仪表盘、数据聚合 |
lark-mail | 邮件收发、草稿管理、附件处理、新邮件 |
lark-task | 任务创建、状态更新、子任务管理、到期提醒 |
lark-drive | 文件上传下载、权限管理、评论处理 |
lark-wiki | 知识库查询、文档节点管理、创建维护 |
lark-contact | 通讯录搜索、组织架构查询、用户资料 |
lark-vc / lark-minutes | 会议记录、妙记摘要提取、待办事项 |
lark-event | WebSocket实时事件订阅、正则路由 |
lark-search | 跨业务域搜索群聊、消息、文档 |
下面是安装所需命令:
# 1. 安装 CLI
npm install -g @larksuite/cli
# 2. 安装 Skills
npx skills add https://github.com/larksuite/cli -y -g
# 3. 初始化配置(扫码授权,交互式引导完成)
lark-cli config init
# 4. 登录授权(--recommend 自动选择常用权限)
lark-cli auth login --recommend
# 5. 验证
lark-cli auth status
# 6. 开始使用
lark-cli calendar +agenda
安装CLI和相应Skills
初始化配置,选择中文。
选择一键配置应用。
选择国内版飞书。
扫码授权。
成功配置飞书CLI应用。
测试下日程功能。
开通日程权限。
再次测试,显示已开通。
这里是通过MetaBot将本地ClaudeCode连接到了飞书,感兴趣可以参考我的上一篇教程 基于MetaBot将Claude Code接入飞书实战-Win版
进行登录授权。
开通user权限。
检测登录状态。已成功登录和授权。
由于使用的个人飞书进行测试,所以lark-cli读取通讯录只能找到自己,读取不到外部联系人和机器人。如果是企业飞书的话,可以读取通讯录的联系人并发送消息。
现在让AI操作外部服务,有三种主流方式:
| 方式 | 定位 | 优势 | 劣势 |
|---|---|---|---|
| CLI | 实际干活的工具 | 跨平台、可组合、不锁模型、人也能用 | 安全管控较弱 |
| MCP | 标准通信协议 | 沙箱隔离、权限声明式 | 不支持命令行环境 |
| Skills | 给Agent看的说明书 | 告诉AI怎么用、易于发现 | 不执行,只是说明 |
简单说:CLI是手,MCP是另一种手,Skills是肌肉记忆。
三者不是替代关系,各管一件事。CLI在能访问终端的场景下更轻量灵活,MCP在桌面端等场景是唯一选择。
在 internal/validate/ 目录中,项目实现了输入验证逻辑,主要防止:
这对于一个会被AI调用的工具尤为重要。
Google Workspace CLI 的 Skills 文件里甚至写死了一条规则:对所有写入和删除操作,必须先 dry-run。
这不是过度谨慎,而是考虑到AI会有理解偏差,预览是最后一道防线。
Agent的权限怎么给?不给权限,什么都做不了;权限太高,又怕Agent理解错意图干出不可逆的事。
目前靠 dry-run 兜住一部分风险,但真正要让Agent在企业里大规模跑起来,权限体系、审计追踪、人机协作的边界,都还在摸索中。
这里有一个很少被讨论到的现象:
CLI = 执行能力 + MCP协议 + Skills说明书 = 完整Plugin
一个CLI工具就是一个事实上的Plugin。而且它比Plugin有更多好处:
lark-cli calendar +agenda | jq '.events[]'Plugin之间是隔离的,没有标准的组合方式。Shell管道这个几十年前的设计,在AI时代突然又变得值钱了。
如果你想给自己的产品做一个面向AI的CLI,从lark-cli可以学到:
--help。写清楚每个参数干什么、什么时候用、有什么默认值。--no-interactive 才解决。CLI正在成为AI能力分发的基础设施,但有几个明显缺口:
你怎么知道"有个飞书CLI能让AI操作飞书"?
目前基本靠口口相传。npm和GitHub最有条件做AI工具的App Store,但它们没这个动力。
飞书一套登录,Google一套,Stripe一套...装五个工具登录五次。对普通用户来说摩擦太大了。
npm、brew是十几年前设计的,假设使用者是懂命令行的开发者。当操作者变成AI,权限问题、依赖缺失、路径冲突这些"查StackOverflow就能解决"的问题,变成了真正的障碍。
行业不缺工具,不缺协议,不缺说明书。缺的是让这三样东西被发现、被安装、被信任的那一层基础设施。
飞书CLI的开源,意义不止是多一个工具。
它把消息、文档、日历、审批、多维表格、任务这些企业核心能力,通过AI原生的CLI全部开放出来,成为国内对AI Agent最开放、最友好的企业级接入入口。
当你的AI能直接操作飞书里的所有信息和数据,你说的每一句话,它都能在终端里跑一串命令把事情办了。
这就是Agent时代的魅力。
你动嘴,Agent动手。
而且,这事儿飞书有个别人不太容易复制的优势:它本身在企业协作领域已经足够成熟,那些能力都是现成的。现在把这些能力通过AI原生的CLI全部开放出来,对行业落地AI Agent会是关键的一步。
开源项目 superpowers 深度解读:把 AI Coding Agent 变成遵守工程流程的协作伙伴
OpenClaw+Mapping-Skill:把 AI/ML 人才搜索、作者挖掘与个性化触达整合成一条工作流
OpenClaw-Linux+飞书官方Plugin安装指南