Skip to content
Back to skills

Add Framework Plan

ASecurity

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.

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 29, 2026
developmentgobashnode

Works with

  • cli
  • mcp

Security analysis

A100/100

Scanned September 29, 2026

npx -y skills add brabos-ai/code-addiction --skill add-framework--plan --agent claude-code

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.

Security grade badge for Add Framework  Plan
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/brabos-ai-add-framework-plan/badge)](https://www.skillsdirectory.com/skills/brabos-ai-add-framework-plan)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.