跳到主要内容
← Harness

OpenHands Agent Canvas

OpenHands(All-Hands-AI)
TypeScript Python 开源 MIT 自托管 平台型 WebUI 调度层 ACP 沙箱 定时任务 webhook 多后端 partial lifecycle: active 核验 2026-10-01

「自托管的 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。

类型名称链接
repoOpenHands/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
docsdocs/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
repoOpenHands/software-agent-sdk · 仓库(Python SDK 与 Agent Server 的真实所在,1,190★,MIT)https://github.com/OpenHands/software-agent-sdk
repoOpenHands/automation · 仓库(定时与 webhook 分发,32★,MIT)https://github.com/OpenHands/automation
changelogReleases(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
reponpm 包@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。