ACP协议来了!能把飞书直接连接到你的Coding Agent!

4 阅读3分钟

ACP 协议来了,能把飞书直接连接到你的 Coding Agent

前言

你有没有遇到过这种情况:

出门在外,突然想让 AI 帮你改一个 Bug,但手边没有电脑,只有手机上的飞书……

或者:

下班路上,想把一个需求直接丢给 AI coding agent 处理,明天上班直接看结果……

ACP 协议的出现,让 Coding Agent 不再局限于 IDE 或终端,任何可以发消息的地方都可以成为 Agent 的入口。

快速上手

lark-acp 是一个开源的 TypeScript 桥接工具,只需一行命令,即可直接通过飞书开始和你的 Coding Agent 对话:

npx feishu-acp setup

image.png

项目介绍:lark-acp

lark-acp 是一个开源的 TypeScript 桥接工具,专门让飞书变成 Coding Agent 的前端入口。

image.png

快速链接

核心定位:

属性说明
运行方式本地 / 个人服务器,npx feishu-acp
支持 AgentCopilot、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