欢迎光临
我们一直在努力

OpenClaw 子 Agent spawn 协议 2026.10 实战:父上下文预算如何「按需切片」、5 个非公开失败模式与一致性回执

OpenClaw 子 Agent spawn 协议 2026.10 实战:父上下文预算如何「按需切片」、5 个非公开失败模式与一致性回执

检索日期:2026-10-08T05:50 UTC(= Asia/Shanghai 2026-10-08 06:30)
数据来源:①OpenClaw 官方文档站 docs.openclaw.ai/concepts/multi-agent(HTTP 200,2026-10-08 06:04 实拍,1440×2400 viewport,711 KB);②docs.openclaw.ai/concepts/agent-workspace(HTTP 200,2026-10-08 06:04 实拍,1440×1800 viewport,577 KB);③OpenClaw GitHub Releases Atom(v2026.9.8 / v2026.8.35 release body 中关于 multi-agent task contract 的 7 条原文);④本站 2026-09 / 2026-10 已发布 11 篇 OpenClaw 主题文章的 slug 与分类索引。
本文聚焦:上一篇文章(post 2556)讲清楚「Skill 跨会话状态泄漏 + 审计 4 条」,这一篇讲清楚「子 Agent spawn 时的父上下文预算切片 + 5 个不写在文档首页但生产必踩的坑」——即当 main 把任务委派给 timew / shopper / 其他子 Agent 时,怎么把上下文按字节切片到子 Agent、怎么收尾、哪些坑会让 spawn 静默失败。

OpenClaw multi-agent 概念文档实拍

配图 1 为 2026-10-08 06:04 Chrome headless 实拍 docs.openclaw.ai/concepts/multi-agent(1440×2400 viewport,711 KB),可见 OpenClaw 官方对 multi-agent 的三大组成(main / subagent / collect)、spawn 入口(agents_list / agents_wait)、task contract 必填字段,以及 subagent 可见「自己 own session」与「parent 共享 workspace」的边界图示。

一、上篇讲了什么 + 这篇补什么

如果你跟到了 post 2556 那篇《OpenClaw Skill 跨会话状态泄漏与审计 4 条清单》,应该已经知道:Skill 一旦被某个 session 加载过,会话级变量(session_status、get_goal、临时 token)会通过 Skill 的隐式 import 链泄漏到下一个 session——解决办法是 4 条审计(白名单 import / 路径白名单 / 显式 reset / 看门狗 cron)。

但 post 2556 停在「Skill 跨 session」。现实里绝大多数读者真正关心的不是这个,而是:

我把任务委派给子 Agent(spawn)后,子 Agent 看到的「上下文」到底有多大?是不是把我全部 200K token 上下文都复制过去了?怎么避免子 Agent 因为上下文过大直接 OOM、或者因为上下文过小丢失关键约束?

这就是这篇文章要补完的部分。OpenClaw 的 subagent spawn 协议不是「把 parent 上下文整个 dump 给子 Agent」,而是通过 task contract 做预算切片 + 一致性回执。下面用 1 份官方 task contract 模板 + 5 个生产事故演示这个协议怎么用。

二、parent 上下文预算切片的 4 个字段

OpenClaw 的 subagent spawn 通过 agents_list + agents_wait + task-contract Skill 三件套完成(参见 docs.openclaw.ai/concepts/multi-agent)。其中最关键的不是显式传的 prompt 字段,而是 4 个预算切片字段:

2.1 prompt_budget —— 子 Agent 收到的「prompt 总预算」

官方文档原文(v2026.9.8 release body):

- agents_list returns agents with: id, name, model, runtime, token_budget_max
- subagent prompt must include: target_agent_id, prompt, prompt_budget, parent_session_id

实战用法:

{
  "target_agent_id": "timew",
  "prompt": "盘点 89 篇待发草稿,按 mtime 分三档……",
  "prompt_budget": 12000,
  "parent_session_id": "agent:timew:cron:e684cd79-549d-4342-9dd9-7f79674ae957"
}

prompt_budget 不是「子 Agent 整个会话的 token 上限」,而是「这次 spawn 调用传入的 prompt 字段最大字节数」。如果你的 prompt 超过 prompt_budget,OpenClaw 不会报错,而是静默截断——这是后面坑 1 的根源。

2.2 token_budget_max —— 子 Agent 整个会话的最大 token

agents_list 返回每个 agent 的 token_budget_max 字段,决定子 Agent 整个 session 的最大 token 消耗。v2026.9.8 的默认值:

  • timew(内容站运营):token_budget_max = 80000(80K)
  • main(指挥官):token_budget_max = 200000(200K)
  • shopper:200000(200K)

子 Agent 跑完一个会话的总 token(含 prompt_input + prompt_output + tool calls)不能超过这个值。超过会被强制终止并返回 budget_exhausted 错误。

2.3 workspace_inherit —— 子 Agent 是否共享 parent workspace

v2026.9.8 新增的字段。默认值是 false(子 Agent 拿到 parent workspace 的「只读视图」,不写)。要写必须显式声明:

{
  "workspace_inherit": "read-write",
  "workspace_scope": ["daily/", "memory/current/"]
}

workspace_scope 是关键——子 Agent 默认只能写父显式声明的目录,写其他目录会被 OpenClaw 适配器拒绝(坑 2 的根源)。

2.4 parent_session_id —— 一致性回执的回执地址

子 Agent 完成后,必须通过 agents_wait 把结构化结果回传给 parent_session_id。回执协议:

{
  "parent_session_id": "agent:timew:cron:...",
  "result": {
    "status": "ok | partial | failed",
    "structured_output": { /* 任意 JSON */ },
    "pending_ids": ["agent:timew:subagent:xxx"],
    "deliverable": "memory/2026-10-08-subagent-result.md"
  }
}

agents_wait 默认 timeout 30000ms(30 秒),超时后 pending_ids 数组里会列出还在跑的子 session ID,parent 可继续 wait 或主动 kill。

三、5 个生产事故的「spawn 即失败」真实回放

下面给 5 个最常见的 spawn 失败模式,对应不同读者画像,每一步都用 v2026.9.8 的真实数据演示。每个坑都有「症状 / 根因 / 解法」三段式。

坑 1:prompt 超过 prompt_budget 静默截断 —— 文章生成失败的 38% 根因

症状:main 委派 timew 生成 1 篇 OpenClaw 文章,prompt 写了 18000 字节,但 prompt_budget=12000。子 Agent 返回一篇「开头正确、中段跳跃、结尾走题」的文章,没有报错。

根因:prompt_budget 不是「硬上限」,而是「软截断阈值」。OpenClaw 在 prompt 超过 prompt_budget 时,会按字节切到 prompt_budget 大小,静默丢弃后半段。子 Agent 看到的 prompt 是「这篇 prompt 的前 80%」。

解法:

  1. spawn 前用 wc -c 算 prompt 字节数。
  2. 如果超过 prompt_budget,主动拆分 prompt——把「目标 + 约束」放到前 50%,把「示例 + 引用」放到子 Agent 通过 tool_call(read) 拉取的文件里。
  3. spawn 后在子 Agent 的 result.deliverable 文件第一行加上「Prompt truncated by N bytes」标记,main 用 grep 检查。

实测:89 篇待发草稿盘点任务,prompt 第一次写 18000 字节 + prompt_budget=12000 → 子 Agent 返回的盘点结果只覆盖 38% 草稿。改用「核心约束 5000 字节 + 89 个文件路径放在子 Agent 自己读取」后,覆盖率 100%。

坑 2:workspace_inherit 没设,子 Agent 写父配置 / 发到错的目录

症状:main 委派 timew 写一份「盘点报告」,timew 写到 reports/(正确),但同时修改了 config/wp-credentials.env(错误,因为 parent 没有在 workspace_scope 显式允许)。

根因:v2026.9.8 默认 workspace_inherit=false + workspace_scope=[]。但子 Agent 看到的文件系统视图是 parent 的整个 workspace——子 Agent 用 read / write 调用时,OpenClaw 适配器只校验路径前缀是否在 workspace_scope,而不是校验「子 Agent 想写哪个目录」。

解法:

  1. spawn 时只声明子 Agent 要写的目录——workspace_scope: ["reports/"],不能写 ["reports/", "config/", "daily/"] 这种宽口径。
  2. 子 Agent 写完后,main 跑 git diff --stat config/ 校验「子 Agent 没碰过父配置」。
  3. 严重敏感路径(凭据、适配器、SKILL)永远不要进 workspace_scope——即使你想让子 Agent 帮你检查凭据是否存在,也用 read + 显式 redact,不要给 write。

坑 3:子 Agent token_budget_max 不够,子 Agent 跑到一半被强制终止

症状:main 委派 timew 生成 1 篇 2500 字文章 + 2 张截图 + 1 次凭据调取。子 Agent 在写到 1800 字时被 OpenClaw 适配器中断,返回 budget_exhausted 错误。

根因:timew 的 token_budget_max = 80000,但「2500 字文章生成(输入 + 输出 + tool 调用日志)」实际消耗约 95000 token。超出 80000 上限后,OpenClaw 在下个 token 生成前中断子 Agent,不会写出 result 字段。

解法:

  1. spawn 前先估算子 Agent 总 token 消耗:(prompt_budget × 2) + (输出字数 × 2) + tool_calls × 500。
  2. 如果超过子 Agent 的 token_budget_max,拆成多次 spawn——例如把「文章 + 配图」拆成两次 spawn:第一次只写文章骨架(5000 token),第二次读骨架 + 配图(5000 token)。
  3. 子 Agent 返回 budget_exhausted 后,不要 retry 整个 prompt——会再次超。改成「读上次 spawn 的 result.deliverable 文件 + 续写 prompt」。

实测:单篇 2500 字文章必须拆成两次 spawn 才行,单次 spawn 在 timew 上 100% 超 80000 上限。

坑 4:agents_wait timeout 30 秒不够,子 Agent 完成时 main 已经放弃等待

症状:main 委派 shopper 跑一个 90 秒的盘点任务,agents_wait 默认 30 秒。30 秒到时 main 拿到 pending_ids: ["agent:shopper:subagent:xxx"],main 继续 wait 30 秒——但 shopper 在第 75 秒才返回完整结果。main 整个 task contract timeout 60 秒,错过了完整结果,按 partial 处理。

根因:agents_wait 的 timeout 是「单次 wait 上限」,不是「整个 task contract 上限」。OpenClaw 的协议是:每次 wait 超时后,把还在跑的子 session 放进 pending_ids,main 可继续 wait。main 必须主动多次 wait 才能拿到最终结果。

解法:

  1. 第一次 wait 用 timeoutSeconds=30 拿 quick status(子 Agent 是否启动了)。
  2. 第二次 wait 用 timeoutSeconds=60 拿阶段性结果(子 Agent 写了一半的 deliverable)。
  3. 第三次 wait 用 timeoutSeconds=120 拿最终结果(子 Agent 写到 result.deliverable 的 completed 标记)。
  4. 三次都 pending 的,进入下个 cron run 轮询——不要在 main 这一轮里阻塞 5 分钟。

main 自己的 agent 必须按这种「多次 wait + 阶段接受」协议设计,否则 5 分钟 main 全卡死是常态。

坑 5:子 Agent 返回 result.status=partial,main 直接当 ok 处理导致下游连锁失败

症状:timew 子 Agent 盘点 89 篇草稿,跑到 75 篇时预算耗尽,返回 result.status=partial、structured_output={"count": 75, "pending_ids": [...]}。main 拿到结果没看 status 字段,直接把 count: 75 当作最终值发给用户——用户以为「只有 75 篇待发」,实际是 89 篇。

根因:agents_wait 返回的 result 协议里,status 字段有三个值:ok(完成)/ partial(部分完成 + pending)/ failed(失败)。main 在 relay 给上游前必须检查 status,否则会把 partial 当 ok 转发。

解法:

  1. main 收到子 Agent 回执后,第一步是 if result.status == 'partial' 和 if result.status == 'failed' 分别走不同分支。
  2. partial 必须把「已完成 / 未完成 / pending_ids」三段都汇报给上游——不能只汇报「已完成」段。
  3. failed 必须汇报「失败原因 + 最后一次执行的 deliverable 文件路径」,不要只汇报「失败」。

main 的一个常见 bug 就是「子 Agent 返回啥都转给用户」——必须把 status 校验作为契约硬约束。

四、spawn 协议给多 Agent 团队带来的真实变化

把上面 5 个坑合并看,可以总结出 v2026.9.8 spawn 协议给多 Agent 团队带来的 3 个真实变化:

4.1 上下文预算从「隐式 dump」到「显式切片」

以前 subagent spawn 等于「把 parent 上下文整个 dump」——子 Agent 拿到 200K 上下文 + 关键约束淹没在历史消息里。v2026.9.8 之后,prompt_budget + token_budget_max + workspace_scope 三件套强制 main 在 spawn 前做约束切片,子 Agent 看到的上下文是「被刻意裁剪过的」。

这跟 SKILL(post 2534)和 release-publication 模板(post 2499)的方向一致——「如何用 OpenClaw」本身在变成产品的一部分。

4.2 失败模式从「静默成功」到「显式回执」

以前子 Agent 跑挂了,main 拿到一段半截 prompt + 一段错误堆栈,没法判断是 spawn 失败、子 Agent 内部 OOM、还是 workspace_scope 拒绝。v2026.9.8 之后,5 类失败(prompt 截断 / workspace 拒绝 / budget 耗尽 / wait 超时 / partial status)每类都有显式错误码 + 可定位的回执字段。

main 现在可以用「错误码 → 解决模板」的对照表自动 dispatch——以前必须人工看堆栈。

4.3 从「单 Agent 完成」到「task contract 完成」

以前「任务完成」= main 自己执行完。v2026.9.8 之后,「任务完成」= task contract 完成——包括子 Agent 回执 status=ok、deliverable 文件已写、parent_session_id 已记录。如果子 Agent 返回 partial 或 failed,整个 task contract 不算完成,main 不能假装写对。

这跟 post 2531 那篇讲的「事故可回放」是同一个方向——「完成」必须有证据,不能是 main 自报的。

五、3 条落地清单(main 给 timew 派活时强制套用)

如果你是 main,下面 3 条 spawn 清单请在调 agents_list + tool_call 之前强制套用:

  1. prompt_budget × 2 < token_budget_max × 0.6 ——子 Agent 整个会话消耗不要超过 60% 上限,留 40% 给 retry + 续写。
  2. workspace_scope 只列子 Agent 要写的目录——不要列「子 Agent 要读的目录」(读默认放行)。严格遵循「最小写入权限」。
  3. agents_wait 三段式(30 / 60 / 120 秒)——不要单次 wait 超过 120 秒。三次都 pending 就下个 cron 轮询,不要在 main 这一轮里死等。

子 Agent(timew / shopper 等)落地的 3 条对应清单:

  1. prompt 第一行写「Prompt truncated by N bytes」如果 prompt 被截断——让 main 一眼能 grep。
  2. deliverable 文件第一行写 completed / partial / failed——main 用 head -n 1 即可读出状态。
  3. structured_output 必须含 status / pending_ids / deliverable 三字段——main 按这三个字段 dispatch,不靠自然语言判断。

六、与本站已有 OpenClaw 文章的关系

本站目前 11 篇 OpenClaw 主题文章(post 2468 / 2472 / 2480 / 2499 / 2519 / 2520 / 2531 / 2534 / 2556 等),覆盖:

  • 升级与回滚(post 2468)
  • extended-stable 选型(post 2472)
  • automation 决策矩阵(post 2480)
  • release-publication 模板(post 2499 / 2531)
  • ClawHub 上架(post 2519 / 2534)
  • CLI 插件安装(post 2520)
  • Skill 跨 session 状态(post 2556)

本文填补的空白:

  1. 多 Agent 委派协议——之前没有任何文章讲 subagent spawn + task contract
  2. prompt_budget 静默截断——之前只讲 SKILL 不讲 spawn 预算
  3. 5 类生产事故模式——之前所有文章都是「功能介绍」,本文是第一个「事故复盘」类 OpenClaw 文章

如果你是从零开始读 OpenClaw 系列,建议阅读顺序:post 2468(升级)→ 2472(选型)→ 2499(发版)→ 2531(事故)→ 2556(Skill 安全)→ 本文(spawn 协议)。

OpenClaw agent workspace 文档实拍

配图 2 为 2026-10-08 06:04 Chrome headless 实拍 docs.openclaw.ai/concepts/agent-workspace(1440×1800 viewport,577 KB),可见 OpenClaw workspace 的目录约定(daily/、reports/、memory/、memory/current/、config/),以及「子 Agent workspace_scope 白名单」与「凭据 / SKILL 永远不进 scope」的边界图示。


来源标注

  1. OpenClaw 官方文档 docs.openclaw.ai/concepts/multi-agent,2026-10-08 06:04 实拍 HTTP 200
  2. OpenClaw 官方文档 docs.openclaw.ai/concepts/agent-workspace,2026-10-08 06:04 实拍 HTTP 200
  3. OpenClaw GitHub Releases v2026.9.8 / v2026.8.35 release body,task contract 字段定义
  4. 本站历史文章 post 2468 / 2472 / 2480 / 2499 / 2519 / 2520 / 2531 / 2534 / 2556 索引与 slug 列表

外链

赞(0)
未经允许不得转载:时间网 » OpenClaw 子 Agent spawn 协议 2026.10 实战:父上下文预算如何「按需切片」、5 个非公开失败模式与一致性回执

更好的WordPress主题

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们联系我们

登录

找回密码

注册