Problem
The PM workflow currently uses three living files in each project sandbox:
PLAN.md — sprint plan for the doer
progress.json — turn-by-turn state
feedback.md — reviewer notes
These files are committed and pushed to the working branch on every turn so that PM, doer, and reviewer stay in sync. That solves coordination, but it has real costs:
- Branch noise — every sprint pollutes git history with PM-state commits that have nothing to do with the change.
- Merge friction when multiple pairs work in parallel —
progress.json is the canonical conflict file.
- Cross-sprint visibility is poor — you have to read each branch's
PLAN.md separately. There is no global view.
- Recovery after a PM restart involves re-reading per-project files instead of querying one DB.
PM already uses beads (bd CLI, persistent SQLite DB) as the source of truth for tasks, dependencies, status, assignees, and notes. Beads can do everything PLAN.md and progress.json do today — and more (cross-sprint queries, dependency graph, blocked/ready filters, search, audit trail).
Proposal
Make beads the single source of truth for sprint state. Members (doer + reviewer) should have first-class access to the beads DB so PM can drop the markdown/JSON state files entirely.
What members need
bd CLI installed on every member. Already true today on local members; needs to be guaranteed on remote members during onboarding (similar to how the Claude/Gemini CLI is installed).
- Access to the same beads database PM uses. This is the hard part — see options below.
- Permissions to run
bd update, bd close, bd create, bd remember, bd show from inside execute_command / execute_prompt. The doer needs to claim and close issues; the reviewer needs to file findings as new issues.
How to share the DB
Pick one — open question for the design discussion:
| Option |
How it works |
Tradeoffs |
| A. Sync via git |
Commit .beads/issues.jsonl to the repo on a dedicated beads/ branch (or in a sidecar repo). Members bd dolt pull / push like PM does. |
Simple, uses existing beads sync. Adds one more push per turn (replaces the 3 state files, so net win). |
| B. Server-mediated |
Fleet server proxies bd commands to PM's local DB on behalf of members. New MCP tools: beads_update, beads_close, etc. |
No git involvement. Centralised. Requires building MCP surface and handling concurrency. |
| C. Shared DB file over network |
Members access a network-mounted SQLite file. |
Fragile, locking issues, not viable for remote members. |
A and B are both reasonable. A is closer to how beads is meant to be used (it has built-in dolt push/pull); B gives PM more control over who can do what.
What goes away
PLAN.md — replaced by bd list --epic <sprint-id> --tree
progress.json — replaced by bd show <task-id> + bd list --status=in_progress
feedback.md — replaced by bd create for each finding (already partially done — see PM skill's reviewer protocol)
Sprint-specific requirements (requirements.md, design notes, technotes) stay in the project sandbox — those are documentation, not state.
Acceptance criteria
Out of scope
- Replacing
requirements.md or design notes — those are project documentation, not sprint state.
- Changing how beads itself works internally (no CLI changes proposed here).
Why now
The current model's coordination overhead grows with sprint count and pair count. Beads has matured enough that "PM uses beads, members use markdown" is now an avoidable inconsistency. Centralising on beads removes git noise, simplifies the PM skill, and makes cross-sprint observability free.
Problem
The PM workflow currently uses three living files in each project sandbox:
PLAN.md— sprint plan for the doerprogress.json— turn-by-turn statefeedback.md— reviewer notesThese files are committed and pushed to the working branch on every turn so that PM, doer, and reviewer stay in sync. That solves coordination, but it has real costs:
progress.jsonis the canonical conflict file.PLAN.mdseparately. There is no global view.PM already uses beads (
bdCLI, persistent SQLite DB) as the source of truth for tasks, dependencies, status, assignees, and notes. Beads can do everything PLAN.md and progress.json do today — and more (cross-sprint queries, dependency graph, blocked/ready filters, search, audit trail).Proposal
Make beads the single source of truth for sprint state. Members (doer + reviewer) should have first-class access to the beads DB so PM can drop the markdown/JSON state files entirely.
What members need
bdCLI installed on every member. Already true today on local members; needs to be guaranteed on remote members during onboarding (similar to how the Claude/Gemini CLI is installed).bd update,bd close,bd create,bd remember,bd showfrom insideexecute_command/execute_prompt. The doer needs to claim and close issues; the reviewer needs to file findings as new issues.How to share the DB
Pick one — open question for the design discussion:
.beads/issues.jsonlto the repo on a dedicatedbeads/branch (or in a sidecar repo). Membersbd dolt pull/pushlike PM does.bdcommands to PM's local DB on behalf of members. New MCP tools:beads_update,beads_close, etc.A and B are both reasonable. A is closer to how beads is meant to be used (it has built-in
dolt push/pull); B gives PM more control over who can do what.What goes away
PLAN.md— replaced bybd list --epic <sprint-id> --treeprogress.json— replaced bybd show <task-id>+bd list --status=in_progressfeedback.md— replaced bybd createfor each finding (already partially done — see PM skill's reviewer protocol)Sprint-specific requirements (
requirements.md, design notes, technotes) stay in the project sandbox — those are documentation, not state.Acceptance criteria
bdavailable (verified duringregister_memberonboarding).single-pair-sprint.md,simple-sprint.md,multi-pair-sprint.md,doer-reviewer.mdno longer reference PLAN.md / progress.json / feedback.md as living state files.Out of scope
requirements.mdor design notes — those are project documentation, not sprint state.Why now
The current model's coordination overhead grows with sprint count and pair count. Beads has matured enough that "PM uses beads, members use markdown" is now an avoidable inconsistency. Centralising on beads removes git noise, simplifies the PM skill, and makes cross-sprint observability free.