项目概述源码地址https://github.com/larksuite/clilarksuite/cli 是飞书/Lark 官方出品的命令行工具GitHub 13.5k stars551 次提交活跃度极高。核心定位同时服务人类用户和 AI Agent。覆盖飞书 18 个业务域IM、文档、表格、日历、任务、审批、考勤、Wiki、邮件、OKR、视频会议等。技术栈层面 选型语言 Go 1.23占比 97.5%CLI 框架 spf13/cobra spf13/pflag飞书 SDK larksuite/oapi-sdk-go/v3TUI 交互 charmbracelet/huh表单、charmbracelet/lipgloss样式JSON 查询 tidwall/gjson、itchyny/gojq系统钥匙串 zalando/go-keyring配置格式 gopkg.in/yaml.v3发布工具 goreleaser分发渠道 npmlarksuite/cli 源码编译整体架构┌──────────────────────────────────────────────────────────────────┐│ 用户 / AI Agent │└────────────────────────────┬─────────────────────────────────────┘│ CLI 调用┌────────────────────────────▼─────────────────────────────────────┐│ main.go ││ ┌──────────────────────────────────────────────────────────┐ ││ │ main / main_authsidecar / main_noauthsidecar │ ││ │ 通过 Go build tag 切换三种构建模式 │ ││ └──────────────────────────────────────────────────────────┘ │└────────────────────────────┬─────────────────────────────────────┘│┌────────────────────────────▼─────────────────────────────────────┐│ cmd 包命令层 ││ ││ BootstrapInvocationContext() → 提前解析 --profile 全局标志 ││ ││ buildInternal() 构建三层命令树 ││ ┌──────────────────────────────────────────────────────────┐ ││ │ Layer 1: Shortcuts 前缀18个业务域高层封装 │ ││ │ Layer 2: API Commands100 精选端点 │ ││ │ Layer 3: Raw API2500 原始端点spec 驱动动态生成 │ ││ └──────────────────────────────────────────────────────────┘ ││ ││ 内置固定命令config / auth / profile / doctor / ││ schema / completion / update / events │└────────────────────────────┬─────────────────────────────────────┘│┌───────────────────┼────────────────────┐▼ ▼ ▼┌────────────────┐ ┌────────────────┐ ┌────────────────────────┐│ shortcuts 包 │ │ cmd/service │ │ internal/cmdpolicy ││ 18 个业务域 │ │ 动态服务命令 │ │ 命令策略引擎 ││ ~26 个子目录 │ │ (spec-driven) │ │ (allow/deny/risk) │└───────┬────────┘ └───────┬────────┘ └────────────────────────┘│ │▼ ▼┌────────────────────────────────────────────────────────────────┐│ extension 层可插拔扩展 ││ credential凭证链/ transport传输拦截/ ││ contentsafety内容安全/ fileio / platform │└────────────────────────────┬───────────────────────────────────┘│┌────────────────────────────▼───────────────────────────────────┐│ internal 核心工具包 ││ authOAuth/Device Flow/ coreconfig/secret/workspace/ ││ outputJSON envelope 输出/ errs类型化错误体系 ││ keychain / transport / i18n / vfs / registry │└────────────────────────────┬───────────────────────────────────┘│┌────────────────────────────▼───────────────────────────────────┐│ larksuite/oapi-sdk-go飞书官方 Go SDK │└────────────────────────────────────────────────────────────────┘使用Interactive login (TUI guides domain and permission level selection)lark-cli auth loginIdentity switching: execute commands as user or botlark-cli calendar agenda --as userlark-cli im messages-send --as bot --chat-id “oc_xxx” --text “Hello”命令行登录后即可使用命令行发送消息到lark自然语言到 CLI 调用的完整链路上面我们人类可以使用cli命令行和lark进行交互那如果是agent那他如何根据用户输入的自然语言映射到对应cli命令那Claudecode使用CLI架构┌─────────────────────────────────────────────────────────────────────────────┐│ 用户自然语言输入 ││ “帮我看下今天日历” / “给张三发消息” / “创建一个文档” │└──────────────────────────────────┬──────────────────────────────────────────┘│┌──────────────────────────────────▼──────────────────────────────────────────┐│ Claude CodeAI Agent ││ ││ ┌─────────────────────────────────────────────────────────────────────┐ ││ │ Skills 层知识注入 │ ││ │ │ ││ │ npx skills add larksuite/cli → 安装后注入到 Claude 上下文 │ ││ │ │ ││ │ lark-calendar │ lark-im │ lark-docs │ lark-base │ … │ ││ │ 日历技能 │ 消息技能│ 文档技能 │ 多维表格│ │ ││ │ │ ││ │ Skills 告诉 Claude │ ││ │ • 哪些场景用哪条命令 │ ││ │ • 参数如何构造 │ ││ │ • 返回值如何解读 │ ││ └─────────────────────────────────────────┬───────────────────────────┘ ││ │ Claude 推理后决定调用 ││ ┌─────────────────────────────────────────▼───────────────────────────┐ ││ │ 工具调用层Bash Tool │ ││ │ │ ││ │ Claude 生成并执行 Shell 命令 │ ││ │ lark-cli calendar agenda │ ││ │ lark-cli im send-message --chat-id oc_xxx --text “…” │ ││ │ lark-cli docs create --title “xxx” │ ││ │ lark-cli --profile bot-A base search-records … │ ││ └─────────────────────────────────────────┬───────────────────────────┘ │└────────────────────────────────────────────│────────────────────────────────┘│ subprocess 调用stdin/stdout┌────────────────────────────────────────────▼────────────────────────────────┐│ lark-cli本地进程 ││ ││ ┌──────────────┐ ┌──────────────────────────────────────────────────┐ ││ │ --profile │ │ cmd 命令解析层 │ ││ │ 凭证路由 │ │ Layer1: Shortcuts(前缀) Layer2: API Commands │ ││ └──────┬───────┘ │ Layer3: Raw APIspec 驱动2500 端点 │ ││ │ └──────────────────────┬───────────────────────────┘ ││ │ │ ││ ┌──────▼───────────────────────────────────▼───────────────────────────┐ ││ │ internal 核心auth / config / keychain │ ││ │ 读取本地凭证config init 写入的 App Secret │ ││ └──────────────────────────────────────┬─────────────────────────────┘ │└─────────────────────────────────────────│───────────────────────────────────┘│ HTTPS OAuth Token┌─────────────────────────────────────────▼───────────────────────────────────┐│ 飞书开放平台 APIopen.feishu.cn ││ ││ /open-apis/calendar/v4/… /open-apis/im/v1/… /open-apis/docx/… │└──────────────────────────────────────────────────────────────────────────────┘两个核心交互点整个链路只有两处实质性交互交互点 时机 内容Skills → Claude 安装时写入 告诉 Claude 有哪些命令、何时用、参数怎么构造Bash Tool → lark-cli 运行时 Claude fork 子进程读取 stdout JSON Envelope凭证链用户无感知config init 扫码 → App Secret 写入 ~/.lark-cli/config.yamlauth login → User Token 写入系统 Keychain每次 CLI 调用时 → 自动读取Claude 无需感知凭证细节Claude 只需生成命令字符串凭证由 lark-cli 内部三段式凭证链Env → Sidecar → Keychain自动处理。自然语言如何映射到cli命令demo用户输入“帮我给张三发一条消息说今天开会推迟”Agent 内部推理过程意图识别发消息 → IM 域查 lark自定义的skill文件IM 域有 send-message 命令参数提取接收人 张三需要先查 user_id内容 “今天开会推迟”参数不完整 → 先调 search-user 查张三的 user_id组装命令lark-cli send-message --user-id xxx --text “今天开会推迟”关键工具 --print-schemaAgent 在执行前调用它获取参数结构验证组装的命令是否正确lark-cli send-message --print-schema返回需要哪些参数、类型、是否必填执行结果如何处理执行命令│▼stdoutJSON Envelope {“ok”: true, “data”: {…}}stderr错误 / 警告│▼Agent 解析 ok 字段├── true → 任务完成告知用户└── false → 读 error.type├── authorization → 提示用户授权├── validation → 修正参数后重试└── confirmation → exit code 10询问用户确认后加 --yes 重试完整链路图用户自然语言│▼Agent LLM 推理│── 读 lark配套 SKILL.md → 知道有哪些命令│── 意图匹配 → 确定目标命令│── --print-schema → 验证参数结构│── --dry-run可选 → 无副作用预验证│▼执行 shell 命令lark-cli xxx --param yyy│▼解析 JSON Envelope│▼根据结果决策下一步完成 / 重试 / 询问用户本质Agent 调用 CLI 与人调用 CLI 的区别只有一个人靠记忆和文档Agent 靠 SKILL.md 和结构化输出。CLI 的所有设计SKILL.md、–print-schema、–dry-run、JSON Envelope、类型化错误码、exit code 语义都是为了让这个推理过程更可靠、更少 token 消耗、更少出错。与 MCP Server 模式的对比lark-cli 采用 Skills Bash Tool 模式而非 MCP Server 模式。两种模式的核心差异维度 MCP Server 模式 lark-cli Skills 模式配置方式 mcp.json 中声明 npx skills add 安装通信协议 JSON-RPC over stdio/HTTP Shell subprocessstdout/stderr权限粒度 Bot 级别公司 App 用户级别个人 Token可访问私人消息、日历适用场景 团队/企业级自动化 个人 AI 助理已有配置 mcp.json 中的 okone-lark-mcp-server lark-cli Skills两者互补而非替代MCP Server 适合团队共享的 Bot 操作lark-cli 适合以用户身份执行个人工作流。