OpenBot

OpenBot 是基于 Agent Skills 与编码智能体(Coding Agent)的一体化 AI 助手平台,支持 CLI、WebSocket 网关与桌面端。通过可插拔技能(Skills)、浏览器自动化、代码执行与长期记忆,为开发与日常任务提供可扩展的 AI 工作流。除提供可自我升级扩展的 AI Agent 引擎及多通道、多终端接入外,后续将支持 MCP 以降低 Token 消耗与大模型幻觉,并接入现有 AI Agent 生态(下一步计划接入 Coze)。
特性概览
| 技能架构 | 基于 Agent Skills 规范,支持多路径加载、本地安装与动态扩展;支持技能自我发现与自我迭代 |
| 编码智能体 | 集成 pi-coding-agent,支持多轮工具调用与代码执行 |
| 浏览器自动化 | 内置 agent-browser,可导航、填表、截图与数据抓取 |
| 长期记忆 | 向量存储(Vectra)+ 本地嵌入,支持经验总结与会话压缩(compaction) |
| 多端接入 | CLI、WebSocket 网关、Electron 桌面端,同一套 Agent 核心;各端技术栈见下方「各端技术栈」 |
| MCP(规划中) | 为降低 Token 消耗与大模型幻觉,后续将支持 MCP(Model Context Protocol) |
| 生态接入(规划中) | 接入现有 AI Agent 生态,下一步计划接入 Coze 生态 |
技术架构
┌─────────────────────────────────────────────────────────────────────────────┐
│ 客户端 / 接入层 │
├─────────────────┬─────────────────────────────┬─────────────────────────────┤
│ CLI (openbot) │ WebSocket Gateway (JSON-RPC) │ OpenBot Desktop (Electron) │
│ Commander │ ws, 端口 38080 │ Vue 3 + Pinia + Vite │
└────────┬────────┴──────────────┬──────────────┴──────────────┬──────────────┘
│ │ │
│ │ HTTP + Socket.io │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ Gateway Server (Node) │
│ • 静态资源 • 自动发现端口 • 子进程拉起 Desktop Server │
└────────────────────────────────────┬────────────────────────────────────────┘
│
┌────────────────────────────┼────────────────────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────────────────┐ ┌─────────────────────┐
│ Agent 核心 │ │ Desktop Backend (NestJS) │ │ Memory / 向量存储 │
│ AgentManager │ │ server-api/* │ │ Vectra + 嵌入 │
│ pi-coding-agent│ │ Agents · Skills · Tasks │ │ compaction 扩展 │
│ pi-ai 多模型 │ │ Auth · Users · Workspace │ │ better-sqlite3 │
└────────┬────────┘ └─────────────────────────────┘ └─────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ Tools: read/write/edit · bash · find/grep/ls · browser · install-skill · │
│ save-experience (写入记忆) │
└─────────────────────────────────────────────────────────────────────────────┘
- CLI:直接调用 Agent 核心,单次提示或批量脚本。
- WebSocket Gateway(
src/gateway/):对外提供 WebSocket(JSON-RPC),供 Web/移动端连接;负责起端口、拉 Nest 后端子进程、代理 /server-api 请求。与「Desktop 后端」是不同进程。
- Desktop 后端(
src/server/):NestJS HTTP API,即 server-api;默认端口 38081。会话、智能体配置、技能、任务、工作区、鉴权等由本模块提供。
- Desktop:Electron 包一层 Vue 前端 + 上述后端;通过 Gateway 或直连 Desktop 后端与 Agent 通信。
- Agent 核心:统一由
AgentManager 管理会话、技能注入与工具注册;记忆与 compaction 作为扩展参与 system prompt 与经验写入。
目录与模块对应
src/server/ | Desktop 后端(NestJS),HTTP API,前缀 server-api。 |
src/gateway/ | WebSocket 网关,独立进程,提供 WS JSON-RPC 并代理到 Desktop 后端。 |
src/agent/ | Agent 核心(CLI 与 Gateway 共用)。 |
src/config/ | 桌面配置(~/.openbot/desktop):config.json、agents.json、provider-support.json;CLI 与 Gateway 共用。 |
examples/workspace/ | 示例工作区数据(仅示例/测试用)。真实工作区根目录为 ~/.openbot/workspace/。 |
各端技术栈
CLI
| 运行时 | Node.js 20+ |
| 语言 | TypeScript 5.7 |
| 入口 | openbot(bin → dist/cli.js) |
| 框架 | Commander(子命令:gateway、login、config) |
| 配置 | ~/.openbot/agent(API Key、模型、技能等) |
WebSocket Gateway
| 协议 | JSON-RPC over WebSocket(ws) |
| 端口 | 默认 38080,可 -p 指定 |
| 职责 | 连接管理、消息路由、静态资源、拉 Nest 子进程 |
| 方法 | connect、agent.chat、agent.cancel、subscribe_session、unsubscribe_session 等 |
Agent 核心
| 智能体 | @mariozechner/pi-coding-agent |
| 模型/Provider | @mariozechner/pi-ai(DeepSeek、DashScope、OpenAI 等) |
| 工具 | read/write/edit、bash、find/grep/ls、browser、install-skill、save-experience |
| 技能 | SKILL.md 规范,多路径加载,formatSkillsForPrompt 注入 system prompt |
Desktop 后端(NestJS)
| 框架 | NestJS 10、Express、Socket.io |
| 前缀 | server-api |
| 模块 | Database · Agents · AgentConfig · Skills · Config · Auth · Users · Workspace · Tasks · Usage |
| 数据 | better-sqlite3(若使用本地库) |
Desktop 前端(Electron + Vue)
| 壳子 | Electron 28 |
| 前端 | Vue 3、Vue Router、Pinia |
| 构建 | Vite 5 |
| 通信 | axios、socket.io-client |
| 视图 | Dashboard、Agents、AgentChat/AgentDetail、Sessions、Skills、Settings、Tasks、WorkResults、Workspace、Login |
| 国际化 | 自研 useI18n + locales (zh/en) |
记忆与向量
| 向量索引 | Vectra(LocalIndex) |
| 嵌入 | 远端 API(config.json 中 RAG 知识库配置的 embedding 模型;未配置时长记忆空转) |
| 扩展 | compaction-extension(会话压缩、摘要入 prompt) |
| 持久化 | 与 agent 目录一致的 memory 目录、better-sqlite3(若用于元数据) |
内置技能
| find-skills | 发现与安装 Cursor/Agent 技能 |
| agent-browser | 浏览器自动化(Playwright/agent-browser CLI) |
一、安装与部署
安装与部署按安装方式划分:npm、Docker、Desktop 安装包。任选其一即可使用对应端的 CLI、Web 或 Desktop。
环境要求
- Node.js ≥ 20(npm 安装与本地开发必需)
- 可选:按所用 Provider 配置 API Key(如
OPENAI_API_KEY、DEEPSEEK_API_KEY)
1.1 npm 安装
适用于:使用 CLI,或在自有环境中运行 Gateway(Web)。
npm install -g @next-open-ai/openbot
安装后可直接使用 openbot 命令(见下方「使用方式」)。若需从源码构建再安装:
git clone <repo>
cd openbot
npm install
npm run build
npm link
1.2 Docker 部署
适用于:在服务器或容器环境中运行 Gateway,供 Web/其他客户端连接。
说明:Docker 镜像与编排正在规划中,当前推荐使用 npm 全局安装后执行 openbot gateway 部署网关。
规划中的使用方式示例:
1.3 Desktop 安装包
适用于:仅使用 桌面端,无需 Node 环境。
- 从 Releases 下载对应平台的安装包(macOS / Windows)。
- 安装后启动 OpenBot Desktop,按界面引导配置 API Key 与默认模型即可使用。
首次使用建议在设置中配置默认 Provider/模型,或通过 CLI 执行 openbot login <provider> <apiKey> [model] / openbot config set-model <provider> <modelId>(与桌面端共用 ~/.openbot/desktop/ 配置)。
二、使用方式
按使用端划分:CLI、Web、Desktop;后续将支持 iOS、Android、飞书等。
2.1 CLI
在已通过 npm 安装 或 源码构建并 link 的环境中,在终端使用 openbot。
openbot "总结一下当前有哪些技能"
openbot -s ./skills "用 find-skills 搜一下 PDF 相关技能"
openbot --dry-run --prompt "查北京天气"
openbot --model deepseek-chat --provider deepseek "写一段 TypeScript 示例"
CLI 配置(与桌面端共用)
CLI 与桌面端共用桌面配置(~/.openbot/desktop/)。主要文件:
- config.json:全局缺省 provider/model、defaultModelItemCode(缺省模型在 configuredModels 中的唯一标识)、缺省智能体 id(
defaultAgentId)、各 provider 的 API Key/baseUrl、已配置模型列表(configuredModels)等。
- agents.json:智能体列表;每个智能体可配置 provider、model、modelItemCode(匹配 configuredModels)、工作区。
- provider-support.json:Provider 与模型目录,供设置页下拉选择。
| 保存 API Key(可选指定模型) | openbot login <provider> <apiKey> [model] | 写入 config.json;不传 model 时取该 provider 第一个模型并补齐缺省配置,可直接运行 |
| 设置缺省模型 | openbot config set-model <provider> <modelId> | 设置全局缺省 provider、model 及 defaultModelItemCode |
| 查看配置 | openbot config list | 列出 providers 与缺省模型 |
| 同步到 Agent 目录 | openbot config sync | 生成并写入 ~/.openbot/agent/models.json |
首次使用建议:
openbot login deepseek YOUR_DEEPSEEK_API_KEY
openbot "总结一下当前有哪些技能"
openbot login deepseek YOUR_DEEPSEEK_API_KEY deepseek-reasoner
openbot "总结一下当前有哪些技能"
openbot login deepseek YOUR_DEEPSEEK_API_KEY
openbot config set-model deepseek deepseek-chat
openbot config sync
openbot "总结一下当前有哪些技能"
未在命令行指定 --provider / --model 时,CLI 使用缺省智能体对应的配置;单次可用 --provider、--model、--api-key 覆盖。未在配置中保存 API Key 时,会回退到环境变量(如 OPENAI_API_KEY、DEEPSEEK_API_KEY)。
2.2 Web
通过 WebSocket 网关 使用 OpenBot:先启动网关,再通过 Web 客户端连接。
openbot gateway --port 38080
客户端连接 ws://localhost:38080,使用 JSON-RPC 调用 connect、agent.chat、agent.cancel 等(详见下方「Gateway API 简述」)。
前端可自行实现或使用仓库内 Web 示例(若有)。
2.3 Desktop
- 通过安装包:安装后直接打开 OpenBot Desktop,登录/配置后即可使用桌面界面(会话、智能体、技能、任务、工作区等)。
- 通过源码:在「开发」章节中运行
npm run desktop:dev 启动开发版桌面。
桌面端与 CLI 共用同一套配置与 Agent 核心,同一台机器上配置一次即可双端使用。
2.4 即将支持
通道与终端
上述端将通过 WebSocket Gateway 或专用适配与现有 Agent 核心对接。
生态与协议
| MCP | 支持 MCP 协议,降低 Token 消耗与大模型幻觉,与 Skill 自我发现/迭代形成互补 |
| Coze 生态 | 接入现有 AI Agent 生态,下一步计划接入 Coze |
文档与发布节奏后续更新。
三、开发
面向参与 OpenBot 源码开发的读者,按形态分为 CLI、Web(Gateway + 前端)、Desktop 三部分。
环境与依赖
- Node.js ≥ 20
- 仓库克隆后安装依赖并构建:
git clone <repo>
cd openbot
npm install
npm run build
3.1 CLI 开发
- 入口:
openbot → bin → dist/cli.js
- 技术:Commander(子命令
gateway、login、config)、TypeScript 5.7
- 配置与数据:
~/.openbot/agent、~/.openbot/desktop(与桌面共用)
修改 CLI 后重新构建并本地安装:
npm run build
npm link
openbot --help
3.2 Web 开发(Gateway + 前端)
- Gateway:
src/gateway/,默认端口 38080,可 -p 指定;协议 JSON-RPC over WebSocket;职责包括连接管理、消息路由、静态资源、拉 Nest 子进程。
- 方法:
connect、agent.chat、agent.cancel、subscribe_session、unsubscribe_session 等。
本地启动网关:
npm run build
openbot gateway --port 38080
若仓库内有独立 Web 前端工程,则分别启动 Gateway 与前端 dev server,前端通过 ws://localhost:38080 连接。
3.3 Desktop 开发
- 后端:NestJS(
src/server/),前缀 server-api,默认端口 38081;Gateway 启动时会拉该子进程并代理 /server-api。
- 前端:Electron 28 + Vue 3 + Pinia + Vite 5,位于
desktop/。
npm run build
npm run desktop:dev
npm run desktop:install
测试
npm test
npm run test:e2e
npm run test:memory
测试分布:test/config/ 桌面配置、test/gateway/ 网关、test/server/ Nest 后端 e2e。
附录
Gateway API 简述
- 请求:
{ "type": "request", "id": "<id>", "method": "<method>", "params": { ... } }
- 成功响应:
{ "type": "response", "id": "<id>", "result": { ... } }
- 错误响应:
{ "type": "response", "id": "<id>", "error": { "message": "..." } }
- 服务端事件:如
agent.chunk(流式输出)、agent.tool(工具调用)等,格式为 { "type": "event", "event": "...", "payload": { ... } }
常用流程:先 connect 建立会话,再通过 agent.chat 发送消息并接收流式/事件;agent.cancel 取消当前任务。
各端技术栈
详见上文「各端技术栈」章节(CLI、WebSocket Gateway、Agent 核心、Desktop 后端/前端、记忆与向量、内置技能)。
内置技能
| find-skills | 发现与安装 Cursor/Agent 技能 |
| agent-browser | 浏览器自动化(Playwright/agent-browser CLI) |
许可证
MIT