ai-specs/skills/run-parallel-tasks/SKILL.md
Run N feature tasks in parallel, each in its own worktree, following the full specboot pipeline (enrich → new → ff → apply → verify). Stops after verify — no archive, no commit, no cleanup. Explicit task arguments override `parallel-tasks.md`; file is fallback only.
npx skillsauth add lidr-academy/ai4devs-lti-extended run-parallel-tasksInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Resolves tasks from explicit command arguments first, otherwise reads parallel-tasks.md from the references subfolder. Then spins up one isolated agent per task and runs each through the full specboot pipeline without supervision.
Pipeline per agent: worktree → enrich-us → opsx:new → opsx:ff → opsx:apply → opsx:verify → stop
parallel-tasks.md exists in root)Parse user input for explicit task arguments after the trigger phrase (for example, in run parallel tasks SCRUM-83 SCRUM-84, the arguments are SCRUM-83 and SCRUM-84).
If one or more explicit task arguments are present:
parallel-tasks.md.<TASK_ID>, create:
name: <TASK_ID> lowercased to kebab-caseus: <TASK_ID> (treat as Jira source unless it clearly matches a file path)If no explicit task arguments are present:
parallel-tasks.md from the references subfolder.### Task and contains:
name: — kebab-case change name (required)us: — source type: inline, a file path, or a Jira ticket ID (required)description: — inline US text (required when us: inline)<!-- --> comments.Always run enrich-us for every task, regardless of source format. Enrichment is mandatory.
First, resolve the raw US text by source:
us: inline — use the description: field as the raw US input.us: <file-path> — read the file at that path as the raw US input.us: <JIRA-ID> — pass the ticket ID directly to enrich-us; it fetches and enriches in one step.Then, for inline and file-path sources, invoke the enrich-us skill passing the raw US text as input.
Capture the full enriched output (with all technical detail, endpoints, files, test cases, NFRs) as the enriched US for this task.
Store each enriched US in memory before proceeding to Step 3.
Launch all agents simultaneously using the Agent tool with run_in_background: true.
Each agent must receive a fully self-contained prompt — agents start cold with no session memory. Use the template below, substituting:
{{CHANGE_NAME}} — the task name field{{ENRICHED_US}} — the full resolved enriched US text from Step 2{{PROJECT_ROOT}} — absolute path to the project root{{BASE_BRANCH}} — current git branch (run git branch --show-current to get it)When all background agents complete, print a summary table:
| Task | Worktree | Tasks | Verify | Blockers |
|------|----------|-------|--------|----------|
| name | .worktrees/name | N/N | PASSED / WARNINGS / CRITICAL | none / description |
If any agent reported CRITICAL issues or blockers, flag them clearly for the user.
You are implementing a feature for a full-stack FastAPI + React project.
Project root: {{PROJECT_ROOT}}
Base branch: {{BASE_BRANCH}}
Work exclusively inside the worktree you will create. Never modify the main checkout.
---
## Feature: {{CHANGE_NAME}}
## Enriched User Story
{{ENRICHED_US}}
---
## Pipeline — execute every step in order, do not skip any
### Step 1 — Create isolated worktree
Use the `using-git-worktrees` skill to create a worktree.
- Branch name: `feature/{{CHANGE_NAME}}-backend`
- Worktree path: `{{PROJECT_ROOT}}/.worktrees/{{CHANGE_NAME}}`
- Base: `{{BASE_BRANCH}}`
All subsequent steps run from inside this worktree.
### Step 2 — Create the OpenSpec change
Run from the worktree:
openspec new change "{{CHANGE_NAME}}"
This scaffolds the change at `openspec/changes/{{CHANGE_NAME}}/`.
### Step 3 — Generate all artifacts (fast-forward)
Use the `opsx:ff` skill for change `{{CHANGE_NAME}}`.
Provide the Enriched User Story above as the primary source of truth for all artifacts.
Generate: proposal → design → specs → tasks in one pass.
### Step 4 — Implement all tasks
Use the `opsx:apply` skill for change `{{CHANGE_NAME}}`.
Work through every task in `tasks.md`. Do not stop until all tasks are marked `[x]`.
Rules:
- If a task requires a live DB or backend, start the required services first.
- After any CREATE/UPDATE/DELETE curl or Playwright test, restore the data state.
- Mark each task `[x]` immediately after completing it.
### Step 5 — Verify
Use the `opsx:verify` skill for change `{{CHANGE_NAME}}`.
Record all CRITICAL, WARNING, and SUGGESTION findings.
### Step 6 — Stop and report
Do NOT archive, commit, push, or remove the worktree.
Return this exact summary (fill in values):
TASK: {{CHANGE_NAME}}
WORKTREE: {{PROJECT_ROOT}}/.worktrees/{{CHANGE_NAME}}
TASKS_COMPLETE: N/N
VERIFY_RESULT: PASSED | WARNINGS | CRITICAL
ISSUES:
- <list any CRITICAL or WARNING issues, or "none">
BLOCKERS:
- <list anything that stopped progress, or "none">
TESTING REPORT SUMMARY:
- summary of the reports created
VERIFICATION SUMMARY:
- output from verify step as is
development
Use when performing a cybersecurity audit, security review, OWASP Top 10 compliance check, vulnerability assessment, or preparing for a penetration test on a Node.js/Express/React application.
data-ai
Sync delta specs from a change to main specs. Use when the user wants to update main specs with changes from a delta spec, without archiving the change.
tools
Use when the user asks "show me X", "demo X", "walk me through X", "how X works" or requests a live feature demonstration from a spec, feature or ticket.
development
Use when the user requests an adversarial review, red-team review, devil's advocate check, or independent verification pass before archiving an OpenSpec change.