agentleFS
my-chiefmindmy-chiefmind/ai-maestro/skills/plan-update/SKILL.md

plan-update

Skill6 starsChanged 48 days agoMITView on GitHub

Fill in the project plan section by section, as a conversation: goal, scope, deliverables, use cases, functional and non-functional requirements, milestones, risks — plus triaging gaps other skills raised. Raises the plan's completeness percentage. Use for /plan-update, when the plan is below 100%, when a report says the plan is missing something, or whenever the user wants to add to the plan.

2 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

9 rules. About 0 are common, 6 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈6

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    If the plan is already 100% with no open gaps, say so and ask what they want to change instead of marching through sections that are done.

    line 29
  2. Very specific:

    Every write goes through maestro plan — locked, validated, atomic, and it re-renders plan.md for you.

    line 55
  3. Very specific:

    All take --board {{BOARD}}/data.json.

    line 100
  4. Distinctive:

    Don't pad. Six real requirements beat twenty generated ones, and every entry you invent is something a ticket may later be gated against.

    line 118
  5. Distinctive:

    When to propose one — ask for it whenever a requirement is:

    line 138
  6. Distinctive:

    If no check exists yet, say so plainly and offer to file a ticket that writes one, rather than inventing a command that doesn't run.

    line 145
  7. Distinctive:

    Don't push for one everywhere.

    line 149
  8. Distinctive:

    every item you wrote, by id.

    line 176
  9. Very specific:

    If the board already has tickets, run maestro plan coverage --board {{BOARD}}/data.json and say which plan items no ticket is working — and …

    line 181

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Plan Update

You fill in {{BOARD}}/plan.json — the project plan every epic and ticket is scoped against — by talking to the user one section at a time. You do not write tickets, you do not touch data.json, and you do not implement anything.

The plan has a completeness percentage. Your job is to raise it, honestly. A section filled with a plausible guess the user never confirmed is worse than one left empty: the empty one still shows up as missing.

Start by looking, not asking

maestro plan status --board {{BOARD}}/data.json
maestro plan questions --board {{BOARD}}/data.json --json

status gives the percentage, what each section holds, and every open gap. questions gives the sections still needing work in order, each with the question to ask and what's already recorded. Work that order — it goes goal → scope → deliverables → use cases → functional → non-functional → milestones → risks → open questions, because each answer makes the next question easier to answer.

If the plan is already 100% with no open gaps, say so and ask what they want to change instead of marching through sections that are done.

Two ways in — follow the user's lead

They just tell you what to add. "Add a requirement that exports are CSV." Don't run a questionnaire at them. Write it, confirm what you wrote, and mention the new percentage.

They want to go through it. Then take one section at a time:

  1. Show what's there. The current entries, verbatim. Never a summary — they need to see the actual words to know what's wrong with them.
  2. Ask the section's question (from maestro plan questions), plus the follow-up when the section has one. Ask it as a person would, not as a form.
  3. Offer a concrete proposal. Draw it from the real repository and from context.md — an existing package.json script beats an invented command, and an existing route beats an imagined feature. Say where you got it.
  4. Write what they agree to, one maestro plan call per item.
  5. Say the new percentage, then move to the next section. Do not batch eight sections and write at the end — a plan half-written when the conversation ends should still be saved.

Between sections, ask whether they want to keep going. Someone who wanted to add one requirement should not be held hostage to a nine-section interview.

Writing it

Every write goes through maestro plan — locked, validated, atomic, and it re-renders plan.md for you. Never edit plan.json or plan.md with an editor, and never write plan.md at all: it is a generated mirror and your changes to it are discarded on the next write.

maestro plan set-goal --text "..." --metric "..." --metric "..."
maestro plan scope --in "..." --out "..."          # --out creates an OUT- id the gate enforces
maestro plan add deliverables  --text "..."
maestro plan add useCases      --text "..." --actor "..."
maestro plan add functional    --text "..." --verify "..."
maestro plan add nonFunctional --text "..." --budget "..." --verify "..."
maestro plan add milestones    --text "..." --target "..."
maestro plan add risks         --text "..." --mitigation "..."
maestro plan add openQuestions --text "..."
maestro plan edit FR-3 --verify "npm run test:api"
maestro plan remove FR-3                            # refuses if tickets trace to it

If the plan uses initiatives

Most plans do not — see the project-plan skill for when they are worth it. When they are:

maestro plan initiative-add --name "..." --outcome "..." [--metric ...] [--in ...] [--out ...]
maestro plan initiative-edit I-1 --outcome "..."    # list flags REPLACE, they do not append
maestro plan initiative-remove I-1                  # refuses while anything references it
maestro plan add functional --initiative I-1 --text "..." --verify "..."
maestro plan edit FR-3 --initiative I-2             # move it
maestro plan edit FR-3 --clear-initiative           # make it project-wide again
  • Leave a project-wide requirement unowned. "No PII in logs" applies to every initiative; assigning it to one counts its delivery toward that initiative alone and understates the others. Omitting --initiative is the correct action, not an omission.
  • Ownership is legal on deliverables, use cases, functional and non-functional requirements, milestones and risks. Gaps and open questions stay project-level and the CLI refuses the flag there.
  • Changing ownership can invalidate the board: an epic or ticket in another initiative may already trace the item you are moving. The command reads the board and refuses with every conflicting id listed, before writing anything. Reassign or re-trace those first (maestro ticket edit-epic, maestro ticket retrace).
  • initiative-remove has no --force, unlike remove. A dangling trace is a state the orchestrator simply refuses; a dangling initiative is one nothing can mean.

All take --board {{BOARD}}/data.json. Exit 2 means the plan moved under you — re-read and re-run the same command. Exit 1 means the request was wrong; retrying won't help.

What good looks like, per section

SectionThe bar
GoalOne outcome, plus at least one metric someone could actually measure. "Better UX" is not a goal.
ScopeBoth halves. The out list is the one that does work — it's what the scope gate refuses tickets against, and it's where "can you just also…" goes to be answered once.
DeliverablesNouns that will exist: a service, an app, a pipeline, a document. Not activities.
Use casesAn actor and what they're trying to get done. If you can't name who does it, it isn't one.
FunctionalOne behaviour per entry — an entry with "and" in it is usually two. Each needs a --verify: a test command, a manual check, a metric. Without one, the release gate has nothing to check.
Non-functionalA measurable bar, not an adjective: p95 < 300ms, WCAG 2.2 AA, 99.9% monthly, no PII in logs. An NFR with no --budget can't be gated and the plan will say so.
InvariantsFor any rule that must never be violated, add --enforce "<command>". See below — this is the difference between a rule the agents are asked to honour and one they cannot break.
MilestonesOnly if they mean something. An invented three-phase roadmap is noise.
RisksWhat could sink this, and what's being assumed without having been checked.
InitiativesOnly for a project with several independently valuable outcomes, 2-6 of them, each with a distinct outcome and boundary, never named after a technical layer. Progress is derived from the board and shown read-only — it is never something you write.

Don't pad. Six real requirements beat twenty generated ones, and every entry you invent is something a ticket may later be gated against.

Rules that must never break — --enforce

--verify describes how a human would check a requirement. --enforce is a command that runs and must exit 0:

maestro plan add nonFunctional --text "Every patient query is clinic-scoped" \
  --budget "zero unscoped queries" --enforce "npm run check:tenant-scope"
maestro plan edit FR-3 --enforce "npm run lint:no-raw-sql"
maestro plan check                    # runs them all — belongs in CI

Why it matters: an instruction in a brief is something a confident model can talk itself past. A command that exits non-zero is a fact about the repository, and it holds for human commits too. The release gate runs the invariants a ticket traces to, and a failure is a hard no-go — never weighed against how good the change looks.

When to propose one — ask for it whenever a requirement is:

  • a security or privacy rule (tenant scoping, no secrets in logs, encryption at rest);
  • a data-integrity rule (no destructive migration without a backup step);
  • a budget you already stated a number for (bundle size, p95, coverage floor);
  • anything the user describes with "must never" or "always".

If no check exists yet, say so plainly and offer to file a ticket that writes one, rather than inventing a command that doesn't run. An --enforce pointing at a script that isn't there is worse than none: it fails for the wrong reason and teaches people to ignore it.

Don't push for one everywhere. Most requirements are fine checked by judgment, and the plan reports which those are without treating it as a defect.

Triaging gaps

Other skills — atomic-report, repo-audit, scale, data-model, orchestration-health — file what they find as gaps against this plan. Open required gaps hold the percentage down; optional ones never do. Each needs a human decision:

maestro plan gap-set G-2 --status accepted --resolved-as NFR-4   # you added it to the plan
maestro plan gap-set G-3 --status declined                       # deliberately not doing it
maestro plan gap-set G-4 --need optional                         # it was over-classified

Walk the required ones first. For each: show it, say which skill raised it and what it means for this project, and propose the plan item it should become. Accepting a gap means writing the real item first (maestro plan add …), then pointing --resolved-as at the id you got back. A gap marked accepted with nothing to show for it is how the percentage starts lying.

Declining is a legitimate answer and should be an easy one — say so.

Then stop

Report:

  • the percentage before and after, and which sections you filled;
  • every item you wrote, by id;
  • gaps triaged, and how;
  • anything you proposed that the user should double-check;
  • what's still missing, and whether it matters yet.

If the board already has tickets, run maestro plan coverage --board {{BOARD}}/data.json and say which plan items no ticket is working — and which tickets now trace to nothing, because those just became ineligible.

Never plan the work from here. Turning a plan into epics and tickets is the project-plan skill's job, and it needs a human's go-ahead first.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.