Skip to content
Back to skills

Aid Plan

ASecurity

Sequence feature SPECs into deliverables -- each one a functional MVP that builds on the previous. Strategy, not tactics. Use when feature SPECs are complete and you need a delivery roadmap.

  • 6 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
toolsgoshellbashgit

Works with

  • terminal

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned November 7, 2026

npx -y skills add AndreVianna/aid-methodology --skill aid-plan --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Aid Plan?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Aid Plan
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/andrevianna-aid-plan/badge)](https://www.skillsdirectory.com/skills/andrevianna-aid-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: aid-plan
description: >
  Sequence feature SPECs into deliverables -- each one a functional MVP that builds on the
  previous. Strategy, not tactics. Use when feature SPECs are complete and you need a
  delivery roadmap.
allowed-tools: Read Glob Grep Write Edit Bash Shell Terminal
argument-hint: "work-001 (required if multiple works)  [--reset] clear PLAN.md and restart"
---

# Delivery Roadmap

Sequence features into deliverables where each is a functional MVP that works on its own.

## Core Principle

Plan answers ONE question: **"In what order do we deliver, and does each delivery
stand on its own?"**

What Plan does NOT do (already covered by Specify):
- Module mapping, test scenarios, per-feature risks, technical details — all in SPEC.

## The Loop

Each deliverable follows the same cycle:

```
1. PROPOSE  → agent proposes deliverable grouping and sequence
2. DISCUSS  → the user and the agent negotiate (move, reorder, split, merge, defer)
3. WRITE    → save agreed deliverable to PLAN.md
4. REVIEW   → grade against SPECs/KB — pass? next deliverable. fail? back to 1.
```

**Re-run = enter at step 4 with existing PLAN.md.**

## Workspace

```
.aid/
  knowledge/                <- shared KB (read)
    STATE.md                <- minimum grade
  work-NNN-{name}/
    STATE.yml                <- frontmatter-zone keys (authored); Plan/Deliveries is DERIVED (never written here)
    REQUIREMENTS.md         <- read; § 11 holds the `### Feature NNN` sections
                            #  (check Features State in work STATE.yml)
    PLAN.md                 <- OUTPUT: delivery stanzas (each one the delivery
                            #  definition: objective, scope, gate criteria) + execution graph
    deliveries/
      delivery-NNN/           <- CREATED by aid-plan per delivery approved in PLAN.md
        STATE.yml              <- OUTPUT: delivery lifecycle (initial delivery_state: Pending-Spec) + gate key + qa key
```

> Note: `deliveries/delivery-NNN/` must exist before `aid-detail` nests `tasks/task-NNN/` under it.
> The work `STATE.yml`'s Plan/Deliveries view is a DERIVED read-only view assembled
> at read time from `deliveries/delivery-NNN/STATE.yml` files. `aid-plan` does NOT write delivery
> rows into the work `STATE.yml`.

## Arguments

| Argument | Effect |
|----------|--------|
| `work-NNN` | Plan a specific work. Required if multiple works exist. |
| *(no arg)* | Auto-selects if only one work exists. |
| `--reset` | Delete PLAN.md and start fresh. |

## ⚠️ Pre-flight Checks

### Check 1: Locate Work

1. If arg provided → use that work directory
2. If no arg → enumerate works **cross-worktree**: run
   `bash .aid/runtime/scripts/works/enumerate-works.sh` (main tree + every git
   worktree; never the local `.aid/works/` glob, which is empty on `master`), taking
   each record's field-1 `work_id`
3. Single record → auto-select it
4. Multiple records → list them, ask user to choose
5. Zero records on any worktree → **STOP.** "No works found. Run `/aid-describe` first."

### Locate + Enter the Work's Worktree

**As soon as Check 1 resolves the work id** and **before** Check 2 reads
`.aid/works/{work}/REQUIREMENTS.md § 11`, follow
`.aid/runtime/templates/downstream-worktree-entry.md` to normalize `<work-id>` to its bare
`work-NNN` branch name, `locate` the worktree (which **always exits 0** and returns
`<path>\t<status>`), and enter the returned path. Keep the defensive empty-path/non-zero backstop
that stops rather than operate blindly — it should not fire against the real helper. Never create
a new worktree — creation belongs to the work-starting skills only.

### Check 2: Verify Features

1. Read the `### Feature NNN` subsections of `.aid/works/{work}/REQUIREMENTS.md § 11`
2. Check work STATE.yml's Features State (derived view) — each feature should be `Ready`
3. No features → **STOP.** "Run `/aid-describe` then `/aid-specify`."
4. Some not Ready → warn, offer to plan with completed only or wait

### Check 3: Verify Not in Plan Mode

- ✅ `Default` or `Auto-accept edits` → Proceed.
- ❌ `Plan mode` → **STOP.**

## State Detection

State detection reads the files on disk, every run. Nothing remembered from an
earlier run or from this conversation counts as state, because the files may
have changed since.

- No PLAN.md → **FIRST-RUN**
- PLAN.md exists, grade below minimum or not yet graded → **REVIEW**
- PLAN.md exists, graded >= minimum, `deliveries/delivery-NNN/STATE.yml` written for all deliverables -> **DONE**

Print the state-entry line and "you are here" map:

**FIRST-RUN:**
```
[State: FIRST-RUN] — No PLAN.md found; begin dependency mapping and deliverable sequencing.
aid-plan  ▸ you are here
  [● FIRST-RUN ] → [ REVIEW ] → [ DONE ]
```

**REVIEW:**
```
[State: REVIEW] — PLAN.md exists; re-review deliverables against current SPECs and KB.
aid-plan  ▸ you are here
  [✓ FIRST-RUN ] → [● REVIEW ] → [ DONE ]
```

**DONE:**
```
[State: DONE] — Plan is complete and meets minimum grade.
aid-plan  ▸ you are here
  [✓ FIRST-RUN ] → [✓ REVIEW ] → [● DONE ]
```

## Inputs

- **All feature SPECs** — requirements, tech spec, priority, acceptance criteria
- **REQUIREMENTS.md** — scope boundaries, overall priority
- **KB via INDEX.md** — Read `.aid/knowledge/INDEX.md`, use summaries to pull
  relevant docs (typically architecture, module-map, tech-debt — but let the INDEX guide you)
- **Known Issues** — `.aid/works/{work}/known-issues.md` (if exists). Issues registered
  by Specify that block or affect features. Plan may create a fix-first deliverable
  or sequence features to address issues before dependent work.

---

## Dispatch

| State | Detail | Worker | Advance |
|-------|--------|--------|---------|
| FIRST-RUN | `references/first-run-loop.md` | `aid-architect` | → REVIEW |
| REVIEW | `references/review-deliverables.md` | `aid-reviewer` | → DONE |
| DONE | _(inline — plan complete; print summary and exit)_ | `inline` | → halt |

On state entry, print `[State: NAME]` + the "you are here" map from State Detection above.
When a state completes, route by its `**Advance:**` type (per [`state-machine-chaining.md`](../../aid/templates/state-machine-chaining.md)):
- **CHAIN** → begin the next state's reference doc within the same invocation; no exit.
- **PAUSE-FOR-USER-ACTION** / **PAUSE-FOR-USER-DECISION** → print the pause reason + resume command and exit.
- **HALT** → print the closing summary and exit.

**DONE (inline):** When DONE is detected, print:

```
[State: DONE] — Plan is complete and meets minimum grade.
aid-plan  ▸ you are here
  [✓ FIRST-RUN ] → [✓ REVIEW ] → [● DONE ]

Plan is approved and up to date. Run /aid-plan again with --reset to restart.
```

---

## Feedback Loops

- **→ Discovery:** KB insufficient → Q&A to `.aid/knowledge/STATE.md` `## Q&A (Pending)`
- **→ Specify:** SPEC ambiguous → append to the `qa` sequence in the relevant delivery's `STATE.yml`
- **→ Interview:** Priority unclear → append to the `qa` sequence in the relevant delivery's `STATE.yml`

## Output

`aid-plan` produces two artifact types when a delivery is approved:

### 1. `.aid/works/{work}/PLAN.md` (deliveries + execution graph)

Each `### delivery-NNN` stanza IS the delivery definition -- objective, scope, and
gate criteria live in the stanza, not in a sibling file. A delivery's task listing
and its dependency edges are DERIVED (from each task's `**Source:**` field and from
the `**Depends on:**` field below), so neither is restated here.

```markdown
# Plan -- {Work Name}

## Deliverables

### delivery-001: {Name}
- **What it delivers:** {user-facing value}
- **Features:** feature-001-{name}, feature-003-{name}
- **Depends on:** --
- **Priority:** Must

**Objective:** {one paragraph: what this delivery achieves and why it is scoped as a distinct unit}

**Scope:** {bounded list of what is IN scope, citing features or `AC-N` ids}
**Out of scope:** {anything explicitly excluded, to avoid scope creep}

**Gate Criteria** -- the ordered rubric the delivery gate evaluates; each concrete and
independently testable, each naming an observable (see
`.aid/runtime/templates/requirements/requirements-template.md § Verifiable Acceptance Criteria`):

- [ ] {Criterion 1 -- concrete and testable}
- [ ] {Criterion 2 -- concrete and testable}
- [ ] All section-6 quality gates pass

**Notes:** {constraints or references not captured by the gate criteria; keep brief --
detailed design belongs in the task DETAIL.md files. Omit when there are none.}

### delivery-002: {Name}
- **What it delivers:** {user-facing value}
- **Features:** feature-002-{name}
- **Depends on:** delivery-001
- **Priority:** Must

**Objective:** {...}

**Scope:** {...}
**Out of scope:** {...}

**Gate Criteria**

- [ ] {Criterion 1}
- [ ] All section-6 quality gates pass

## Cross-Cutting Risks

| # | Risk | Impact | Mitigation |
|---|------|--------|------------|
| 1 | {description} | {H/M/L} | {mitigation} |

*(Omit if no cross-cutting risks.)*

## Deferred

| Feature | Reason | Revisit When |
|---------|--------|--------------|
| feature-006-{name} | Could-have | After delivery-003 feedback |

*(Omit if all features included.)*
```

A delivery with zero tasks (e.g. a SPIKE) still carries a full stanza: the objective
and gate criteria are what make it a delivery, and neither depends on tasks existing.

### 2. `.aid/works/{work}/deliveries/delivery-NNN/STATE.yml` (delivery lifecycle)

Seeded from `.aid/runtime/templates/delivery-state-template.yml` with:
- `delivery_state: Pending-Spec`  (SD-8: delivery's own independent lifecycle; NOT derived from tasks)
- `delivery_lifecycle.updated:` set to the current UTC timestamp
- `Branch:` set to `aid/work-NNN-delivery-NNN` (inferred from the folder/worktree, not authored)
- `delivery_gate` and `qa` keys left at their template defaults (filled by `aid-execute`)

A delivery created with ZERO tasks still renders correctly at `Pending-Spec`. The
DERIVED task rollup for this delivery (assembled at read time from
`tasks/task-NNN/STATE.yml` files, which do not exist yet) is simply empty -- that is
correct and expected until `aid-specify` (-> Specified) and `aid-detail` (-> tasks
created) run.

The work `STATE.yml`'s Plan/Deliveries view is DERIVED (read-only at read time);
`aid-plan` does NOT write delivery rows there.

## Quality Checklist

- [ ] Every Ready feature assigned to a deliverable or explicitly deferred
- [ ] Each deliverable is standalone-functional
- [ ] Dependencies between deliverables flow one direction (no cycles)
- [ ] Deliverables follow Must -> Should -> Could priority
- [ ] Cross-cutting risks only if real
- [ ] User approved the sequence
- [ ] Each deliverable was reviewed after writing (step 4)
- [ ] Every delivery stanza carries an objective, scope, and gate criteria (including zero-task SPIKE deliveries)
- [ ] deliveries/delivery-NNN/STATE.yml written for every delivery with delivery_state: Pending-Spec
- [ ] No delivery rows written into the work STATE.yml (Plan/Deliveries is DERIVED)

Files in this skill

  • SKILL.md10.9 KB
  • references/first-run-loop.md10.5 KB
  • references/review-deliverables.md3.5 KB
  • references/reviewer-brief.md7 KB

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.