dispatching-parallel-agents
Split two or more truly independent problems across parallel agents or workers, one focused brief each, then integrate and verify the combined result.
- Use it when
- Several failures, files or subsystems have separate causes and no shared state, and the user wants them worked concurrently. Not for related failures, exploration, diagnosis of one unknown problem, or tasks that edit the same files.
- What kind it is
- A written method: it lays out how the work is done and what to check along the way.
- Size
- 952 words. The whole text loads when the skill fires; only the 61-word description is always loaded.
- Starts with
- Ask for the job it describes.
How it is organised
What’s inside
The skill’s top-level sections, in order. The bar is each section’s share of the 952 words, so you can see where the weight sits before reading.
- 1Decide first192 words
- 2The procedure322 words
- 3Example brief146 words
- 4Worked case86 words
- 5Boundary checklist before dispatching57 words
- 6Risks50 words
The skill itself
Read it before you install it
dispatching-parallel-agents/SKILL.md · 952 wordsDownloadSkill on GitHub ↗---
name: dispatching-parallel-agents
description: Split two or more truly independent problems across parallel agents or workers, one focused brief each, then integrate and verify the combined result. Use when several failures, files or subsystems have separate causes and no shared state, and the user wants them worked concurrently. Not for related failures, exploration, diagnosis of one unknown problem, or tasks that edit the same files.
license: MIT
---
# Dispatching parallel agents
Several unrelated problems (different test files, different subsystems, different bugs) wait in line if one worker takes them in turn. If they really are independent, give each its own worker and run them at the same time. Each worker gets a brief you wrote for it, never your session's history, so it stays focused and you keep your own context for coordinating.
**The principle:** one worker per independent problem, and parallel only when nothing is shared.
## Decide first
Go parallel only if **all** of these hold:
- The problems have **separate causes**. Fixing one would not fix another.
- The tasks **do not edit the same files**, generated artifacts, shared config, lockfiles, schemas, APIs or test fixtures.
- Each task can be understood and tested **without another worker's uncommitted state**.
- You know how the results will be combined and how a conflict would be resolved.
If any of these is uncertain, do not parallelize. Use one worker, or do it yourself in sequence.
**Do not use this for:**
- **Related failures**, where one fix might clear several. Investigate them together first.
- **Exploration or diagnosis** when you do not yet know what is broken.
- **Needing the whole system in your head** to understand the problem.
- **Shared resources**: the same files, ports, databases or hardware.
- **Content relay**: fetching raw material (file contents, web pages, API responses) to bring back. A worker's reply is a compressed summary and the raw content is lost. Fetch it yourself.
- **Review, planning, a second opinion or judgment calls.** Those stay with you.
A worker should not start workers of its own.
## The procedure
**1. Split the work into independent domains.** Group failures by what is broken:
- tool approval flow: tests in file A
- batch completion: tests in file B
- abort handling: tests in file C
**2. Write one brief per domain.** Each brief contains:
- the **exact scope** (one file, one subsystem),
- the **goal and acceptance check** (what "done" means, and how to prove it),
- the **constraints** (what must not be touched),
- the **context it needs**: the error messages, the names of the failing tests, and the interfaces that are already settled,
- the **output you want back**: a summary of the cause found and the changes made, plus where the full report goes.
A brief that is too broad ("fix all the tests") loses the worker. One with no context ("fix the race condition") sends it searching. One with no constraints invites a refactor. One with no output format leaves you unable to tell what changed.
**3. Dispatch them together.** Start all the workers in the same step so they run concurrently. Staggering the starts across several steps delays the later ones and defeats the point. Tell each worker it is a focused worker with one job, so it does not pull in other tools or workflows.
**4. Collect, then integrate.** When the workers return:
1. Read every summary **and the actual diff**. A report is evidence, not approval.
2. Check for overlap: did two workers touch the same code or the same assumptions?
3. Resolve any conflict yourself.
4. Run the **full** test suite plus any cross-domain checks. Do not call the work complete until the combined result passes.
5. Spot check. Workers can make the same systematic mistake in parallel.
If a worker's fix is wrong, send the specific correction back to that same worker when you can. If two attempts fail for the same cause, stop retrying, and change the plan or fix it yourself.
## Example brief
```markdown
Fix the 3 failing tests in src/agents/agent-tool-abort.test.ts:
1. "should abort tool with partial output capture" expects 'interrupted at' in the message
2. "should handle mixed completed and aborted tools": a fast tool was aborted instead of completing
3. "should properly track pendingToolCount" expects 3 results but gets 0
These look like timing or race issues. Your task:
1. Read the test file and understand what each test verifies.
2. Find the root cause. Is it a timing problem or a real bug?
3. Fix it: replace arbitrary timeouts with waiting on the real event, and fix any bug you find in the abort code.
4. Do not simply raise a timeout. Do not change files outside this test file and the abort implementation it exercises.
You are a focused worker with one job. Return a summary of the root cause and what you changed.
```
## Worked case
Six failures across three files after a large refactor: three in the abort tests (timing), two in batch completion (tools not executing), one in approval race conditions (an execution count of zero). The three areas share no state, so each went to its own worker. One replaced timeouts with event-based waiting. One fixed a bug where an identifier was set in the wrong place. One added a wait for an asynchronous tool to finish. The changes did not overlap, and the full suite passed after integration.
## Boundary checklist before dispatching
- Files and generated artifacts are disjoint.
- No worker changes a shared config, lockfile, schema, API or fixture.
- Each worker can test its result alone.
- You know the integration order and how to resolve a merge conflict.
- Anything with outside effects (permissions, hardware, deployment) stays with you and with the user's own authorization.
## Risks
- **False independence.** Two problems that looked separate share a cause or a file. A boundary check and a full-suite run catch it.
- **Merge conflicts** across shared files.
- **Inconsistent fixes** that each work but disagree with each other.
When the risk is high, fall back to sequential work.
The second audit
What we found in the sources
It keeps the upstream pattern (one focused worker per independent problem, dispatched together) and adds a stricter independence test and a better list of what not to delegate. Every source below was read at the commit the auditor recorded. Nothing was taken from a source without a permissive license.
What each source contributed
- obra/superpowers ↗ · Primary basis · MIT
The principle, the four-step pattern (split into domains, write focused briefs, dispatch together, review and integrate), the brief structure, the good-and-bad brief contrasts, the example brief and the worked case.
- brunob54/superpowers-orchestrator ↗ · Added ideas · MIT
The three-condition decision check with "otherwise run sequentially", "do not use for content relay" (worker replies are compressed, so fetch raw content yourself), dispatching all workers in one step, never forwarding session history, running the full suite plus cross-domain checks before calling the work complete, and the risks list.
- lsy041015/orchestra ↗ · Added ideas · MIT
The boundary checklist, "worker reports are evidence, not approval", "do not use for exploration, planning, diagnosis, review or a second opinion", workers do not start workers, and stop retrying after two failed fixes with the same cause.
What changed
- The description says what the skill does and what it is not for. Upstream's was "Use when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies".
- Made it host-neutral: "workers" and "agents" instead of a specific subagent tool or call syntax.
- Replaced the Graphviz decision diagram with a plain checklist of conditions.
- Added the instruction to read every actual diff, not only each worker's summary.
- Removed the preset model names, the plugin namespaces and the cache-TTL discussion, which are specific to particular hosts and vendors.
Problems found in the sources
- obra/superpowers: The description gives only the trigger. The skill assumes a "general-purpose subagent" and a Graphviz renderer, and the "when not to use" guidance is scattered over two places.
- huangbaixun/harness-engineering: The upstream text with two changes: the name is prefixed with "harness:", and a banner requires reading harness-delta.md before use. That file is not part of the skill, so a lone copy has an instruction it cannot follow.
- gylove1994/superpowers-deepseek-v4: Adds an instruction to invoke confirming-worktree-before-edit, a skill that is not here, and a "Time saved" claim with no measurement.
- brunob54/superpowers-orchestrator: Hard-wires its own plugin name into the brief ("Do NOT invoke any skills from the superpowers-orchestrator plugin") and relies on a five-minute prompt-cache default that is vendor- and time-specific.
- lsy041015/orchestra: Names specific models and agent presets and defers to another skill in its own namespace. Allowed only when the user explicitly asks for parallel work, which is stricter than the other sources but makes it unusable as a general skill.
What was dropped
- The "skill leakage prevention" line telling workers not to invoke the originating plugin's skills, which only makes sense inside that plugin. The general version ("tell each worker it is a focused worker with one job") is kept.
- The model-tier routing, ledger and Ruling mechanics from lsy041015/orchestra.
- The prompt-cache rationale from brunob54/superpowers-orchestrator, which depends on a particular API and a five-minute default that may change.
- The "Key Benefits" and "Time saved" sections found in a variant, which restate the premise.
Read but not used (4)
- jnmetacode/superpowers-zh: A Chinese translation of upstream.
- leodorareluctant259/superpowers-zh: A Chinese translation of upstream.
- mzored/superpowers-cc-to-codex: A Codex-backed port, tied to those tools.
- thepragmaticbear/bearpaws: Upstream recast in XML tags and shortened.
Left out for license (4)
No license is declared on these, so nothing was taken from them: Athyrr/aikit, Fintama/swisper-superpowers, Itzalive/resistance-ai, orkeren21/shipshape.
Same text, wherever you work
Use it where you work
Copy the folder into your skills directory, then ask for the job or type its start command.
- Download
SKILL.mdwith the button above, and put it in a folder nameddispatching-parallel-agents. - Zip the folder.
- In Claude, open Settings → Skills and upload the zip.
SKILL.md is plain Markdown. Copy the text and paste it as the system prompt or the first message. It will not trigger by itself there; you start it.