本文档说明如何配置和启动 opencode-feishu 服务,实现通过飞书控制本地开发机上的 Opencode 实例。
和openclaw 不同,本工具只有一个功能:通过飞书管理、启动本地的opencode实例。所以安全性比openclaw高很多。
在运行本项目之前,请确保开发机已安装以下软件:
- Node.js (推荐 LTS 版本,v18+)
- Tmux (用于管理后台会话,必须在系统 PATH 中)
- Opencode (用于启动 AI 编程助手,必须在系统 PATH 中)
配合本工具工作需要一个云端的飞书机器人。配置方法请参考openclaw配合的机器人的配置方法: https://www.volcengine.com/docs/6396/2189942?lang=zh
注意,得按照上述文档中步骤三:创建飞书机器人并获取配置 所描述的一样:先配置好飞书机器人的初始版本并发布,拿到AppID、AppSecret和基础的权限;然后启动 opencode-feishu 初始化配置(见下一节的onboard内容) 连接飞书服务器;最后再回到飞书机器人的配置,进行事件配置 并发布新版。这个时候,opencode-feishu就可以正常工作了。
# 在项目根目录运行
npm install
npm run build
npm link安装完成后,opencode-feishu 命令会添加到系统 PATH,可直接在任意目录运行。
npm install
npm run build
node bin/opencode-feishu运行 onboard 命令,按提示填写配置:
opencode-feishu onboard配置文件将保存到 ~/.config/opencode-feishu/config.json。
如需手动配置,创建配置文件:
mkdir -p ~/.config/opencode-feishu编辑 ~/.config/opencode-feishu/config.json:
{
"appId": "cli_a1b2c3...",
"appSecret": "your_secret...",
"encryptKey": "your_key...",
"verificationToken": "your_token...",
"uiMode": "text",
"allowedUserIds": [
"ou_123456...",
"ou_789012..."
],
"rateLimit": {
"messagesPerSecond": 1,
"maxMessageLength": 2000
}
}| 配置项 | 必填 | 说明 | 获取方式 |
|---|---|---|---|
| appId | 是 | 飞书应用的唯一标识 | 飞书开发者后台 -> 凭证与基础信息 |
| appSecret | 是 | 飞书应用的密钥 | 飞书开发者后台 -> 凭证与基础信息 |
| encryptKey | 是 | 用于解密事件内容 | 飞书开发者后台 -> 事件订阅 -> 加密策略 |
| verificationToken | 是 | 用于验证请求来源 | 飞书开发者后台 -> 事件订阅 |
| uiMode | 否 | 消息显示模式:text 发送文本摘要,img 发送终端截图 |
默认 text |
| allowedUserIds | 否 | 允许控制机器人的用户白名单。留空则允许所有用户。 | 需要获取用户的 Open ID (可通过日志或调试获取) |
| rateLimit | 否 | 消息发送频率控制 | 默认为 5条/秒,超过限制会排队或合并 |
启动时按以下顺序查找配置文件:
- 命令行指定:
opencode-feishu start -c /path/to/config.json - 环境变量:
OPENCODE_FEISHU_CONFIG=/path/to/config.json - 默认路径:
~/.config/opencode-feishu/config.json - 当前目录:
./config.json
opencode-feishu
# 或
opencode-feishu startopencode-feishu start -c /path/to/config.jsonOPENCODE_FEISHU_CONFIG=/path/to/config.json opencode-feishu如果正在开发或调试代码,可使用热重载模式:
npm run devopencode-feishu --help
opencode-feishu onboard --help为了让机器人能收到消息,你需要在飞书开发者后台进行如下配置:
-
权限管理:
- 开启
im:message(获取用户发给机器人的单聊消息) - 开启
im:message:send_as_bot(以应用身份发送消息) - 发布版本以生效权限。
- 开启
-
事件订阅:
- 请求网址 URL:配置为你部署该服务的公网地址(如果本地开发,需使用内网穿透工具如 frp/ngrok)。
- 事件类型:添加
接收消息 (im.message.receive_v1)。
启动服务后,在飞书上给机器人发送消息即可:
| 命令 | 说明 |
|---|---|
ocfn [path] |
创建新的 Opencode 会话,可选指定工作目录 |
ocfl |
列出当前所有会话 |
ocfa {index} |
连接到指定序号的会话 |
ocfd |
断开当前会话(会话继续运行) |
ocfx [index] |
退出并终止当前会话,或终止指定会话 |
ocfk/{key0}/{key1}/... |
发送键盘按键到 Opencode |
ocfh |
查看帮助信息 |
连接会话后:
你发送的任何文本都会被转发到 Opencode 的终端中。Opencode 的输出会根据 uiMode 配置:
- text 模式:输出经过智能摘要后以文本形式发送回飞书
- img 模式:输出以终端截图形式发送回飞书(需要系统安装 Chrome)
img 模式会将 Opencode 的 TUI 界面渲染为图片发送,提供更好的视觉体验。
前置要求:
- macOS: 确保已安装 Google Chrome (
/Applications/Google Chrome.app) - Linux: 确保已安装 Chrome (
/usr/bin/google-chrome)
ocfk 命令用于模拟键盘按键,适用于在 Opencode 界面中进行导航、选择等操作。
按键映射:
| 符号 | 按键 |
|---|---|
u |
上方向键 (Up) |
d |
下方向键 (Down) |
l |
左方向键 (Left) |
r |
右方向键 (Right) |
t |
Tab 键 |
e |
Enter 键 |
esc |
Escape 键 |
ctrl{x} |
Ctrl + x 键 (如 ctrlc 表示 Ctrl+C) |
使用示例:
| 命令 | 说明 |
|---|---|
ocfk/e |
发送回车键 |
ocfk/d |
发送下方向键 |
ocfk/d/d/d |
连续发送三次下方向键 |
ocfk/t/e |
先发送 Tab,再发送 Enter |
ocfk/ctrlc |
发送 Ctrl+C |