Use this skill before splitting work inside a single Worker. WorkerFlow is not TeamHarness delegation.
Decision
| Need | Path |
|---|---|
| Current Worker can do it directly | No subagent |
| Same Worker needs short parallel inspection | QwenPaw native subagent |
Same Worker needs visible fan-out to custom roles, workspaces, AGENTS.md, or skills |
Dynamic workflow via worker_agentflow workflow_run |
| Same Worker needs one manually controlled temporary subagent | create_temp_agent directly |
| Work needs a persistent team member or Leader acceptance | Do not use WorkerFlow; use the team workflow |
Native Subagent
Use QwenPaw native subagents for short internal parallelism. The current Worker still owns the final result.
Do not create a temporary agent when no custom prompt, workspace, or skill set is required.
Temporary QwenPaw Agent
Use worker_agentflow with workflow_run when a custom AgentSpec-style
template has already been placed in the default QwenPaw workspace:
<QWENPAW_WORKING_DIR>/workspaces/default/subagents/<role>/
AGENTS.md
PROFILE.md # optional
SOUL.md # optional
skills/
<skill-id>/
SKILL.md
Use list_subagents first when you need to discover the templates available in
the default workspace. Use create_temp_agent directly only when you need
manual control outside a dynamic workflow.
Subagent template rules:
AGENTS.mdshould tell the temporary agent to begin analysis immediately.AGENTS.mdshould forbid greetings, self-introductions, and capability summaries.AGENTS.mdshould define the subagent's focus area so the Worker can send the complete source input instead of manually slicing the input.- When multiple subagent results will be merged, each
AGENTS.mdshould require the same fixed output shape.
Dynamic workflow lifecycle:
- Call
workflow_runwith the explicit current DM/conversationroomId,title, sourceinput, optionalmerge.instruction, and eithersubagentsor DAGnodes. - Each subagent or node must name a default-workspace template with
subagentand a boundedtask. workflow_runstarts the Matrix card, createstmp-...subagents, creates the run-level shared directory, storesworkflow.json, and returnssubmitInstructionsfor nodes that are ready now.- Send each returned
submitPromptto itsagentIdusing the available QwenPaw agent communication tools. - When a subagent finishes, call
workflow_updatewith astepsrow whoseidmatches the node id,statusisdone, andsummarycontains the short result. - For DAG
nodes, inspect everyworkflow_updateresponse. If it returnsreadyInstructions, immediately send each returnedsubmitPromptto itsagentId. - Use
workflow_updateat meaningful phase changes: submitted, running, retrying, merging, cleanup, done, or failed. - Retry a timed-out subagent once when the task is still useful.
- Mark subagents that still fail as missing or failed in the merged result.
- Merge subagent results into the current Worker's own output.
- Delete every temporary agent with
delete_temp_agent. - Call
workflow_finishorworkflow_fail. - After merging, either keep the shared run directory as evidence or remove it
with
cleanup_shared.
Example workflow_run input:
{
"action": "workflow_run",
"roomId": "!current-dm:example.test",
"runId": "run-review-auth",
"title": "Review auth module",
"input": "Review auth.py for this task...",
"subagents": [
{
"id": "security",
"subagent": "security-reviewer",
"task": "Check authentication and authorization risks."
},
{
"id": "tests",
"subagent": "test-reviewer",
"task": "Check test coverage gaps."
}
],
"merge": {
"instruction": "Return one severity-ordered finding list."
}
}
DAG nodes example:
{
"action": "workflow_run",
"roomId": "!current-dm:example.test",
"runId": "pig-diagnosis-b001",
"title": "猪病诊断报告生成",
"input": "批次号 B001 的猪病诊断请求...",
"nodes": [
{
"id": "base_info",
"name": "基础信息梳理",
"role": "基础信息梳理",
"subagent": "base-info-agent",
"task": "处理基础信息。"
},
{
"id": "feed_cough",
"name": "采食与咳喘指标",
"role": "采食与咳喘指标",
"subagent": "feed-cough-agent",
"task": "分析采食及咳嗽波动。"
},
{
"id": "pathogen",
"name": "病原线索分析",
"role": "病原线索分析",
"subagent": "pathogen-agent",
"task": "分析病原及亚型。"
},
{
"id": "disease_analysis",
"name": "疾病综合研判",
"role": "疾病综合研判",
"subagent": "disease-analysis-agent",
"task": "综合基础信息、采食咳嗽和病原结果,判断猪病。",
"dependsOn": ["base_info", "feed_cough", "pathogen"]
},
{
"id": "medication",
"name": "用药与处置措施",
"role": "用药与处置措施",
"subagent": "medication-measures-agent",
"task": "基于猪病分析生成药物及措施方案。",
"dependsOn": ["disease_analysis"]
},
{
"id": "diagnosis_advice",
"name": "诊断建议",
"role": "诊断建议",
"subagent": "diagnosis-advice-agent",
"task": "基于猪病分析生成诊断建议。",
"dependsOn": ["disease_analysis"]
},
{
"id": "report",
"name": "最终报告汇总",
"role": "最终报告汇总",
"subagent": "report-agent",
"task": "汇总上游结果生成最终诊断报告。",
"dependsOn": ["medication", "diagnosis_advice"]
}
]
}
For DAG workflows, workflow_run creates every node's temporary agent. Only
dependency-free nodes appear in submitInstructions. Dependent nodes appear in
waitingInstructions. The current Worker is the scheduler: submit ready nodes,
wait for their replies, call workflow_update with done steps, then submit
any downstream readyInstructions returned by that update. WorkerFlow uses the
done step ids as the dependency-completion signal and appends upstream summaries
to newly unblocked submit prompts.
File sharing:
- Native QwenPaw subagents share the current Worker's workspace.
- Temporary QwenPaw agents created through
/api/agentshave separate workspaces. Do not point theirworkspaceDirat the default workspace. workflow_runandcreate_temp_agentexpose a run-level shared directory:<default-workspace>/shared/workerflow/<sharedRunId>/.- Put input files under
shared/inputs/. - Each subagent writes only under
shared/outputs/<agent-id>/. - The subagent workspace contains
.workerflow/shared.jsonand asharedsymlink for discovery, but prompts should still include the absoluteshared.path,shared.inputs, andshared.outputreturned by the tool. - Do not place the shared directory inside a temporary agent workspace, because
cleanupWorkspacemay delete that workspace.
Workflow visibility:
- The current Worker is the Matrix sender for WorkerFlow workflow cards.
- Temporary agents do not send Matrix status directly.
- Prefer
workflow_runfor visible multi-subagent work; it creates the first Matrixm.noticecard and records the returnedeventId. workflow_runandworkflow_startrequire an explicit current DM/conversationroomId. WorkerFlow does not fallback to Team Room or personal room.- Use
workflow_update,workflow_finish, andworkflow_failto edit the same card through Matrixm.replace. - The card state is also stored in
<default-workspace>/shared/workerflow/<run-id>/workflow.json. - Show phase-level changes only: spawning subagents, running, retrying, merging, cleanup, done, or failed.
- Do not expose full prompts, secrets, raw large inputs, or tool traces in the card. Use shared paths and short summaries.
Fan-out rules:
- Send the full source input to each subagent unless there is a clear token, privacy, or cost reason to narrow it.
- Let each subagent extract the subset relevant to its
AGENTS.md. - Request a fixed output shape for all subagents when the results need programmatic or low-friction merging.
- Keep a small ledger of created temporary agent ids so cleanup can run even when one subagent fails.
- Keep the shared run id in the same ledger when file sharing is used.
Rules:
- Temporary agents are implementation details of the current Worker.
- Always use
tmp-ids for temporary agents. - Do not store temporary agent ids as TeamHarness workers.
- Delete temporary agents after the bounded task completes or fails; treat this as a finally step.
- If the work must survive the current Worker run, use a durable team workflow instead.