<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Claude Code on AI博士 万戈</title>
        <link>https://www.yesmiracle.net/tags/claude-code/</link>
        <description>AI博士万戈的技术博客，聚焦 Agentic AI、AI Infra 与 Agent Security，分享 AI 基础设施与工程落地实践。</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <managingEditor>admin@yesmiracle.net (万戈)</managingEditor>
        <webMaster>admin@yesmiracle.net (万戈)</webMaster>
        <lastBuildDate>Tue, 28 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.yesmiracle.net/tags/claude-code/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>OpenHands 变成了 Agent Canvas！一个自托管的编码 Agent 控制中心，深入源码拆解</title>
        <link>https://www.yesmiracle.net/post/20260728-openhands-agent-canvas/</link>
        <pubDate>Tue, 28 Jul 2026 00:00:00 +0000</pubDate>
        <author>admin@yesmiracle.net (万戈)</author>
        <guid>https://www.yesmiracle.net/post/20260728-openhands-agent-canvas/</guid>
        <description>&lt;img src="https://www.yesmiracle.net/post/20260728-openhands-agent-canvas/cover.svg" alt="Featured image of post OpenHands 变成了 Agent Canvas！一个自托管的编码 Agent 控制中心，深入源码拆解" /&gt;&lt;p&gt;如果你关注 AI 编码 Agent 的生态，一定听过 &lt;strong&gt;OpenHands&lt;/strong&gt;（原名 OpenDevin）——那个曾经和 Devin 打对台的开源编码 Agent，Star 数一度冲到 30k+。但如果你现在去 &lt;code&gt;github.com/OpenHands/OpenHands&lt;/code&gt; 看看，你会发现它已经&lt;strong&gt;完全变了&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;它不再是「一个编码 Agent」，而是一个 &lt;strong&gt;Agent 的控制中心&lt;/strong&gt;——一个叫 &lt;strong&gt;Agent Canvas&lt;/strong&gt; 的自托管 Web 界面，让你在同一套 UI 里运行 OpenHands、Claude Code、Codex、Gemini CLI 等任意 ACP 兼容 Agent，还能切换本地、Docker、云端等多个后端。&lt;/p&gt;
&lt;p&gt;这不是一个简单的改名，而是整个产品定位的&lt;strong&gt;根本性转型&lt;/strong&gt;——从「做一个更好的 Devin」变成了「做所有编码 Agent 的指挥中心」。这篇文章从源码出发，拆解 Agent Canvas 的架构设计，并与之前写过的 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260728-opentag-copilotkit-slack-agent/&#34; &gt;OpenTag&lt;/a&gt;、&lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260719-opencode-architecture/&#34; &gt;OpenCode&lt;/a&gt;、&lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260719-grok-build-open-source/&#34; &gt;Grok Build&lt;/a&gt; 横向对比。&lt;/p&gt;
&lt;h2 id=&#34;从-opendevin-到-agent-canvas一个产品的进化&#34;&gt;从 OpenDevin 到 Agent Canvas：一个产品的进化&lt;/h2&gt;
&lt;p&gt;先回顾一下历史。OpenDevin 在 2024 年横空出世，作为 Devin 的开源替代吸引了大量关注。但到了 2026 年，编码 Agent 的赛道已经完全变了——Claude Code 和 Codex 成了主流选择，OpenHands 团队做了一个大胆的决定：&lt;strong&gt;不再试图和它们竞争，而是成为它们的统一控制界面&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这个决策直接体现在项目的 README 里：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;Agent Canvas turns your coding agents into a self-hosted, always-on engineering team.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;它不再是一个 agent，而是一个 &lt;strong&gt;agent 的平台&lt;/strong&gt;。这个转型和我之前分析的 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260728-opentag-copilotkit-slack-agent/&#34; &gt;OpenTag&lt;/a&gt; 异曲同工——OpenTag 是 CopilotKit 的聊天 Agent 平台，OpenHands 是编码 Agent 的平台。两个项目在 2026 年 7 月同时走在了「Agent 平台化」的路上。&lt;/p&gt;
&lt;h2 id=&#34;架构全景前端--后端--acp-的三角关系&#34;&gt;架构全景：前端 + 后端 + ACP 的三角关系&lt;/h2&gt;
&lt;p&gt;Agent Canvas 的架构可以拆成三个核心组件：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;┌─────────────────────────────────────────────────┐
│  Agent Canvas 前端 (React + TypeScript)          │
│  npm install -g @openhands/agent-canvas          │
│  agent-canvas 命令启动全栈                       │
│                                                   │
│  ┌──────────────┐  ┌──────────────┐              │
│  │  Conversation │  │  Settings    │              │
│  │  · 聊天界面   │  │  · 后端切换  │              │
│  │  · 终端       │  │  · Agent选择 │              │
│  │  · 浏览器渲染 │  │  · 密钥管理  │              │
│  │  · 文件浏览   │  │  · 模型配置  │              │
│  └──────────────┘  └──────────────┘              │
│  ┌──────────────┐  ┌──────────────┐              │
│  │  Automations  │  │  Backends    │              │
│  │  · 定时任务   │  │  · 本地后端  │              │
│  │  · 事件触发   │  │  · Docker    │              │
│  │  · Slack集成  │  │  · VM/云端   │              │
│  └──────────────┘  └──────────────┘              │
└──────────────────┬──────────────────────────────┘
                   │ REST API / WebSocket
                   ▼
┌─────────────────────────────────────────────────┐
│  OpenHands Agent Server (Python)                  │
│                                                   │
│  收到请求 → 根据 agent_kind 选择运行时            │
│                                                   │
│  ┌──────────────┐  ┌──────────────────────┐      │
│  │ OpenHands    │  │ ACP 子进程            │      │
│  │ 原生 Agent   │  │ · npx claude-agent-acp│      │
│  │ Python       │  │ · npx codex-acp       │      │
│  │ LangGraph    │  │ · npx gemini-cli --acp│      │
│  └──────────────┘  └──────────────────────┘      │
│                           │                       │
│                           │ JSON-RPC over stdio   │
│                           ▼                       │
│                    ┌──────────────┐               │
│                    │ LLM Provider  │               │
│                    │ (各自管理)    │               │
│                    └──────────────┘               │
└─────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个架构和 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260719-grok-build-open-source/&#34; &gt;Grok Build&lt;/a&gt; 的 ACP 集成思路一致——都通过 &lt;a class=&#34;link&#34; href=&#34;https://agentclientprotocol.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Agent Client Protocol&lt;/a&gt; 来对接外部 Agent。但 Grok Build 是 ACP 的&lt;strong&gt;服务端&lt;/strong&gt;（它实现 ACP 协议让外部客户端连接），而 Agent Canvas 是 ACP 的&lt;strong&gt;客户端&lt;/strong&gt;（它启动 ACP 子进程并消费其服务）。&lt;/p&gt;
&lt;h2 id=&#34;前端一个可嵌入的-react-组件库&#34;&gt;前端：一个可嵌入的 React 组件库&lt;/h2&gt;
&lt;p&gt;Agent Canvas 的前端不只是简单的 Web UI，它被设计成一个&lt;strong&gt;可嵌入的组件库&lt;/strong&gt;。&lt;code&gt;@openhands/agent-canvas&lt;/code&gt; 的 npm 包暴露了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;agent-canvas&lt;/code&gt; 命令行&lt;/strong&gt;：启动全栈本地服务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;独立应用&lt;/strong&gt;：完整的 SPA 构建&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;库入口&lt;/strong&gt;：&lt;code&gt;browser&lt;/code&gt;、&lt;code&gt;conversation&lt;/code&gt;、&lt;code&gt;files&lt;/code&gt;、&lt;code&gt;settings&lt;/code&gt;、&lt;code&gt;sidebar&lt;/code&gt;、&lt;code&gt;terminal&lt;/code&gt;、&lt;code&gt;i18n&lt;/code&gt; 等模块可以直接嵌入到其他应用中&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个设计让我想起 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260719-opencode-architecture/&#34; &gt;OpenCode&lt;/a&gt; 的 Effect TS 多包架构——两者都采用了「核心功能模块化、可独立消费」的设计哲学。但 OpenCode 的模块化是为了&lt;strong&gt;运行时扩展&lt;/strong&gt;（Provider、Auth、Framing 四轴），而 Agent Canvas 的模块化是为了&lt;strong&gt;UI 复用&lt;/strong&gt;（嵌入到不同的宿主应用）。&lt;/p&gt;
&lt;p&gt;技术栈方面，Agent Canvas 使用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;React 19 + React Router 7 + Vite&lt;/li&gt;
&lt;li&gt;HeroUI (原 NextUI) 组件库&lt;/li&gt;
&lt;li&gt;Monaco Editor（代码编辑器）&lt;/li&gt;
&lt;li&gt;xterm（终端模拟器）&lt;/li&gt;
&lt;li&gt;Framer Motion（动画）&lt;/li&gt;
&lt;li&gt;i18next（国际化）&lt;/li&gt;
&lt;li&gt;Zustand（状态管理）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;标准的大型 SPA 技术栈，没有特别激进的技术选择——这和 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260719-nanobot-architecture/&#34; &gt;Nanobot&lt;/a&gt; 的 Python asyncio 路线完全不同，Nanobot 在技术栈上更激进（8 状态机、两阶段记忆合并）。&lt;/p&gt;
&lt;h2 id=&#34;acp-集成让-agent-可插拔&#34;&gt;ACP 集成：让 Agent 可插拔&lt;/h2&gt;
&lt;p&gt;Agent Canvas 最核心的架构决策是&lt;strong&gt;通过 ACP 协议支持外部 Agent&lt;/strong&gt;。在 &lt;code&gt;docs/ACP_AGENTS.md&lt;/code&gt; 中，它详细定义了三种 ACP Agent 的接入方式：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;提供方&lt;/th&gt;
          &lt;th&gt;默认命令&lt;/th&gt;
          &lt;th&gt;认证方式&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Claude Code&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;npx -y @agentclientprotocol/claude-agent-acp&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;macOS Keychain / OAuth Token&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Codex&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;npx -y @agentclientprotocol/codex-acp&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;codex login&lt;/code&gt; / API Key&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Gemini CLI&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;npx -y @google/gemini-cli --acp&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Google OAuth / API Key&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;每个 ACP Agent 被 Agent Server 以&lt;strong&gt;子进程&lt;/strong&gt;方式启动，通过 JSON-RPC over stdio 通信。Agent Server 管理子进程的生命周期和凭证，Agent Canvas 前端只负责记录「用哪个 Agent」和「需要什么密钥」。&lt;/p&gt;
&lt;p&gt;这个设计的关键在于&lt;strong&gt;凭证的传递方式&lt;/strong&gt;——Agent Canvas 把凭证保存为 Agent Server 的全局密钥（&lt;code&gt;LookupSecret&lt;/code&gt;），在启动子进程时注入。对于容器化部署，它还支持将 &lt;code&gt;CODEX_AUTH_JSON&lt;/code&gt; 等文件型凭证反序列化回文件系统。&lt;/p&gt;
&lt;p&gt;对比来看，&lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260728-opentag-copilotkit-slack-agent/&#34; &gt;OpenTag&lt;/a&gt; 的「双运行时」设计（TS BuiltInAgent vs Python Deep Agent）也是可替换的 Agent 后端，但 OpenTag 通过 AG-UI 协议来切换，Agent Canvas 通过 ACP 协议来切换。AG-UI 是 Agent-to-UI 协议（关注前端渲染流），ACP 是 Agent-to-Agent 协议（关注工具调用和会话管理），两者定位不同。&lt;/p&gt;
&lt;h2 id=&#34;多后端架构打破单机限制&#34;&gt;多后端架构：打破单机限制&lt;/h2&gt;
&lt;p&gt;Agent Canvas 的另一个关键设计是&lt;strong&gt;多后端架构&lt;/strong&gt;。一个前端可以连接多个 Agent Server 后端，并在 UI 中一键切换：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;┌─────────────────────────────────────────────────┐
│  Agent Canvas 前端                                │
│                                                   │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐       │
│  │ 本地后端  │  │ Docker   │  │ 云端后端  │       │
│  │ localhost │  │ 容器     │  │ OpenHands │       │
│  │           │  │          │  │ Cloud     │       │
│  └──────────┘  └──────────┘  └──────────┘       │
└─────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个设计解决了编码 Agent 的一个核心痛点：&lt;strong&gt;隔离性&lt;/strong&gt;。你可以在本地后端跑日常开发任务（快速、方便），在 Docker 后端跑不确定的代码（安全、隔离），在云端后端跑长时间运行的任务（持久、可靠）。通过同一个 UI 管理所有后端，不需要切换工具。&lt;/p&gt;
&lt;h2 id=&#34;automations-系统让-agent-跑在事件和定时器上&#34;&gt;Automations 系统：让 Agent 跑在事件和定时器上&lt;/h2&gt;
&lt;p&gt;Agent Canvas 还内置了一个 &lt;strong&gt;Automation Server&lt;/strong&gt;（来自独立的 &lt;a class=&#34;link&#34; href=&#34;https://github.com/OpenHands/automation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenHands/automation&lt;/a&gt; 仓库），支持：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;定时执行&lt;/strong&gt;：每天固定时间运行 Agent 任务&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;事件触发&lt;/strong&gt;：GitHub Issue 创建时自动分配、Slack 消息触发&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;集成&lt;/strong&gt;：Slack、GitHub、Linear、Notion、Datadog&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个功能和 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260728-opentag-copilotkit-slack-agent/&#34; &gt;OpenTag&lt;/a&gt; 的 «Intelligence Gateway» 模式类似——两者都试图让 Agent 从「手动启动」变成「自动运行」。但 OpenTag 的自动化依赖 CopilotKit Intelligence 托管服务，而 Agent Canvas 的 Automation Server 是自托管的开源组件。&lt;/p&gt;
&lt;h2 id=&#34;安全模型&#34;&gt;安全模型&lt;/h2&gt;
&lt;p&gt;Agent Canvas 在安全方面做了几个设计选择：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Docker Sandbox 模式&lt;/strong&gt;：默认推荐。Agent 在容器内运行，无法访问宿主文件系统&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;无沙箱模式有明确警告&lt;/strong&gt;：&lt;code&gt;npm install -g @openhands/agent-canvas&lt;/code&gt; 直接运行的模式会给予 Agent 完全的文件系统访问权限，README 用红色警告标出&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ACP 凭证隔离&lt;/strong&gt;：每个 Agent 的凭证通过 Agent Server 的密钥管理，不在前端持久化（除了 &lt;code&gt;LookupSecret&lt;/code&gt; 引用）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多后端隔离&lt;/strong&gt;：不同后端之间完全隔离，一个后端的漏洞不会影响其他后端&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;但和 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260728-opentag-copilotkit-slack-agent/&#34; &gt;OpenTag 的安全性分析&lt;/a&gt; 类似，ACP 子进程的 stdout/stderr 可能泄露凭证信息——如果 ACP 子进程在日志中打印了 &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;，这些日志可能会被 Agent Server 捕获。&lt;/p&gt;
&lt;h2 id=&#34;三方横向对比&#34;&gt;三方横向对比&lt;/h2&gt;
&lt;p&gt;Agent Canvas 在「编码 Agent 平台」这个赛道上，和之前分析过的几个项目既有重叠又有差异：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;维度&lt;/th&gt;
          &lt;th&gt;Agent Canvas&lt;/th&gt;
          &lt;th&gt;OpenTag&lt;/th&gt;
          &lt;th&gt;OpenCode&lt;/th&gt;
          &lt;th&gt;Grok Build&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;定位&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;编码 Agent 控制中心&lt;/td&gt;
          &lt;td&gt;聊天 Agent 平台&lt;/td&gt;
          &lt;td&gt;编码 Agent 运行时&lt;/td&gt;
          &lt;td&gt;编码 Agent 运行时&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;语言&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;TypeScript (前端) + Python (后端)&lt;/td&gt;
          &lt;td&gt;TypeScript (+ Python 可选)&lt;/td&gt;
          &lt;td&gt;TypeScript (Effect TS)&lt;/td&gt;
          &lt;td&gt;Rust&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;核心协议&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;ACP (JSON-RPC stdio)&lt;/td&gt;
          &lt;td&gt;AG-UI (HTTP SSE)&lt;/td&gt;
          &lt;td&gt;HTTP API&lt;/td&gt;
          &lt;td&gt;ACP (服务端)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Agent 运行时&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;OpenHands / Claude Code / Codex / Gemini&lt;/td&gt;
          &lt;td&gt;CopilotKit BuiltInAgent / Deep Agent&lt;/td&gt;
          &lt;td&gt;双 Agent (build/plan)&lt;/td&gt;
          &lt;td&gt;MvpAgent + 60+ Tools&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;UI&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Web SPA (React)&lt;/td&gt;
          &lt;td&gt;Chat (Slack/Discord/Telegram)&lt;/td&gt;
          &lt;td&gt;CLI&lt;/td&gt;
          &lt;td&gt;CLI&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;多后端&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;✅ 本地/Docker/VM/云端&lt;/td&gt;
          &lt;td&gt;❌ 单 Agent URL&lt;/td&gt;
          &lt;td&gt;❌ 单进程&lt;/td&gt;
          &lt;td&gt;❌ 单进程&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;ACP 支持&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;✅ 客户端（消费方）&lt;/td&gt;
          &lt;td&gt;❌&lt;/td&gt;
          &lt;td&gt;❌&lt;/td&gt;
          &lt;td&gt;✅ 服务端（提供方）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;自动化&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;✅ 定时 + 事件触发&lt;/td&gt;
          &lt;td&gt;✅ (Intelligence Gateway)&lt;/td&gt;
          &lt;td&gt;❌&lt;/td&gt;
          &lt;td&gt;❌&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;开源协议&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;MIT&lt;/td&gt;
          &lt;td&gt;MIT&lt;/td&gt;
          &lt;td&gt;MIT&lt;/td&gt;
          &lt;td&gt;Apache 2.0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;部署方式&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;npm install / Docker / 源码&lt;/td&gt;
          &lt;td&gt;npm install / Railway&lt;/td&gt;
          &lt;td&gt;bun run&lt;/td&gt;
          &lt;td&gt;Cargo build&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;核心差异点：&lt;strong&gt;Agent Canvas 不写代码，它管理写代码的 Agent。&lt;/strong&gt; 它更像是一个 IDE 的替代品——不是帮你写代码，而是帮你管理那些帮你写代码的 Agent。&lt;/p&gt;
&lt;h2 id=&#34;值得关注的设计教训&#34;&gt;值得关注的设计教训&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;产品转型的勇气&lt;/strong&gt;：从「做一个 Agent」到「管理所有 Agent」，OpenHands 团队在 Claude Code 和 Codex 的夹击下选择了一条更难但更差异化的路。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ACP 生态的成熟&lt;/strong&gt;：Agent Canvas 支持三种 ACP Agent，每种都有完整的凭证管理和容器化部署方案。这标志着 ACP 协议已经从概念验证进入了生产可用阶段。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;前端即平台&lt;/strong&gt;：&lt;code&gt;@openhands/agent-canvas&lt;/code&gt; 的 npm 包同时提供 CLI 工具、独立应用和可嵌入组件库，这种「同源多分发」策略值得借鉴。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;写在最后&#34;&gt;写在最后&lt;/h2&gt;
&lt;p&gt;Agent Canvas 的转型让我看到了编码 Agent 赛道的一个新方向——&lt;strong&gt;不是做出更好的 Agent，而是做出更好的 Agent 管理平台&lt;/strong&gt;。当 Claude Code 和 Codex 已经足够好时，市场需要的不是另一个 Agent，而是一个能把它们整合到一起的「指挥中心」。&lt;/p&gt;
&lt;p&gt;Agent Canvas 的架构设计有几个值得参考的点：多后端切换、ACP 凭证管理、Automation 事件驱动——这些都是在构建 Agent 基础设施时迟早会遇到的问题。&lt;/p&gt;
&lt;p&gt;GitHub: &lt;a class=&#34;link&#34; href=&#34;https://github.com/OpenHands/OpenHands&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/OpenHands/OpenHands&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;延伸阅读：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260728-opentag-copilotkit-slack-agent/&#34; &gt;OpenTag 源码架构拆解：AG-UI 协议驱动的跨平台聊天 Agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260719-opencode-architecture/&#34; &gt;OpenCode 源码深度拆解：Effect TS 代数效应系统构建的智能编码 Agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260719-grok-build-open-source/&#34; &gt;xAI 开源了 Grok Build！万字拆解 40 万行 Rust 构建的 AI Coding Agent 内部架构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260719-pi-agent-architecture/&#34; &gt;Pi Agent 深度拆解：TypeScript 多包架构下的 Steering + Follow-up 双队列设计&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
</description>
        </item>
        
    </channel>
</rss>
