mmpf-plan
Derive requirements and create a phased execution plan. Use after discussion or research to crystallize what we know into actionable work. Creates REQUIREMENTS.md and per-phase PLAN.md files with verifiable truths. Trigger: "let's plan", "ready to plan", "create a plan", "/mmpf-plan".
/mmpf-plan — Plan from Knowledge
Derive requirements and create a phased plan.
Prerequisites
.mmpf/STATE.mdmust exist
Steps
1. Review what we know
Read .mmpf/STATE.md and .mmpf/RESEARCH.md (if it exists).
If RESEARCH.md exists, summarize:
- Key findings and decisions made during research
- Open questions that might affect planning
- Any experiments and their takeaways
If no RESEARCH.md, work from the discussion context — STATE.md and the current conversation.
Present this summary to the user. Ask if there's anything else to figure out before we plan, but don't push — if they say "let's plan", plan.
2. Derive requirements collaboratively
This is a conversation, not a form. Work with the user to identify what the project needs to deliver.
Start by proposing requirements based on what we know (from research, discussion, or both). Present them as a draft:
Based on what we've discussed, here's what I think we need:
AUTH-01: Users can sign in with email/password
AUTH-02: Session tokens expire after 24 hours
DATA-01: Import supports CSV and JSON formats
...
What would you add, remove, or change?
Iterate until the user is satisfied. Then:
- Write
.mmpf/REQUIREMENTS.mdwith categorized requirement IDs - Include an Out of Scope section for things explicitly excluded
See references/artifact-formats.md for the full format.
3. Create phased plan
Break the requirements into phases using goal-backward thinking: "What must be true when this phase is complete?"
For each phase, determine:
- Goal — one sentence describing the end state
- Dependencies — which phases must complete first
- Requirements — which requirement IDs this phase covers
- Success criteria — 2-5 observable, verifiable truths
Present the phase breakdown to the user for feedback. Iterate if needed.
Then for each phase, create .mmpf/phases/NN-name/PLAN.md with:
- Frontmatter: phase number, name, requirements, dependencies
- Goal
- Truths (verifiable assertions — these drive verification in DONE.md)
- Tasks with descriptions and acceptance criteria
See references/artifact-formats.md for the full PLAN.md format.
4. Identify threats
For each phase, scan its tasks for security-relevant work — anything involving authentication, authorization, data handling, external input, secrets, network boundaries, or file system access.
If threats exist, add a ## Threats section to that phase's PLAN.md:
## Threats
- **T1**: <what could go wrong> → <mitigation approach>
- **T2**: <what could go wrong> → <mitigation approach>
Each threat needs a concrete mitigation, not "be careful." These are verified during execution — a threat without a mitigation blocks phase completion.
Phases with no security-relevant work skip this section entirely.
5. Verify coverage
Spawn a subagent to check:
- Every requirement ID appears in at least one phase's PLAN.md frontmatter
- Every phase has at least one verifiable truth
- Dependencies don't form cycles
- Every threat has a mitigation (not just a description)
Handling partial coverage: If a requirement is large enough that one phase only covers part of it, split the requirement into sub-IDs (e.g., AUTH-01a, AUTH-01b) so each phase's frontmatter accurately reflects what it delivers. Every sub-ID should be independently verifiable. Don't leave a requirement listed in a phase that only partially implements it — that creates false confidence during verification.
Report any gaps or recommended splits to the user.
6. Update state
Update .mmpf/STATE.md:
stage:planning(orexecutingif plan is approved and user wants to start)updated: today's date- Current Focus: summary of the plan
- Next Step: "Run
/mmpf-executeto begin phase 1" (or whichever phase is first)
Principles
- Requirements come from what we know. Don't invent requirements that aren't grounded in the discussion or research. If something feels missing, ask the user.
- Phases are small. Each phase should be completable in one or two sessions. If a phase feels too big, split it.
- Truths are testable. Every truth should be verifiable by running a test, checking a file, or observing a behavior. "Code is clean" is not a truth. "All public functions have typed parameters" is.
- Plans are living documents. It's fine to update a PLAN.md during execution if we learn something new. The plan serves us, not the other way around.