Task Brain把长链路拆成可观测子任务,但若父子关系写不清、取消只打头不打尾,远程 Mac 上最容易留下孤儿进程与串台的身份文件。下面用编排视角把初始化、flows 占位命令、目录隔离与失败取消串成一套可签核清单。📋🧠

目录:初始化 · flows 运维命令示例占位 · 目录隔离 · 失败取消 · FAQ

适合已在节点上跑通网关的读者;多角色并发预算可对照《CrewAI 多 Agent 网关》,结构化输出契约见《Instructor 与 JSON Schema》帮助中心博客索引均为免登录入口;选型用购买页定价页

痛点速记:列表缺 parent 过滤,排障靠猜。多项目共用默认可写区,工具缓存互相污染。取消只杀编排入口,子解释器或侧车推理仍占统一内存。

策略 收益 代价
显式父子 ID 列表与审计可折叠展示,取消可广播 编排器需一次写入两处字段
进程组包装 信号沿会话树传递,降孤儿概率 入口脚本与 launchd 单元多几步
项目级状态目录 身份与 scratch 不串租户 磁盘配额与清理策略要单独设

初始化

按序勾选:固定 Node 与 OpenClaw 版本,跑通 openclaw doctor --json为每个仓库导出 OPENCLAW_PROJECT_SLUG 并写入 flows 元数据。把 Task Brain 数据目录指到项目子树而非用户根。在编排器创建父任务时同步下发 parent_task_id 给子步骤。 worker 用进程组或 setsid 包装,保证取消能传到子进程。健康探针在任务结束后断言端口与状态机回到 idle。

  • 令牌文件权限六百,日志单独卷或分区,避免与模型权重抢 IO。
  • 同一 trace 键贯通网关与侧车,便于按请求联动中止。

flows 运维命令示例占位

以下命令名为占位,请用你安装的实际子命令与端口替换;重点是始终携带项目键并支持 JSON 输出便于流水线解析。

# 列出活跃 flows(按项目过滤) openclaw flows list --project "${OPENCLAW_PROJECT_SLUG}" --state running --json # 列出某父任务下的子任务 openclaw task list --project "${OPENCLAW_PROJECT_SLUG}" --parent "${PARENT_TASK_ID}" --json # 取消父任务并请求级联子任务 openclaw task cancel --project "${OPENCLAW_PROJECT_SLUG}" --id "${PARENT_TASK_ID}" --cascade children # 仅取消单个子任务(热修场景) openclaw task cancel --project "${OPENCLAW_PROJECT_SLUG}" --id "${CHILD_TASK_ID}" --no-cascade

目录隔离

为每个 OPENCLAW_PROJECT_SLUG 分配独立OPENCLAW_STATE_DIRAGENT_IDENTITY_DIRSCRATCH_ROOT,工具下载与中间件缓存只写该 SCRATCH_ROOT;公共只读依赖可留在镜像层或只读挂载。与《IDE 桥接沙箱》同样思路:代码只读、执行可写,差异统计才可信。

失败取消

失败路径上先写原因码再动刀:编排级对父任务标记 failed 并触发子任务取消;运行时级对进程组发 TERM,宽限后 KILL;侧车级用同一 trace_id 调用上游中止或关闭流。避免只删队列记录不回收进程;夜间 soak 用专用节点,合盖笔记本易放大尾超时。

  • 取消与重试共用退避,防止风暴占满网关队列。
  • launchd 建议配置超时与 ThrottleInterval,防止崩溃重启打爆 CPU。

可引用签核条:

  • 父子字段在创建子任务时同步写入,禁止事后补链。
  • 取消后三十秒内零监听残留、进程表无同名 worker。
  • 每项目 scratch 按周轮转并压缩,单卷占用有硬上限。

FAQ

子任务已跑完还要写 parent 吗?要;否则历史列表无法折叠,事故复盘也难对齐。

能共用全局默认 flows 吗?仅适合单租户 demo;多项目务必复制 flows 定义并改状态目录,否则身份文件会互相覆盖。

取消后 GPU 仍忙?检查侧车是否脱离 Task Brain 生命周期;必要时在网关层对同一别名加并发上限并联动硬中止。🚀

公开页:定价购买帮助中心博客索引