OpenBot 是一个开源、可自托管的平台,用于运行由多个具有持久性的 AI 机器人组成的团队。每个机器人都有名称、描述和约束其行为的指令。机器人可以在共享线程中与人类以及其他机器人对话,调用可插拔工具,维护长期记忆,并可通过 HTTP 被外部系统访问。机器人链可组成工作流:例如,幕僚长机器人委派给工程师机器人,工程师机器人打开拉取请求,审查者机器人进行审查,QA 机器人测试、请求人类批准并合并。
核心概念
统一 actor 模型:机器人、人类和外部系统都是拥有持久收件箱的 actor。Actor 通过共享线程向彼此的收件箱投递消息;当邮件到达时,机器人 actor 会被唤醒,运行由 LLM 驱动的、带工具和记忆的智能体循环,并回复,进而投递新邮件并唤醒下一个机器人。这种统一模型让人、机器人和 webhook 驱动的事件系统能够以相同方式参与同一对话。
主要能力
- 多机器人工作流:未显式提及机器人的用户消息会发送给线程的默认机器人(默认为 @chief_of_staff);机器人通过 @提及 相互交接,并设有跳数限制以防止机器人之间的失控循环。机器人回复中的第一个提及才会唤醒某个机器人,因此每次交接只针对一个机器人。如果该机器人在线程中还有更新的消息等待处理,交接会被暂存,并在其追上进度后自动投递。
- 工具:以工作区目录为根的内置 shell/文件/HTTP 工具、存放自定义 Python 工具的插件目录,以及来自任意 MCP 服务器(远程或 stdio,支持 OAuth)的工具,均可按机器人选择。run_shell 不沙箱化(见信任模型/安全)。
- 记忆:每个机器人有长期记忆(LangMem),机器人可搜索和更新,每次运行后自动进行后台反思。
- 审批与提问:机器人在采取敏感操作前可询问人类(ask_human,或按工具设置审批标志);运行会暂停,直到人类回答。
- 外部 actor:可将外部系统注册为 actor,通过签名 webhook 或轮询 REST API 与 OpenBot 其余部分交换邮件。
- 实时 UI:React 前端,包含收件箱、线程、机器人、设置,通过 SSE 更新。
- 任意 SQL 数据库:默认 SQLite,改一个 URL 即可使用 Postgres。
- 开箱即用的 LangSmith 追踪。
使用方式
先决条件:Python 3.12+ 及 uv,Node 24+ 及 pnpm 10。还需要 LLM 提供商:OpenRouter API 密钥(推荐)、OpenAI、Anthropic 或 xAI 密钥,或本地 Ollama 服务器。
最简单的试用方式是下载最新 release 中的桌面应用。提供 macOS(Apple Silicon 和 Intel,.dmg 或 .zip)和 Linux(x64 .AppImage)构建。尚无 Windows 构建,Windows 上需按快速开始从源码运行。构建未签名,首次打开方式见 release 说明。应用需要安装 uv,首次启动会较久,因为要设置 Python。
打开 http://localhost:5173。首次加载会显示简短设置向导:选择聊天提供商(粘贴密钥,或指向 Ollama),并选择记忆搜索方式(通过 OpenRouter、OpenAI 或 Ollama 的嵌入,或不用)。两者都会加密存储在 OpenBot 数据库中,之后可在设置中更改;不会写入 .env。向导完成后,OpenBot 会创建人类 actor @you 和四个演示机器人:chief_of_staff、engineer、reviewer、qa。
桌面应用(Electron):Electron 桌面应用是同一前端和 HTTP/SSE API 的可选外壳;浏览器应用保持不变。渲染进程无 Node 集成,通过与浏览器相同的 API 与后端通信;预加载桥接刻意保持最小。
生产风格运行:单进程、生产风格运行,由后端在端口 8000 提供构建好的前端。
后端 Docker:后端运行在容器中,UI 留在宿主。Shell 命令以单独的 shell 用户运行,不带服务器环境,因此无法读取提供商密钥、secret.key 或数据库。
演示流程:预置机器人可针对真实 git 仓库端到端运行一个小型软件工作流,使用 gh CLI。将可推送的仓库克隆到 workspace/,并确保在该目录中 gh auth status 成功——机器人会调用 git 和 gh。启动 OpenBot 并打开 UI。新建线程(默认机器人 @chief_of_staff,除非更改),发送示例指令。观察交接:幕僚长委派给 @engineer,后者实现更改、打开 PR 并提及 @reviewer;审查者审查差异并提及 @qa(或将反馈发回 @engineer);QA 检出分支、运行测试,并在合并前请求批准。当 QA 的问题出现在收件箱中,打开并批准。QA 合并 PR 并回报。
信任模型/安全
OpenBot 面向在自有机器上运行的单一可信操作者。没有登录、没有用户账户、没有权限隔离。任何能访问 HTTP 端口的人,以及任何能让机器人运行工具的人,实际上都拥有服务器进程的权限。在将 OpenBot 暴露到网络或让机器人处理不受信任输入之前,请阅读此部分。
run_shell 不沙箱化。它以 bash -lc 作为运行服务器的用户执行任意命令,拥有该用户的完整文件系统和网络访问权限。线程工作目录只提供命令的起始工作目录:cd /、../、绝对路径等均可正常工作。它还会继承服务器环境,能读取数据库文件和密钥,因此命令可窃取所有存储的提供商密钥。没有容器、没有 chroot、没有 seccomp、没有允许列表——给机器人 run_shell 等同于给任何能与该机器人对话的人在宿主上提供一个 shell。
CLI 机器人由其 CLI 管理,而非 OpenBot。使用 claude-code 提供商的机器人(见由编程智能体 CLI 支持的机器人)使用 CLI 自己的工具,OpenBot 的按工具审批不适用。其可执行操作由机器人自身的配置决定。