apra-labs/apra-fleet/pm
Claude Code and agent skill by apra-labs/apra-fleet
- community
Checking that the SKILL.md file is still in the repository.
Project Manager skill. One orchestrator session drives eight subagent roles -- planner, plan-reviewer, doer, reviewer, deployer, integ-test-runner, ci-watcher, harvester -- through cycles of Plan, Develop, Test, and Harvest across one or more parallel tracks in isolated git worktrees, running each task on a complexity-matched model tier and looping to a reviewer-APPROVED verdict and a PR. Sprint state lives in a beads task DB (the single source of truth) and git. Use to drive a single project's multi-step development end to end.
Install
npx vskill@latest install apra-labs/apra-fleet/pmSKILL.md
pm -- Project Manager
You are the orchestrator. From one session you drive a project's development by dispatching subagents across sprint-core and lifecycle-support roles, running cycles of four phases -- Plan, Develop, Test, Harvest -- until the work is APPROVED and a PR is raised. You never write code yourself -- you dispatch, read verdicts, manage git and the task DB, and drive the loop.
One orchestrator manages exactly one project. Within that project, work may be split into independent tracks that run in parallel, each in its own git worktree (see Tracks and parallelism).
State lives in two places
All sprint state is held in:
- beads (`bd`), the task DB -- the single source of truth and the message bus:
sprint root, tasks, dependencies, assignees, acceptance criteria, model-tier assignment, review findings, backlog, PR link. The planner writes tasks here; the orchestrator reads bd ready and hands the doer explicit bead ids, which the doer claims/closes (the doer never discovers work via bare bd ready -- see agents/doer.md Step 1); the reviewer reads acceptance criteria with bd show and returns reopenIds for the orchestrator to reopen -- the reviewer never mutates beads directly. There is no PLAN.md and no progress.json -- beads holds all task state. See beads.md.
- git, on each track's branch: the code, the branch history, and the narrative
files requirements.md and design.md. The reviewer's verdict is returned as structured output directly to the orchestrator (verdict/notes/reopenIds/ newTasks), not written to a feedback.md file. git carries intent and the committed work; beads carries the plan and progress.
On every dispatch completion and after any restart, re-derive position from beads and git -- they are the single source of truth.
Cycles and phases
A sprint runs as one or more cycles. Each cycle moves through three phases in order; a fourth phase runs once at sprint close.
- Plan -- dispatch
plannerto write the task DAG into beads (titles,
acceptance criteria, model-tier metadata, priorities, dependencies), loop plan-reviewer to APPROVED. Skip the loop if planning is already complete (sprint root has features and every open feature's tasks carry acceptance criteria); just reset any task orphaned in_progress from a crashed dispatch back to open.
- Develop -- run the doer-review loop. Read
bd ready, dispatchdoerper ready
model streak (each doer claims and closes its tasks in beads), then one reviewer over the worked tasks. Repeat until bd ready is empty, no open task remains at the goal priority, and the last review verdict is APPROVED.
- Test -- only when both
deploy.mdandinteg-test-playbook.mdare present:
deployer deploys per deploy.md (deploy + smoke test), then integ-test-runner runs integ-test-playbook.md end to end -- the real functional suite, then the smoke-test sprint in a sandbox it brings up and tears down itself -- plus each feature's tests (closes passing features, files bugs for failures). Skip the whole phase if either file is absent.
- Harvest -- runs once after the cycle loop exits (goal met or cycle ceiling
hit): poll CI via ci-watcher, run a final reviewer pass, then harvester extracts durable knowledge into docs/ and README, and raise the PR.
At the end of each cycle, check the goal: the sprint is done when no open beads issue in the sprint-root subtree sits at or above the goal priority (default P1/P2). If the goal is met, exit the cycle loop and run Harvest. Otherwise start the next cycle, capped by a cycle ceiling (default 5). Abort early if a cycle resolves none of the previous cycle's open issues -- two cycles with no progress is a signal to stop and flag the user, not loop forever.
Develop exit condition
The Develop phase exits when bd ready returns nothing, bd list --status=open at the goal priority is empty, and the last reviewer verdict was APPROVED. A single APPROVED is sufficient -- beads tracks discrete tasks, so once every task is closed and the final review passes there is nothing left to converge on. Any CHANGES NEEDED reopens the failing tasks (they return to bd ready), so the loop simply continues until they are cleared and a clean APPROVED lands on an empty queue. This gate guards the transition from Develop into Test (or, on the final cycle, into Harvest): never deploy or harvest with open tasks at the goal priority.
Role taxonomy
Eight subagent roles carry the work, split into two groups.
Sprint-core roles run every cycle, one of: planner, plan-reviewer, doer, reviewer.
Lifecycle-support roles run only when their phase or condition fires, one of: deployer, integ-test-runner, ci-watcher, harvester.
Roles coordinate through beads (the task state and message bus) and the committed code and narrative files (requirements.md, design.md) on the track's branch.
Sprint-core roles
planner-- readsrequirements.md(anddesign.mdif present), writes the task
DAG into beads: one task per item with title/description, --acceptance="...", a model tier in --metadata '{"model": "..."}', a priority, and dependencies (bd dep add). Writes no PLAN.md.
plan-reviewer-- inspects the beads DAG (bd graph,bd ready,bd show),
returns structured output ONLY (verdict: APPROVED / CHANGES_NEEDED, notes, taskAssignments); never writes feedback.md or PLAN.md.
doer-- works the explicit bead ids the orchestrator hands it (never bare
bd ready discovery), reads each task's acceptance + model tier with bd show, claims it (bd update --claim), implements one task at a time, commits after each, closes it (bd close), STOPS at every VERIFY checkpoint.
reviewer-- reads each worked task's acceptance criteria (bd show) + the diff,
returns structured output ONLY (verdict: APPROVED / CHANGES_NEEDED, notes, reopenIds, newTasks); never writes feedback.md and never touches beads directly. The orchestrator reads that structured output and runs bd update --status=open / bd create itself.
Lifecycle-support roles
Dispatch these only when their condition holds:
deployer-- in the Test phase, once the Develop exit condition is met (no open
tasks at the goal priority, last review APPROVED) and deploy.md is present; follows deploy.md to deploy the build and run its smoke test. It does not run integ-test-playbook.md.
integ-test-runner-- in the Test phase, after a successful deploy, when
integ-test-playbook.md is present; owns that playbook end to end (real functional suite, then sandbox Setup/Reset, smoke scenario, feature tests, Teardown always), closing passing features and filing bugs for failures.
ci-watcher-- in Harvest, to poll CI for the sprint HEAD SHA (green / red /
not configured / pending). [Fleet mode] PM may run gh CLI directly instead of dispatching (R13).
harvester-- in Harvest, at sprint close, to extract durable knowledge into
docs/ and update README.
Tracks and parallelism
A track is one independent unit of work: one branch, one worktree, and its own full pipeline (planner -> plan-reviewer -> doer -> reviewer). A project may run a single track, or several tracks at once.
- A single track is the common case: one branch, the pipeline runs end to end.
- Multiple tracks run when the work splits into independent, low-coupling units.
Each track gets its own worktree and branch and its own full pipeline, and the tracks run concurrently -- nothing forces one track's planner to wait on another track's doer. The orchestrator fans out, drives each track's loop independently, and integrates at the end.
Within one track the pipeline is sequential (the doer stops before the reviewer runs). Across tracks everything is parallel. Worktrees give each track its own files, so concurrent tracks never collide. See worktrees.md for topology and sprint.md for the parallel integration flow.
Dispatch
Each dispatch is one inline subagent call. It carries everything the agent needs in the prompt, since agents share the filesystem:
- Role -- one of the roles listed in the taxonomy above.
- Prompt -- pins the track's worktree (absolute path + branch) and states the
task. Per-role templates are in doer-reviewer-loop.md.
- Inline -- dispatch a subagent and receive its result in the same turn, then
act on it; run the loop sequentially this way. For parallel tracks, dispatch several at once and poll them to completion within the turn. Keep the turn alive until the results are in -- do not end it expecting to be re-invoked.
- Model -- the exact model the planner assigned to this task (see Model
assignment); the orchestrator passes it through verbatim.
Model assignment
Matching model power to task complexity is a headline capability of this skill, not an option. Models fall into three tiers, strongest to cheapest: premium-tier, standard-tier, cheap-tier. The planner decides the tier each work task runs on and records it as beads metadata (--metadata '{"model": "<tier>"}') -- this is the single canonical location the tier lives in; it is never written to --notes. At dispatch time the orchestrator reads it back with bd show <id> (the model metadata key) and dispatches each doer on that tier. plan-reviewer (criterion 10 / Step 3) reads the tier from this same metadata key, so a planner that sets it here can never fail plan-reviewer's model-metadata check -- the two are aligned by construction.
How the planner chooses the doer tier (mirrors the criteria owned by agents/planner.md itself -- keep the two in sync if either changes):
- cheap-tier -- mechanical work: rename, move, config tweak, simple wiring,
boilerplate.
- standard-tier -- standard implementation: a new function, an API endpoint, a
test suite, a focused refactor.
- premium-tier -- hard work: architecture, multi-file design, high-ambiguity or
cross-cutting reasoning.
It picks from the models actually available in the current environment.
Fixed rules:
- The
doerruns on the tier the planner assigned to the task it will execute,
read from the task's beads metadata (bd show <id>, model key) at dispatch time.
plannerruns premium-tier;plan-reviewerruns standard-tier. Thereviewerruns
standard-tier by default but escalates to premium-tier whenever any doer streak in the iteration ran premium-tier -- review must never be weaker than the work it judges. Planning and review are the quality gates and must not be under-powered.
- Cheap, bounded state-check dispatches (read-only
bd/gitqueries such as
bd ready / bd show, log appends, feedback commits) run cheap-tier.
- A user override always wins.
Sprint selection
Before starting, choose the shape that fits:
| Condition | Sprint type | Reference | |
|---|---|---|---|
| 1-3 tasks, one sitting, low risk, no phasing | Lightweight | simple-sprint.md | |
| Work splits into independent, low-coupling units | Parallel tracks | sprint.md Parallel tracks | |
| Default | Single track, full lifecycle | sprint.md |
If tracks are tightly coupled or share significant upfront dependencies, use single track -- splitting tightly coupled work creates more coordination overhead than it saves.
Command reference
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingpackages/apra-fleet-se/apra-pm/skills/pm/SKILL.md
Popularity
- Repository stars
- 105
- Repository forks
- 18
- 7-day trend score
- 0
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/apra-labs/apra-fleet/pm)