正在打开工具详情…
正在打开工具详情…
把编码代理变成自托管的控制台:一个界面切换本地 / Docker / 云后端,也能挂 Claude Code、Codex 等第三方代理。适合要让代理常驻并接 Slack、GitHub 自动化的人;代价是无沙箱模式等于把整机文件系统交给它。
想让编码代理 7×24 常驻、按计划或按 webhook 触发(发报告到 Slack、拆解 GitHub issue)的团队,以及需要在一个界面里管理多个代理后端的人。
只在本地 IDE 里偶尔让代理改几行代码的人——控制台 + 后端这一层是纯额外负担;也不适合不能接受把机器文件系统交给代理、又不想维护 Docker 的人。
Agent Canvas 是 OpenHands 现在的前端形态:一个自托管的开发者控制台,默认跑开源的 OpenHands 代理,也能换成 Claude Code、Codex、Gemini CLI、Pi、OpenCode 或任何支持 ACP 的代理。它解决的是「代理只能在我开着笔记本时干活」——把后端放到服务器或云上,代理就能继续跑,还能被 Slack、GitHub、Datadog 这类第三方触发。同一个前端可以在本地、Docker、虚拟机、公司基础设施之间切换后端,团队共用一台做代码评审与依赖升级,个人代理留在自己笔记本上。
三种跑法要分清。npm install -g @openhands/agent-canvas 起本地全栈,README 用警告标了:代理直接跑在你装的机器上,对文件系统有完全访问权限。Docker 沙箱版把项目目录挂进容器,代理只能看到 PROJECTS_PATH。OH_CONVERSATION_RUNTIME=docker agent-canvas 是每次对话一个容器,适合并发跑多个代理,容器被替换后工作区与会话状态仍在。
第二个坑是对外暴露:本地启动只监听 127.0.0.1 并自动注入 session key;一旦加 --host 0.0.0.0,session key 不再注入,必须自己设强 LOCAL_BACKEND_API_KEY。Docker 镜像默认监听容器内的所有网卡,README 明确建议:要发布到局域网或公网就去掉 AGENT_CANVAS_ALLOW_LAN_SESSION_KEY,改为在界面里手填 key,并按自托管指南做加固。
上手步骤之外的具体做法:常见场景怎么配、命令怎么写、报错怎么处理。
按第一次上手会卡在哪讲:三种跑法怎么选、无沙箱等于整机权限这件事、并发场景为什么要用每对话一容器、以及对外暴露时 session key 该怎么管。
| 跑法 | 前提 | 特点 |
|---|---|---|
无沙箱 agent-canvas | Node.js 24+、uv | 最快,但代理有整机文件系统权限 |
| Docker 沙箱 | Docker、一个 PROJECTS_PATH 目录 | 代理只看到挂进去的项目目录 |
| 每对话一容器 | Node.js 24+、uv、Docker | 适合并发,容器替换后工作区与历史仍在 |
三种跑法共用同一个前端,后两种需要 Docker Desktop(macOS / Windows)或 Docker Engine(Linux)。
README 在 Option 1 和 Option 4 前面都挂了警告:agent-server 直接跑在你安装的机器上,代理对你的文件系统有完全访问权限。
这不是保守措辞,是它真的会照代理的判断去读写。个人或测试环境无所谓;放在有生产凭据的机器上之前,先换成 Docker 沙箱。
bashnpm install -g @openhands/agent-canvas
OH_CONVERSATION_RUNTIME=docker agent-canvas每次新对话开一个新容器,各自有独立的 Agent Server 与工具。注意两点:已有的本地对话不会被转换;同一份宿主机工作区仍会被多个对话共享,想避免互相改文件就用不同目录或 worktree。
默认行为(README 写得很细):
127.0.0.1,并把 session key 自动注入到页面里--host 0.0.0.0 或设 OH_BIND_HOST 后,session key 不再注入,界面改成手填 API keyAGENT_CANVAS_ALLOW_LAN_SESSION_KEYLOCAL_BACKEND_API_KEY 设成强值,或用 docker exec <container> sh -c 'cat "$STATE_DIR/api-key.txt"' 取生成的那个面向公网的安装请照仓库里的自托管指南做加固。
Canvas 连的是 Agent Server(一个 REST API,一台机器一个 host/port),所以它能在本地、云主机、公司服务器之间切换后端,不用为每个环境再装一套界面。定时与事件触发属于配套的 Automation Server,和 Canvas 是不同的仓库。