08 / CONNECT

飞书与 ACP 接入

除了终端界面,你还可以从飞书与 Siada 协作,或把本机 Siada 接入支持 ACP 的编辑器。两种入口都连接同一台机器,任务仍然在本机的工作区里执行。


飞书作为远程入口

配置好之后,在飞书里给机器人发消息(私聊,或在群里 @ 机器人),消息会转发到本机的 Siada 执行,过程和结果实时回到原来的会话。适合在手机上交代任务、查看进展,或在群里共享一份工作记录。

连接方式使用 direct 长连接:本机直接与飞书开放平台通信,不需要公网地址或额外的中转服务。因此机器人由你自己在开放平台创建,凭据也只保存在本机配置中。

先发布,再使用

机器人能收到消息的前提是应用已发布并通过审核。开发阶段可以把可用范围设为自己,先验证连接,再交给更多人使用。所需权限通常需要管理员在管理后台审批。

机器人权限与配置参考见 飞书远程接入指南。

创建机器人并写入配置

  1. 在飞书开放平台创建自建应用,填写名称与图标。
  2. 在凭据页面记录 App ID 与 App Secret;App Secret 只写入本机配置,不要提交到项目仓库。
  3. 在应用能力中启用机器人。
  4. 添加权限:读取与发送消息、读取私聊消息、群消息与群内 @ 消息、会话信息,以及通讯录基础信息与卡片读写(流式回复需要)。
  5. 在事件与回调中把事件接收方式设为长连接,并订阅接收消息事件(im.message.receive_v1)。
  6. 创建版本并发布,等待审核通过。
  7. 在 ~/.siada-cli/conf.yaml 中写入 lark 段,然后重启守护进程。
~/.siada-cli/conf.yaml · 示例
lark:
  mode: direct
  workspace: ~/projects/my-project
  direct:
    app_id: "cli_xxxxxxxxxxxxxxxx"
    app_secret: "YOUR_APP_SECRET"
    domain: feishu
  access:
    dm_policy: allowlist
    allow_from:
      - "ou_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

中国大陆的飞书使用 domain: feishu;国际版 Lark 保持默认的 lark。飞书会话固定使用 coder 能力与 workspace 指定的目录,把它指向你的项目,远程任务就会在该目录中工作。

TERMINAL · 让配置生效
siada-cli --stop-daemon
siada-cli

访问控制

访问控制写在 lark.access 下,私聊与群聊分别控制。

配置项作用
dm_policy私聊策略:allowlist(默认,仅名单内可用)或 open(所有人可用)。
allow_from私聊名单,使用用户的 ou_ 开头 ID。
group_policy群聊策略:allowlist(默认)、open 或 disabled。
group_allow_from群聊名单,使用群会话的 oc_ 开头 ID。
idle_session_timeout会话空闲多久后自动开始新会话,单位秒;默认 86400,设为 0 关闭。

两个策略默认都是 allowlist,名单为空时会拒绝请求。被拒绝时,机器人会回复 ID 提示:将用户的 ou_ ID 加入 allow_from,群会话的 oc_ ID 加入 group_allow_from,然后重启守护进程。

在飞书里协作

私聊直接发消息即可。群里需要 @ 机器人触发,@ 所有人同样会触发;没有 @ 的群消息不会执行任务,但会作为上下文缓冲,在下次触发时带上最近的群聊内容,便于理解讨论背景。

一个群同时只运行一个任务:任务进行中新的 @ 会被提示等待,此时可以 @ 机器人发送 pause 或 暂停 中断当前任务,再交代新的要求。用 /resume 会话ID 可切回指定会话;私聊空闲超过设定时间后会自动开始新会话。

飞书中的命令

斜杠命令在飞书会话里同样可用,但只支持不依赖终端界面的一部分。

命令用途
/help查看当前可用的命令。
/status查看当前模型、会话与工作区。
/model查看或切换到已配置的模型。
/clear清空当前会话历史,开始新会话。
/resume 会话ID在当前私聊或群聊中切回指定会话。
/verbose查看或调整私聊或群聊这一类会话的输出详细程度。
/lang切换回复语言。
/mcp-list / /mcp-server查看 MCP 工具与连接状态。
/skill-list / /skill-reload查看或重新加载可用技能。
/plugin以文本方式管理插件与市场。
/rule-* / /context-file-refresh查看与刷新项目规则和上下文说明。

以下命令需要在终端中使用:/goal、/init、/task-list、/undo、/restore、/compare、/editor、/configure、/logout、/lark-auth、/migrate-detect、/migrate-import、/exit。当前版本的实际可用列表以飞书里的 /help 为准。

输出详细程度

私聊与群聊的默认详细程度不同:私聊展示思考、工具调用与最终回答,群聊只保留最终回答,减少刷屏。

配置项默认值含义
im.verbose.p2ptrue私聊输出思考、工具调用与回答。
im.verbose.groupfalse群聊只输出最终回答。

用 /verbose on 或 /verbose off 调整。在私聊里设置会影响所有私聊,群聊里设置会影响所有群聊;设置保存到 conf.yaml,重启后仍然有效。

给 Agent 授权飞书工具

上面的机器人是一种入口:消息从飞书发来,任务在本机执行。而 /lark-auth、/lark-status、/lark-refresh 管理的是飞书 MCP 的 OAuth 授权,让 Agent 能把飞书文档、表格等当作工具读写。

飞书聊天入口和文档工具分别配置;需要读写文档时,仍按工具要求完成授权。MCP 的连接与检查方式见 MCP 与外部工具。

接入支持 ACP 的编辑器

Siada 提供标准的 ACP(Agent Client Protocol)服务端,通过标准输入输出与客户端通信。以下两种方式等价,任选其一:

TERMINAL
siada-cli --acp
siada-acp

在编辑器里把上述命令之一配置为 Agent 的启动命令即可,下面以 Zed 的 agent_servers 为例:

编辑器设置 · JSON 示例
{
  "agent_servers": {
    "siada": {
      "type": "custom",
      "command": "siada-cli",
      "args": ["--acp"]
    }
  }
}

不同客户端的配置字段与位置不同,请以对应客户端的说明为准;接入方式与协议细节可参考 项目仓库、ACP 协议文档 与 Zed 的外部 Agent 说明。

ACP 客户端里没有终端界面

依赖交互界面的命令不会出现在 ACP 的命令列表中,例如 /configure、/logout、/resume、/undo;模型切换由客户端提供的选择项完成。需要这些命令时,回到终端使用 siada-cli。