把 OpenClaw 当作个人 AI 助手使用一段时间后,会遇到几个让单进程模型力不从心的场景:
- 远程执行:你想让 AI 帮你在家里的 Linux 服务器上跑一段脚本,但 OpenClaw Gateway 运行在 Mac 上——AI 怎么触达那台服务器的 Shell?
- 手机上的交互 UI:你想在手机上看到 AI 生成的实时仪表盘,并且能点击按钮触发下一步操作——AI 怎么向移动端 WebView 推送 UI,WebView 里的点击又怎么反馈给 AI?
- 并行任务:你让 AI 帮你整理 1000 封邮件——用一个 Agent 串行处理太慢了,能不能派出多个 AI 同时干?
这三个场景分别对应 OpenClaw 的三个核心扩展机制:Node Host(节点主机)、Canvas + A2UI、子 Agent(Sub-agent)。
Gateway 负责对话管理和 Agent 执行,但 (执行 Shell 命令)这类工具需要在目标机器上运行——可能是远程服务器、NAS、Raspberry Pi,或者同一台 Mac 上受限环境的另一个进程。
Node 是解决这个问题的抽象:一个独立进程,连接到 Gateway,响应执行请求。Node 通过标准的 (WebSocket)注册自己:
数据流:
Node 不是无限制的 Shell 执行器。 实现了一个三级安全模型:
- :拒绝所有命令执行
- (默认):只允许 白名单中的命令
- :允许所有命令(高信任环境下使用)
白名单文件用哈希防止竞态修改——读取和更新都需要传入 ,若文件已被其他进程改动,返回 。这防止了 TOCTOU 攻击。
还有一个特殊路径:在 macOS 上, 为 true 时,执行请求会优先通过 macOS 应用的 Exec Host(Unix socket),而不是直接 。这是因为 macOS 沙盒限制了某些路径的访问权限,通过应用层代理绕过这个限制。
命令的输出被硬性截断:
超出上限的内容被丢弃,结果中 。这保证了大量输出(如日志文件)不会撑爆 Agent 的上下文窗口。
AI 擅长生成代码,能不能生成 HTML 仪表盘、然后在用户手机上直接显示,并支持交互?
Canvas 是 Gateway 内置的一个轻量 HTTP 服务器,挂载在 ,专门伺服 AI 生成的 HTML/JS/CSS 文件:
Gateway 启动时, 会:
- 在 创建默认的 (如果不存在)
- 用 监听目录变化
- 文件变化时通过 WebSocket()推送 给所有已连接的客户端
被注入的实时重载脚本:
这意味着:AI 重写 → chokidar 检测到文件变化 → WebSocket 广播 → 用户手机上的 WebView 自动刷新。
文件服务有安全约束。 用 + 验证每个请求的文件路径都在 Canvas 根目录内——这与上一篇 Plugin SDK 里的 是同一类防护,都是防止路径遍历攻击。
Canvas 里的 HTML 页面可以显示数据,但它本身没有办法与 OpenClaw 通信——它是运行在 iOS/Android WebView 里的孤立页面。
A2UI(Agent-to-UI) 解决了这个方向问题:提供一套跨平台的 JavaScript 桥接 API,让 WebView 里的代码可以触发 OpenClaw Agent 的动作。
A2UI 包()通过 伺服,并在每个 Canvas 页面的 HTML 里自动注入一段引导脚本:
Canvas 页面里的代码可以这样触发动作:
这条消息经由:
Agent 处理完动作后,可以通过 通知 Canvas 页面操作已完成。这构成了一个完整的请求-响应循环。
是 Agent Client Protocol 的实现,OpenClaw 通过它暴露一个标准接口,让任何兼容 ACP 的工具都能与 OpenClaw 的 Agent 会话交互。
ACP 会话有两种模式:
这让 CI/CD 系统、IDE 插件、或其他 AI 工具可以把 OpenClaw 当作一个可编程的 AI 后端调用,而不需要理解 OpenClaw 内部的协议细节。
一个复杂任务(整理 1000 封邮件,分析 50 个代码文件)用单个 Agent 串行处理太慢。子 Agent 机制让 Agent 可以派生(spawn)独立的子 Agent 并行执行子任务。
的核心字段:
"不要轮询"注意事项:子 Agent 完成后会主动宣告(announce)结果,而不是等父 Agent 来查询。父 Agent 在派生子任务后应该继续其他工作,而不是在循环里等待子任务完成。子任务的结果会自动以用户消息的形式重新注入父 Agent 的上下文。
为了防止无限递归(子 Agent 再派生子 Agent 再派生……),系统维护一个深度计数器(),并且有默认上限:
超过这个深度的派生请求会被拒绝,返回 状态。
参数让子 Agent 的结果直接投递到当前聊天线程(而不是等父 Agent 转发):
这个功能依赖 生命周期钩子——只有实现了该钩子的通道插件(能绑定线程的聊天平台)才能使用。
三者共同扩展了”个人 AI 助手”的能力边界:不只是对话,而是可编程的执行引擎 + 交互式 UI 宿主 + 多 Agent 协作系统。
下一篇也是系列的最后一篇,我们将进入 OpenClaw 的安全模型与沙盒——系统性梳理 Gateway 认证、工具策略、沙盒隔离、API Key 保护、以及整个系统的信任边界设计。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/231960.html