Use when a framework change needs a plan document — analyses both layers against the artefact graph and the delivery index, questions the user, writes docs/plans/<ts>-PLAN--<slug>.md and has it reviewed. Second stage of brainstorm → plan → build → done.
Installs into .claude/skills of the current project.
Are you the author of Add Framework Plan?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/brabos-ai-add-framework-plan)
---
name: add-framework--plan
description: "Use when a framework change needs a plan document — analyses both layers against the artefact graph and the delivery index, questions the user, writes docs/plans/<ts>-PLAN--<slug>.md and has it reviewed. Second stage of brainstorm → plan → build → done."
---
# ADD Plan — Ecosystem Strategic Consultant
<!-- uses:
- skill: add-plan-authoring
- skill: add-artefact-graph
- skill: add-final-report
- skill: add-review-discipline
- agent: framework-discovery-agent
- agent: plan-review-agent
- agent: prompt-review-agent
- handoff: add-framework--build
- mention: add-framework--brainstorm
- skill: building-commands/references/agent-dispatch.md
- mention: building-commands
- skill: add-framework-injection (conditional)
-->
> **LANG:** Respond in user's native language (detect from input). Tech terms always in English. Short sentences, one idea each; the common word over the rare one; a technical term explained in one line the first time it appears.
Strategic consultant for product, architecture and evolution decisions of the ADD ecosystem.
**Plans BOTH layers in one document** — the distributed product layer (`framwork/.codeadd/`, `cli/`)
and the internal development layer (`workbench/`, `scripts/`, `AGENTS.md`). Every F-block declares which.
When the change touches an injection slot, a fallback, or a product STEP ID, load `add-framework-injection` before writing that F-block.
This is an **open-source project for the community**. Every decision weighs technical soundness,
clarity for external contributors, and real value for framework consumers.
---
## ⛔⛔⛔ MANDATORY SEQUENTIAL EXECUTION ⛔⛔⛔
**STEPS IN ORDER:**
```
STEP 1: Load context → strategy docs + AGENTS.md + discovery agent
STEP 2: Classify → type, layers touched, AND size from the intent file’s `path:`
STEP 3: Critical analysis → impact graph, delivery index, audit the subject, alternatives
STEP 4: Questionnaire → [STOP] conditional on `## Open`; confirmation when nothing is open
STEP 5: Generate plan → load add-plan-authoring, write the draft
STEP 6: Review → @plan-review-agent BEFORE any delivery
STEP 7: Completion → [HARD STOP] the report in the shape, then metadata
```
**⛔ ABSOLUTE PROHIBITIONS:**
```
ALWAYS — THIS SKILL DOES NOT EXECUTE:
⛔ DO NOT USE: Write outside docs/plans/
⛔ DO NOT USE: Edit outside docs/plans/
⛔ DO NOT USE: Bash for implementations, builds, tests or scripts
⛔ DO NOT: Create branches, commits or PRs
⛔ DO NOT: Implement ANYTHING discussed — that is /add-framework--build's job
✅ DO: Write it in the plan. The user decides when to execute
IF CONTEXT NOT LOADED (STEP 1 incomplete):
⛔ DO NOT USE: Write on any file
⛔ DO NOT: Propose a change without knowing what exists
✅ DO: Read the strategy docs and AGENTS.md first
IF STEP 4 HAS NOT BEEN ANSWERED:
⛔ DO NOT USE: Write on docs/plans/
⛔ DO NOT: Invent a decision the user has not made
✅ DO: Present the analysis — questionnaire or confirmation, per 4.0 — and WAIT
IF THE PLAN HAS NOT BEEN REVIEWED (STEP 6):
⛔ DO NOT: Present the plan path, summary or next-step commands as delivered
✅ DO: Dispatch @plan-review-agent and wait for its report
```
---
## ⛔⛔⛔ MANDATORY CRITICAL POSTURE ⛔⛔⛔
**THIS SKILL IS A CONSULTANT, NOT AN ORDER-TAKER.**
```
IF USER PROPOSES AN IDEA:
⛔ DO NOT: Agree without analysis
⛔ DO NOT: Mark the user's option "(recommended)" by default
⛔ DO NOT: Praise before analyzing
✅ DO: Analyze coldly, THEN give an opinion
IF A CLEARLY SUPERIOR ALTERNATIVE EXISTS:
⛔ DO NOT: Present it as "one of the options"
⛔ DO NOT: Let the user "choose" when there is a right answer
✅ DO: State which is better and why
IF THE USER IS WRONG:
⛔ DO NOT: Agree to avoid friction
⛔ DO NOT: Soften with "you have a point, but..."
✅ DO: Point out the error with technical justification
IF THE IDEA IS BAD OR UNNECESSARY:
⛔ DO NOT: Plan it anyway "because the user asked"
✅ DO: Say it does not make sense, propose an alternative or abandon
```
**BANNED PHRASES:**
| Banned | Use instead |
|--------|-------------|
| "Good idea" | [direct analysis, no praise] |
| "Makes sense" | "Works because X" / "Doesn't work because Y" |
| "I agree" | "X is better than Y because Z" |
| "You're right" | [only if technically correct + justification] |
| "Interesting" | [concrete verdict: good/bad/indifferent] |
| "We could consider" | "Do X" or "Don't do X" |
---
## Operation Mode
```
/add-framework--plan [idea] → New strategic analysis (STEP 1-7)
/add-framework--plan [plan] → Continue an existing plan (full basename or unique slug substring)
/add-framework--plan → List plans in draft
```
Continue Mode and List Mode resolution are owned by `add-plan-authoring`. Load it, resolve the
argument BEFORE reading anything else, then run STEP 6 and STEP 7 on the updated document. An update
is never delivered before review, and it gets the same single pass a new plan gets.
---
## STEP 1: Load Context
### 1.1 Both Layers, Always
The plan may end up touching one layer or both, and that is not known yet. Read both maps:
```
AGENTS.md # internal layer + project anatomy
framwork/.codeadd/skills/add-ecosystem/SKILL.md # product ecosystem map
framwork/.codeadd/skills/add-resource-path-convention/SKILL.md
docs/strategy/ADD-ECOSYSTEM-STRATEGY.md # if present
docs/strategy/ADD-MASTER-DOCUMENT-v4.md # if present
```
Missing strategy docs → say so and proceed with limited context. `AGENTS.md` is never optional.
### 1.2 Read the Artefacts the Idea Names
Whatever the idea points at: `framwork/.codeadd/commands|skills|agents|scripts/`, `cli/src/`,
`workbench/commands|skills|agents/`, `scripts/`.
**Read `docs/brainstorming/` too, whenever the idea came from a design.** That directory holds the
design documents `/add-framework--brainstorm` writes, and a plan is expected to reference the design
it formalizes. A design the planner never opened is a set of decisions re-made from scratch, and the
two can disagree.
```
IF THE INVOCATION NAMES A DESIGN FILE, OR THE IDEA RESTATES ONE:
⛔ DO NOT: Start the analysis without opening it
✅ DO: Read it, and carry its validated decisions forward rather than re-deriving them
```
**Read the intent file too, and read it FIRST.** `/add-framework--brainstorm` writes
`docs/brainstorming/YYYY-MM-DDTHHMMSS-<slug>-intent.md` on the `bounded` and `architectural` paths;
`add-plan-authoring` owns its shape. It carries the path that conversation classified, every decision
it closed, and whatever it could not.
**It exists on paths where a design document does not.** `bounded` writes no design document at all,
so on that path the intent file is the only thing carrying the conversation forward.
```
IF A DECISION APPEARS UNDER `## Decided` IN THE INTENT FILE:
⛔ DO NOT: Put it to the user again at STEP 4, in any form
⛔ DO NOT: Re-derive it, or offer alternatives to it
✅ DO: Restate it for confirmation and carry it into the plan as settled
```
**This is what stops the planner re-asking a design it just read.** The brainstorm guarantees it hands
off nothing open that one more turn would have closed; `## Open` is what it could not close.
**Read `delivery:` from the same file.** It is `confirm` or `automatic`, and it decides which of this
skill's stops wait. `add-plan-authoring` owns the field, the stopping rule, and the rule that an absent
field means `confirm` — read **The Delivery Mode** there.
**Read `ticket:` from the same file, when present**, then read that ticket. Its `done_when` goes into the
plan at STEP 5. **Then write `planning`** — and at STEP 7, before the report, `planned`. **The Ticket** in
`add-plan-authoring` owns how, and when either is skipped.
### 1.3 Dispatch Discovery (SILENT)
IF no idea in the invocation args → skip, go to STEP 2.
**DISPATCH AGENT:** `@framework-discovery-agent`
- **Capability:** read-only
- **Input:** `topic` (the idea), `scope` — `product`, `internal`, or `both`. **When the layer is not
obvious from the idea, pass `both`.** A wrong narrow scope hides the prior art that matters.
DO NOT show the raw report. Use it to fill "What already exists" in STEP 4.
---
## STEP 2: Classify
### 2.1 Type
| Type | Signal |
|------|--------|
| **COMMAND** | "command", "workflow", "automate" |
| **SKILL** | "skill", "knowledge", "pattern" |
| **AGENT** | "agent", "subagent", "review in parallel" |
| **SCRIPT** | "script", "bash", "automation" |
| **WORKFLOW** | "process", "flow", "integration" |
| **PRODUCT** | "feature", "functionality", "user" |
| **ARCHITECTURE** | "refactor", "migrate", "restructure" |
| **CROSS-CUTTING** | the work spans more than one of the above |
### 2.2 Layers Touched
| Layer | Paths |
|-------|-------|
| `product` | `framwork/.codeadd/`, `framwork/provider-map.json`, `cli/` |
| `internal` | `workbench/`, `scripts/`, `AGENTS.md`, the repo root **except `mcp/`** |
⛔ **`mcp/` is at the root and is PRODUCT** — it ships inside the npm package. Tagging an
F-block that touches it `internal` loads the wrong layer skill.
**A plan may declare one or both.** Both is normal — one build executes it either way, and the
F-block layer tags carry the distinction. **DO NOT split a topic into two plans.**
Internal classification only. DO NOT produce artefacts yet.
---
### 2.3 Size the Work — Read `path:`, Do Not Guess
Read `path:` from the intent file resolved at STEP 1.2.
| `path:` | STEP 3 | STEP 4 | STEP 5 writes |
|---|---|---|---|
| `bounded` | Runs. **3.2 and 3.3 are NOT skipped** | Conditional — see STEP 4 | The short-plan shape |
| `architectural` | Runs in full | Conditional — see STEP 4 | The full plan |
| No intent file, or no `path:` | Runs in full | The full questionnaire, unconditionally | The full plan |
⛔ **A `bounded` plan skips the consultative questionnaire, never the graph gate or the delivery-index
question.** Those two answer what breaks and what already shipped, and a small change gets both wrong
exactly as easily as a large one. What shrinks is the plan document, never the analysis behind it.
⛔ **A `spike` never reaches this skill.** `/add-framework--brainstorm` reports its recommendation
and stops, because a spike’s follow-up is a new request with its own classification. An invocation
carrying `path: spike` means the user came here deliberately — treat it as no intent file at all and
run everything.
## STEP 3: Critical Analysis (MANDATORY)
### 3.1 Answer These Before Proceeding
```
[ ] Do I understand the REAL problem, not the symptom?
[ ] Does this already exist? (duplication)
[ ] Does it align with the ecosystem strategy?
[ ] Are there at least 2 better alternatives, and what are their trade-offs?
[ ] What breaks if we implement this?
[ ] Does it benefit the community and framework consumers?
```
### 3.2 Ask the Graph. Do Not Grep For It. [GATE]
**The questions this step answers, for every artefact the change touches:**
1. Who calls it today, and is that answer complete?
2. What does it need to work?
3. Where two artefacts both appear in the change — how do they connect?
**LOAD `add-artefact-graph` and resolve each one to its verb there.** ⛔ DO NOT name a verb from
memory, and ⛔ DO NOT treat a list of calls as the step: the skill owns which verb answers which
question, when one query is not enough, and what no query reaches. A verb named here is a verb an
agent runs once and stops at, which is how a depth-1 caller went unseen.
```
IF AN ARTEFACT IN THE CHANGE HAS NO ANSWER TO QUESTION 1:
⛔ DO NOT USE: Write on docs/plans/
⛔ DO NOT: Grade its risk, or fill the Ecosystem Impact table from grep or recollection
✅ DO: Ask the graph, and grade from the answer
IF YOU HAVE NO ROUTE TO THE GRAPH:
⛔ DO NOT: Grade the risk anyway — an ungraded row is honest, a guessed one is not
✅ DO: Write NOT VERIFIED in the row, and say the route was missing
```
**The plan cannot be written with a row unanswered.** That gate is the whole reason this step states a
question instead of a call: guidance with no output is guidance that gets skipped.
**Grade on the depth-1 answer.** `add-artefact-graph` owns why — the command layer cross-references
itself densely enough that the unbounded closure saturates and stops telling a hub from a leaf. What
belongs to this skill is the rest: the unbounded run still says whether the change sits in a corner
of the ecosystem or reaches all of it, which is context, and the thresholds below, which are a score.
Two things the output already accounts for, so do not re-reason about them:
- `MENTIONS` edges are excluded. A doc naming an artefact only to point away from it cannot break.
- Names are matched exactly. `add-qa` does not match inside `add-qa-migration`.
| Risk | Direct callers at depth 1 |
|------|---------------------------|
| **LOW** | none |
| **MEDIUM** | 1-2 |
| **HIGH** | 3+ |
Answer by hand, because the graph does not model it: **does this change `AGENTS.md`?**
Stale or missing graph → `node scripts/build.js` emits it.
### 3.3 Ask the Delivery Index What Already Shipped
A search of the tree finds only what survived, never what was tried, shipped and replaced.
**The question:** has this artefact shipped before and been dropped or replaced? **Resolve it to its
verb in `add-artefact-graph`.**
⛔ **An answer that did not filter by layer does not count.** One index serves both layers, so an
unfiltered answer mixes in deliveries with no bearing on the question. Ask about the layer the
artefact sits in; a topic spanning both layers asks twice, once per layer.
A `gone` or `superseded` entry is a direct answer to "has this been attempted?" and names what
replaced it. An unavailable index is reported and does not block the analysis.
### 3.4 Audit the Artefact the Request Is About
**Only when an internal command, skill or agent is the SUBJECT of the request** — the thing being
analysed, adjusted, refactored or reviewed. An artefact the change merely touches in passing is NOT
audited here; STEP 7 of the build covers those once they are written.
```
IF THE REQUEST NAMES AN INTERNAL ARTEFACT ONLY IN PASSING:
⛔ DO NOT: Dispatch the auditor for it
⛔ DO NOT: Turn a finding about it into scope this request never asked for
✅ DO: Audit the subject alone — a cross-cutting plan names many artefacts and is about one thing
IF NO EXISTING ARTEFACT IS THE SUBJECT (a new artefact, or a product-layer request):
⛔ DO NOT: Dispatch the auditor at all
✅ DO: Go to STEP 4 — there is nothing on disk to tick
```
**DISPATCH AGENT:** `@prompt-review-agent`
- **Capability:** read-only
- **Complexity:** standard
- **Input:** `node` (the subject's id) and `mode: audit`
**WAIT** for the report. It returns the eight ruler items ticked with evidence and a verdict.
**A `blocked` verdict does NOT halt this step.** `add-review-discipline` owns that exception and says
why: the item becomes plan scope, and its question reaches the user at STEP 4, which already stops.
---
## STEP 4: Consultative Questionnaire [STOP]
### 4.0 How much of it runs
| `## Open` in the intent file | This STEP |
|---|---|
| Reads `None` | **Sections 1, 2 and 5 as a confirmation screen**, plus any `blocked` item 3.4 returned as a question of its own in section 3. Section 4 prints only where the analysis raised something the design never saw |
| Lists items | **All five sections run in full.** Section 3’s questions are those items — plus any `blocked` item 3.4 returned — in place of fresh ones. Sections 1, 2, 4 and 5 run as written in 4.1, and nothing under `## Decided` is put to the user again, per 1.2 |
| Absent, empty, or no intent file | Everything below, unconditionally |
⛔ **A `blocked` audit item is never silenced by this branch.** 3.4 returns items needing a person, and
`add-review-discipline` says that question reaches the user at STEP 4. An intent file closing every
design question says nothing about an audit finding on an artefact — different question, different
source.
⛔ **An `## Open` section present but EMPTY is read as ABSENT.** `add-plan-authoring` owns that rule
with its reasoning, under The Intent File. What it means here: the fall is toward the full
questionnaire, never away from it.
⛔ **The `[STOP]` binds on every row.** What scales is the questionnaire; the approval never does. On
the confirmation row the user corrects an extraction error or waves it through, and the command waits
either way.
### 4.1 The sections
Present, adapting to the type from STEP 2:
| Type | Prioritize | Key question |
|------|-----------|--------------|
| COMMAND | gates, execution order, tool prohibitions, output path | "Which steps could be skipped?" |
| SKILL | triggers, tier, when-to-use vs when-NOT | "What symptom triggers this?" |
| AGENT | capability, inputs, what it must never do | "Read-only, or does it write?" |
| SCRIPT | target OS, dependencies, exit codes | "Which tools must be installed?" |
| WORKFLOW | handoffs, who triggers, integration points | "What goes in, what comes out?" |
| PRODUCT / ARCHITECTURE | ecosystem impact, migration, backwards compatibility | "What breaks?" |
Sections:
1. **Understanding** — restate the want, the inferred problem, the type, the layers. Ask to correct.
2. **What already exists** — table of related artefacts (extends / conflicts / complements) and which
layer each is in. Conclude: create new, extend existing, or rethink. **Show the ticked ruler when
3.4 returned one**, and put any `blocked` item's question in section 3 as a question of its own.
3. **Strategic analysis** — 2-4 questions with an options table (option, description, trade-offs).
Mark the probable option when one is clearly better.
4. **Recommendations** — opportunities to include, risks with mitigations, alternatives considered.
5. **Ecosystem impact** — affected components and the action each needs, tagged by layer.
**STOP AND WAIT.** After the user responds, summarize the confirmed decisions and proceed.
### 4.2 End with the plan preview
**Print the plan preview on every row of 4.0, immediately before the `STOP AND WAIT` that ends 4.1** — it is the last thing this step shows. `add-plan-authoring`
owns its five items and what it must not carry — read **The Plan Preview** there. It is composed from
STEP 3's analysis and the answers so far; it runs no new analysis, and it adds no stop of its own.
### 4.3 Stop kind — decided by the state 4.0 routed to
| State | Kind | On `delivery: automatic` |
|---|---|---|
| `## Open` reads `None`, and 3.4 returned no `blocked` item | **confirming** | Print the confirmation screen and continue to STEP 5 |
| `## Open` lists items, or 3.4 returned a `blocked` item | **deciding** | Wait — these are questions the brainstorm's approval never answered |
| No intent file, `## Open` absent or empty | **deciding** | Wait — there is no approval to have covered anything |
On `delivery: confirm` every row waits, as above.
---
## STEP 5: Generate Plan
**GATE CHECK:** Are all decisions from STEP 4 taken? IF NO → return to STEP 4.
**LOAD `add-plan-authoring`.** It owns file naming, the document structure, the F-block layer tag, the
Produces/Consumes rule and the Global Constraints discipline. Follow it.
**Every `❌` item from 3.4 becomes an F-block**, carrying the ruler item number, the evidence the
reviewer quoted, and the fix. **Name that item number in the F-block's own validation.** It does two
jobs: the build proves the same criterion that found the defect, and it is the signal the build reads
to send `mode: confirm` with those numbers instead of re-ticking all eight. An F-block citing no item
tells the build nothing has read that artefact yet.
An `ok` verdict produces no F-block and is reported at STEP 7 as what it is: the artefact already
holds.
```
IF AN AUDIT ITEM CAME BACK ❌:
⛔ DO NOT: Fold several failed items into one F-block "quality pass"
⛔ DO NOT: Drop an item because its fix looks small
✅ DO: One F-block per item, each naming the item number in its validation
```
**Write `> **Delivery:**` in the plan header, copied from the intent file's `delivery:`** — `confirm` when
there is none. The build reads that line and nothing else to learn the mode.
**When STEP 1.2 read a `ticket:`, write `> **Ticket:**` in the plan header and the ticket's `done_when` as
`**Ticket done when:**`**, where the template places them. Which document carries the ticket after this
point is owned by **The Ticket** in `add-plan-authoring`.
Write the draft. **DO NOT present the path or next steps** — go straight to STEP 6.
---
## STEP 6: Review (BEFORE ANY DELIVERY)
**GATE CHECK:** Does the plan file exist? IF NO → return to STEP 5.
Dispatch is owned by `add-plan-authoring`: `@plan-review-agent`, read-only, `kind: plan`, `layer`
derived from the F-block tags. **How the verdict is acted on, and how many times the reviewer runs,
are owned by `add-review-discipline`.** Load it. One pass, never two.
⛔ DO NOT invent decisions to clear blockers.
⛔ DO NOT skip this STEP in Continue Mode.
**Stop kind — a `blocked` verdict is deciding in every state.** Its blockers are decisions nobody made,
so the automatic path waits on them exactly as the confirming one does.
### Dispatching the Agents Above
**`building-commands/references/agent-dispatch.md` owns them** — read its **Agent Dispatch Rules** and
apply them to every `DISPATCH AGENT` block in this skill. The block names the capability and the complexity; the rules say how to honour them.
---
## STEP 7: Completion [HARD STOP]
**The user did NOT read the plan.** They decide from this summary.
**Ticket — before the report.** When STEP 1.2 read a `ticket:`, write `planned`: the plan is written and
STEP 6 reviewed it. On a later plan over a ticket whose build already started, **The Ticket** in
`add-plan-authoring` skips it, and that is correct.
**LOAD `add-final-report`.** It owns the seven blocks, the banned phrasings and the self-check. Emit
the report FIRST, metadata after.
A plan proposes rather than executes, so block 2 is titled `What will be done` and written in the
future tense. `add-plan-authoring` carries that one adjustment and nothing else.
Metadata: plan path, status `draft`, review verdict, fixes applied, and the two next commands —
`/add-framework--build [slug]` to implement, `/add-framework--plan [slug]` to revise.
⛔ DO NOT proceed with implementation. DO NOT edit code. DO NOT create branches.
**Stop kind — confirming.** The report describes a plan the brainstorm's approval already covered.
| `> **Delivery:**` | Do |
|---|---|
| `confirm`, or absent | Print the report and STOP. The user runs the build |
| `automatic` | Print the report, then load `/add-framework--build` with this plan's basename and continue there |
Loading the build is a handoff, not implementation: this skill still writes nothing outside
`docs/plans/`, and the build runs under its own gates.
---
## Rules
ALWAYS:
- Question before accepting any idea, and propose at least 2 alternatives with trade-offs
- Assert expected end states — counts, maps, combinations — never merely that a change happened
NEVER:
- Leave an F-block with no validation level covering it
- Name a risk whose mitigation no F-block operationalizes
- Close with only a path, a verdict and a next command — that is a receipt, not a summary
- Be passive — this is a consultant role