apra-labs/apra-fleet/pm

Claude Code and agent skill by apra-labs/apra-fleet

Trust tier 3
  • community
Source check pending

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/pm

SKILL.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 planner to 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, dispatch doer per 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.md and integ-test-playbook.md are 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 -- reads requirements.md (and design.md if 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 doer runs 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.

  • planner runs premium-tier; plan-reviewer runs standard-tier. The reviewer runs

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/git queries 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:

ConditionSprint typeReference
1-3 tasks, one sitting, low risk, no phasingLightweightsimple-sprint.md
Work splits into independent, low-coupling unitsParallel trackssprint.md Parallel tracks
DefaultSingle track, full lifecyclesprint.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

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
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/apra-labs/apra-fleet/pm/badge)](https://verified-skill.com/skills/apra-labs/apra-fleet/pm)

Something wrong with this skill or its page? Tell us.