WorkerFlow 是一个面向 QwenPaw 支持的 Worker 的内部工作流技能,用于在单个 Worker 内部拆分工作之前做出路径选择。它明确区别于 TeamHarness 委派:WorkerFlow 处理的是当前 Worker 内部的并行与临时协作,而不是持久团队成员或 Leader 验收。
用途与决策路径 当 Worker 需要决定如何完成工作时,可按以下路径选择:当前 Worker 能直接完成,则不使用子代理;同一 Worker 需要短时并行检查,使用 QwenPaw 原生子代理;同一 Worker 需要向自定义角色、工作区、AGENTS.md 或技能做可见扇出,使用 worker_agentflow 的 workflow_run 动态工作流;同一 Worker 需要一个手动控制的临时子代理,直接使用 create_temp_agent;如果工作需要持久团队成员或 Leader 验收,则不应使用 WorkerFlow,而应使用团队工作流。
原生子代理 QwenPaw 原生子代理适用于短时内部并行,当前 Worker 仍然拥有最终结果。当不需要自定义提示、工作区或技能集时,不应创建临时代理。
临时 QwenPaw 代理 当自定义 AgentSpec 风格模板已放置在默认 QwenPaw 工作区时,使用 worker_agentflow 配合 workflow_run。模板路径为:<QWENPAW_WORKING_DIR>/workspaces/default/subagents/<role>/,其中包含 AGENTS.md、可选的 PROFILE.md、可选的 SOUL.md,以及 skills/<skill-id>/SKILL.md。需要发现默认工作区中可用模板时,先使用 list_subagents;只有在动态工作流之外需要手动控制时,才直接使用 create_temp_agent。
子代理模板规则 AGENTS.md 应告诉临时代理立即开始分析;应禁止问候、自我介绍和能力总结;应定义子代理的聚焦领域,使 Worker 可以发送完整源输入,而不必手动切分输入;当多个子代理结果将被合并时,每个 AGENTS.md 应要求相同的固定输出形状。
动态工作流生命周期 调用 workflow_run 时需提供显式的当前 DM/会话 roomId、title、源输入、可选的 merge.instruction,以及 subagents 或 DAG 节点。每个子代理或节点必须指定一个默认工作区模板(subagent)和一个有界任务。workflow_run 会启动 Matrix 卡片、创建 tmp-... 子代理、创建运行级共享目录、存储 workflow.json,并为当前就绪的节点返回 submitInstructions。随后使用可用的 QwenPaw 代理通信工具,将每个返回的 submitPrompt 发送到其 agentId。子代理完成后,调用 workflow_update,传入 steps 行,其 id 与节点 id 匹配、status 为 done、summary 包含简短结果。对于 DAG 节点,检查每个 workflow_update 响应;如果返回 readyInstructions,立即将每个返回的 submitPrompt 发送到其 agentId。在 meaningful 阶段变化时使用 workflow_update:submitted、running、retrying、merging、cleanup、done 或 failed。超时的子代理在任务仍然有用时重试一次;仍失败的子代理在合并结果中标记为 missing 或 failed。将子代理结果合并到当前 Worker 自己的输出中。使用 delete_temp_agent 删除每个临时代理。调用 workflow_finish 或 workflow_fail。合并后,可以保留共享运行目录作为证据,或使用 cleanup_shared 删除。
文件共享 原生 QwenPaw 子代理共享当前 Worker 的工作区。通过 /api/agents 创建的临时 QwenPaw 代理有独立工作区,不要将其 workspaceDir 指向默认工作区。workflow_run 和 create_temp_agent 暴露运行级共享目录:<default-workspace>/shared/workerflow/<sharedRunId>/。输入文件放在 shared/inputs/ 下;每个子代理只写入 shared/outputs/<agent-id>/ 下。子代理工作区包含 .workerflow/shared.json 和用于发现的 shared 符号链接,但提示中仍应包含工具返回的绝对 shared.path、shared.inputs 和 shared.output。不要将共享目录放在临时代理工作区内,因为 cleanupWorkspace 可能删除该工作区。
工作流可见性 当前 Worker 是 WorkerFlow 工作流卡片的 Matrix 发送者;临时代理不直接发送 Matrix 状态。对于可见的多子代理工作,优先使用 workflow_run,它会创建第一个 Matrix m.notice 卡片并记录返回的 eventId。workflow_run 和 workflow_start 需要显式的当前 DM/会话 roomId,WorkerFlow 不会回退到 Team Room 或个人房间。使用 workflow_update、workflow_finish 和 workflow_fail 通过 Matrix m.replace 编辑同一张卡片。卡片状态也存储在 <default-workspace>/shared/workerflow/<run-id>/workflow.json。只显示阶段级变化:spawning subagents、running、retrying、merging、cleanup、done 或 failed。不要在卡片中暴露完整提示、机密、原始大输入或工具轨迹;使用共享路径和简短摘要。
扇出规则 除非有明确的 token、隐私或成本原因需要收窄,否则向每个子代理发送完整源输入;让每个子代理根据其 AGENTS.md 提取相关子集;当结果需要程序化或低摩擦合并时,为所有子代理请求固定输出形状;保留已创建临时代理 id 的小型台账,以便即使某个子代理失败也能运行清理;使用文件共享时,将共享运行 id 保留在同一台账中。
规则 临时代理是当前 Worker 的实现细节;始终为临时代理使用 tmp- id;不要将临时代理 id 存储为 TeamHarness worker;在有界任务完成或失败后删除临时代理,将其视为 finally 步骤;如果工作必须存活于当前 Worker 运行之外,应使用持久团队工作流。