父 Agent 派生子 Agent,边界问题集中在五处:权限越界、嵌套失控、并发扇出、上下文泄漏、僵尸运行。OpenClaw 对应给出五类保护:按深度裁剪工具、maxSpawnDepth 限制嵌套、maxChildrenPerAgent 与 maxConcurrent 卡并发、只注入 AGENTS.md 隔离上下文、陈旧窗口加孤儿恢复兜底。
一、边界问题清单
| 边界问题 | 风险 | OpenClaw 的对应措施 |
|---|---|---|
| 权限越界 | 子 Agent 复用父权限,提权攻击 | 按深度裁剪工具,硬拒绝系统级工具 |
| 无限嵌套 | 递归派生成环,资源耗尽 | maxSpawnDepth 默认 1,最大 5 |
| 并发扇出 | 一个协调者派几十个子进程 | maxChildrenPerAgent 默认 5 |
| 上下文泄漏 | 子 Agent 克隆父的记忆与身份 | 只注入 AGENTS.md |
| 僵尸运行 | 重启后子 Agent 状态错乱 | 陈旧窗口 + 孤儿恢复 + 恢复墓碑 |
二、工具裁剪:按深度分层
子 Agent 先继承父的 profile 与工具策略,再叠加限制层。无论深度与角色,gateway、agentslist、sessionstatus、cron、message、sessions_send 一律被拒;message 在 spawn 时直接禁用,连 deny 名单都不走(来源:docs.openclaw.ai 子代理文档)。
| 深度 | 角色 | 会话工具 |
|---|---|---|
| 0 | 主 Agent | 全部 |
| 1(maxSpawnDepth=1) | 叶子 | 无,sessions_spawn 被拒 |
| 1(maxSpawnDepth≥2) | 协调者 | sessionsspawn、subagents、sessionslist、sessions_history |
| 2 | 叶子工作者 | 无,sessions_spawn 永远被拒 |
这一层裁剪防的是权限提升:子 Agent 拿不到父的全部能力,拿到的只是本次派发需要的子集。
三、参数与限制
{
agents: {
defaults: {
subagents: {
maxSpawnDepth: 2, // 默认 1,范围 1-5
maxChildrenPerAgent: 5, // 默认 5,范围 1-20
maxConcurrent: 8, // 全局并发上限
runTimeoutSeconds: 900,
announceTimeoutMs: 120000
}
}
}
}
投递积压到 25 条告警、50 条阻塞新的 spawn,宁可卡住也不修剪结果(来源:docs.openclaw.ai 子代理文档)。sessions_spawn 强制非阻塞,只认”受理”,不认”同步完成”。
四、上下文与通信边界
子 Agent 上下文只注入 AGENTS.md,不注入 SOUL.md、IDENTITY.md、USER.md、MEMORY.md、BOOTSTRAP.md。父的 persona、身份、用户文件只以回合级协作指令注入,子 Agent 克隆不走。通信只走 announce 链,sessions_send 保持禁用,避免子 Agent 私自给其他会话发消息。
五、停止与恢复
- /stop 中止请求者会话,并级联停止它派生的全部活跃子 Agent,嵌套子级一起停;
- 未结束的运行超过陈旧窗口(2 小时或 runTimeout 加宽限期取长者)不再计入活跃数;
- 网关重启后,重启中止的运行进入孤儿恢复流程,新鲜子会话收到合成 resume 消息;
- 同一子会话在快速窗口内反复被恢复,OpenClaw 打上恢复墓碑,停止自动恢复,用 openclaw doctor –fix 清理(来源:docs.openclaw.ai 子代理文档)。
这套组合保证:子 Agent 出问题能级联关停,重启后不留幽灵任务,反复失败的会话不会无限重试。
常见问题(FAQ)
Q1:子 Agent 默认能再派生子 Agent 吗?
不能。maxSpawnDepth 默认 1,设 2 才允许一层嵌套。
Q2:子 Agent 能用 message 工具发消息吗?
不能,spawn 时已禁用,通信只走 announce 链。
Q3:子 Agent 跑挂了会一直占资源吗?
不会,超过陈旧窗口即不再计入活跃,重启后走孤儿恢复或墓碑清理。