project-plan
Skill6 starsChanged 48 days agoMITView on GitHub
Turn a project brief into a plan and then a board: first the project plan (goal, scope, deliverables, use cases, functional and non-functional requirements), then 3-6 outcome-based epics and 5-15 dependency-ordered tickets that each trace to a plan item, validated, then stopped for human review. Use at the start of a new project, when the board is still the starter sample, or when asked to plan/re-plan the work before any implementation.
9 other projects use a version of this.
Adopted by
Most recently taken up by
- CatCatUncle/openworkbuddytheir own version, first seen Nov 5, 2026
- paull78/project-timetheir own version, first seen Oct 25, 2026
- Lumosylva/lumosylva-skillstheir own version, first seen Oct 25, 2026
- fattain-naime/engineering-docstheir own version, first seen Oct 24, 2026
- matiopala/skillstheir own version, first seen Oct 15, 2026
- AgiFlow/ai-plugintheir own version, first seen Oct 10, 2026
Other versions9 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 9
- CatCatUncle/openworkbuddy★ 398same name
- fagemx/edda★ 36same name
- oswarld/notion-skills★ 11same name
- fattain-naime/engineering-docs★ 6same name
- AgiFlow/ai-plugin★ 4same name
- matiopala/skills★ 2same name
- Lumosylva/lumosylva-skills★ 1same name
- AirMile/claude-config★ 0same name
- paull78/project-time★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository24 other files it gives its agents.
- docs/AGENTS.mdAGENTS.md
- atomic-reportSkill
- board-validateSkill
- data-modelSkill
- delivery-hygieneSkill
- dev-reportSkill
- dev-setupSkill
- frontend-qualitySkill
- gcSkill
- git-branchSkill
- land-and-archiveSkill
- orchestration-healthSkill
- orchestratorSkill
- pipeline-qualitySkill
- plan-updateSkill
- release-gateSkill
- repo-auditSkill
- scaleSkill
- security-reviewSkill
- swarmSkill
- test-coverageSkill
- tpmSkill
- trackerSkill
- worktree-cleanupSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. 0 are common, 3 are distinctive, and 11 are very specific to this project.
0
Common
Most of the 7 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 57
Write those answers into context.md, remove the resolved entries from Open questions, and list every proposal in your summary as an …
- Very specific: line 59
Never plan around a blank.
- Very specific: line 63
Follow the plan-update skill's method and command set — it owns the section-by-section detail, and duplicating it here would let the two …
- Distinctive: line 95
Use them when the answer to "could we ship this half and stop, and it would still be worth something?" is yes for two or more separable …
- Distinctive: line 98
If you do use them:
- Distinctive: line 144
Write a plan-sized board in one atomic import:
- Very specific: line 162
Import only adds. An id that already exists is a hard error, never an overwrite.
- Very specific: line 183
Every ticket carries: id, epicId, name, desc with concrete acceptance criteria, area, priority, swag, status, depends_on, agent_plan, …
- Very specific: line 195
traces_tois not optional: Every ticket names at least one plan item id (D-, UC-, FR-, NFR-, M-). - Very specific: line 200
Use only the areas, agent codes, and model names config.json allows.
- Very specific: line 201
Every ticket starts at status: "todo".
- Very specific: line 210
Keep prod/release and human-gated steps as separate tickets with a human_gate from config.humanGates — never as a dependency of ordinary …
- Very specific: line 215
Run maestro plan coverage --board {{BOARD}}/data.json.
- Very specific: line 222
Run the board-validate skill (node {{KIT}}/scripts/validate-board.mjs {{BOARD}}/data.json) and fix everything it flags, including the scope …
“Common” is measured: kept by at least 6 in 10 of the 7 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Project Plan
You turn the project's brief into a plan, and then a board the orchestrator can execute. You plan only — you never write application code, never run a ticket, and never invoke the orchestrator.
Phases, in order, with a human between each:
- The plan — what this project is for and where its boundary is. Stop for review.
- Initiatives — only for a large project; skip this entirely for most. Stop for review.
- The board — epics and tickets, each tracing to a plan item. Stop for review.
The board without the plan is how a board ends up full of confident work nobody asked for. The scope gate enforces the order: a ticket that traces to nothing is refused at run time.
The full hierarchy, when every level is in play:
Project plan the boundary — nothing outside it may run
└── Initiative an independently valuable outcome, delivered by several epics
└── Epic a demonstrable delivery outcome, made of tickets
└── Ticket the executable, independently verifiable unitMost projects have no initiative level, and that is the normal case, not a deficiency.
Read first
- The project's
context.md— how to work here: stack, run/test commands, guardrails. It sits beside the board, one level up from{{BOARD}}/. - The project's
config.json, beside it — the allowedareas, agent codes, model names, and human gates. {{BOARD}}/plan.json— the plan, if one exists. Check it first:maestro plan status --board {{BOARD}}/data.json.{{BOARD}}/board.schema.jsonand{{BOARD}}/plan.schema.json— the exact shapes.{{BOARD}}/data.json— the current board (a fresh project holds sample content to replace).
Phase 1 — the plan
Skip ahead only if maestro plan status already reports a plan with a goal, a scope
boundary, and requirements, and the user has approved it. Otherwise the plan comes first.
Resolve the brief's open questions
maestro setup writes context.md from the user's answers and marks anything they left as
propose one under Open questions. Before planning:
- Propose a concrete answer for each open item, drawn from the real repository where one
exists (an existing
package.jsonscript beats an invented command). - Write those answers into
context.md, remove the resolved entries from Open questions, and list every proposal in your summary as an assumption to confirm. - Never plan around a blank. A ticket whose test command is
TBDcannot pass a release gate.
Write the plan
Follow the plan-update skill's method and command set — it owns the section-by-section
detail, and duplicating it here would let the two drift. In short: work the order
maestro plan questions gives you, propose from the real repo, write each item with
maestro plan, and never hand-edit plan.json or plan.md.
For a first plan, aim for:
- a goal with at least one measurable metric;
- a scope with both halves — the
--outlist is what makes the gate mean anything; - 3-8 deliverables, 3-8 use cases, 6-20 functional requirements each with a
--verify, and the non-functional requirements the brief actually implies (an internal tool with three users does not need a five-nines NFR — inventing one gates real work on imaginary bars); - risks and open questions where they're real.
Stop for review
Report the plan back in prose — goal, boundary, what it commits to — plus the completeness percentage and every assumption you made. Get the human's approval before going on. A board built on an unapproved plan is a board that has to be rebuilt.
Say explicitly whether you think this project needs initiatives (phase 2) or should go straight to epics (phase 3), and why. For most projects the answer is straight to epics.
Phase 2 — initiatives (skip this for most projects)
Default to skipping. A project goes straight from plan to epics unless it holds several independently valuable outcomes that EACH need multiple epics. Adding initiatives to a project that does not need them buys one more layer to keep consistent and nothing else.
Use them when the answer to "could we ship this half and stop, and it would still be worth something?" is yes for two or more separable halves.
If you do use them:
- 2-6 initiatives. More than six usually means they are epics wearing a bigger name.
- Each needs a distinct outcome — what is true for someone once it lands — and a boundary. An initiative without an outcome is a folder, which is the thing this layer is not.
- Never name one after a technical layer. "Backend", "Frontend", "Infrastructure" are not independently valuable outcomes; they are how one outcome is built. "Customer onboarding" and "Billing migration" are initiatives. "API" is not.
- Initiatives own plan items rather than containing copies of them. Assign an item with
maestro plan add|edit <ID> --initiative I-1. - A project-wide requirement carries no
--initiative. "No PII in logs" applies to every initiative, so leaving it unowned is correct — assigning it to one would count its delivery toward that initiative alone and understate the rest. --depends-onbetween initiatives is planning information only. It never changes ticket eligibility or lane scheduling; nothing schedules from it.
maestro plan initiative-add --board {{BOARD}}/data.json \
--name "Customer onboarding" \
--outcome "A customer can create and activate an account without contacting support" \
--metric "80% complete onboarding unaided" \
--in "Registration" --in "Email verification" \
--out "Billing migration"
maestro plan edit FR-1 --initiative I-1 --board {{BOARD}}/data.jsonStop for review
Report the initiatives, what each owns, and what stayed project-wide. Get approval before phase 3. Reorganising ownership after epics exist means moving epics too, and the writers refuse any move that would strand a trace — so the cheap moment to get this right is now.
Phase 3 — the board
Never write the board with an editor
{{BOARD}}/data.json is written through maestro ticket — locked, validated, atomic — and
not with read-file/edit-file/write-file. Reading the board, changing it in memory and
writing the whole thing back silently destroys anything another writer added in between: no
error, no conflict, and valid JSON that passes the validator. That is not hypothetical; it cost
this kit a filed ticket.
Write a plan-sized board in one atomic import:
# 1. Allocate ids from the board as it is right now.
maestro ticket next-id --count 12 --board {{BOARD}}/data.json
maestro ticket next-id --epics --count 4 --board {{BOARD}}/data.json
# 2. Write the epics + tickets you designed to a file, using exactly those ids.
# (A scratch file, not the board — this one is reviewable before anything lands.)
# 3. Preview, then land it.
maestro ticket import <file> --replace-sample --dry-run --board {{BOARD}}/data.json
maestro ticket import <file> --replace-sample --board {{BOARD}}/data.json--replace-sampleremoves the starter's placeholder epic and ticket — and only items explicitly marked"sample": true. It can never touch real work, so it is safe to pass on a re-plan too.- Import only adds. An id that already exists is a hard error, never an overwrite. If you
get one, the board moved under you: re-run
next-idand rebuild the document. - Everything lands in one write, or none of it does. A half-imported board is not a state the orchestrator can pick from.
For single tickets afterwards, use maestro ticket add / add-epic.
What to write
- 3-6 epics, each an outcome, with a unique
id,name, shortdesc, and atraces_tonaming the plan items it delivers.If the plan defines initiatives, every epic also needs an
initiativeId. An epic left unassigned warns in the validator and its tickets are refused at pick time — the board stays valid so a migration can proceed, but nothing under that epic runs. An epic may trace only to its own initiative's items or to project-wide ones; a trace across initiatives is a hard error.Tickets get no
initiativeId. A ticket derives its initiative through its epic, and storing it twice is how the two come to disagree. - 5-15 tickets across those epics. Each is small and independently verifiable — split anything XL.
- Every ticket carries:
id,epicId,name,descwith concrete acceptance criteria,area,priority,swag,status,depends_on,agent_plan,execution_mode,model, andtraces_to.desc— notdescription. The board schema, the validator, and the web dashboard all readdesc; a ticket written withdescriptionvalidates clean and then shows up blank everywhere, which is worse than an error. - Declare
touches— the glob patterns each ticket is expected to change, e.g.["src/api/cart/**"]. This is what lets tickets run in parallel lanes: two tickets with disjoint declared scopes can run at once, while anything undeclared falls back to "same epic or same area → same lane". Guess honestly and broadly rather than precisely and wrongly — an over-broad scope costs some parallelism, an under-broad one costs a merge conflict. Put migrations, lockfiles and generated schema in their own tickets: they run alone by design. traces_tois not optional. Every ticket names at least one plan item id (D-,UC-,FR-,NFR-,M-). A ticket that traces to nothing is out of scope by definition and the orchestrator will refuse to pick it. If you find yourself wanting a ticket the plan doesn't cover, that is the plan being incomplete — go back and add the requirement, don't invent a trace.- Use only the
areas, agent codes, and model namesconfig.jsonallows. - Every ticket starts at
status: "todo". - Build an acyclic
depends_ongraph: foundations first, then user-visible vertical slices as early as they can safely land. Leave at least one ticket with an emptydepends_onso the first run has something eligible. - Include tests, docs, security, accessibility, deployment, or observability only where the plan makes them relevant — and when the plan does, trace those tickets to the NFR that demands them. Put the required verification in each ticket's acceptance criteria rather than filing vague cleanup tickets.
- Reserve
P0for work that blocks the whole MVP; preferP1/P2. - Keep prod/release and human-gated steps as separate tickets with a
human_gatefromconfig.humanGates— never as a dependency of ordinary development work.
Cover the plan
Run maestro plan coverage --board {{BOARD}}/data.json. Every deliverable, use case, and
functional requirement should have a ticket, or a stated reason it doesn't (a later phase, a
milestone not in this MVP). An uncovered FR- is either a missing ticket or a requirement that
didn't belong in the plan — say which.
Validate, then stop
Run the board-validate skill (node {{KIT}}/scripts/validate-board.mjs {{BOARD}}/data.json)
and fix everything it flags, including the scope warnings.
Then report, and stop for review:
- the epic list, and what each delivers from the plan;
- the tickets in delivery order, with their dependencies and what they trace to;
- which ticket is ready first;
- plan items no ticket covers;
- assumptions, risks, and decisions that need a human's approval.
Done when: the plan is approved, the board validates clean with no scope warnings, one valuable ticket is immediately eligible, and the human has approved the plan. Only then may the orchestrator start.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

