OpenHands Agent Canvas
「自托管的 agent 控制中心」 —— 官方 README 现在给它起的名字是 Agent Canvas, 定位原文: > The self-hosted developer control center for coding agents and automations. > Run OpenHands, Claude Code, Codex, Gemini, or any ACP-compatible agent > across local, remote, and cloud backends.
适合与不适合
适合:agent 要放自己服务器 7×24 跑;需要定时/webhook 触发(Slack / GitHub / Linear / Notion); 想一个界面统管 Codex / Claude Code / Gemini 等多种 agent;需要 per-conversation 容器隔离; 前端与运行时分离部署。 不适合:只想把 agent 嵌进自己的 Python 进程(用 software-agent-sdk 或 OpenAI Agents SDK); 单机临时用一下(它是一整套栈);需要细粒度多用户权限(本站未核验其能力)。
固定坐标系
8 个维度,与同赛道其他对象逐项可比。
- 模型与开放条件
- 官方口径是「任何 LLM」,但这是特性表里的一句营销式表述,本站未取到完整 provider 清单。 已核验的部分:README 特性表有一行 "Bring your own model — Use with any LLM", 指向官方文档
usage/settings/llm-settings#llm-profiles(LLM profiles,可配多套并存)。 ⚠ 未核验:具体支持哪些 provider(是否走 LiteLLM 一类的网关层)、 本地量化模型能否接、以及「any LLM」在工具调用与 structured output 上的对齐度。 这一项对本对象尤其重要,因为它同时是别人的调度层 —— 「Codex / Claude Code 跑在它上面」时,能用哪些模型由那个 agent 自己决定,不由Canvas 决定。 - 运行位置
- 四种官方部署形态并存,这是本对象最有实用价值的部分(README 四个Option 全核验): Option 1 无沙箱本地跑:
npm install -g @openhands/agent-canvas然后agent-canvas, 起完整本地栈,要 Node.js 24+ 与 uv;可用--frontend-only/--backend-only拆开跑。 Option 2 Docker 沙箱:docker run官方镜像,需预先准备PROJECTS_PATH宿主目录, agent 可访问该目录下的项目。 Option 3 每会话独立容器:OH_CONVERSATION_RUNTIME=docker agent-canvas, 每次新会话起自己的容器与 Agent Server,适合并发跑多个 agent; 官方说明容器会挂载会话的 workspace 与持久化状态,容器替换后文件与对话历史仍在。 Option 4 从源码跑:clone +npm install+npm run dev。 入口统一在http://localhost:8000(Docker 镜像是/canvas)。 后端可远程切换:官方说 Agent Server 可跑在笔记本 / Mac Mini / 云上 VM / OpenHands Cloud,Canvas 前端可在多个 Server 间切换 —— 这条是它作为「调度层」的核心能力。 - 本地文件
- 本地文件访问范围由你选的部署形态决定,官方把这个变量讲得很清楚。 无沙箱形态:README 两次打 WARNING—— "This runs the agent-server directly on the machine you're installing on — the agent will have full access to your filesystem!" Docker 形态:访问范围收敛到
PROJECTS_PATH挂载的目录。 每会话容器形态:官方提示共享同一宿主工作区的会话仍会共用同一批文件, 建议用独立目录或 worktree 避免冲突编辑。 ⚠ 后端远程时(云上 VM / Cloud),你的仓库要么在远端、要么靠工具从本地取 —— 具体同步机制本站未核验。 - 关机后的任务
- 这是本对象最突出的强项,也是它与其他 harness 站对象最大的差别。 官方 README 明确:把 agent 跑在云上服务器的最大好处是 "allows your agents to continue running even when your laptop is shut", 且更容易通过 Slack / GitHub / Datadog 等第三方服务触发。 配套有独立仓
OpenHands/automation(核验2026-10-01:Python,MIT,32★,活跃) 提供定时(schedule)与 webhook 事件触发两种触发方式, 官方特性表列了可集成的第三方:Slack、GitHub、Linear、Notion。 对照本站其余对象:OpenAI Agents SDK、Deep Agents、Codex SDK 的 thread 状态都在 自己进程 / 自己机器上,关了就没了;这是唯一把「关掉笔记本后 agent 仍在跑」当卖点做的。 - 工具与扩展
- 工具面来自它所调度的那个 agent,而不是 Canvas 自己。 官方原文明确它能跑 "OpenHands, Claude Code, Codex, Gemini, or any ACP-compatible agent" —— 即通过 Agent Client Protocol(ACP)接入第三方 agent。 真正的工具/agent 定义在
OpenHands/software-agent-sdk(官方职责表:agents, tools, conversations, workspaces, events)。 ⚠ 本对象没有以 MCP 为接口(README 与仓库结构里未见 MCP 相关表述)—— 它用的是 ACP。这两个协议的定位差异本站未展开,标记为未核验。 - 上下文与记忆
- ⚠ 这一维度是本对象的重大信息缺口,本站明确记为未知。 已核验的只有持久化方向:
automation仓负责 run history, 每会话容器形态下官方说「workspace files and conversation history survive container replacement」。 但对话上下文长了之后如何压缩、摘要或落盘,README 与本文所引文档均未说明, software-agent-sdk 的具体上下文策略本站未核验。 按本站主张「状态 ≠ 上下文」:它把「状态」做得很完整(定时触发 + run 历史 + 容器可替换), 但「上下文」这一侧本站拿不到证据,不能因为它有持久化就推断它有上下文管理。 - 权限与限制
- 这是本对象最需要认真读的部分,也是它官方做得最细的一块。 沙箱:见 local_files —— 官方提供 Docker 沙箱与每会话独立容器两种收敛手段, 但也明确提供了无沙箱形态并两次挂 WARNING。 认证:
docs/SELF_HOSTING.md(核验 286行)给的是 API key 机制而非用户体系: 生成 key 用openssl rand -base64 32赋给LOCAL_BACKEND_API_KEY;--public模式下 key 不烘进前端,用户首次打开 UI 要手动粘贴 key 才能用, 之后每个/api/*请求都要带X-Session-API-Key头。 默认绑定是 loopback-only(127.0.0.1),官方说明这是为了让自动注入的 session key 不被局域网其他机器拿到;要监听0.0.0.0时 key 不再注入、改用同样的 API-key 输入界面。 官方还提醒用export而不是命令行参数传 key,避免出现在ps aux进程列表里。 暴露到公网时官方另有防火墙要求(Cloud Firewall / AWS Security Group / GCP firewall rule)。 ⚠ 未核验:多用户与权限分级(这是它作为团队级平台最可能被追问的点, SELF_HOSTING.md 里的证据集中在「怎么保护单个 key」,未见用户/角色体系)。 - 适合什么任务
- 适合:要把agent 放到自己服务器上 7×24 跑;需要定时或 webhook 触发(Slack / GitHub / Linear / Notion); 想用一个界面统管多种agent(含Codex、Claude Code、Gemini 等 ACP 兼容的); 需要 per-conversation 隔离容器;团队里前端/平台与 agent 运行时分离部署。 不适合:只想要一个轻量库把agent 嵌进自己的 Python 进程(用 software-agent-sdk 或 OpenAI Agents SDK); 单机临时用一下(它是一整套栈,不是库); 需要细粒度多用户权限与审计(本站未核验其能力)。
头号误解
- 以为是 Python SDK —— 主仓是 TypeScript 的 Web 控制中心;编程入口在
OpenHands/software-agent-sdk(另 1,190★) - 看仓库名与 description 以为是「AI 驱动的软件开发工具」 —— README 首屏标题已是 Agent Canvas,定位是控制中心
- 以为它是 Codex SDK / Claude Agent SDK 的竞品 —— 它是它们的调度层(README 明确说能跑这些 agent)
- 直接跑 Option 1 就上线 —— 官方在该选项上打 WARNING:agent 对你的文件系统有全量访问权限
- 把
--public模式理解成「更方便」—— 它是不把 key 烘进前端的防护手段,用于非本机访问 - 以为「有 run history」就等于「有上下文管理」—— 前者是状态,后者本站未核验
- 以为它用 MCP —— 它用的是 ACP(Agent Client Protocol),不是 MCP
价格
| 月度入口 | 开源自托管 Free(MIT,1 用户)/ Cloud Individual Free(1 用户,每日 10 轮对话)/ Enterprise 定制报价 |
|---|---|
| 月度数值 | $0 |
| 额度说明 | 本站收录的是可自托管的开源部分,不是商业版。 核验依据:主仓 MIT(经license API)、README 的四份 docker / npm 安装命令全部指向自建、 官方定价页(核验 2026-10-01)。 ⚠ 本轮核验的结论可能与预期不同:官方定价页上没有「付费个人档」—— 三档里两档是$0,一档是定制: ① Open Source — Free(本地跑:Web GUI + Terminal UI + CLI、Git 集成、 社区支持、model agnostic,1 用户、每日对话数 Unlimited); ② SaaS Individual — Free(云端访问,支持桌面与移动端、API 用于自动化与脚本、 Jira 与 Slack 集成,1 用户); ③ SaaS 或 Self-hosted Enterprise — Custom pricing(可部署在客户自有 VPC、 Enterprise SAML/SSO、每用户无限并发会话、Large Codebase SDK、 优先支持 + 共享 Slack 频道、Named Customer Engineer、用户数 Unlimited)。 最关键的一条硬数字:Individual 档「Max Daily Conversations = 10」。 对照 Open Source 档的同 一栏是 Unlimited —— 即「免费」不等于「不限量」,云端免费档每天只有 10 轮对话, 本地自托管才是 Unlimited。 这是选型时极易踩的落差。 另一条重要机制(官方 FAQ 原文):Individual 档支持自带 key(BYOK), 没有 key 时可用 OpenHands LLM provider,官方强调 "at cost, with no markup"(按成本价、零加价,按量付费)—— 并可在 Settings > API 生成 API key,供 CLI / Local Web UI / Software Agent SDK 使用。 ⚠ 「零加价」的实际单价表本站未核验,只能确认官方声明不加价。 |
不同币种不做折算。优惠、地区、税费与登录后报价可能变化,购买前请到官方页面确认。
未知项清单
- 「any LLM」的具体 provider 清单与能力对齐度
- 对话上下文压缩/摘要/落盘策略(本站最看重的维度,证据缺失)
- 多用户、角色与审计体系是否存在
- ACP 与 MCP 的关系:能否复用已有 MCP server 生态
- Enterprise 的具体报价(官方仅标 Custom pricing / Contact Us)
- OpenHands LLM provider「at cost, no markup」的实际单价表(官方声明不加价,数字未公开)
- Individual 每日 10 轮之外,超出后的行为(停用 / 提示升级 / 其它,官方页未写)
- 后端远程部署时本地代码库的同步机制
software-agent-sdk的 API 形态与版本独立节奏- 每会话容器在并发压测下的资源与稳定性
证据来源
判断可回到以下一手源复核。本站核验日 2026-10-01,内容更新日 2026-10-01。
| 类型 | 名称 | 链接 |
|---|---|---|
| repo | OpenHands/OpenHands · 仓库(Agent Canvas 控制中心,89,675★,MIT,核验 2026-10-01) | https://github.com/OpenHands/OpenHands |
| docs | 主README(Agent Canvas 定位、四种部署形态、ACP 接入、Repository boundaries 表) | https://github.com/OpenHands/OpenHands/blob/main/README.md |
| docs | docs/SELF_HOSTING.md(API key、--public 模式、loopback 默认、防火墙要求) | https://github.com/OpenHands/OpenHands/blob/main/docs/SELF_HOSTING.md |
| pricing | 官方定价页(核验 2026-10-01:Open Source $0 / Cloud Individual $0 / Enterprise 定制;**Individual Max Daily Conversations = 10** 而 Open Source 为 Unlimited;BYOK 与 "at cost, with no markup";Enterprise 可部署客户自有 VPC、SAML/SSO、RBAC、每用户无限并发) | https://www.all-hands.dev/pricing |
| repo | OpenHands/software-agent-sdk · 仓库(Python SDK 与 Agent Server 的真实所在,1,190★,MIT) | https://github.com/OpenHands/software-agent-sdk |
| repo | OpenHands/automation · 仓库(定时与 webhook 分发,32★,MIT) | https://github.com/OpenHands/automation |
| changelog | Releases(v1.24.0 @ 2026-09-25) | https://github.com/OpenHands/OpenHands/releases |
| docs | 官方文档 · LLM settings / LLM profiles(README 指向,本次未取到正文) | https://docs.openhands.dev/openhands/usage/settings/llm-settings |
| docs | 官方文档 · ACP Agents(README 指向) | https://docs.openhands.dev/openhands/usage/agent-canvas/acp-agents |
| repo | npm 包@openhands/agent-canvas(README 安装入口) | https://www.npmjs.com/package/@openhands/agent-canvas |
实测记录
本站尚未完成实测。测试协议见 tasks/_protocol.md。
实测建议(按本对象形态定制):
| # | 测什么 | 为什么值得测 |
|:--:|---|---|
| 1 | software-agent-sdk 单独用(不启 Canvas)能不能跑最小 agent | 决定你到底需不需要这一整套栈 |
| 2 | 长任务(跨天)对话上下文如何处理、成本如何变化 | 补上本站最大的信息缺口 |
| 3 | 每会话容器模式的真实隔离强度(同宿主工作区会共用文件这条要实测) | 官方已提示冲突风险 |
| 4 | Docker 形态下 agent 能否绕过 PROJECTS_PATH 触达宿主其他路径 | 沙箱有效性是选型前提 |
| 5 | 挂 Claude Code / Codex 作为 ACP agent 的实际接入成本 | 它最独特的卖点,值不值得取决于这个 |
| 6 | webhook 触发的幂等性与重复触发处理 | 定时/webhook 是它的主打场景 |
相关条目
- Codex SDK调度关系,不是竞争关系:README 明确 Agent Canvas 能跑 Codex。本档案讲的是「谁给你调度」,codex-sdk 讲的是「被调度的是什么」。
- Claude Agent SDK同上,Claude Code 也是它声明可调度的 agent 之一。
- Deep Agents都是batteries-included 那一档,但 deepagents 是一个库、OpenHands 是一整套带Web UI 的栈。
- LangGraph若要的是「用代码定义流程」而非「用界面调度 agent」,编排框架才是对应层。
本页由 ai-agent-guide 数据层生成(CC BY 4.0)。
方法论与坐标系定义见仓库内 METHODOLOGY.md。