ACP 协议来了,能把飞书直接连接到你的 Coding Agent
前言
你有没有遇到过这种情况:
出门在外,突然想让 AI 帮你改一个 Bug,但手边没有电脑,只有手机上的飞书……
或者:
下班路上,想把一个需求直接丢给 AI coding agent 处理,明天上班直接看结果……
ACP 协议的出现,让 Coding Agent 不再局限于 IDE 或终端,任何可以发消息的地方都可以成为 Agent 的入口。
快速上手
lark-acp 是一个开源的 TypeScript 桥接工具,只需一行命令,即可直接通过飞书开始和你的 Coding Agent 对话:
npx feishu-acp setup
项目介绍:lark-acp
lark-acp 是一个开源的 TypeScript 桥接工具,专门让飞书变成 Coding Agent 的前端入口。
快速链接
- 📦 npm:
npx feishu-acp→ www.npmjs.com/package/fei… - 🐙 GitHub:github.com/JiaqiZhang-…
核心定位:
| 属性 | 说明 |
|---|---|
| 运行方式 | 本地 / 个人服务器,npx feishu-acp |
| 支持 Agent | Copilot、Claude、Codex、Gemini、OpenCode 等 |
| 云依赖 | ❌ 完全本地,零云部署 |
| 平台依赖 | ❌ 独立工具,不依赖任何平台 |
| 语言 | TypeScript (Node.js) |
核心功能
🤖 多 Agent 支持
内置了常见 ACP 兼容 agent 的预设配置,无需手动填写命令路径:
// 内置预设(src/config.ts)
const AGENT_PRESETS = {
copilot: { command: "gh", args: ["copilot", "agent"] },
claude: { command: "claude", args: [] },
codex: { command: "codex", args: [] },
gemini: { command: "gemini", args: [] },
opencode: { command: "opencode", args: [] },
};
👥 多用户隔离
每个飞书用户对应独立的 ACP session,互不干扰,支持 LRU 自动回收空闲 session,适合团队共享一个 bot 实例。
⌨️ 实时输入状态
Agent 思考中时,飞书消息旁会出现 THINKING emoji reaction,回复完成后自动移除,体验流畅自然。
🔗 WebSocket 长连接
使用飞书官方 WebSocket 方式,不需要公网域名和端口映射,本地开发环境直接跑起来。
使用场景
场景 1:手机远程触发代码任务
出差途中,手机飞书发一条消息给 bot:
"帮我在 src/api.ts 里加一个用户权限检查的中间件"
家里服务器上的 Claude Code 收到请求,直接开始写代码,你明早回家看结果就好。
场景 2:团队共享 Coding Agent
团队在飞书群里 @bot,每个人都有独立的 session,互不影响,相当于每人配了一个随时在线的 AI 助手。
场景 3:CI/CD 触发器
飞书机器人收到消息后,可以不只是调用 Coding Agent,还可以扩展成触发构建、部署、测试等自动化流程。
原理:什么是 ACP 协议?
ACP(Agent Communication Protocol) 是一个开放的 AI Agent 通信协议,定义了客户端(比如 IDE、聊天软件)和 AI Coding Agent(比如 GitHub Copilot、Claude Code、Codex 等)之间的标准化通信方式。
简单说:有了 ACP,任何支持该协议的前端入口,都可以和任何支持该协议的 AI Agent 对话,不再绑定具体平台。
graph LR
A[飞书 / Lark] -->|ACP 协议| B((ACP 协议层))
C[VS Code] -->|ACP 协议| B
D[任意客户端] -->|ACP 协议| B
B -->|标准接口| E[GitHub Copilot]
B -->|标准接口| F[Claude Code]
B -->|标准接口| G[Codex / Gemini ...]
类似于 MCP(Model Context Protocol)在工具层做的事,ACP 在 agent 通信层做了标准化。
技术架构
整体分层
graph TD
A[飞书 WebSocket] --> B[bridge.ts 主编排层]
B --> C[inbound.ts 飞书消息转 ACP ContentBlock]
C --> D[session.ts 每用户 Session 管理 LRU]
D --> E[agent-manager.ts spawn agent 子进程]
E --> F[ACP ClientSideConnection]
F --> G[Coding Agent]
G --> F
F --> H[outbound.ts ACP 输出转飞书格式]
H --> I[飞书消息回复]
style A fill:#1677ff,color:#fff
style G fill:#52c41a,color:#fff
style I fill:#1677ff,color:#fff
消息生命周期
sequenceDiagram
participant U as 飞书用户
participant F as 飞书服务器
participant B as feishu-acp (本地)
participant A as Coding Agent
U->>F: 发送消息
F->>B: WebSocket 推送事件
B->>A: ACP prompt 请求
A-->>B: 流式返回结果
B->>F: 回复消息
F->>U: 看到 AI 回复
多用户 Session 隔离模型
graph LR
subgraph 飞书用户
U1[用户 A]
U2[用户 B]
U3[用户 C]
end
subgraph feishu-acp Session Manager
S1[Session A\nACP 连接]
S2[Session B\nACP 连接]
S3[Session C\nACP 连接]
LRU[LRU 淘汰\n空闲回收]
end
subgraph Coding Agent 进程
AG1[agent 子进程 A]
AG2[agent 子进程 B]
AG3[agent 子进程 C]
end
U1 --> S1 --> AG1
U2 --> S2 --> AG2
U3 --> S3 --> AG3
LRU -.->|idle 超时| S1
LRU -.->|idle 超时| S2
核心依赖:
@larksuiteoapi/node-sdk— 飞书官方 SDK@agentclientprotocol/sdk— ACP 官方 SDK