Skip to content
Back to skills

Parallel Features

ASecurity

Dispatch independent feature work in parallel git worktrees. Spawns one agent per feature, each in its own isolated worktree, then merges sequentially. Use when 3+ independent features need shipping and would otherwise run serially. Triggers: parallel features, fan out features, multiple features in parallel, build features in parallel, parallelize features, worktree dispatch.

  • 15 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 29, 2026
ai-agentsgoshellbashgit

Security analysis

A100/100

Scanned May 29, 2026

npx -y skills add tinh2/skills-hub-registry --skill parallel-features --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Parallel Features?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Parallel Features
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tinh2-parallel-features/badge)](https://www.skillsdirectory.com/skills/tinh2-parallel-features)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: parallel-features
description: "Dispatch independent feature work in parallel git worktrees. Spawns one agent per feature, each in its own isolated worktree, then merges sequentially. Use when 3+ independent features need shipping and would otherwise run serially. Triggers: parallel features, fan out features, multiple features in parallel, build features in parallel, parallelize features, worktree dispatch."
version: "1.0.0"
category: build
platforms:
  - CLAUDE_CODE
---

You are an autonomous parallel-feature dispatcher. You take a list of independent features and ship them in parallel worktrees, then merge sequentially. Do NOT ask the user questions — decide on the spot.

This skill exists because doing 3+ independent features in sequence on a single branch wastes wall-clock time. Pet-sitter recall 2026-05-22 identified two textbook cases: Mar 31 evening (3 features run serially in 30 min) and May 21 web shell (11 independent screen passes serial in 7 hours). Worktree-based parallel execution cuts wall-clock 30-50% on multi-feature sprints.

TARGET: $ARGUMENTS

Arguments format: one of
- `<feature1>; <feature2>; <feature3>` — semicolon-separated feature descriptions
- `--file <path>` — read newline-separated feature list from path
- `--backlog` — auto-detect from `docs/backlog.md` or `docs/feature-backlog.md`

Optional flags:
- `--max-parallel <N>` — concurrency cap (default 4)
- `--base <branch>` — base branch (default: current branch or `main`)
- `--dry-run` — show the plan, do not create worktrees
- `--no-merge` — leave worktrees in place after agents complete (for review)

============================================================
PHASE 0: SAFETY CHECKS
============================================================

Before doing anything:

1. **Clean working tree gate**: `git status --porcelain` must be empty. If there are uncommitted changes, REFUSE with: "Refusing to dispatch — uncommitted changes in working tree. Stash or commit first." Don't try to stash for the user — it's their work.
2. **Base branch up to date**: fetch + check we're at-or-ahead-of origin. If behind, pull first.
3. **Feature count sanity**: if N < 2, refuse with "Parallelism requires 2+ features. Run /feature or /story-implementer for a single feature." If N > 8, warn and require explicit `--max-parallel <N>` to confirm.

============================================================
PHASE 1: INDEPENDENCE ANALYSIS
============================================================

The single biggest failure mode is dispatching features that touch the same files — you'd get merge conflicts on every fan-in. Detect this BEFORE spawning agents.

For each feature description, predict its file touch set:

1. Use Agent (subagent_type: Plan) per feature with prompt: "Given this feature description and the current repo, list the files you would touch to implement it. Be concrete (paths, not categories). Do NOT implement — just list."
2. Collect file lists in parallel.
3. Build a touch-set matrix and detect overlaps:
   - **Hard conflict** (same file): feature pair cannot run in parallel.
   - **Soft conflict** (sibling files in same module): allow but warn.
4. Construct a parallelizable schedule:
   - Start with all features independent of each other → batch 1
   - Any feature in hard-conflict with batch 1 → batch 2
   - And so on.
5. If batch 1 is empty (every feature conflicts with every other), refuse with the conflict matrix and recommend running them serially.

Report the schedule to the user:

```
Parallel plan ({N} features in {B} batches):
  Batch 1 ({k} features): A, C, D
  Batch 2 ({k} features): B
  ...
Estimated wall-clock saving vs serial: ~{X}%
```

If `--dry-run`, stop here.

============================================================
PHASE 2: WORKTREE CREATION (per batch)
============================================================

For each batch (sequentially across batches, parallel within):

1. For each feature in the batch, in parallel via Agent:
   ```bash
   git worktree add ../worktrees/<slug-of-feature> -b feat/<slug>
   ```
   Use a deterministic slug derived from the feature description (kebab-case, max 40 chars).
2. Verify the worktree directory exists and is on the new branch.

If any worktree creation fails, abort the batch and clean up partial worktrees.

============================================================
PHASE 3: PARALLEL DISPATCH
============================================================

For each feature in the current batch, in parallel via Agent (subagent_type: general-purpose):

Each agent gets a self-contained prompt:

```
You are implementing one feature in an isolated git worktree at <worktree-path>.

Feature: <description>

Run from the worktree path. Do NOT touch other worktrees. Do NOT push to origin.

Steps:
1. cd <worktree-path>
2. Implement the feature following the repo's CLAUDE.md conventions.
3. Run the project's test suite (detect from package.json/pubspec.yaml). Tests
   must pass before you commit.
4. Commit per the project's commit message conventions. Use a single commit
   per feature unless the diff genuinely needs splitting (see /story-implementer
   COMMIT GRANULARITY RULES if available).
5. Report: success or failure, with summary of what changed and the commit SHA.

You have at most 30 turns. If you hit a blocker that needs user input, STOP
and report it — do not guess.
```

Collect per-feature outcomes:

| Feature | Status | Commit | Files Touched | Notes |

============================================================
PHASE 4: PER-WORKTREE VERIFICATION (per feature)
============================================================

Before merging, each worktree must independently satisfy:

1. Tests green: re-run the project's test command in the worktree. Must pass.
2. Build green: `pnpm build` / `flutter build` / equivalent. Must succeed.
3. No uncommitted changes in the worktree.
4. Branch is exactly 1 commit ahead of base (or N commits if the feature genuinely needed splitting — log this).

Any worktree that fails verification stays on its branch and is NOT merged. Report it as a manual-review item.

============================================================
PHASE 5: SEQUENTIAL MERGE TO BASE
============================================================

Merges happen SEQUENTIALLY (never in parallel) to keep the base branch's history clean and to surface unexpected interactions one at a time.

For each verified feature branch:

1. `cd <base-repo-path>`
2. `git checkout <base>`
3. `git pull origin <base>` (in case anyone else pushed)
4. `git merge --no-ff feat/<slug>` (use no-ff so each feature is a discoverable merge in the history)
5. Run the project's test suite ONE MORE TIME against the merged state. Tests must pass.
6. If tests fail post-merge (a hidden interaction between two features), `git reset --hard ORIG_HEAD` and leave the feature branch unmerged for manual reconciliation. Report it.
7. Move to the next feature.

After all merges, push base once:
   `git push origin <base>`

============================================================
PHASE 6: CLEANUP
============================================================

For each successfully merged feature:
1. `git worktree remove ../worktrees/<slug>`
2. `git branch -d feat/<slug>` (safe delete — refuses if branch isn't fully merged)

For each unmerged feature (failure or `--no-merge`):
- Leave the worktree and branch in place.
- Report path + branch name so the user can finish manually.

============================================================
OUTPUT
============================================================

## Parallel Features Report — {YYYY-MM-DD}

### Plan
- Features: N
- Batches: B (max parallel: K)
- Estimated saving vs serial: ~X%

### Per-Feature Outcomes

| # | Feature | Worktree | Branch | Status | Commit | Notes |
|---|---------|----------|--------|--------|--------|-------|

### Merged to {base}
- {count} features merged sequentially, base pushed.

### Manual Review Required
- {feature} — {reason} — branch left at `feat/{slug}` (worktree at `../worktrees/{slug}`)

### Wall-Clock
- Actual: {min}m
- Serial estimate: {min}m
- Saving: {%}

CONSTRAINTS:
- NEVER push feature branches to origin (only merge to base and push base).
- NEVER force-push.
- NEVER `git worktree remove --force` unless the user explicitly opts in.
- NEVER spawn more agents than `--max-parallel` allows.
- ALWAYS run tests in each worktree before allowing a merge.
- ALWAYS test the merged base before moving to the next merge.

NEXT STEPS:
- "If unmerged features remain, finish them manually with `/story-implementer`."
- "Run `/qa` once all features are merged to verify the combined state."

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…