parallel-work
Skill9 starsChanged 3 months agoMITView on GitHub
Work on multiple stories at the same time. Creates isolated parallel streams (git worktrees) from the current branch, wires up local settings, and opens each in its own Claude Code session. Also shows stream status and cleans up finished streams. Pairs with /merge-up (publish a stream's work to the parent branch) and /merge-down (pull the parent's accumulated work into a stream).
- Reads credentials
7 other projects use a version of this.
Adopted by
Most recently taken up by
- Destrayon/Connapsetheir own version, first seen Nov 7, 2026
- Tcuzzo/backs-aios-skillstheir own version, first seen Nov 3, 2026
- davidscotttufts/hyvemindtheir own version, first seen Nov 1, 2026
- aprameyak/coding-skillstheir own version, first seen Oct 2, 2026
- gabrieldabbah/genesistheir own version, first seen Jul 28, 2026
- nfeuer/project-foundation-kittheir own version, first seen Jul 5, 2026
Other versions7 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 7
- Destrayon/Connapse★ 22same name
- gabrieldabbah/genesis★ 4same name
- Tcuzzo/backs-aios-skills★ 2same name
- aleiby/claude-skills★ 1same name
- aprameyak/coding-skills★ 1same name
- davidscotttufts/hyvemind★ 0same name
- nfeuer/project-foundation-kit★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository56 other files it gives its agents.
- .claude/agents/CLAUDE.mdCLAUDE.md
- .claude/hooks/CLAUDE.mdCLAUDE.md
- CLAUDE.mdCLAUDE.md
- .claude/prompts/CLAUDE.mdCLAUDE.md
- .claude/rules/CLAUDE.mdCLAUDE.md
- .claude/skills/CLAUDE.mdCLAUDE.md
- docs/CLAUDE.mdCLAUDE.md
- vision/CLAUDE.mdCLAUDE.md
- llms.txtllms.txt
- scaffold/llms.txtllms.txt
- architecture-checkSkill
- backlog-reviewSkill
- bootstrapSkill
- brainstormSkill
- buildSkill
- claude-sense-checkSkill
- code-qualitySkill
- commitSkill
- continueSkill
- custom-hooksSkill
- dashboardSkill
- debug-sessionSkill
- deploySkill
- discoverSkill
- doctorSkill
- fix-issueSkill
- framework-upgradeSkill
- handoffSkill
- help-meSkill
- ideateSkill
- lanesSkill
- manual-testSkill
- merge-downSkill
- merge-upSkill
- optimizeSkill
- performance-checkSkill
- phase-reviewSkill
- pr-statusSkill
- quality-checkSkill
- quickstartSkill
- refine-loopSkill
- researchSkill
- retrospectiveSkill
- security-auditSkill
- skill-createSkill
- skill-evalSkill
- sprint-endSkill
- sprint-startSkill
- story-cycleSkill
- testing-cycleSkill
- test-validatorSkill
- UAT-cycleSkill
- undo-workSkill
- uninstallSkill
- weekly-maintenanceSkill
- wrap-upSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
17 rules. 0 are common, 10 are distinctive, and 7 are very specific to this project.
0
Common
Most of the 6 edited versions we read keep these.
10
Distinctive
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 44
Run the status script:
- Very specific: line 69
If $ARGUMENTS contains "start", "create", a count, or story IDs:
- Distinctive: line 81
If the working tree is dirty, stop: commit or stash first, so every stream starts from a known state.
- Very specific: line 86
Ask which stories go into which stream (or accept story IDs from $ARGUMENTS).
- Very specific: line 87
If the stories exist in the backlog (docs/reference/backlog/E*.md), check each pair of stories chosen for different streams:
- Distinctive: line 90
Dependencies: if story A lists story B in its Dependencies field, they cannot run in parallel.
- Distinctive: line 92
Affected files: if two stories list overlapping Affected files, warn:
- Distinctive: line 96
If the user just wants N identical sandboxes (no story mapping), skip this check but state the ground rule: one story per stream, no shared …
- Distinctive: line 99
If every chosen pair conflicts, recommend NOT parallelizing and stop unless the user insists.
- Distinctive: line 125
6. Offer to open each stream: Ask with AskUserQuestion: "Open each stream in its own terminal tab running Claude Code?"
- Very specific: line 167
If $ARGUMENTS contains "cleanup":
- Very specific: line 173
Check the branch is fully merged into its parent: git rev-list --count <parent>..<branch> — 0 means merged
- Very specific: line 175
If merged and the worktree is clean: git worktree remove <path>, then git branch -d <branch> (safe delete only — never -D)
- Distinctive: line 177
If not merged: leave it and report ("has unmerged work — run /merge-up inside it first, or remove manually if abandoning")
- Very specific: line 191
When using the CLAUDE_CODE_TASK_LIST_ID environment variable, multiple Claude Code instances can share a task list.
- Distinctive: line 197
Always create streams from a clean base branch (typically the sprint branch)
- Distinctive: line 199
Never create a stream from inside another stream (fan out from one base)
“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
parallel-work
Manage parallel development streams. Each stream is an isolated copy of the project (a git worktree) on its own branch, so multiple Claude Code sessions can build different stories at the same time without touching each other's files.
When Parallel Work Makes Sense (and When It Doesn't)
Parallel work is opt-in, never required. The default workflow is one branch, one story at a time — that keeps the user fully aware of every change.
Good fit:
- Stories are self-contained: no dependencies on each other, no shared hot files
- Each story is a complete outcome on its own (outcome over output)
- The user is comfortable reviewing several streams of change
Bad fit — advise sequential work instead:
- Stories depend on each other (one needs the other's code or schema)
- Stories touch the same files or the same module's core
- The stories are parts of one mechanism (they should be ONE story, not parallel streams)
The start command checks this before creating anything (see below). When in
doubt, recommend sequential: merging conflicting parallel work costs more than
it saves.
Commands
Status (default, or "status"/"list")
Run the status script:
bash "${CLAUDE_PLUGIN_ROOT:-.claude}/skills/parallel-work/scripts/worktree-status.sh"Show all active streams with their branches, their parent (from
git config branch.<name>.exosuitParent), and ahead/behind counts vs the parent:
### Active Streams
| Path | Branch | Parent | Ahead/Behind parent |
|------|--------|--------|---------------------|
| [path] | [branch] | [parent or "-"] | [+N/-M] |
**Options:**
- `/parallel-work start` — create new parallel streams
- `/merge-up` (inside a stream) — publish its work to the parent
- `/merge-down` (inside a stream) — pull the parent's accumulated work in
- `/parallel-work cleanup` — remove finished streamsStart — Create Parallel Streams
If $ARGUMENTS contains "start", "create", a count, or story IDs:
1. Detect context.
git rev-parse --abbrev-ref HEAD # base branch to fan out from
git worktree list # what already exists
git status --porcelain # base should be cleanThe base is whatever branch is currently checked out — typically the sprint branch. If HEAD is detached, stop and ask the user to check out a branch first. If the working tree is dirty, stop: commit or stash first, so every stream starts from a known state.
2. Sense-check the parallel plan.
Ask which stories go into which stream (or accept story IDs from $ARGUMENTS).
If the stories exist in the backlog (docs/reference/backlog/E*.md), check
each pair of stories chosen for different streams:
- Dependencies: if story A lists story B in its Dependencies field, they cannot run in parallel. Warn and suggest sequencing.
- Affected files: if two stories list overlapping Affected files, warn:
"Stories [A] and [B] both touch [files]. Parallel streams will conflict at merge time — consider running them sequentially, or reassigning one."
If the user just wants N identical sandboxes (no story mapping), skip this check but state the ground rule: one story per stream, no shared files.
If every chosen pair conflicts, recommend NOT parallelizing and stop unless the user insists.
3. Decide how many. From $ARGUMENTS, or ask with AskUserQuestion:
"How many parallel streams off <base>?" (offer 1 / 2 / 3, Other for more).
4. Derive branch names.
- With story IDs:
feat/<story-id>per stream. - Without:
<base>-a,<base>-b,<base>-c, ... If a name collides with an existing branch (git show-ref --verify refs/heads/<name>), bump to the next free suffix.
5. Create each stream. One at a time, surfacing each script's output:
bash "${CLAUDE_PLUGIN_ROOT:-.claude}/skills/parallel-work/scripts/new-worktree.sh" "<new-branch>"The script creates the worktree as a sibling directory of the main working
tree, records the parent branch in git config branch.<new-branch>.exosuitParent
(which is how /merge-up and /merge-down later find their way home), and
propagates gitignored local settings (.env, .env.local,
.claude/settings.local.json, CLAUDE.local.md, and .mcp.json with absolute
paths rewritten). Its Worktree ready: <dir> line gives the path to reuse next.
6. Offer to open each stream. Ask with AskUserQuestion: "Open each stream in its own terminal tab running Claude Code?"
- Yes: collect all
<dir>paths from step 5 and hand them to the launcher in one call:
Cross-platform (iTerm2 / Terminal.app / Windows Terminal / gnome-terminal / konsole), degrades to printing the commands when tabs can't be scripted. On macOS Terminal.app, real tabs need Accessibility permission; without it new windows open instead. Override the per-tab command withbash "${CLAUDE_PLUGIN_ROOT:-.claude}/skills/parallel-work/scripts/open-worktree-terminals.sh" "<dir-a>" "<dir-b>" ...EXOSUIT_WORKTREE_LAUNCH_CMD, or setEXOSUIT_WORKTREE_TABS=0to printcdhints only. - No: print one
cd '<dir>' && claudehint per stream.
Over SSH there are no tabs to open. Working inside tmux, use /lanes instead:
it opens each stream as a tmux window with Claude Code started on its story.
7. Report. Print the final git worktree list and the working agreement:
### Streams Ready
| Stream | Branch | Story |
|--------|--------|-------|
| [dir] | [branch] | [story or "-"] |
**In each stream:** run `/story-cycle <story-id>` as normal.
**Publish finished work:** `/merge-up` (merges the stream into `<base>`).
**Pick up others' published work:** `/merge-down`.
**When the sprint ends:** `/sprint-end` on `<base>` verifies every stream is
merged and cleans up the worktrees.
Notes: streams share one git object store — a fetch in any stream updates
remote refs for all. Dependency directories (node_modules, .venv, vendor,
target) are not copied; install per stream if needed. Watch for port
collisions if you run more than one dev server.Cleanup — Remove Finished Streams
If $ARGUMENTS contains "cleanup":
- List all worktrees:
git worktree list --porcelain - For each worktree except the main one:
- Resolve its parent:
git config branch.<branch>.exosuitParent(fall back to the default branch if unset) - Check the branch is fully merged into its parent:
git rev-list --count <parent>..<branch>— 0 means merged - If merged and the worktree is clean:
git worktree remove <path>, thengit branch -d <branch>(safe delete only — never-D) - If not merged: leave it and report ("has unmerged work — run /merge-up inside it first, or remove manually if abandoning")
- Resolve its parent:
- Prune stale entries:
git worktree prune
### Stream Cleanup
**Removed:** [list]
**Kept (unmerged work):** [list with commit counts]
**Pruned:** [count of stale entries]Coordination Between Sessions
When using the CLAUDE_CODE_TASK_LIST_ID environment variable, multiple Claude
Code instances can share a task list. Set the same ID across streams to see
shared tasks.
Rules
- Always create streams from a clean base branch (typically the sprint branch)
- One story per stream — never share a story across streams
- Never create a stream from inside another stream (fan out from one base)
- Publish with
/merge-up, refresh with/merge-down— keep streams short-lived - Clean up streams after their branches are merged (
cleanup, or/sprint-enddoes it when the sprint ships) - Parallel work is optional. When stories are dependent or touch the same files, one branch worked sequentially is the better tool.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

