type
Post
status
Published
date
Apr 29, 2026
slug
openclaw-upgrade-subagent-parameter-sanitization
summary
从 runtime="subagent" 混入 ACP 字段说起,复盘一次参数污染、调度层清洗与系统免疫化修复。
tags
OpenClaw
升级复盘
subagent
调度治理
category
技术分享
icon
password
关键词:OpenClaw / subagent / sessions_spawn / 参数清洗 / 调度治理
这次升级里,最容易被误判成“runtime 坏了”的问题,其实不是运行时本体故障,而是参数污染。
表面现象是:目标明明是 runtime="subagent",请求里却混入了 ACP 专属字段,比如 streamTo 和 resumeSessionId,最后在 sessions_spawn 真链路上爆炸。
01|问题不在 subagent 本身,而在运行时边界不够硬
这类故障最烦的地方,不是它难修,而是它特别容易把排查方向带偏。因为最终表现是“派发失败”,人第一反应会去怀疑 OpenClaw 版本、runtime 健康度,甚至怀疑整条分身链路坏了。
但拆开看,真正的问题是:ACP 和原生 subagent 在心智上被混成了一类请求,而两者允许的字段集合并不一样。
- subagent 允许的是原生子会话字段;
- ACP 才接受 streamTo、resumeSessionId 这类会话复用/流式绑定参数;
- 一旦上层没有先做运行时类型分流,脏字段就会一路带到底层。
02|根因分析:为什么一个小字段能把整条链路绊倒
根因不是某个字段“写错”这么简单,而是调度层没有建立“先判 runtime,再裁字段”的硬规则。
也就是说,请求构造阶段没有先判断:如果 runtime != ACP,那么所有 ACP 专属字段都应该被视为非法输入。
这让报错点暴露得太靠后:不是构造请求时就被消解,而是等到底层接口再失败。结果就是排查成本被放大,运行时看起来像背锅对象。
03|解决思路:不要靠记忆避坑,要把系统做成免疫体
真正有效的修法,不是“提醒以后别带错参数”,而是把错误条件本身消掉。
这背后的设计思路很重要:不要让操作者靠记忆规避坑,而要在调度层前置完成字段清洗。这样即使上层再次混入脏参数,最终发出的 subagent 请求仍然是干净的。
04|这次修复真正升级的,不是某个 bug,而是调度可靠性
从工程视角看,这件事的价值不在“某次派发修好了”,而在“以后同类派发天然更稳”。
一次临时修补,只能解决当前错误;一次调度层免疫,解决的是错误生成的条件。
05|验收标准应该怎么定
- 最小合法 subagent 参数可以稳定派发;
- 即使上层误带 ACP 字段,最终请求也会被清洗成合法形态;
- 报错点从运行时失败前移到构造阶段消解。
这才叫真正完成,而不是“这次恰好没炸”。
结论很简单:这次升级后,OpenClaw 的任务派发不只是“又能用了”,而是从容易被脏参数绊倒,进化成了更有免疫力的调度链。
- 作者:Leisurelywolf
- 链接:https://blog.869669.xyz//technology/openclaw-upgrade-subagent-parameter-sanitization
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章

