diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json
index b1e7b1d3..6fc0368d 100644
--- a/.claude-plugin/marketplace.json
+++ b/.claude-plugin/marketplace.json
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-marketplace.json",
"name": "aidd-framework",
- "version": "5.0.2",
+ "version": "5.0.3",
"description": "Official plugin marketplace for the AI-Driven Development framework",
"owner": {
"name": "AI-Driven Dev"
@@ -31,7 +31,7 @@
{
"name": "aidd-pm",
"source": "./plugins/aidd-pm",
- "description": "Product management: ticket-info, user-stories-create, prd, spec",
+ "description": "Product management: ticket-info, user-stories, prd, spec",
"strict": true,
"recommended": true
},
@@ -48,6 +48,13 @@
"description": "Meta-cognition: refine input through brainstorming, refine output through challenge and condensed communication mode.",
"strict": true,
"recommended": true
+ },
+ {
+ "name": "aidd-ui",
+ "source": "./plugins/aidd-ui",
+ "description": "ALPHA, not ready for use. UI and UX concern: design, review, and improve frontend interfaces.",
+ "strict": true,
+ "recommended": false
}
]
}
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 60d26dec..8ed28f73 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -2,6 +2,10 @@ version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
+ # Target `next`, not `main`. `main` only takes the weekly promotion PR and
+ # the Release PR (see RELEASE.md); dep updates batch on `next` and ship in
+ # the weekly release instead of cutting off-cycle releases.
+ target-branch: "next"
schedule:
interval: "weekly"
day: "monday"
@@ -11,10 +15,10 @@ updates:
include: "scope"
labels:
- "dependencies"
- - "github-actions"
- package-ecosystem: "npm"
directory: "/"
+ target-branch: "next"
schedule:
interval: "weekly"
day: "monday"
@@ -24,4 +28,3 @@ updates:
include: "scope"
labels:
- "dependencies"
- - "npm"
diff --git a/.github/labels.yml b/.github/labels.yml
index 48bc27cd..25ecc914 100644
--- a/.github/labels.yml
+++ b/.github/labels.yml
@@ -1,5 +1,9 @@
# Canonical issue and PR label list for ai-driven-dev/framework.
#
+# Labels are TRIAGE ONLY: they categorize an issue or PR. They never decide
+# where a PR targets — routing is by branch prefix (see aidd_docs/memory/vcs.md).
+# Keep one triage label per change.
+#
# This file is the source of truth. When the GitHub label set drifts from
# this file, sync manually with:
#
@@ -24,31 +28,19 @@
color: 0075ca
- name: security
- description: Security-sensitive issue or fix
+ description: Security-sensitive issue or fix (cross-cutting, add to any kind)
color: B60205
- name: good first issue
description: Good for newcomers
color: 7057ff
-- name: help wanted
- description: Extra attention is needed
- color: 008672
-
# --- Dependencies --------------------------------------------------------
- name: dependencies
description: Dependency update (dependabot)
color: 0366d6
-- name: github-actions
- description: GitHub Actions workflow change
- color: "000000"
-
-- name: npm
- description: npm dependency update
- color: cb3837
-
# --- Release tooling -----------------------------------------------------
- name: "autorelease: pending"
diff --git a/.github/workflows/back-merge.yml b/.github/workflows/back-merge.yml
index 2a234956..9bdf4af0 100644
--- a/.github/workflows/back-merge.yml
+++ b/.github/workflows/back-merge.yml
@@ -25,7 +25,7 @@ jobs:
app-id: ${{ secrets.AIDD_BOT_APP_ID }}
private-key: ${{ secrets.AIDD_BOT_PRIVATE_KEY }}
- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: next
fetch-depth: 0
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 3334d65f..356729c1 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -22,7 +22,7 @@ jobs:
contents: read
pull-requests: read
steps:
- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
- uses: wagoid/commitlint-github-action@b948419dd99f3fd78a6548d48f94e3df7f6bf3ed # v6.2.1
@@ -94,7 +94,7 @@ jobs:
if: needs.release-please.outputs.release_created == 'true'
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Build clean marketplace bundle
# A self-contained marketplace a user can extract and register with
@@ -141,7 +141,7 @@ jobs:
- { tool: codex, mode: flat, flag: "--flat" }
- { tool: opencode, mode: flat, flag: "--flat" }
steps:
- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
@@ -193,7 +193,7 @@ jobs:
echo "released=false" >> $GITHUB_OUTPUT
fi
- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
if: steps.check.outputs.released == 'true'
- name: Get plugin version
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index b2bd1ab6..68b81d32 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -28,7 +28,7 @@ jobs:
language: [javascript-typescript]
steps:
- name: Checkout
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Initialize CodeQL
uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml
index b3ae480a..291ab085 100644
--- a/.github/workflows/validate.yml
+++ b/.github/workflows/validate.yml
@@ -6,9 +6,9 @@ name: Validate
on:
push:
- branches: [main]
+ branches: [main, next]
pull_request:
- branches: [main]
+ branches: [main, next]
permissions:
contents: read
@@ -22,7 +22,7 @@ jobs:
CI: "true"
steps:
- name: Checkout
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Setup Node
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 7eef9bd7..4afd4c19 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,9 +1,10 @@
{
- ".": "5.0.2",
+ ".": "5.0.3",
"plugins/aidd-context": "2.0.1",
"plugins/aidd-dev": "2.0.0",
"plugins/aidd-vcs": "2.0.0",
"plugins/aidd-pm": "2.0.0",
"plugins/aidd-orchestrator": "2.0.0",
- "plugins/aidd-refine": "2.0.0"
+ "plugins/aidd-refine": "2.0.0",
+ "plugins/aidd-ui": "0.1.0-alpha.0"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 473eb113..aee95075 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## [5.0.3](https://github.com/ai-driven-dev/framework/compare/v5.0.2...v5.0.3) (2026-06-23)
+
+
+### Miscellaneous
+
+* **deps-dev:** bump js-yaml from 4.2.0 to 5.0.0 ([#322](https://github.com/ai-driven-dev/framework/issues/322)) ([f71bdd2](https://github.com/ai-driven-dev/framework/commit/f71bdd2be31c34aa43e5280659432fb3a9f1cdab))
+
## [5.0.2](https://github.com/ai-driven-dev/framework/compare/v5.0.1...v5.0.2) (2026-06-22)
diff --git a/CLAUDE.md b/CLAUDE.md
index bf7514c5..0a8d1308 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -1,33 +1,41 @@
# CLAUDE.md
-> IMPORTANT: On first conversation message:
->
-> - say "AI-Driven Development ON - Date: {current_date}, TZ: {current_timezone}." to User.
-
-## Behavior Guidelines
-
-All instructions and information above are willing to be up to date, but always remind yourself that USER can be wrong, be critical of the information provided, and verify it against the project's actual state.
-
-- Be anti-sycophantic - don't fold arguments just because I push back
-- Stop excessive validation - challenge my reasoning instead
-- Avoid flattery that feels like unnecessary praise
-- Don't anthropomorphize yourself
-
-## Technical guidelines
-
-- Do not commit or push yourself unless I ask you to.
-- For every plugin change, think hard about where responsibility belongs; follow the placement and orchestration rules in `docs/ARCHITECTURE.md`.
-- Never duplicate across docs - link to the canonical home.
-
-### Answering Guidelines
-
-- Don't assume your knowledge is up to date.
-- Be 100% sure of your answers.
-- If unsure, say "I don't know" or ask for clarification.
-- Never say "you are right!", prefer anticipating mistakes.
+> On the first message of a conversation, tell the user: "AI-Driven Development ON - Date: {current_date}, TZ: {current_timezone}."
+
+## Behavior
+
+- **Stay critical.** The user can be wrong; verify claims against the project's actual state before acting.
+- **Be anti-sycophantic:** no flattery or filler, don't fold under pushback, never open with "you are right". Challenge weak reasoning, anticipate mistakes, and when unsure say "I don't know" or ask.
+- **Surface tradeoffs and evaluate their impact** instead of hiding them.
+
+## Communication
+
+- **Answer first:** result before reason. Drop pleasantries (sure, of course, happy to) and hedging.
+- **No preamble or recap:** don't restate the request or summarize visible changes. Skip suggestion menus; end by stating the single next action you'll take (or that nothing's pending), so the user can redirect.
+- **Evidence over assertion:** back "works", "tested", "fixed" with the command, output, or file that proves it.
+- **Quote the shortest decisive line** of an error or log, not the whole dump.
+- **No tool-call narration.** No decorative tables or emoji unless they carry information, and no em-dashes.
+- **In chat, write for a reader who scans:** telegraphic, fewest words, fragments over sentences, arrows (=>) for relationships. Cut any word that doesn't change meaning. Normal prose in authored docs and code. Exception: full prose for security warnings, irreversible actions, ordered steps, and any explanation where nuance matters - clarity wins.
+
+## Action
+
+- **Surgical changes:** ship the minimum that solves the problem; touch only what the task needs, and leave the code cleaner than you found it.
+- **Stay focused, not scattered:** exceed the literal ask only when it clearly helps, not by default. When you spot an unrelated issue, note it in one line and keep going; detour only if it blocks the task.
+- **Solve your own issues first:** genuinely try to resolve it yourself before escalating to the human.
+- **Do not commit or push** unless the user asks.
+- **Don't assume your knowledge is current.**
+- **Placement discipline:** for every plugin change, think hard about where responsibility belongs; follow `docs/ARCHITECTURE.md`.
+- **Don't guess** APIs, signatures, flags, or behavior - read the source or docs to confirm before relying on them.
+- **Ambiguous or expensive task:** ask one sharp question to pin down scope before building, rather than guess.
+- **Batch independent operations** in one pass, not one at a time.
+- **Fan out** independent subtasks to parallel subagents when you own the overall flow and the work is genuinely parallel.
+- **Before adding any instruction, finding, or rule, check whether an existing one already covers or contradicts it.** If so, don't add a parallel: delete it, merge it into the stronger one, or rewrite with explicit scope and priority.
+- **Name by intention, not mechanism:** describe the goal or responsibility, not the tool or file format.
## Memory Management
+Project docs, memory, specs, and plans live in `aidd_docs/`.
+
### Project memory
@@ -41,6 +49,6 @@ All instructions and information above are willing to be up to date, but always
@aidd_docs/memory/vcs.md
-- If memory is not loaded above: run `ls -1tr aidd_docs/memory/` then read each file
-- If needed: load files from `aidd_docs/memory/external/*` when user request it
-- If needed: load files from `aidd_docs/memory/internal/*`, you have to think about it
+- If the block above is empty, run `ls -1tr aidd_docs/memory/` and read each file.
+- Load `aidd_docs/memory/external/*` when the user asks.
+- Load `aidd_docs/memory/internal/*` when the task needs it.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 1fb74f33..b926b083 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -43,6 +43,16 @@ make setup
`make` lists every target; `make doctor` / `make check` verify the environment and run the pre-commit checks.
+### Markdown links
+
+Lefthook runs the Markdown link checker during pre-commit. `make setup` installs the hooks; if dependencies are already installed and you only need the hook wiring, run:
+
+```bash
+pnpm exec lefthook install --force
+```
+
+Run `node scripts/check-markdown-links.js` to scan the repository. Detailed usage, supported forms, exclusions, and fix guidance live in `node scripts/check-markdown-links.js --help`.
+
### Test your changes locally
Exercise the skills you touched before opening a PR. Neither tool hot-reloads the checkout (both serve a copied cache), so after editing:
@@ -68,16 +78,9 @@ One scope per commit (split cross-plugin changes). The types, the scopes, and th
## 3. Open a pull request
-- Branch off `next` and target `next` (the integration branch); `hotfix/*` branches off `main` for urgent production fixes. See [`RELEASE.md`](./RELEASE.md).
+- Branch off `next` and target `next` (the integration branch); only `hotfix/*` branches off `main` for urgent production fixes. The branch prefix alone decides the target — the full prefix → label → target table is in [`aidd_docs/memory/vcs.md`](aidd_docs/memory/vcs.md#types).
- **Fill the PR template** (applied automatically): explain *what* changed and *how* you resolved it technically - that narrative is the point of the PR. The conventional title and pre-commit hooks are already enforced by CI, so don't spend the description re-asserting them.
-- **Label the PR** so reviewers and the [Roadmap board](https://github.com/orgs/ai-driven-dev/projects/8) triage at a glance:
-
- | Label | When to use |
- | ----- | ----------- |
- | `bug` | A fix for broken behaviour. |
- | `enhancement` | A new skill, agent, rule, or feature. |
- | `documentation` | A docs-only change (README, CONTRIBUTING, skill docs). |
- | `security` | A security-sensitive change or fix. |
+- **Label the PR** so reviewers and the [Roadmap board](https://github.com/orgs/ai-driven-dev/projects/8) triage at a glance. The triage label follows your branch kind and the PR skill applies it automatically; the label per kind is in that same [routing table](aidd_docs/memory/vcs.md#types) (`security` is cross-cutting — add it to any kind).
- The PR title follows the same conventional format (the **Commitlint** CI job enforces it); PRs are squash-merged using that title.
- A **Habilité** review gates every merge ([`CODEOWNERS`](./.github/CODEOWNERS)); Certifié contributors cannot self-merge.
- Decision rules (lazy consensus, explicit consensus for cross-plugin/contract changes, the quality veto) live in [`GOVERNANCE.md`](./GOVERNANCE.md#code-decisions-merging).
diff --git a/README.md b/README.md
index 7ee5ad88..f0a9cbbf 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@
🇫🇷 The first French open-source framework for AI-driven development.
[](LICENSE)
@@ -152,7 +152,7 @@ flowchart TD
## 🧩 Plugins
-Six plugins covering the whole SDLC — **install all of them**; they're designed to work together.
+Seven plugins covering the whole SDLC — **install all of them**; they're designed to work together. (`aidd-ui` is 🚧 **alpha — not ready for use**, off the curated install path.)
+
+### 🎨 [aidd-ui](plugins/aidd-ui/README.md) 🚧
+
+`1 skill` · **alpha — not ready**
+
+UI and UX: design, review, and improve frontend interfaces. ⚠️ Alpha (`0.1.0-alpha.0`), smoke-test only — do not rely on it yet.
+
diff --git a/RELEASE.md b/RELEASE.md
index 6b56092c..8eb93edc 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -21,7 +21,9 @@ For who may merge and release, see [`GOVERNANCE.md`](GOVERNANCE.md).
## Where your change goes
Almost everything flows through `next` and ships in the weekly release. Only an
-urgent production fix takes the fast lane straight to `main`.
+urgent production fix takes the fast lane straight to `main`. The branch prefix
+decides the target; the canonical prefix → target table lives in
+[`aidd_docs/memory/vcs.md`](aidd_docs/memory/vcs.md#types).
```mermaid
flowchart LR
diff --git a/UPGRADE.md b/UPGRADE.md
index 509ece6e..941f0bf6 100644
--- a/UPGRADE.md
+++ b/UPGRADE.md
@@ -95,7 +95,7 @@ Invocation in v4 is `plugin:NN-action`. Where a column says "sub-flow", the old
|---|---|
| `/brainstorm` | `aidd-refine:01-brainstorm` |
| `/challenge` | `aidd-refine:02-challenge` |
-| `/create_user_stories` | `aidd-pm:02-user-stories-create` |
+| `/create_user_stories` | `aidd-pm:02-user-stories` |
| `/ticket_info` | `aidd-pm:01-ticket-info` |
### plan
diff --git a/aidd_docs/README.md b/aidd_docs/README.md
index 166a8e4d..d4de7c2a 100644
--- a/aidd_docs/README.md
+++ b/aidd_docs/README.md
@@ -38,7 +38,7 @@ Skills are grouped into plugins by domain. Install only the plugins you need.
| ----------------- | ---------------------------------------------------------------------------------- | ----------------------------------------------------------- |
| aidd-context | Bootstrap, project init, generation of context artifacts (skills, agents, rules, commands, hooks, plugins, marketplaces), mermaid diagrams, learn, discovery | `02-project-memory`, `03-context-generate`, `09-mermaid` |
| aidd-refine | Meta-cognition: brainstorm, challenge prior work, condensed communication mode | `01-brainstorm`, `02-challenge`, `03-condense` |
-| aidd-pm | Product management: ticket info, user stories, PRD, spec | `01-ticket-info`, `02-user-stories-create`, `03-prd`, `04-spec` |
+| aidd-pm | Product management: ticket info, user stories, PRD, spec | `01-ticket-info`, `02-user-stories`, `03-prd`, `04-spec` |
| aidd-dev | Code transformation: Dev SDLC orchestrator, plan, implement, assert, audit, review, test, refactor, debug, for-sure | `00-sdlc`, `01-plan`, `02-implement`, `05-review`, `06-test` |
| aidd-vcs | VCS workflows: commit, pull/merge request, release tag, issue creation | `01-commit`, `02-pull-request`, `04-issue-create` |
| aidd-orchestrator | Async orchestration of the SDLC on labeled issues (optional, extra) | `00-async-dev` (router with setup / run / review sub-flows) |
@@ -102,7 +102,7 @@ AIDD is delivered as a plugin marketplace. Pick what you need; do not install ev
| aidd-refine | 01-brainstorm, 02-challenge, 03-condense, 04-shadow-areas, 05-fact-check |
| aidd-dev | 00-sdlc, 01-plan, 02-implement, 03-assert, 04-audit, 05-review, 06-test, 07-refactor, 08-debug, 09-for-sure |
| aidd-vcs | 01-commit, 02-pull-request, 03-release-tag, 04-issue-create |
-| aidd-pm | 01-ticket-info, 02-user-stories-create, 03-prd, 04-spec |
+| aidd-pm | 01-ticket-info, 02-user-stories, 03-prd, 04-spec |
Each plugin is independently installable; install incrementally. Smaller surface, fewer triggers competing.
@@ -112,7 +112,7 @@ A typical change cycles through skills from several plugins. The order below is
1. **Bootstrap** (only for a brand-new project): `aidd-context:01-bootstrap` imagines the stack and architecture, comparing candidate stacks and writing an `INSTALL.md`. Skip this step on an existing project.
2. **Project init** (once per project, re-runnable to refresh): `aidd-context:02-project-memory` scaffolds `aidd_docs/`, the memory bank, and the AI context files for the tools you use. Re-running later refreshes the scaffold without overwriting your customizations.
-3. **Frame the request**: `aidd-refine:01-brainstorm` to clarify, `aidd-pm:01-ticket-info` to pull tracker data, `aidd-pm:02-user-stories-create` and `aidd-pm:03-prd` or `aidd-pm:04-spec` to formalize scope.
+3. **Frame the request**: `aidd-refine:01-brainstorm` to clarify, `aidd-pm:01-ticket-info` to pull tracker data, `aidd-pm:02-user-stories` and `aidd-pm:03-prd` or `aidd-pm:04-spec` to formalize scope.
4. **Plan**: `aidd-dev:01-plan` produces the technical plan, component behavior model, or design-image extraction.
5. **Implement and assert**: `aidd-dev:02-implement` writes code against the plan; `aidd-dev:03-assert` verifies the result.
6. **Review**: `aidd-dev:05-review` for code and functional review; `aidd-refine:02-challenge` to stress-test the result.
diff --git a/aidd_docs/memory/vcs.md b/aidd_docs/memory/vcs.md
index 4fc34de5..2f3c7e46 100644
--- a/aidd_docs/memory/vcs.md
+++ b/aidd_docs/memory/vcs.md
@@ -16,15 +16,33 @@ type/ticket-short-description
### Types
-| Prefix | Usage | Branch from | PR target |
-| --- | --- | --- | --- |
-| `feat/` | New feature | `next` | `next` |
-| `fix/` | Bug fix | `next` | `next` |
-| `docs/` | Documentation only | `next` | `next` |
-| `refactor/` | Code change (no feat/fix) | `next` | `next` |
-| `chore/` | Build, config, deps | `next` | `next` |
-| `test/` | Add/update tests | `next` | `next` |
-| `hotfix/` | Urgent production fix | `main` | `main` |
+The single source of truth: find your row, read left to right — it tells you the
+branch to create, the label that applies, and where the PR goes. The branch
+**prefix** alone decides the target (not a label, not a board field); the
+`aidd-vcs:02-pull-request` skill reads this table to set the base automatically.
+
+| I want to… | Issue template | Branch | Commit | Label (auto) | PR targets |
+| ---------- | -------------- | ------ | ------ | ------------ | ---------- |
+| ship a feature | ✨ Feature | `feat/…` | `feat:` | `enhancement` | `next` |
+| fix a bug | 🐛 Bug | `fix/…` | `fix:` | `bug` | `next` |
+| change docs only | ✨ Feature | `docs/…` | `docs:` | `documentation` | `next` |
+| refactor (no behaviour change) | — | `refactor/…` | `refactor:` | — | `next` |
+| build / config / deps | — | `chore/…` | `chore:` | `dependencies` | `next` |
+| add or update tests | — | `test/…` | `test:` | — | `next` |
+| 🚨 urgent production fix | 🐛 Bug | `hotfix/…` | `fix:` | `bug` | **`main`** |
+
+#### Routing rule (strict)
+
+- Everything batches on `next` and ships in the weekly release.
+- **Only `hotfix/*` targets `main`** — an urgent production fix, out of cycle.
+
+Once the PR is open, the board advances on its own:
+`Todo → In review` (PR opened) `→ Ready` (review approved) `→ Done` (merged).
+
+Labels are **triage only**: they categorize, they never route. `security` is
+cross-cutting — add it to any kind when the change is security-sensitive. The
+"Commit" column shows the conventional type; the authoritative type list is the
+[Commit Convention](#commit-convention) below (mirrors `commitlint.config.cjs`).
### Examples
diff --git a/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-1.md b/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-1.md
new file mode 100644
index 00000000..5ef7e5b2
--- /dev/null
+++ b/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-1.md
@@ -0,0 +1,55 @@
+---
+status: done
+---
+
+# Instruction: Canonical routing table
+
+Part of [`plan.md`](./plan.md). Dependency root — author before all other phases.
+
+## Architecture projection
+
+```txt
+aidd_docs/memory/
+└── vcs.md 🔁 Branch-Naming "Types" table gains 2 columns (triage label,
+ routing ✓/-) + a strict routing callout + a triage-only note.
+```
+
+## Tasks to do
+
+### `1)` Replace the branch "Types" table with the dense canonical table
+
+> One grid that maps kind → prefix → commit type → triage label → destination.
+
+1. Under `## Branch Naming Convention` → `### Types`, replace the current 4-column table with:
+
+ | Kind | Branch prefix | Commit type | Triage label | `next` | `main` |
+ | ---- | ------------- | ----------- | ------------ | :----: | :----: |
+ | Feature | `feat/` | `feat` | `enhancement` | ✓ | – |
+ | Fix | `fix/` | `fix` | `bug` | ✓ | – |
+ | Docs | `docs/` | `docs` | `documentation` | ✓ | – |
+ | Refactor | `refactor/` | `refactor` | – | ✓ | – |
+ | Chore | `chore/` | `chore` | `dependencies` | ✓ | – |
+ | Test | `test/` | `test` | – | ✓ | – |
+ | Hotfix | `hotfix/` | `fix` | `bug` | – | ✓ |
+
+2. Keep the existing `### Format` and `### Examples` blocks unchanged.
+
+### `2)` Add the strict routing callout + triage-only note
+
+> Make the rule unmissable and kill the label/route confusion.
+
+1. Immediately under the table, add a short callout, in substance:
+ - The branch **prefix alone** decides the PR target — not a label, not a board field.
+ - Everything batches on `next`; **only `hotfix/*` targets `main`** (urgent production fix, out of cycle).
+ - The `aidd-vcs:02-pull-request` skill reads this table to set the base branch automatically.
+2. Add the triage-only note: labels categorize, they never route; `security` is cross-cutting — add it to any kind when the change is security-sensitive.
+3. Confirm the commit-type and changelog definitions are untouched (the `## Commit Convention` section stays as-is; the table's "commit type" column is illustrative, not a redefinition).
+
+## Test acceptance criteria
+
+| Task | Acceptance criteria |
+| ---- | ------------------- |
+| 1 | The dense 6-column table renders in `vcs.md`; exactly one row routes to `main` (`hotfix`); all others to `next`. |
+| 1 | The table is the only place in the repo with the kind·prefix·label·✓/- grid (`grep -rl` for a unique cell string returns only `vcs.md`). |
+| 2 | A "routing rule (strict)" callout states prefix-decides-target and the single `hotfix→main` exception; a triage-only note is present. |
+| 2 | `## Commit Convention` section is byte-identical to before (no commit-type or scope changes). |
diff --git a/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-2.md b/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-2.md
new file mode 100644
index 00000000..3a4b9359
--- /dev/null
+++ b/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-2.md
@@ -0,0 +1,43 @@
+---
+status: done
+---
+
+# Instruction: Label set + dependabot (atomic)
+
+Part of [`plan.md`](./plan.md). **Atomic unit** — both files change together; never drop a label from one without the other (else dependabot recreates it ungoverned).
+
+## Architecture projection
+
+```txt
+.github/
+├── labels.yml 🔁 11 → 8 labels + triage-only header note.
+└── dependabot.yml 🔁 `labels:` keys lose `npm` and `github-actions`.
+```
+
+## Tasks to do
+
+### `1)` Trim `labels.yml` to 8 + header note
+
+> Keep triage types + required automation labels; cut the noise.
+
+1. Keep: `bug`, `enhancement`, `documentation`, `security`, `good first issue`, `dependencies`, `autorelease: pending`, `autorelease: tagged`.
+2. Remove: `help wanted`, `npm`, `github-actions`.
+3. Add a header comment: labels are **triage only**; routing is by branch prefix (see `aidd_docs/memory/vcs.md`); keep one triage label per change.
+4. Leave colors/descriptions of kept labels intact (refine `security` description to note it is cross-cutting).
+
+### `2)` Drop ecosystem labels from `dependabot.yml`
+
+> The `dependencies` umbrella is enough at this scale.
+
+1. In the `github-actions` ecosystem block, set `labels: ["dependencies"]` (remove `github-actions`).
+2. In the `npm` ecosystem block, set `labels: ["dependencies"]` (remove `npm`).
+3. Touch nothing else (schedule, prefixes, limits stay).
+
+## Test acceptance criteria
+
+| Task | Acceptance criteria |
+| ---- | ------------------- |
+| 1 | `grep '^- name:' .github/labels.yml` lists exactly the 8 kept labels; `help wanted`, `npm`, `github-actions` absent. |
+| 1 | Header comment states triage-only + routing-by-prefix + link to vcs.md. |
+| 2 | Both ecosystem blocks in `dependabot.yml` have `labels: ["dependencies"]` only. |
+| 1+2 | `grep -rn -e 'help wanted' -e '"npm"' -e 'github-actions' .github/labels.yml .github/dependabot.yml` returns no orphan reference to a dropped label. |
diff --git a/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-3.md b/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-3.md
new file mode 100644
index 00000000..6e16a94d
--- /dev/null
+++ b/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-3.md
@@ -0,0 +1,56 @@
+---
+status: done
+---
+
+# Instruction: Docs point to canonical (no duplication)
+
+Part of [`plan.md`](./plan.md). Depends on phase 1 (the anchor target must exist).
+
+## Architecture projection
+
+```txt
+.
+├── CONTRIBUTING.md 🔁 Inline label table (L75-80) → link to vcs.md table;
+│ routing prose (L71) → short pointer + link.
+└── RELEASE.md 🔁 "Where your change goes" links the vcs.md table;
+ flow mermaid kept; any restated routing prose trimmed.
+```
+
+## User Journey
+
+```mermaid
+flowchart TD
+ A[Contributor lost] --> B[CONTRIBUTING hub]
+ B -->|naming + routing| C[vcs.md table]
+ B -->|release flow| D[RELEASE.md]
+ B -->|who merges| E[GOVERNANCE.md]
+```
+
+## Tasks to do
+
+### `1)` De-duplicate `CONTRIBUTING.md`
+
+> It is already a hub; remove the one restated taxonomy.
+
+1. Replace the inline label table (the `| Label | When to use |` block) with a one-line pointer to the canonical table: triage labels + routing live in `aidd_docs/memory/vcs.md` (link to the `#types` anchor). Keep the PR-labelling instruction itself.
+2. Trim the routing prose ("Branch off `next`… `hotfix/*` off `main`…") to a short gist + link to the vcs.md table; do not restate the full table.
+3. Verify the three hub links resolve and are one hop each: naming/routing → vcs.md, release → RELEASE.md, merge → GOVERNANCE.md.
+4. Confirm the issue-template path still holds: opening a 🐛 / ✨ issue applies `bug` / `enhancement` automatically (no edit — verification only).
+
+### `2)` Point `RELEASE.md` at the canonical table
+
+> Anyone landing here finds the table by link, not a copy.
+
+1. In `## Where your change goes`, add a sentence linking the canonical prefix→target table at `aidd_docs/memory/vcs.md#types`.
+2. Keep the existing flow mermaid and the commit-type→changelog table (release domain, matches release-please-config — leave as-is).
+3. Ensure no prefix→target *table* is restated here (the mermaid is a flow diagram, allowed).
+
+## Test acceptance criteria
+
+| Task | Acceptance criteria |
+| ---- | ------------------- |
+| 1 | `CONTRIBUTING.md` no longer contains the `| Label | When to use |` table; a link to `vcs.md` triage/routing replaces it. |
+| 1 | CONTRIBUTING contains exactly one link each to vcs.md, RELEASE.md, GOVERNANCE.md reachable in one hop. |
+| 1 | Creating an issue via each template yields it pre-labelled (`labels:` keys confirmed present in both templates). |
+| 2 | `RELEASE.md` "Where your change goes" links `vcs.md#types`; no prefix→target table restated. |
+| 1+2 | A text search for a unique cell of the canonical grid returns hits only in `vcs.md`, not in CONTRIBUTING/RELEASE/GOVERNANCE. |
diff --git a/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-4.md b/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-4.md
new file mode 100644
index 00000000..c1fa8f54
--- /dev/null
+++ b/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-4.md
@@ -0,0 +1,64 @@
+---
+status: done
+---
+
+# Instruction: PR automation routes by prefix
+
+Part of [`plan.md`](./plan.md). Depends on phase 1 (the skill reads the canonical table from memory). Keep the plugin **generic** — it reads project memory, never hardcodes `next`.
+
+## Architecture projection
+
+```txt
+plugins/aidd-vcs/skills/02-pull-request/
+├── actions/01-pull-request.md 🔁 Base resolution derives target from branch
+│ prefix via project memory; +auto-label step.
+└── assets/branch.md 🔁 Stale `aidd_docs/` → `docs/` prefix.
+```
+
+## User Journey
+
+```mermaid
+flowchart TD
+ A[Head branch e.g. feat/x] --> B{prefix in project-memory table?}
+ B -->|yes| C[base = that row's PR target]
+ B -->|no| D[fallback: origin/HEAD, then main/master/develop/staging]
+ C --> E[open draft PR]
+ D --> E
+ E --> F[apply matching triage label if defined + exists]
+```
+
+## Tasks to do
+
+### `1)` Base resolution by branch prefix
+
+> Fixes feat/→main: `next` was absent from the candidate list.
+
+1. In `## Process` step 3 (Base resolution), insert a match BEFORE the `origin/HEAD` fallback: if the project's branch-naming convention (project memory) maps the head branch's prefix to a PR target, use that target.
+2. Keep the existing `origin/HEAD` → `main/master/develop/staging` as the fallback when no prefix mapping exists.
+3. Keep it generic: phrase as "the branch-naming convention in project memory", never hardcode `next`.
+4. Surface the chosen base and the reason ("prefix `feat/` → `next` per project convention") during the step-7 validation.
+
+### `2)` Auto-apply the triage label
+
+> A PR is born typed, matching the issue model.
+
+1. Add a numbered step after "Open draft": when the convention maps the head prefix to a triage label and that label exists in the repo, apply it; skip silently otherwise.
+2. State explicitly: labels triage only; this step never changes the base resolved earlier.
+3. Update the `## Test` checklist to cover prefix-derived base + label application; extend Outputs if a label field is warranted.
+
+### `3)` Fix the stale generic template
+
+> `branch.md` is a generic distributable template; correct the bug only.
+
+1. In `assets/branch.md` Types table, change the `aidd_docs/` prefix row to `docs/`.
+2. No other change — it stays a generic naming template (no `next`/`main`, no repo-specific routing).
+
+## Test acceptance criteria
+
+| Task | Acceptance criteria |
+| ---- | ------------------- |
+| 1 | Step 3 lists a prefix→target derivation via project memory BEFORE the origin/HEAD fallback; no literal `next` hardcoded. |
+| 1 | Tracing the doc logic: a `feat/*` head resolves base `next`; `hotfix/*` resolves `main` (per the vcs.md table). |
+| 2 | A numbered step applies the prefix-mapped triage label post-open, gated on label existence, marked triage-only. |
+| 2 | `## Test` checklist asserts the prefix-derived base and the applied label. |
+| 3 | `assets/branch.md` shows `docs/`; no `aidd_docs/` remains; no `next`/`main` added. |
diff --git a/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-5.md b/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-5.md
new file mode 100644
index 00000000..2ffa2ac9
--- /dev/null
+++ b/aidd_docs/plans/2026_06_23-unify-taxonomy/phase-5.md
@@ -0,0 +1,67 @@
+---
+status: done
+---
+
+# Instruction: Board playbook (Project 8)
+
+Part of [`plan.md`](./plan.md). The board is GitHub Project config, not repo files — deliver a **playbook** the maintainer applies. Independent of phases 1-4 (can run in parallel).
+
+## Architecture projection
+
+```txt
+docs/
+└── MAINTAINERS.md 🔁 New "## Project board (Project 8)" section: the
+ field/status/view playbook (gh commands + UI steps).
+```
+
+> Confirm `MAINTAINERS.md` is the right host at implement; if it does not fit, create `docs/BOARD.md` and link it from MAINTAINERS + CONTRIBUTING.
+
+## User Journey
+
+```mermaid
+flowchart TD
+ A[Maintainer opens playbook] --> B[Drop Work type + Phases]
+ B --> C[Keep Priority]
+ C --> D[Set Status options]
+ D --> E[Wire built-in workflows]
+ E --> F[Add Timeline view]
+```
+
+## Tasks to do
+
+### `1)` Write the field-cleanup steps
+
+> Each board property answers one question; kill the duplicates.
+
+1. **Drop "Work type"** (duplicates the Type label) and **"Phases"** (duplicates Status/Milestone). Provide the `gh` inspection + deletion commands, e.g.:
+ - `gh project field-list 8 --owner ai-driven-dev` to read field IDs.
+ - `gh project field-delete ` for each dropped field.
+2. **Keep Priority** — state explicitly it stays (P0·P1·P2), no action.
+
+### `2)` Status options + automation
+
+> Status carries the flow and advances itself.
+
+1. Set Status single-select options: `Todo · In progress · In review · Ready · Done`. Note this is a single-select field edit (UI; `gh project field-create` only creates new fields — document the UI path to edit the existing Status options, with the `gh` create path as the from-scratch alternative).
+2. Document the built-in workflow wiring (Project → Workflows, UI):
+ - item added → **Todo**
+ - PR linked / ready for review → **In review**
+ - code review approved → **Ready**
+ - PR merged / issue closed → **Done**
+3. Flag which transitions are GitHub built-ins vs. manual moves (In progress is typically manual).
+
+### `3)` Timeline view + verification checklist
+
+> The "phases" replacement Alex asked for.
+
+1. Add a **Timeline** view (UI: New view → Timeline; date field = target/milestone). Document the steps.
+2. End the section with a tick-box checklist mirroring the spec board done-when: Work type removed · Phases removed · Priority kept · Status options set · automation enabled · Timeline view present.
+
+## Test acceptance criteria
+
+| Task | Acceptance criteria |
+| ---- | ------------------- |
+| 1 | Playbook gives concrete `gh project field-list`/`field-delete` commands for Work type + Phases, and states Priority is kept. |
+| 2 | Playbook lists the 5 Status options and the 4 built-in transitions, marking built-in vs manual. |
+| 3 | Playbook documents adding a Timeline view and ends with a board-done-when checklist. |
+| all | Section is self-contained: a maintainer can apply it end-to-end without re-deriving anything from the Loom. |
diff --git a/aidd_docs/plans/2026_06_23-unify-taxonomy/plan.md b/aidd_docs/plans/2026_06_23-unify-taxonomy/plan.md
new file mode 100644
index 00000000..2e8f91ca
--- /dev/null
+++ b/aidd_docs/plans/2026_06_23-unify-taxonomy/plan.md
@@ -0,0 +1,60 @@
+---
+objective: "The change taxonomy + routing rule live in one canonical table (vcs.md); every other surface links to it or derives from it; the board playbook is delivered."
+status: implemented
+---
+
+# Plan: Unify the change taxonomy into one source of truth + a projected board
+
+## Overview
+
+| Field | Value |
+| ---------- | --------------------------------------------------------------------- |
+| **Goal** | One canonical routing table; all surfaces link/derive; board playbook. |
+| **Source** | [`2026_06_23-unify-taxonomy.md`](../../specs/2026_06/2026_06_23-unify-taxonomy.md) (spec, VALID 100/100) |
+
+## Phases
+
+| # | Phase | File |
+| --- | ------------------------------ | ---------------------------- |
+| 1 | Canonical routing table | [`phase-1.md`](./phase-1.md) |
+| 2 | Label set + dependabot (atomic)| [`phase-2.md`](./phase-2.md) |
+| 3 | Docs point to canonical | [`phase-3.md`](./phase-3.md) |
+| 4 | PR automation routes by prefix | [`phase-4.md`](./phase-4.md) |
+| 5 | Board playbook (Project 8) | [`phase-5.md`](./phase-5.md) |
+
+## Resources
+
+| Source | Verified |
+| ------------- | --------------------------- |
+| `aidd_docs/memory/vcs.md` | Holds branch table (prefix · from · target) — no label column, no ✓/-. Becomes the dense canonical. |
+| `RELEASE.md` | "Where your change goes" has a flow mermaid + commit→changelog table (matches release-please-config). |
+| `CONTRIBUTING.md` | Already a hub: links vcs.md (commits L67), RELEASE (routing L71), GOVERNANCE (merge). Inline label table L75-80 is the one duplication. |
+| `.github/labels.yml` | 11 labels. |
+| `.github/dependabot.yml` | Applies `dependencies`+`npm` and `dependencies`+`github-actions` — must drop in lockstep with labels.yml. |
+| `.github/ISSUE_TEMPLATE/bug_report.yml` / `feature_request.yml` | Already carry `labels: ["bug"]` / `["enhancement"]` — done-when "issue born typed" PRE-SATISFIED; verify-only. |
+| `plugins/aidd-vcs/skills/02-pull-request/actions/01-pull-request.md` | Base resolution candidate list `main/master/develop/staging` — `next` absent (the feat/→main bug). |
+| `docs/MAINTAINERS.md` | Existing maintainer-ops home — proposed host for the board playbook section. |
+
+## Decisions
+
+| Decision | Why |
+| ---------- | -------------- |
+| Canonical table lives in `vcs.md` (AI-auto-loaded memory) | PR skill + AI both read memory; flipping to a human doc would couple automation to a non-loaded file. |
+| RELEASE keeps its flow mermaid | A flow diagram ≠ the mapping table; the prefix→target *table* stays single-homed in vcs.md, RELEASE links it. |
+| Board playbook appended to `docs/MAINTAINERS.md` | Maintainer-ops already lives there; avoids a new orphan doc (no-sprawl ethos). Confirm fit at implement. |
+| Issue templates: no edit | They already apply the Type label; editing would be churn. |
+| Plugin `branch.md` / PR action stay generic | Distributable layer (ARCHITECTURE.md); they read project memory, never hardcode `next`. |
+
+## Spec done-when → phase coverage
+
+| Spec done-when | Phase |
+| -------------- | ----- |
+| Mapping exists once; others link | 1 (author) + 3 (link) |
+| Strict: single production-routed row | 1 |
+| Front-door routes 3 destinations, one hop | 3 |
+| Label set reduced, triage-only, no routing-by-label | 2 |
+| Dropped labels not recreated by automation | 2 |
+| Issue born typed | pre-satisfied (verify in 3) |
+| PR base + label by prefix | 4 |
+| Board fields orthogonal (Work type, Phases gone; Priority kept) | 5 |
+| Status lifecycle + automation + Timeline view | 5 |
diff --git a/aidd_docs/specs/2026_06/2026_06_23-unify-taxonomy.md b/aidd_docs/specs/2026_06/2026_06_23-unify-taxonomy.md
new file mode 100644
index 00000000..d540653c
--- /dev/null
+++ b/aidd_docs/specs/2026_06/2026_06_23-unify-taxonomy.md
@@ -0,0 +1,49 @@
+# Unify the change taxonomy into one source of truth + a projected board
+
+## Target
+
+Define the change-classification taxonomy and its routing rule **once**, in a single canonical place that every other contributor-facing surface and the project board links to or derives from — never restates.
+
+## Hard constraints
+
+- One canonical home for the taxonomy/routing definition; every other document links to it rather than restating it (repo rule: never duplicate across docs).
+- Routing (which branch a change targets) is **derived from the branch prefix**, never stored as a label or a board field.
+- The canonical definition must be consumable by both the AI tooling (the always-loaded project memory) and humans, without a second copy existing.
+- The distributable plugin templates stay generic — they are products shipped to other projects, not mirrors of this repo's own instance.
+- Commit-type and changelog-section definitions are left unchanged (already aligned to Conventional Commits and the release tool).
+- Board changes are delivered as a maintainer playbook (the board is external config), not as repo file edits; repo deliverables must not assume the board can be edited as repo files.
+- Each board field and each label answers a distinct question; no field may duplicate another field or a label.
+
+## Non-goals
+
+- Renaming the `enhancement` label to `feature` — `enhancement` stays; the spec only documents that it is the label form of a `feat`/feature change.
+- Any label-sync workflow or board automation beyond GitHub's built-in project workflows.
+- Changing the allowed commit types or the changelog sections.
+- Restructuring the generic plugin pull-request / branch templates beyond correcting a stale, incorrect prefix value.
+- Building the board for the maintainer — the spec supplies the playbook; applying it is the maintainer's act.
+
+## Done-when
+
+- The change-kind → routing (next vs main) mapping exists in exactly one document; searching the repo finds that mapping rendered once, and every other doc that needs it contains a link to that single home. *(verify: text search shows one occurrence of the mapping table; the release doc and the contributor doc each link to it.)*
+- The routing rule is strict and unambiguous: exactly one branch prefix routes to the production branch (the urgent-fix prefix); all other prefixes route to the integration branch. *(verify: the canonical table shows a single production-routed row.)*
+- A single contributor front-door document routes a reader to naming+routing, the release flow, and the merge/governance rules, each reachable in one hop. *(verify: the front-door doc contains a link to each of the three; and a text search for the canonical routing table/sentence returns hits only in its canonical home, not in the front-door, release, or governance docs.)*
+- The issue/PR label set is reduced to triage-type labels plus the automation labels the tooling requires; no label encodes routing, and a header states labels are triage-only. *(verify: the label list equals the agreed reduced set; a search finds no label used to decide routing.)*
+- Labels removed from the canonical list are not recreated by any automation. *(verify: the dependency-update config no longer references the removed labels.)*
+- An issue opened from a project issue template is created already carrying its Type label, with no manual step. *(verify: creating an issue via each template yields an issue pre-labelled with its type.)*
+- A pull request opened by the project's PR automation targets the branch determined solely by the head branch's prefix, and carries the matching Type label. *(verify: a feature-prefixed branch produces a PR targeting the integration branch; the urgent-fix prefix targets production; the type label is present.)*
+- The board exposes only orthogonal fields — the field that duplicated the Type label is gone, and the redundant phase field is gone — while Priority remains. *(verify: board playbook checklist confirms both fields removed and Priority kept.)*
+- The board Status field carries the agreed lifecycle states and advances through them via built-in automation, and a Timeline view exists. *(verify: board playbook checklist confirms the Status options, the enabled built-in transitions, and the Timeline view.)*
+
+## Stakeholders
+
+- Decider: Baptiste (resolves any taxonomy/placement tradeoff).
+- Owner: Baptiste & Alex (maintainers, long-term owners of the convention and the board).
+- Consumer: public contributors (read the docs/board, open issues/PRs) and the AI tooling (reads the canonical memory, opens PRs, applies labels).
+
+## Context
+
+- Source: Alex's Loom review — the same taxonomy is currently re-spelled across branch prefix, commit type, label, and the board "Work type" field, and the four drift; a maintainer got lost finding routing info. The ask: fewer, clearer, non-duplicated, strict rules.
+- Guiding principle agreed in brainstorm: one taxonomy, defined once, projected everywhere (docs, label, board field, timeline), advanced by automation, never re-typed by a human.
+- Orthogonal property model agreed: Type → label; Priority → board field; Status → board field (auto-advanced); When → milestone/timeline; Effort/onboarding → the good-first-issue label; Routing → derived from branch prefix.
+- Existing anchors that constrain the canonical definition: the commit linter (Conventional Commits) and the release tool's changelog sections are already correct and authoritative for their domains; the taxonomy mirrors them, it does not redefine them.
+- The board is GitHub Project 8 (public roadmap + maintainer triage), configured outside the repo.
diff --git a/aidd_docs/tasks/2026_06/2026_06_29-memory-duplication-diagnosis.md b/aidd_docs/tasks/2026_06/2026_06_29-memory-duplication-diagnosis.md
new file mode 100644
index 00000000..fb56ee00
--- /dev/null
+++ b/aidd_docs/tasks/2026_06/2026_06_29-memory-duplication-diagnosis.md
@@ -0,0 +1,145 @@
+# Diagnostic — duplications mémoire (skill 02-project-memory)
+
+> Statut : diagnostic read-only. Aucun fichier de skill modifié. Ce doc = base de validation avant fix.
+
+## Contexte
+
+Retour Alex : la génération de mémoire produit des duplications, et Codex 5.5
+n'arrive pas à l'initialiser. Deux symptômes investigués séparément.
+
+## Symptôme A — Codex ne peut pas init (le `@`)
+
+**Vérifié, puis rétracté en partie.**
+
+- Le `@` n'est PAS le standard Agent Skills. Standard = chemin relatif depuis
+ la racine du skill (`reference/guide.md`, lien md `[x](x)`). Le `@` = import
+ CLAUDE.md. Source : docs Anthropic + agentskills.io.
+- **`aidd framework build --target codex` CONVERTIT** `@../x` → un lien `x` vers `../x`
+ (lien md, `@` retiré). → Codex reçoit des chemins résolvables. OK.
+- **`aidd plugin install ` + `aidd ai install`** copie le `@`
+ **verbatim** → non résolvable sur Codex.
+- Donc : bug réel **seulement** si un user installe la source brute sur Codex.
+ Inconnu : quel chemin un vrai user Codex emprunte (marketplace/build vs brut).
+- Note : mes premiers `diff`/`grep` passés par rtk ont renvoyé de faux
+ "identique"/"0 match". rtk non fiable pour diff/grep ici.
+
+**Ouvert** : tracer le chemin de distribution Codex réel.
+
+## Symptôme B — duplications (cause trouvée)
+
+Duplication = **structurelle**, indépendante de Codex et du `@`. Trois facteurs
+cumulés :
+
+1. **Sections de templates qui se chevauchent** : le même fait (framework,
+ zones du code, commandes de test…) est demandé par 2+ templates.
+2. **Fill parallèle aveugle** (action `03-generate-memory`, étape 6 : "For each
+ selected template, in parallel") : chaque template rempli indépendamment,
+ sans voir les autres → le chevauchement devient duplication littérale,
+ garantie. C'est le multiplicateur.
+3. **Aucune règle "un fait, un propriétaire"** : les Transversal rules couvrent
+ code→mémoire, jamais mémoire↔mémoire. Review 04 = "consistency", sans
+ dominance et sautable.
+
+## Méthode — comment trouver le niveau fin
+
+Le grain n'est ni le fichier ni la section : c'est le **fait demandé** (chaque
+``).
+
+1. Inventaire des faits : extraire chaque `<...>` de chaque template.
+2. Clé canonique : étiqueter par le fait réel (framework, entry point,
+ commande de test…), pas par le mot de la section.
+3. Site de duplication = un fait canonique demandé par ≥2 templates.
+4. Pondérer par proba de co-déclenchement (core fire toujours → core↔core
+ garanti).
+5. Assigner un propriétaire unique (dominance).
+
+## Tension de design à respecter
+
+Le design existant a une philosophie assumée : chaque fichier mémoire = un
+concern **auto-suffisant**, lisible seul. Un pointer mémoire↔mémoire est un
+principe neuf qui se bat contre ça. On ne l'applique que quand le gain dépasse
+la perte de lisibilité standalone. Re-nommer un framework (un mot) dans 2-3
+fichiers coûte moins qu'un pointer : on garde la mini-dup.
+
+## Audit single-responsibility
+
+| Concern | Responsabilité | Verdict |
+| --- | --- | --- |
+| `integration` | internal + external | **double** → reframe (voir plan #3) |
+| `architecture` vs `codebase-map` | shape vs layout, mais Structure≡Areas | overlap → drop Structure |
+| `deployment` vs `infra` | ship/run vs provisioning, "environments" dans les 2 | overlap → scope |
+| `deployment` | pipeline+env+release+monitoring | large mais cohérent (ship/run) |
+| `mobile`/`desktop` | incluent build&release ≡ `deployment` | overlap mineur, abandonné |
+| autres (vcs, data, testing, auth, cli…) | single net | OK |
+
+Note écosystème (hors scope) : `integration.md` est gaté par la capability
+`api`. Mais consommer des services externes n'exige pas d'exposer une API. Gate
+douteux → à revoir dans `capability-signals`, séparément.
+
+## Table de dominance — réduite haute-valeur
+
+### À appliquer (gain net)
+
+| # | Fait | Action | Type |
+| --- | --- | --- | --- |
+| 2 | Zones top-level + responsabilité | `codebase-map.Areas` possède → drop `architecture.## Structure` | drop |
+| 3 | Intégrations | reframe `integration` en intégrations externes (voir plan) | reframe |
+| 4 | Libs de domaine | `architecture.Stack` = macro only, ne re-liste pas une lib déjà possédée par une capability | scope (inversé) |
+| 8 | "Où routes définies" | `api.Style` = serveur/RPC ; `navigation.Routing` = client | scope |
+| 12 | CI/CD vs provisioning | `deployment.Pipeline` = CI/CD ; `infra.Tooling` = provisioning | scope |
+
+### Abandonnés (pointer < dup, casse l'auto-suffisance)
+
+`#1` framework (un mot), `#5` commandes (gate vs itération, buts distincts),
+`#9` authz, `#10` auth socket, `#11` environnements, `#13` release/packaging,
+`#14` SDK externe.
+
+## Le vrai multiplicateur : le fill parallèle aveugle
+
+Même templates parfaits, le fill parallèle (`03.6`) re-écrit un même fait dans
+chaque template dont le placeholder matche. **C'est ici que se gagne le gros de
+la dédup.**
+
+## Plan d'exécution
+
+### Templates
+
+1. `core/architecture.md` — **drop `## Structure`** (modules + entry point).
+ Possédé par `codebase-map`.
+2. `core/architecture.md` — **Stack, bullet 2** → "libs transversales only ;
+ une lib couverte par une capability (ORM, runner, form lib) vit là-bas".
+3. `api/integration.md` — **reframer en intégrations externes** (responsabilité
+ unique). Le fichier mélange Internal (flux entre modules → appartient à
+ `architecture.How it fits together`) + External (services tiers). Fix :
+ - intro : "internal communication and external services" → "how this system
+ integrates with external/third-party services" ;
+ - drop `## Internal` ;
+ - garder `## External services` + diagramme (carte des intégrations externes).
+ Ne pas juste couper Internal (sinon fichier mal nommé à une section) — c'est
+ un reframe de responsabilité.
+4. `api/api.md` — **Style, bullet 1** → préfixer "Server/RPC surface" + "server
+ routes".
+5. `ui/navigation.md` — **Routing, bullet 1** → préfixer "Client routing" +
+ "client routes".
+
+### Actions / règles
+
+6. `actions/03-generate-memory.md` — **étape 6** : retirer "in parallel" ;
+ "For each selected template (en tenant compte des faits déjà capturés par les
+ templates précédents, pour ne pas redire un fait)".
+7. `SKILL.md` transversal + `actions/04-review-memory.md` étape 2 :
+ - SKILL.md : "Each fact lives in exactly one memory file ; another file
+ references it, never restates it." (uniquement pour les faits de la table
+ réduite)
+ - 04 : check "no fact duplicated across files ; si dupliqué, garder dans le
+ fichier propriétaire, drop la copie."
+
+### Validation post-édit
+
+- `aidd framework build --target codex` passe sans erreur.
+- Relire les templates touchés : chacun reste lisible seul.
+
+### Hors scope (suivi séparé)
+
+- Symptôme A (distribution Codex `@` brut vs build) : tracer le chemin réel.
+- Gate de `integration` sous capability `api` : à revoir dans capability-signals.
diff --git a/aidd_docs/tasks/2026_06/2026_06_29_memory-dedup/empirical-results.md b/aidd_docs/tasks/2026_06/2026_06_29_memory-dedup/empirical-results.md
new file mode 100644
index 00000000..7d3d4b19
--- /dev/null
+++ b/aidd_docs/tasks/2026_06/2026_06_29_memory-dedup/empirical-results.md
@@ -0,0 +1,51 @@
+# Preuve empirique — duplication mémoire (avant décision)
+
+Fixture minimal (`scratchpad/fixture`) : API Node/Express + Knex/sqlite + Jest.
+Déclenche core + api + database. Fill rejoué à la main de deux façons :
+
+- **run actuel** : fill aveugle (chaque template rempli indépendamment, comme
+ l'action `03.6` le dit aujourd'hui).
+- **run fixé** : templates haut niveau inchangés + logique de propriétaire
+ (architecture sans Structure & sans libs de domaine ; codebase-map possède
+ zones+entry ; integration reframé externe ; "un fait = un fichier").
+
+## Résultat (comptage déterministe, substring)
+
+| Métrique | run actuel | run fixé |
+| --- | --- | --- |
+| Faits dupliqués (≥2 fichiers) | 7 | 6 |
+| Sites de restatement | 23 | 15 (−35 %) |
+| Entry point | 3 fichiers (quasi-verbatim) | 1 |
+| Routes `src/routes` | 4 fichiers | 2 (accepté) |
+
+## Lecture
+
+- **Bug confirmé** : fill aveugle → 7 faits dupliqués, jusqu'à 4 fichiers
+ chacun. Pires : entry point + routes quasi-verbatim ; `architecture.Stack`
+ aimant (Express, Knex, Jest re-listés).
+- **Fix efficace sur le haut-sévérité** : entry point 3→1, paires
+ quasi-verbatim architecture↔codebase-map supprimées, Internal+diagramme
+ d'integration supprimés. Résiduel = mini-dups consciemment acceptés
+ (framework, npm test, users).
+- **Templates restés haut niveau** : dédup faite par action/règle, zéro
+ métadonnée dans les templates. Conforme à la consigne.
+
+## Trouvailles
+
+1. **Le comptage substring sur-compte** (ex: "Jest" comme label de zone ≠ vraie
+ dup). → un script de dédup naïf ne suffit pas ; le check doit être
+ **sémantique** (review agent), pas un grep.
+2. **`integration` sur projet sans service externe → quasi vide** ("None").
+ Confirme un gate douteux : integration ne devrait pas se déclencher sans
+ service externe. → fix séparé dans `capability-signals`.
+3. La dédup résiduelle dépend du comportement du fill agent suivant
+ l'action+règle. Pas garantissable statiquement → la règle doit être
+ **explicite et forte**, et la review 04 doit lister des points de dédup
+ concrets (fact → propriétaire).
+
+## Conséquence sur le plan
+
+- Check 04 = review sémantique forte (pas un script), avec checklist
+ fact→propriétaire ; option : déléguer à un checker subagent indépendant
+ (contexte frais), formulé plugin-agnostique.
+- Ajouter au suivi séparé : gate `integration` dans `capability-signals`.
diff --git a/aidd_docs/tasks/2026_06/2026_06_29_memory-dedup/phase-1.md b/aidd_docs/tasks/2026_06/2026_06_29_memory-dedup/phase-1.md
new file mode 100644
index 00000000..249dd403
--- /dev/null
+++ b/aidd_docs/tasks/2026_06/2026_06_29_memory-dedup/phase-1.md
@@ -0,0 +1,61 @@
+---
+status: pending
+---
+
+# Instruction: Templates à responsabilité unique
+
+Part of [`plan.md`](./plan.md).
+
+## Architecture projection
+
+
+
+```txt
+assets/templates/memory/
+├── core/
+│ └── architecture.md 🔁 drop ## Structure ; Stack = libs transversales only
+├── api/
+│ ├── api.md 🔁 Style = surface serveur/RPC
+│ └── integration.md 🔁 reframe en intégrations externes (drop ## Internal)
+└── ui/
+ └── navigation.md 🔁 Routing = client
+```
+
+## Tasks to do
+
+### `1)` architecture.md — drop Structure + Stack macro-only
+
+> `codebase-map` possède zones + entry point ; `architecture` ne les redit plus.
+
+1. Supprimer la section `## Structure` (les 2 bullets : modules/layers + entry point).
+2. Stack, bullet 2 : remplacer `` par une formulation "libs transversales uniquement ; une lib couverte par une capability (ORM, test runner, form lib) vit dans son concern, pas ici".
+
+### `2)` integration.md — reframe en intégrations externes
+
+> Responsabilité unique : comment ce système s'intègre à des services tiers. Le flux interne appartient à `architecture.How it fits together`.
+
+1. Intro : remplacer "How this system talks to others: internal communication and external services." par "How this system integrates with external/third-party services."
+2. Supprimer la section `## Internal`.
+3. Conserver `## External services` + le diagramme mermaid (carte des intégrations externes).
+
+### `3)` api.md — Style = serveur/RPC
+
+> Lever l'ambiguïté "où sont définies les routes" avec navigation.
+
+1. Style, bullet 1 : préfixer la responsabilité serveur — "Server/RPC surface: REST, GraphQL, or RPC, the framework, where server routes are defined".
+
+### `4)` navigation.md — Routing = client
+
+> Pendant client de api.md.
+
+1. Routing, bullet 1 : préfixer "Client routing: the router and where client routes are defined".
+
+## Test acceptance criteria
+
+| Task | Acceptance criteria |
+| ---- | ----------------------------------------------------------------------------------------------------- |
+| 1 | `architecture.md` n'a plus de `## Structure` ; Stack bullet 2 ne demande plus les libs de domaine. |
+| 2 | `integration.md` n'a plus de `## Internal` ; intro parle d'intégrations externes ; External + diag présents. |
+| 3 | `api.md` Style mentionne "server" / serveur. |
+| 4 | `navigation.md` Routing mentionne "client". |
+| 1-4 | `aidd framework build --target codex` passe sans erreur ; chaque template reste lisible seul. |
diff --git a/aidd_docs/tasks/2026_06/2026_06_29_memory-dedup/phase-2.md b/aidd_docs/tasks/2026_06/2026_06_29_memory-dedup/phase-2.md
new file mode 100644
index 00000000..c7430e20
--- /dev/null
+++ b/aidd_docs/tasks/2026_06/2026_06_29_memory-dedup/phase-2.md
@@ -0,0 +1,65 @@
+---
+status: pending
+---
+
+# Instruction: Fill non aveugle + règle dédup
+
+Part of [`plan.md`](./plan.md).
+
+## Architecture projection
+
+
+
+```txt
+.
+├── SKILL.md 🔁 transversal rule "un fait = un fichier"
+└── actions/
+ ├── 03-generate-memory.md 🔁 étape 6 : fill non aveugle
+ └── 04-review-memory.md 🔁 check dédup cross-fichiers
+```
+
+## User Journey
+
+```mermaid
+flowchart TD
+ A[03 Fill] -->|tient compte des faits déjà écrits| B[un fait écrit une fois]
+ B --> C[04 Review]
+ C -->|check: aucun fait dupliqué| D{dup trouvée ?}
+ D -->|oui| E[garder dans le propriétaire, drop la copie]
+ D -->|non| F[clean]
+```
+
+## Tasks to do
+
+### `1)` 03-generate-memory.md — casser le fill aveugle
+
+> Le multiplicateur de duplication. Le fill ne doit plus être aveugle aux autres templates.
+
+1. Étape 6 (`**Fill.**`) : retirer "in parallel".
+2. Reformuler l'amorce pour que chaque template soit rempli en tenant compte des faits déjà capturés par les templates précédents, afin de ne pas redire un fait (le référencer plutôt que le recopier).
+
+### `2)` SKILL.md — transversal rule (forte + points explicites)
+
+> Étend le principe "pointer vers le code" au cross-mémoire, sans tuer l'auto-suffisance. Règle forte, avec les propriétaires nommés.
+
+1. Ajouter aux Transversal rules, formulé fort : "**Un fait vit dans un seul fichier mémoire.** Un autre fichier le référence, jamais ne le recopie." Suivi des points de propriété (fact → owner) :
+ - point d'entrée + zones top-level → `codebase-map`
+ - stack/framework macro → `architecture` ; une lib de domaine → son concern (ORM→database, runner→testing, form lib→forms)
+ - flux interne entre modules → `architecture` ; services externes → `integration`
+ - commandes de gate (typecheck/test/build) → `coding-assertions`
+
+### `3)` 04-review-memory.md — review dédup sémantique (non sautable)
+
+> Le check est sémantique, pas un grep (cf. preuve empirique : substring sur-compte). Forte, indépendante, avec checklist concrète.
+
+1. Étape 2 (`**Review.**`) : ajouter un check fort et explicite — "Lire tous les fichiers ensemble. Pour **chaque fait de la liste de propriété** (cf. transversal), vérifier qu'il vit dans un seul fichier ; toute copie ailleurs = à supprimer, en gardant le propriétaire. Juger sémantiquement, pas par correspondance de chaîne."
+2. Option (formulée plugin-agnostique, sans dépendance dure à `aidd-dev`) : "Cette review peut être confiée à un checker subagent indépendant en contexte frais ; sa checklist DRY couvre déjà la dédup." (Note : `aidd-dev:checker` convient s'il est installé.)
+
+## Test acceptance criteria
+
+| Task | Acceptance criteria |
+| ---- | -------------------------------------------------------------------------------------------- |
+| 1 | L'étape 6 de `03` ne contient plus "in parallel" et mentionne la prise en compte des faits déjà écrits. |
+| 2 | `SKILL.md` Transversal rules contient la règle forte "un fait = un fichier" + les 4 points fact→owner. |
+| 3 | L'étape Review de `04` contient le check dédup sémantique (par fait de la liste de propriété) + l'option checker subagent. |
+| 1-3 | `aidd framework build --target codex` passe sans erreur. |
diff --git a/aidd_docs/tasks/2026_06/2026_06_29_memory-dedup/plan.md b/aidd_docs/tasks/2026_06/2026_06_29_memory-dedup/plan.md
new file mode 100644
index 00000000..99bbd668
--- /dev/null
+++ b/aidd_docs/tasks/2026_06/2026_06_29_memory-dedup/plan.md
@@ -0,0 +1,41 @@
+---
+objective: "Le memory bank généré ne duplique plus un fait entre fichiers, et le fill ne re-écrit plus un fait déjà capturé."
+status: pending
+---
+
+# Plan: dédup des templates mémoire (02-project-memory)
+
+## Overview
+
+| Field | Value |
+| ---------- | --------------------------------------------------------------------- |
+| **Goal** | Supprimer la duplication cross-fichiers du memory bank : templates à responsabilité unique + fill non aveugle. |
+| **Source** | `aidd_docs/tasks/2026_06/2026_06_29-memory-duplication-diagnosis.md` |
+
+## Phases
+
+| # | Phase | File |
+| --- | ------------------------------ | ---------------------------- |
+| 1 | Templates à responsabilité unique | [`phase-1.md`](./phase-1.md) |
+| 2 | Fill non aveugle + règle dédup | [`phase-2.md`](./phase-2.md) |
+
+## Resources
+
+| Source | Verified |
+| ------------------------------------------------------------ | ----------------------------------------------------------------- |
+| docs Anthropic skills + agentskills.io | `@` = import CLAUDE.md, pas le standard skill (chemins relatifs) |
+| `aidd framework build --target codex` (test scratchpad) | le build convertit `@../x` → un lien `x` vers `../x` ; la dup est structurelle |
+| Les 22 templates `assets/templates/memory/` | matrice des faits dupliqués, table de dominance réduite |
+
+## Decisions
+
+| Decision | Why |
+| ----------------------------------------------------------------- | ------------------------------------------------------------------- |
+| Pas de pointer mémoire↔mémoire généralisé | casse l'auto-suffisance d'un fichier lisible seul ; gain < coût |
+| `integration` reframé en intégrations externes, pas juste coupé | le fichier mélangeait 2 responsabilités (interne ≡ architecture) |
+| On garde les dups mineures (framework, environnements, release) | un mot re-nommé coûte moins qu'un renvoi |
+| Le vrai levier = casser le fill parallèle aveugle (03.6) | même templates parfaits, le fill aveugle re-écrit le même fait |
+| Check dédup = review sémantique, pas un script grep | preuve empirique : le substring sur-compte (label de zone ≠ dup) |
+| Règle dédup explicitée fort + points fact→owner | la dédup dépend du fill agent ; la règle doit être sans ambiguïté |
+| Symptôme A (Codex `@` brut) hors scope | dépend du chemin de distribution réel, à tracer séparément |
+| Gate `integration` (sans service externe → fichier vide) hors scope | trouvaille empirique ; fix dans `capability-signals` séparément |
diff --git a/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/brainstorm.md b/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/brainstorm.md
new file mode 100644
index 00000000..1c2cfc54
--- /dev/null
+++ b/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/brainstorm.md
@@ -0,0 +1,35 @@
+# Brainstorm — onboard refactor
+
+> Refined through brainstorm. Intent-level only: no solution, no plan.
+
+## Refined idea
+
+Onboard stays a **guide** that orients the user in the AIDD flow and never builds the work itself. The refactor reshapes it around four moves:
+
+- **Foundation first.** When the project's memory bank is missing or unsynced, onboard makes setting it up (init, sync) the loud, pre-selected next step. It is **skippable** — the user can override — so the existing "suggest, never force" principle survives; the right path is just made obvious.
+- **Project-adapted action menu.** Once the foundation is in place or skipped, onboard offers a *set* of relevant next actions (refine an idea, plan, audit, debug, …) instead of one lone suggestion.
+- **Two-layer relevance.** The menu is built from what the installed plugins *can* do, then ranked by *cheap* project signals for what the project *needs now*. Deep analysis is **not** onboard's job — the capability the user picks does its own deep work.
+- **Lighter loop.** Onboard reads the project once and refreshes only on change, rather than a full rescan every loop.
+
+A **capability reference** underpins this: it maps installed plugins to the actions they offer — the raw material onboard ranks against the cheap project signals.
+
+## Settled this round
+
+- Role: guide, not actor (same job as today).
+- Enforce strength: strong default, skippable — not a hard gate.
+- Reference model: possible (plugin capability map) × relevant (codebase-signal ranking).
+- Loop reads: read once, refresh on change.
+- Analysis depth (leaning, not locked): cheap signals only; the picked capability owns the deep analysis.
+
+## Open assumptions (confirm at design time)
+
+1. **Skip semantics** — how the user skips the foundation step, and whether onboard re-nags it next loop or remembers the skip.
+2. **Signal set** — the exact cheap signals feeding the ranking (manifest, presence of tests/specs/plans/open PRs, memory state, …); ordering is heuristic by design.
+3. **Reference shape** — evolve the existing journey map vs introduce a new capability reference (a build-time call).
+4. **"On change" trigger** — what counts as a state change that forces a re-read.
+5. **Foundation scope** — just memory init + sync, or also the AI context files?
+6. **Menu rules** — which actions surface, and how they are ordered and capped.
+
+## Next move
+
+Ready to become a **design / plan for the onboard skill**, then built.
diff --git a/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/phase-1.md b/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/phase-1.md
new file mode 100644
index 00000000..ebb6c874
--- /dev/null
+++ b/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/phase-1.md
@@ -0,0 +1,67 @@
+---
+status: pending
+---
+
+# Instruction: Lighten the read loop
+
+Part of [`plan.md`](./plan.md).
+
+## Architecture projection
+
+
+
+```txt
+plugins/aidd-context/skills/00-onboard/
+├── SKILL.md ✏️ transversal: read-once + ledger advance
+└── actions/
+ ├── 01-read-project.md ✏️ produce the reusable snapshot + session ledger
+ ├── 02-orient.md ✏️ consume the ledger: exclude done/skipped stages
+ └── 03-act.md ✏️ write the ledger: mark run done, declined skipped
+```
+
+The ledger is one indivisible mechanism — produce (01), write (03), **read (02)**. They must ship together, or the loop re-nags. The first build sliced the consumer into a later phase and the loop kept re-suggesting done steps; this phase wires all three.
+
+## User Journey
+
+```mermaid
+flowchart TD
+ A[read-project: scan once] --> B[snapshot = cheap signals + session ledger]
+ B --> C[orient / act loop reuses snapshot]
+ C --> E{outcome type?}
+ E -- Run-it --> F[re-derive disk signals + mark step done in ledger]
+ F --> C
+ E -- read-only --> C
+```
+
+## Tasks to do
+
+### `1)` Snapshot = cheap signals + a session ledger
+
+> `01-read-project` produces one reusable snapshot. Cheap disk signals alone cannot tell a step is done, so the snapshot also carries a session ledger.
+
+1. Capture the cheap signals, each a presence test: memory-bank state (bank dir with filled files = synced; absent or empty = weak), an architecture doc (`aidd_docs/INSTALL.md`) present, manifest + stack, presence of tests (real test files exist, not just a configured runner), code presence (any source outside `aidd_docs/` — an empty repo has none), specs/plans under `aidd_docs/`, current plan status (the `plan.md` status field), open PRs. Plus a bounded richer read, done in the same single pass: a light code-quality sample (size and complexity hotspots = "messy") and a bug-marker scan (TODO/FIXME/error reports), so audit and debug can rank later. Reading memory-file contents to judge "synced" and this bounded code sample are the sanctioned non-cheap reads — done once, never per loop.
+2. Carry a **per-session step ledger**: which flow steps the user has run, and which they have skipped, this session. This is session state onboard holds, not derived from disk — it is how onboard knows a step is done when its completion leaves no cheap signal (track to an external tracker, ship's merge, a read-only review).
+3. Hold the snapshot (signals + ledger) in context as the single source orient and act both read; never reach back to the filesystem mid-loop.
+4. Keep the read silent: still prints nothing.
+
+### `2)` Advance the loop without re-nagging
+
+> A step is done when a disk signal proves it OR the ledger records it run this session. The loop must never re-suggest a just-done step.
+
+1. In `SKILL.md`, change the transversal "Re-read after each step" to "Read once; after any Run-it outcome re-derive the disk signals and update the ledger; reuse the snapshot for read-only outcomes."
+2. In `03-act`, after a "Run it" outcome: re-derive the cheap disk signals **and** mark the step the user ran as done in the ledger. The default (phase 4) is the earliest flow step that is neither satisfied by a disk signal nor recorded done-this-session, so the just-completed step is never re-offered even when it left no disk trace. Every read-only outcome (explain step, explain project, show flow, different step, hand off, stop) reuses the existing snapshot unchanged.
+
+### `3)` Wire the ledger end-to-end
+
+> Producer and writer are useless without a consumer. `02-orient` must read the ledger, and a declined step must be written as skipped.
+
+1. In `02-orient`, the earliest-unmet-stage rule excludes any stage the ledger marks done or skipped: a stage is met if a disk fact satisfies it **or** the ledger records it.
+2. In `03-act`, a "different step" marks the declined suggested step as skipped in the ledger, so it is not re-suggested this session.
+
+## Test acceptance criteria
+
+| Task | Acceptance criteria |
+| ---- | --------------------------------------------------------------------------------------------------- |
+| 1 | The snapshot lists every named signal plus the session ledger of run/skipped steps, is emitted once; `01-read-project` still prints nothing. |
+| 2 | After a Run-it outcome, the just-run step is marked done in the ledger and is never re-offered as the default, even when it left no disk signal (bootstrap, track, ship, review); read-only outcomes reuse the snapshot. |
+| 3 | `02-orient` excludes ledger done/skipped stages when choosing the default; a "different step" writes the declined step as skipped. The off-disk Track case advances on the next loop instead of re-nagging. |
diff --git a/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/phase-2.md b/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/phase-2.md
new file mode 100644
index 00000000..0fdaab85
--- /dev/null
+++ b/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/phase-2.md
@@ -0,0 +1,61 @@
+---
+status: pending
+---
+
+# Instruction: Foundation-first, skippable
+
+Part of [`plan.md`](./plan.md).
+
+## Architecture projection
+
+
+
+```txt
+plugins/aidd-context/skills/00-onboard/
+├── SKILL.md ✏️ transversal: foundation is the strong default, skip remembered
+└── actions/
+ └── 02-orient.md ✏️ pre-select the memory foundation when weak, skippable
+```
+
+## User Journey
+
+```mermaid
+flowchart TD
+ A[orient reads snapshot] --> Z{repo empty, nothing built?}
+ Z -- yes --> Y[loud default: architect a stack first]
+ Z -- no --> B{memory bank present and synced?}
+ B -- no --> C[loud default: set up the memory bank]
+ C --> D{user picks it or skips?}
+ D -- runs it --> E[foundation done]
+ D -- skips --> F[remember skip: no loud default this session]
+ B -- yes --> G[action menu]
+ Y --> G
+ E --> G
+ F --> G
+```
+
+## Tasks to do
+
+### `1)` The foundation gate, with an explicit empty-repo branch
+
+> The gate has two states, both normative in the diagram above, not just prose.
+
+1. **Empty repo.** When the snapshot shows an empty repo (no code, no manifest), the loud pre-selected default is "architect a stack first" — not the memory foundation.
+2. **Content but weak memory.** When the repo has content and the memory bank is missing or unsynced, the loud pre-selected default is "set up the memory bank", with a one-line why. Foundation = memory init + sync, including the context-file memory blocks.
+3. **Memory fine, or empty repo handled:** go straight to the action menu (phase 4).
+4. Keep it skippable: the user can pick any other action; never block.
+
+### `2)` Skip is global, recorded in the ledger
+
+> Enforce without harassing, and preserve suggest-never-force, for every step — not just the foundation.
+
+1. When the user skips **any** loud default (architect a stack, the memory foundation, or a later step), record it in the session ledger and do not re-fire it this session. This covers the empty-repo "architect" default too, not only the memory foundation.
+2. The post-skip default has a defined owner: the earliest flow step that is neither satisfied by a disk signal, nor done-this-session, nor skipped-this-session (phase 1 + phase 4). The skipped step drops to a plain (non-loud) listed option. If nothing qualifies, there is no loud default and the menu shows the tools + footer only.
+3. In `SKILL.md`, keep "Suggest, never force" and add one line: a default may be loud and pre-selected, but it is always skippable, and a skipped step is remembered for the session.
+
+## Test acceptance criteria
+
+| Task | Acceptance criteria |
+| ---- | -------------------------------------------------------------------------------------------------------- |
+| 1 | An empty repo loudly pre-selects "architect a stack first"; a content repo with weak memory loudly pre-selects "set up the memory bank"; both are skippable and both branches are in the diagram. |
+| 2 | Any skipped step (architect, foundation, or later) is recorded in the ledger and not re-fired this session; the post-skip default is the earliest step not done/skipped, or none; `SKILL.md` keeps "suggest never force" + the skip-remembered note. |
diff --git a/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/phase-3.md b/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/phase-3.md
new file mode 100644
index 00000000..5806e5ad
--- /dev/null
+++ b/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/phase-3.md
@@ -0,0 +1,49 @@
+---
+status: pending
+---
+
+# Instruction: Evolve journey into the capability map
+
+Part of [`plan.md`](./plan.md).
+
+## Architecture projection
+
+
+
+```txt
+plugins/aidd-context/skills/00-onboard/
+└── references/
+ └── journey.md ✏️ map each cheap signal to the actions it makes relevant
+```
+
+## User Journey
+
+```mermaid
+flowchart TD
+ A[cheap signal in snapshot] --> B[capability map: signal -> relevant actions]
+ B --> C[actions described by what they achieve, resolved later to installed skills]
+```
+
+## Tasks to do
+
+### `1)` Map signals to relevant secondary tools
+
+> The flow walk still owns the default step. This map only ranks the secondary tools beside it — it never computes the default.
+
+1. In `references/journey.md`, keep the flow stages and the resolve-to-installed-skill rules unchanged; they remain the source of the default step (with its hedges).
+2. Add a layer mapping each snapshot signal to the secondary tools it makes relevant, gated to the flow stage where it applies: real test files absent at build/review → adding tests; the code-quality sample flags messiness at build/review → audit; the bug-marker scan flags reported bugs → debug; open PR → nothing new (ship is the flow default). A tool never surfaces outside its relevant stage.
+3. Keep it plugin-agnostic: every entry is named by what a skill achieves, never a hardcoded skill or plugin id.
+
+### `2)` Reconcile the placement table with the default rules
+
+> The "Where the project sits" table is a source of truth; it must agree with phase-4.
+
+1. In `references/journey.md`, edit the placement table so the need-stage rows (memory set up + rough idea / clear need) no longer imply a single loud "Clarify" suggestion — they offer Clarify and Track as choices with no loud default, matching phase-4.
+2. Add the empty-repo row's pairing with phase-2 (empty repo → architect a stack) and the build-done rows' Review-or-Ship pairing, so the table never disagrees with the gate or the menu.
+
+## Test acceptance criteria
+
+| Task | Acceptance criteria |
+| ---- | ------------------------------------------------------------------------------------------- |
+| 1 | `journey.md` maps each named signal to a stage-gated secondary tool, never to the default step, and still names no skill or plugin id. |
+| 2 | The placement table's need-stage rows show no loud default, and no table row contradicts the phase-2 gate or the phase-4 menu. |
diff --git a/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/phase-4.md b/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/phase-4.md
new file mode 100644
index 00000000..0c4214bb
--- /dev/null
+++ b/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/phase-4.md
@@ -0,0 +1,57 @@
+---
+status: pending
+---
+
+# Instruction: Ranked action menu in orient + act
+
+Part of [`plan.md`](./plan.md).
+
+## Architecture projection
+
+
+
+```txt
+plugins/aidd-context/skills/00-onboard/
+├── README.md ✏️ describe the foundation-gate + ranked-menu flow
+└── actions/
+ ├── 02-orient.md ✏️ build a ranked action set, not one suggestion
+ └── 03-act.md ✏️ act on a pick from the set
+```
+
+## User Journey
+
+```mermaid
+flowchart TD
+ A[foundation done or skipped] --> B[rank snapshot signals against the capability map]
+ B --> C[default = earliest unmet flow step]
+ C --> D[+ small ranked set of relevant tools, cap ~5]
+ D --> E[user picks one]
+ E --> F[act: run / explain / hand off / stop, resolved to an installed skill or a gap]
+```
+
+## Tasks to do
+
+### `1)` Orient builds one reconciled menu
+
+> One default mechanism, one render order, never less informative than today.
+
+1. **Default = flow walk.** In `02-orient`, the default step is the flow walk's earliest **unmet** step (journey.md), where unmet = not satisfied by a disk signal, not done-this-session, and not skipped-this-session (the phase-1 ledger). This is what stops the just-run step being re-offered. Its hedges, driven by the plan-status signal:
+ - Plan status `in-progress` → default is **Build alone** (the status is a cheap signal the build is not done; no premature Review).
+ - Build looks done but nothing reviewed (plan status `implemented`, or an open PR) → present **Review and Ship together**, Review first, so Review is never skipped.
+ - Build-doneness genuinely unprovable (no plan status either way) → hedge **Build and Review**.
+ - Need stage → offer **Clarify and Track** as choices, Clarify listed first as a soft recommendation, but **not** a loud pre-selected default (no snapshot signal separates rough idea from clear need).
+2. **Secondary tools = signal map.** Beside the default, add the stage-gated tools the capability map (phase 3) marks relevant, each resolved to an installed skill or marked a gap. The signal map never overrides the default. Cap **the default + secondary block** at ~5 lines; this cap scopes that block only.
+3. **One render order, always:** the foundation step first when memory is weak (phase 2), else the flow default(s); then the ranked secondary tools; then the standing affordances as **one compact footer line**, never dropped — explain the step first, explain this project (when memory is filled), see the flow + skills, go to a different step, hand off, stop. The footer is outside the ~5-line cap, so the menu is never less informative than today's.
+4. Drop the old fixed 8-item list; keep labels plain.
+
+### `2)` Act on the pick; refresh docs
+
+1. In `03-act`, handle a pick from the ranked set with the existing outcomes (run / explain / hand off / stop), looping back per phase 1's refresh rule.
+2. Update `README.md` to describe the new flow: foundation gate, then the project-adapted ranked menu.
+
+## Test acceptance criteria
+
+| Task | Acceptance criteria |
+| ---- | -------------------------------------------------------------------------------------------------------- |
+| 1 | Default from the flow walk only; plan-status `in-progress` → Build alone; build-done-unreviewed → Review+Ship; need-stage → Clarify-first soft recommendation with no loud default; default+secondary block ≤ ~5 lines; standing affordances render as one footer line outside the cap. |
+| 2 | A pick runs through `03-act`'s outcomes; `README.md` documents the foundation-gate + reconciled-menu flow; the menu is never less informative than today's onboard on any state. |
diff --git a/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/plan.md b/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/plan.md
new file mode 100644
index 00000000..aa9bf20d
--- /dev/null
+++ b/aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/plan.md
@@ -0,0 +1,49 @@
+---
+objective: "Onboard enforces the memory foundation as a skippable default, then offers a project-adapted, capability-ranked action menu, on a read-once/refresh-on-change loop, without breaking suggest-never-force."
+status: pending
+---
+
+# Plan: Onboard refactor
+
+## Overview
+
+| Field | Value |
+| ---------- | --------------------------------------------------------------------- |
+| **Goal** | Turn onboard from one-suggestion-per-loop into a foundation-gated, project-adapted action guide that reads once and refreshes on change. |
+| **Source** | `aidd_docs/tasks/2026_06/2026_06_30_onboard-refactor/brainstorm.md` |
+
+## Phases
+
+| # | Phase | File |
+| --- | -------------------------------------- | ---------------------------- |
+| 1 | Lighten the read loop | [`phase-1.md`](./phase-1.md) |
+| 2 | Foundation-first, skippable | [`phase-2.md`](./phase-2.md) |
+| 3 | Evolve journey into the capability map | [`phase-3.md`](./phase-3.md) |
+| 4 | Ranked action menu in orient + act | [`phase-4.md`](./phase-4.md) |
+
+## Resources
+
+| Source | Verified |
+| ---------------------------------------------------------------------- | -------------------------------------------------------------- |
+| `plugins/aidd-context/skills/00-onboard/` (SKILL + 3 actions + journey) | current structure: read → orient (one suggestion) → act → loop |
+| `plugins/aidd-context/skills/04-skill-generate/references/skill-authoring.md` | the R1–R13 contract the rewrite must keep |
+| `brainstorm.md` (this folder) | the refined idea and the 6 open assumptions, now resolved below |
+
+## Decisions
+
+| Decision | Why |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------- |
+| Foundation is a strong, pre-selected default, never a hard gate | keeps the load-bearing "suggest never force" rule intact |
+| A skip of any step is recorded in the session ledger and not re-fired; the post-skip default is the next step not done/skipped | global skip with a defined owner — not scoped to the memory foundation |
+| Onboard does a bounded richer read once — cheap presence signals plus a light code-quality sample and a bug-marker scan — so audit and debug can rank; still read-once, never per loop | the ranked menu needs more than presence signals to fire; read-once keeps the deeper read from being per-loop heavy |
+| Evolve `references/journey.md` into the capability map; no new reference file | journey already owns flow→capability resolution; stays DRY |
+| A step is done when a disk signal proves it OR the session ledger records it run this session; refresh re-derives disk signals + updates the ledger after a Run-it, reuse for read-only | cheap signals cannot detect off-disk completions (bootstrap→INSTALL.md, track→external, ship→merge, read-only review), so the ledger carries them — kills the re-nag |
+| Foundation = memory init + sync incl. context-file blocks; empty-repo stack stays pre-foundation | the memory bank and its context blocks are one foundation |
+| The **flow-walk owns the default** (earliest unmet step, with its hedges); the **signal map only ranks the secondary tools**, never the default | one mechanism per slot — kills the flow-vs-signal default conflict the dry-run found |
+| Plan status drives the build hedges: `in-progress` → Build alone; `implemented` or open-PR → Review+Ship (Review first); unprovable → Build+Review | Review is never skipped, and no premature Review at the in-progress stage |
+| Need-stage offers Clarify and Track as choices, Clarify first as a soft recommendation, never a loud pre-selected default | keeps baseline's directiveness without auto-running an unprovable pick |
+| Secondary tools are stage-gated and mapped from the snapshot signals: add-tests from real-test-files, audit from the code-quality sample, debug from the bug-marker scan | the richer read lets the ranked menu actually fire |
+| Standing affordances render as one compact footer line, outside the ~5-line cap; the cap scopes only the default + secondary block | menu never less informative than today's, and the cap is satisfiable |
+| "Presence of tests" = real test files exist, not just a configured runner | a configured runner with no test files reads as tests-absent, so add-tests fires exactly there |
+| Empty repo is its own gate branch (loud default = architect a stack), cleared when `INSTALL.md` exists or architect ran this session; the memory-foundation gate applies only to a content repo with weak memory | normative diagram decides the state, and bootstrap's artifact clears the dead-end |
+| Accepted trade — a code-present project still at the need stage gets no auto build-tool path, and "rough idea" gets no loud default | no cheap signal proves the build stage or the need clarity; both stay user-pickable |
diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md
index bbdeb4bd..709cda3c 100644
--- a/docs/ARCHITECTURE.md
+++ b/docs/ARCHITECTURE.md
@@ -124,6 +124,20 @@ flowchart LR
Each action is a self-contained markdown file with inputs, outputs, depends-on, process steps, and a test checklist. Actions can call other skills via the `Skill` tool, so a skill discovers a capability it needs at runtime (by matching skill descriptions, never by hardcoded plugin name) and delegates to it.
+## Skills and agents
+
+- A **skill** is a caller-agnostic recipe; it runs in the context of whoever invokes it.
+- An **agent** is an isolated executor; it runs in its own context and returns only a result.
+
+Choose by context, not complexity: keep the work visible to the caller → skill; isolate it and take only the result → agent.
+
+Composition rules:
+
+- **Spawning is an orchestration decision, never a skill's.** A recipe skill never spawns an agent; it runs in the caller's context. Only a high-level orchestrator skill (for example the SDLC) spawns agents, and it decides per step whether to isolate the work in an agent or run the recipe inline.
+- An orchestrator spawns each step as a leaf agent that runs a recipe, or runs the recipe itself when the step needs no isolation. The SDLC owns planning (runs `01-plan` in its own context) and spawns two workers: `executor` (runs `02-implement`) and `checker` (runs `05-review`). The agent is the isolation; the recipe inside it never spawns again.
+- An agent invokes only the recipe skills it declares under `# Skills you may invoke`, never an orchestrator skill, and never reads a skill's files. It names a same-plugin skill by its `plugin:folder` address (deterministic); it names a cross-plugin skill by capability, per cross-plugin orthogonality.
+- An agent never delegates flow work to another agent and never invokes an orchestrator skill. It may spawn a read-only recon helper (for example `Explore`) that mutates nothing and spawns nothing. So the write path stays two layers deep and delegation can never cycle.
+
## Cross-plugin orthogonality
Plugins do not reference each other by name. When skill A needs a capability owned by skill B, it discovers a candidate at runtime through description matching. This rule keeps the marketplace forkable, the plugins swappable, and the docs maintainable.
diff --git a/docs/CATALOG.md b/docs/CATALOG.md
index 31371ab1..1e7b210e 100644
--- a/docs/CATALOG.md
+++ b/docs/CATALOG.md
@@ -20,19 +20,25 @@ Bootstrap, project init, context-artifact generation, diagrams, learning, and ex
| `00-onboard` | Detect project state and open a hub of project actions | `01-detect-state`, `02-recommend-next`, `03-execute-or-handoff` |
| `01-bootstrap` | Imagine and validate a new SaaS architecture, output an `INSTALL.md` | `01-gather-needs`, `02-propose-candidates`, `03-audit-candidates`, `04-pick-and-design`, `05-write-install-md` |
| `02-project-memory` | Initialize or refresh the memory bank and AI context files | `01-init-context-file`, `02-scaffold-docs`, `03-generate-memory`, `04-review-memory`, `05-sync-memory` |
-| `03-context-generate` | Generate context artifacts across the host AI tool(s) | sub-generators: `agents`, `commands`, `hooks`, `marketplaces`, `plugins`, `rules`, `skills` |
-| `04-mermaid` | Generate Mermaid diagrams via a plan-validate workflow | `01-mermaid` |
-| `05-learn` | Capture learnings, conventions, and decisions into memory, decisions, rules | `01-scope`, `02-write`, `03-sync` |
+| `03-context-generate` | Router that dispatches an artifact-generation request to the dedicated generator below | delegates to `04`–`08` (and plugins / marketplaces) |
+| `04-skill-generate` | Generate a router-based skill across the host AI tool(s) | `01-capture-intent`, `02-decompose-actions`, `03-draft-skill`, `04-write-actions`, `05-validate` |
+| `05-rule-generate` | Generate a coding rule that governs editor and agent behavior | `01-capture-rule`, `02-write-rule`, `03-validate` |
+| `06-agent-generate` | Generate an agent across the host AI tool(s) | `01-capture-agent`, `02-write-agent`, `03-validate` |
+| `07-command-generate` | Generate a flat slash command across the host AI tool(s) | `01-capture-command`, `02-write-command`, `03-validate` |
+| `08-hook-generate` | Generate a lifecycle hook across the host AI tool(s) | `01-capture-hook`, `02-write-hook`, `03-validate` |
+| `09-mermaid` | Generate Mermaid diagrams via a plan-validate workflow | `01-mermaid` |
+| `10-learn` | Capture learnings, conventions, and decisions into memory, decisions, rules | `01-gather`, `02-assess`, `03-write`, `04-sync` |
| `11-explore` | Survey the project across tooling, context, and codebase, then drill into one axis | `01-survey`, `02-drill` |
+| `12-cook` | Manage the project's recipes/ how-to sheets: list, create, or update one | `01-list`, `02-upsert` |
## aidd-dev
-The development SDLC: plan, implement, assert, audit, review, test, refactor, debug.
+The development SDLC: plan, implement, assert, audit, review, test, refactor, debug, for-sure, todo.
| Skill | Role | Actions |
| --------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| `00-sdlc` | Pure orchestrator driving the full dev flow end to end | `01-spec`, `02-plan`, `03-implement`, `04-review`, `05-ship` |
-| `01-plan` | Technical implementation plans, component behavior, image extraction | `01-plan`, `02-components-behavior`, `03-image-extract-details` |
+| `01-plan` | Turn a request, ticket, or file into a phased implementation plan: gather, explore, wireframe, plan | `01-gather`, `02-explore`, `03-wireframe`, `04-plan` |
| `02-implement` | Execute a plan phase by phase until 100% complete | `01-implement` |
| `03-assert` | Assert features work - general, architecture, frontend UI | `01-assert`, `02-assert-architecture`, `03-assert-frontend` |
| `04-audit` | Read-only codebase audit across quality pillars | `01-code-quality`, `02-architecture`, `03-security`, `04-dependencies`, `05-performance`, `06-tests`, `07-ui` |
@@ -41,6 +47,7 @@ The development SDLC: plan, implement, assert, audit, review, test, refactor, de
| `07-refactor` | Improve code without changing behavior across four axes | `01-performance`, `02-security`, `03-cleanup`, `04-architecture` |
| `08-debug` | Reproduce and fix bugs with a test-driven workflow | `01-reproduce`, `02-debug`, `03-reflect-issue` |
| `09-for-sure` | Iterative loop that retries until a success condition is met | `01-init-tracking`, `02-auto-accept`, `03-autonomous-loop` |
+| `10-todo` | Split the prompt into independent todos, run one implementer agent per todo in parallel | `01-todo` |
## aidd-pm
@@ -49,7 +56,7 @@ Product management: ticket retrieval, user stories, PRD, spec.
| Skill | Role | Actions |
| ------------------------- | ---------------------------------------------------------- | -------------------------------- |
| `01-ticket-info` | Retrieve and display ticket information | `01-ticket-info` |
-| `02-user-stories-create` | Generate INVEST-compliant user stories | `01-create-user-stories` |
+| `02-user-stories` | Prioritized, estimated INVEST user-story backlog | `01-clarify-scope`, `02-split-epic`, `03-draft-stories`, `04-estimate-impact`, `05-prioritize`, `06-sync-tracker` |
| `03-prd` | Generate a structured Product Requirements Document | `01-prd` |
| `04-spec` | Generate or refine a normalized project spec | `01-build`, `02-refine` |
@@ -69,12 +76,13 @@ Meta-cognition: brainstorm, challenge, condense, blind-spot scan, fact-check.
Version-control workflows: commit, pull/merge request, release tag, issue.
-| Skill | Role | Actions |
-| ------------------ | --------------------------------------------------- | ------------------- |
-| `01-commit` | Create an atomic conventional commit | `01-commit` |
-| `02-pull-request` | Create a draft pull or merge request | `01-pull-request` |
-| `03-release-tag` | Cut a semver release with annotated tag and notes | `01-release-tag` |
-| `04-issue-create` | Create an issue in the configured ticketing tool | `01-issue-create` |
+| Skill | Role | Actions |
+| ---------------------- | --------------------------------------------------- | ----------------------- |
+| `01-commit` | Create an atomic conventional commit | `01-commit` |
+| `02-pull-request` | Create a draft pull or merge request | `01-pull-request` |
+| `03-release-tag` | Cut a semver release with annotated tag and notes | `01-release-tag` |
+| `04-issue-create` | Create an issue in the configured ticketing tool | `01-issue-create` |
+| `05-pull-request-list` | List the open pull or merge requests | `01-pull-request-list` |
## aidd-orchestrator
diff --git a/docs/GLOSSARY.md b/docs/GLOSSARY.md
index 195804a7..19a57100 100644
--- a/docs/GLOSSARY.md
+++ b/docs/GLOSSARY.md
@@ -28,7 +28,7 @@ A single atomic step inside a skill, stored at `plugins//skills//agents/.md`. Agents are scoped (for example `planner`, `implementer`, `reviewer`) and called from skills when a step needs a dedicated role rather than the main thread. Currently agents ship only in `aidd-dev`.
+A specialized AI persona under `plugins//agents/.md`. Agents are scoped (for example `executor`, `checker`) and spawned by an orchestrator when a step needs isolation in a dedicated role rather than the main thread. Currently agents ship only in `aidd-dev`.
## Rule
diff --git a/docs/MAINTAINERS.md b/docs/MAINTAINERS.md
index 92d37f8a..06b0dc8a 100644
--- a/docs/MAINTAINERS.md
+++ b/docs/MAINTAINERS.md
@@ -15,10 +15,73 @@ How to operate this repository day to day. For **who** may do what and the decis
## Daily
-- **Triage issues.** New issues auto-add to board #8. Set `Status` / `Area` / `Priority` / `Work Type`; link under an epic (native sub-issues) if relevant.
+- **Triage issues.** New issues auto-add to board #8. Set `Status` / `Area` / `Priority`; link under an epic (native sub-issues) if relevant. **Type** is the issue/PR label, not a board field (see [Project board layout](#project-board-project-8)).
- **Roadmap.** Priority is set by the community vote (mechanism in `GOVERNANCE.md`). Accepted items live on board #8 - keep `ROADMAP.md` as a pointer, do not maintain a second list.
- **Review PRs.** Every PR needs a Habilité (CODEOWNERS) approval; checks `lefthook`, `Commitlint` must pass; squash-merge.
+## Project board (Project 8)
+
+The board is a **view** of the same taxonomy the docs define — it never invents its own. Each property answers one question: **Type** = the label, **Priority** = how urgent, **Status** = where in the flow, **When** = the Timeline. Routing (`next` vs `main`) is *not* a board property — it derives from the branch prefix ([routing table](../aidd_docs/memory/vcs.md#types)).
+
+Apply this layout once (org-admin or board-write needed). Read field IDs first:
+
+```bash
+gh project field-list 8 --owner ai-driven-dev # note the IDs you need below
+```
+
+### Fields
+
+- **Drop `Work type`** — duplicates the Type label. **Drop `Phases`** — duplicates Status/Milestone (and no milestone exists, so it is noise):
+ ```bash
+ gh project field-delete --id
+ gh project field-delete --id
+ ```
+- **Keep `Priority`** (P0 · P1 · P2) and `Area`. No action.
+- **`Status`** — single-select options, in order: `Todo` · `In progress` · `In review` · `Ready` · `Done`. `Status` is a built-in field; edit its options in the UI (Board → `Status` field header → Edit values). The CLI only *creates* fields, so use it only if you are rebuilding from scratch:
+ ```bash
+ # from-scratch alternative only — NOT for editing the existing Status field
+ gh project field-create 8 --owner ai-driven-dev --name Status \
+ --data-type SINGLE_SELECT \
+ --single-select-options "Todo,In progress,In review,Ready,Done"
+ ```
+
+### Status automation (UI: Project → ⋯ → Workflows)
+
+GitHub built-in workflows drive most transitions; `In progress` is the one manual move.
+
+| Trigger (built-in) | Set `Status` to |
+| ------------------ | --------------- |
+| Item added to project | `Todo` |
+| Pull request linked / ready for review | `In review` |
+| Code review approved | `Ready` |
+| Pull request merged · item closed | `Done` |
+| *(manual — picked up by a maintainer)* | `In progress` |
+
+### Timeline view
+
+Replaces the old "Phases". UI: **New view → Timeline**, date field = the Milestone / target date. Use it as the roadmap horizon (`this week` / `next` / `later`).
+
+### Apply checklist
+
+- [ ] `Work type` field deleted
+- [ ] `Phases` field deleted
+- [ ] `Priority` kept
+- [ ] `Status` options = Todo · In progress · In review · Ready · Done
+- [ ] Built-in Status workflows enabled (added→Todo, ready→In review, approved→Ready, merged/closed→Done)
+- [ ] Timeline view present
+
+## Labels
+
+[`.github/labels.yml`](../.github/labels.yml) is the canonical set (triage only — routing is by branch prefix). The documented sync loop **creates/updates** from the file; it does **not** delete. So when you remove a label from the file, also delete it on GitHub:
+
+```bash
+gh label delete "help wanted" --yes
+gh label delete npm --yes
+gh label delete "github-actions" --yes
+```
+
+Dependabot labels its PRs `dependencies` only (ecosystem sub-labels were dropped); confirm `.github/dependabot.yml` does not re-add a deleted label before deleting it.
+
## Releases
release-please opens/updates a `chore: release main` PR on each push to `main`.
diff --git a/lefthook.yml b/lefthook.yml
index 7821aa66..90364fe5 100644
--- a/lefthook.yml
+++ b/lefthook.yml
@@ -33,6 +33,23 @@ pre-commit:
exit 1
fi
done
+ sync-skill-argument-hints:
+ glob: "plugins/*/skills/**"
+ run: |
+ if ! command -v node >/dev/null 2>&1; then
+ echo "ℹ️ node not available; skipping sync-skill-argument-hints"
+ exit 0
+ fi
+ node scripts/sync-skill-argument-hints.mjs >/dev/null
+ git add plugins/*/skills/*/SKILL.md 2>/dev/null || true
+ markdown-links:
+ glob: "**/*.md"
+ run: |
+ if ! command -v node >/dev/null 2>&1; then
+ echo "ℹ️ node not available; skipping markdown-links"
+ exit 0
+ fi
+ node scripts/check-markdown-links.js
summarize-plugin-catalogs:
run: |
[ -d plugins ] || exit 0
@@ -44,7 +61,7 @@ pre-commit:
name=$(basename "$plugin")
node scripts/summarize-markdown.js "$plugin" "${plugin}CATALOG.md" \
--depth=4 \
- --fields=description,argument-hint \
+ --fields=description \
--title="$name catalog" \
--tagline="Auto-generated index of skills, agents, references and assets shipped by the \`$name\` plugin." \
>/dev/null
diff --git a/package.json b/package.json
index 8aa3446b..6fe13cc5 100644
--- a/package.json
+++ b/package.json
@@ -32,10 +32,10 @@
},
"devDependencies": {
"@commitlint/cli": "^21.0.2",
- "@commitlint/config-conventional": "^21.0.2",
+ "@commitlint/config-conventional": "^21.2.0",
"ajv": "8.20.0",
"ajv-formats": "3.0.1",
- "js-yaml": "4.2.0",
+ "js-yaml": "5.0.0",
"lefthook": "^2.1.9"
}
}
diff --git a/plugins/aidd-context/CATALOG.md b/plugins/aidd-context/CATALOG.md
index 3ce4b47f..47ee5562 100644
--- a/plugins/aidd-context/CATALOG.md
+++ b/plugins/aidd-context/CATALOG.md
@@ -47,9 +47,12 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `actions` | [01-read-project.md](skills/00-onboard/actions/01-read-project.md) | - |
| `actions` | [02-orient.md](skills/00-onboard/actions/02-orient.md) | - |
| `actions` | [03-act.md](skills/00-onboard/actions/03-act.md) | - |
+| `assets` | [menu.md](skills/00-onboard/assets/menu.md) | - |
| `-` | [README.md](skills/00-onboard/README.md) | - |
| `references` | [journey.md](skills/00-onboard/references/journey.md) | - |
-| `-` | [SKILL.md](skills/00-onboard/SKILL.md) | `Guide the user through the AIDD framework on the current project. Explain the flow in plain language and suggest the next logical step, adapted to what is already set up and which AIDD plugins are installed. Use when the user asks where to start, what to do next, how AIDD works, or to be onboarded. Not for listing every installed surface (the explore skill does that) or running a skill the user already knows they need (invoke it directly).` |
+| `references` | [outcomes.md](skills/00-onboard/references/outcomes.md) | - |
+| `references` | [signals.md](skills/00-onboard/references/signals.md) | - |
+| `-` | [SKILL.md](skills/00-onboard/SKILL.md) | `Guide the user through AIDD on the current project, explaining the flow and the next step for what is set up. Use when the user asks where to start, what to do next, or how AIDD works. Not for listing installed surfaces or running a known skill.` |
#### `skills/01-bootstrap`
@@ -64,7 +67,7 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `assets` | [install-template.md](skills/01-bootstrap/assets/install-template.md) | - |
| `-` | [README.md](skills/01-bootstrap/README.md) | - |
| `references` | [stack-heuristics.md](skills/01-bootstrap/references/stack-heuristics.md) | - |
-| `-` | [SKILL.md](skills/01-bootstrap/SKILL.md) | `Imagine and validate the technical architecture of a new SaaS through interactive Q&A, candidate-stack comparison, multi-agent audit, and an INSTALL.md output. Use when starting a new SaaS project, choosing a stack, designing the architecture pattern (monolith vs microservices vs serverless), or producing a project's INSTALL.md. Do NOT use for editing an existing project's stack, database schema design, or scaffolding actual files (this skill produces docs only, no code).` |
+| `-` | [SKILL.md](skills/01-bootstrap/SKILL.md) | `Design and validate a new SaaS's architecture into an INSTALL.md via Q&A and stack comparison. Use when the user starts a project, chooses a stack, or picks an architecture pattern. Not for editing an existing stack or scaffolding code.` |
#### `skills/02-project-memory`
@@ -82,14 +85,15 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `-` | [README.md](skills/02-project-memory/README.md) | - |
| `references` | [capability-signals.md](skills/02-project-memory/references/capability-signals.md) | - |
| `references` | [mapping-ai-context-file.md](skills/02-project-memory/references/mapping-ai-context-file.md) | - |
-| `-` | [SKILL.md](skills/02-project-memory/SKILL.md) | `Initialize or refresh the project memory bank. Not for updating one memory file after it exists (use the learn skill) or editing a single rule (edit it directly).` |
+| `references` | [memory-block.md](skills/02-project-memory/references/memory-block.md) | - |
+| `-` | [SKILL.md](skills/02-project-memory/SKILL.md) | `Initialize or refresh the project memory bank. Use when the user wants to set up or regenerate the project's memory files. Not for updating one memory file after it exists or editing a single rule directly.` |
#### `skills/03-context-generate`
| File | Description |
|------|---|
| [README.md](skills/03-context-generate/README.md) | - |
-| [SKILL.md](skills/03-context-generate/SKILL.md) | `Route a request to generate a context artifact (skill, rule, agent, command, or hook) to its dedicated generator when the user has not named which kind. For a named kind, that generator triggers directly. Not for listing existing artifacts (use explore).` |
+| [SKILL.md](skills/03-context-generate/SKILL.md) | `Route a request to generate a context artifact (skill, rule, agent, command, or hook) to its generator when the kind is unnamed. A named kind triggers its generator directly. Not for listing existing artifacts.` |
#### `skills/04-skill-generate`
@@ -101,7 +105,7 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `actions` | [04-write-actions.md](skills/04-skill-generate/actions/04-write-actions.md) | - |
| `actions` | [05-validate.md](skills/04-skill-generate/actions/05-validate.md) | - |
| `assets` | [action-template.md](skills/04-skill-generate/assets/action-template.md) | - |
-| `assets` | [skill-template.md](skills/04-skill-generate/assets/skill-template.md) | `. Use when . , use " only when a sibling skill could mis-trigger.> (<= 1024 chars, third person, no XML tags; all "when" lives here, not in the body.)` |
+| `assets` | [skill-template.md](skills/04-skill-generate/assets/skill-template.md) | `. Use when the user wants to . " in plain words when a sibling could mis-trigger.> (Two lines max, ~240 chars, straight to the point. Third person, no XML. Never name another skill, never write a /command token. All "when" lives here, not in the body.)` |
| `-` | [README.md](skills/04-skill-generate/README.md) | - |
| `references` | [skill-authoring.md](skills/04-skill-generate/references/skill-authoring.md) | - |
| `references` | [tool-paths.md](skills/04-skill-generate/references/tool-paths.md) | - |
@@ -118,7 +122,7 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `-` | [README.md](skills/05-rule-generate/README.md) | - |
| `references` | [rule-authoring.md](skills/05-rule-generate/references/rule-authoring.md) | - |
| `references` | [tool-paths.md](skills/05-rule-generate/references/tool-paths.md) | - |
-| `-` | [SKILL.md](skills/05-rule-generate/SKILL.md) | `Generate a coding rule that governs editor and agent behavior, across the host AI tools a project uses. Use when the user wants to write, add, or refactor a rule, a convention, or a coding standard, or to scan a codebase and propose rules. Not for other artifacts like skills, agents, commands, hooks.` |
+| `-` | [SKILL.md](skills/05-rule-generate/SKILL.md) | `Generate a coding rule that governs editor and agent behavior across the host AI tools. Use when the user wants to write, add, or refactor a rule, convention, or coding standard. Not for other artifacts like skills, agents, or hooks.` |
#### `skills/06-agent-generate`
@@ -157,7 +161,7 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `assets` | [hook-template.json](skills/08-hook-generate/assets/hook-template.json) | - |
| `references` | [hook-authoring.md](skills/08-hook-generate/references/hook-authoring.md) | - |
| `references` | [tool-paths.md](skills/08-hook-generate/references/tool-paths.md) | - |
-| `-` | [SKILL.md](skills/08-hook-generate/SKILL.md) | `Generate a hook (a handler that runs automatically at a lifecycle event) across the host AI tools a project uses. Use when the user wants to create, scaffold, or refactor a hook, or automate an action at a lifecycle point. Not for other artifacts like skills, rules, agents, commands.` |
+| `-` | [SKILL.md](skills/08-hook-generate/SKILL.md) | `Generate a hook, a handler that runs at a lifecycle event, across the host AI tools. Use when the user wants to create, scaffold, or refactor a hook, or automate an action at a lifecycle point. Not for other artifacts like skills or rules.` |
#### `skills/09-mermaid`
@@ -166,7 +170,7 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `actions` | [01-mermaid.md](skills/09-mermaid/actions/01-mermaid.md) | - |
| `-` | [README.md](skills/09-mermaid/README.md) | - |
| `references` | [mermaid-conventions.md](skills/09-mermaid/references/mermaid-conventions.md) | - |
-| `-` | [SKILL.md](skills/09-mermaid/SKILL.md) | `Generate a valid, high-quality Mermaid diagram from a written source through a plan, confirm, generate, review loop. Use when the user wants to turn an architecture, lifecycle, or flow description into a Mermaid diagram, or when another skill needs one. Not for other diagram formats like PlantUML or Graphviz, or for rendering a diagram to an image.` |
+| `-` | [SKILL.md](skills/09-mermaid/SKILL.md) | `Generate a valid Mermaid diagram from a written source through a plan, generate, review loop. Use when the user wants to turn an architecture, lifecycle, or flow into a Mermaid diagram. Not for other diagram formats or image rendering.` |
#### `skills/10-learn`
@@ -178,7 +182,7 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `actions` | [04-sync.md](skills/10-learn/actions/04-sync.md) | - |
| `assets` | [decision-template.md](skills/10-learn/assets/decision-template.md) | - |
| `-` | [README.md](skills/10-learn/README.md) | - |
-| `-` | [SKILL.md](skills/10-learn/SKILL.md) | `Capture durable project learnings from the conversation or the project's git history and route them to memory, a decision record, a rule, or a new skill. Use when the user asks to capture, record, or remember a decision, a convention, or a lesson, or to distill what recent work taught. Scores each candidate and confirms before writing. Not for personal or AI preferences, routine edits, or anything already captured.` |
+| `-` | [SKILL.md](skills/10-learn/SKILL.md) | `Capture durable project learnings from the conversation or git history into memory, a record, a rule, or a skill. Use when the user asks to capture, record, or remember a decision or lesson. Not for AI preferences or already-captured items.` |
#### `skills/11-explore`
@@ -188,7 +192,7 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `actions` | [02-drill.md](skills/11-explore/actions/02-drill.md) | - |
| `-` | [README.md](skills/11-explore/README.md) | - |
| `references` | [ai-mapping.md](skills/11-explore/references/ai-mapping.md) | - |
-| `-` | [SKILL.md](skills/11-explore/SKILL.md) | `Explore the current project across its tooling, context, and codebase. Use to survey what is installed and set up, see what is available, or find which installed skill, agent, or rule fits a goal. Not for the next step to take (onboard does that) or running an item (this skill only points).` |
+| `-` | [SKILL.md](skills/11-explore/SKILL.md) | `Explore the current project across its tooling, context, and codebase. Use to survey what is installed, see what is available, or find which skill, agent, or rule fits a goal. Not for choosing the next step or running an item; it only points.` |
#### `skills/12-cook`
@@ -198,5 +202,5 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `actions` | [02-upsert.md](skills/12-cook/actions/02-upsert.md) | - |
| `assets` | [recipe-template.md](skills/12-cook/assets/recipe-template.md) | - |
| `-` | [README.md](skills/12-cook/README.md) | - |
-| `-` | [SKILL.md](skills/12-cook/SKILL.md) | `Manage the project's recipes/ how-to sheets: list them as a table, or create and update one from the canonical template. Use for "list recipes", "new recipe", "update a recipe", "cook a recipe".` |
+| `-` | [SKILL.md](skills/12-cook/SKILL.md) | `Manage the project's recipes and how-to sheets. List them as a table, or create and update one from the canonical template. Use when the user wants to list, create, update, or cook a recipe.` |
diff --git a/plugins/aidd-context/skills/00-onboard/README.md b/plugins/aidd-context/skills/00-onboard/README.md
index 7c68cbff..1d644f25 100644
--- a/plugins/aidd-context/skills/00-onboard/README.md
+++ b/plugins/aidd-context/skills/00-onboard/README.md
@@ -20,11 +20,11 @@ A plain-language guide to the AIDD framework for the current project. It reads t
Three actions, in a loop:
-1. `read-project`: **silently** read a few plain facts about the project and the installed skills. Prints nothing.
-2. `orient`: explain where the project sits in the AIDD flow and suggest the next step, in plain language, then offer choices.
-3. `act`: run the suggestion, explain it, walk the whole flow, switch to a different step, hand off, or stop. Then loop back to `01`.
+1. `read-project`: **silently** read the project once into a reusable snapshot — the signals plus a session ledger of what you have run or skipped. Prints nothing.
+2. `orient`: place the project in the AIDD flow and offer a project-adapted menu — the recommended next step plus the tools that fit, in plain language.
+3. `act`: run the suggestion, explain it, walk the whole flow, switch to a different step, hand off, or stop. Then refresh the snapshot and loop.
-It suggests by **function**, then resolves that to whatever skill is actually installed. A step with no installed skill is named as a gap, never an invented recommendation. The suggested step is always a hint, never a forced choice.
+It suggests by **function**, then resolves that to whatever skill is actually installed. A step with no installed skill is named as a gap, never an invented recommendation. The recommended step is always skippable, never a forced choice, and once run or skipped it is not suggested again.
## Requires
@@ -32,4 +32,4 @@ Only the `aidd-context` plugin installed and enabled, and a working directory ro
## Details
-See [`SKILL.md`](SKILL.md) for the action contract, [`actions/`](actions/) for the three actions, and [`references/journey.md`](references/journey.md) for the AIDD flow stages and how each resolves to an installed skill.
+See [`SKILL.md`](SKILL.md) for the action contract and [`actions/`](actions/) for the three actions. The detail lives in [`references/journey.md`](references/journey.md) (flow stages and placement), [`references/signals.md`](references/signals.md) (project signals and the capability map), and [`assets/menu.md`](assets/menu.md) (the menu shape).
diff --git a/plugins/aidd-context/skills/00-onboard/SKILL.md b/plugins/aidd-context/skills/00-onboard/SKILL.md
index c873ebca..e244f39f 100644
--- a/plugins/aidd-context/skills/00-onboard/SKILL.md
+++ b/plugins/aidd-context/skills/00-onboard/SKILL.md
@@ -1,6 +1,7 @@
---
name: 00-onboard
-description: Guide the user through the AIDD framework on the current project. Explain the flow in plain language and suggest the next logical step, adapted to what is already set up and which AIDD plugins are installed. Use when the user asks where to start, what to do next, how AIDD works, or to be onboarded. Not for listing every installed surface (the explore skill does that) or running a skill the user already knows they need (invoke it directly).
+description: Guide the user through AIDD on the current project, explaining the flow and the next step for what is set up. Use when the user asks where to start, what to do next, or how AIDD works. Not for listing installed surfaces or running a known skill.
+argument-hint: read-project | orient | act
---
# Onboard
@@ -11,8 +12,8 @@ A plain-language guide to the AIDD framework for the current project. It reads t
| # | Action | Role | Input |
| --- | -------------- | ---------------------------------------------------------------- | ----------------- |
-| 01 | `read-project` | Lightly and silently read the project and the installed skills | project root |
-| 02 | `orient` | Explain where the project sits and suggest the next step, in plain language | the read from 01 |
+| 01 | `read-project` | Read the project once into a silent snapshot: signals, ledger, installed skills | project root |
+| 02 | `orient` | Place the project, then offer a project-adapted, plain-language menu | the snapshot from 01 |
| 03 | `act` | Run the suggestion, explain it, teach the flow, switch step, or stop | the user's choice |
Run `01 → 02 → 03`, then loop back to `01` after each step until the user stops. Run each action's `## Test` before the next.
@@ -20,13 +21,19 @@ Run `01 → 02 → 03`, then loop back to `01` after each step until the user st
## Transversal rules
- Teach, do not assume. The user may be new to AIDD. Explain a term the first time it appears (the memory bank is the project memory the AI loads each session), never assume framework literacy.
-- Suggest, never force. Show where the project seems to stand and the next logical step, and always let the user choose another.
+- Suggest, never force. Show where the project seems to stand and the next logical step, and always let the user choose another. A foundation step (architect a stack, set up the memory bank) may be the loud, pre-selected default, but it is always skippable, and a skipped step is remembered for the session.
- Plain language only. No internal state names, no raw phase labels, no signal dump reaches the user. The user reads guidance, not a state machine.
- Adapt to what is installed. Suggest by function and resolve it to a skill that is actually installed. If none is installed, name the missing capability by function, never invent a skill.
- Silent read. `01-read-project` prints nothing. The first visible output is the plain briefing from `02-orient`.
-- Re-read after each step. The project changes, so read again before suggesting again.
+- Read once, then refresh on action. Read the project once into a reusable snapshot; after the user runs a step, re-derive the changed facts and mark that step done in the session ledger; a read-only choice reuses the snapshot. The ledger is how onboard knows a step is done even when it leaves no file behind.
- Wait for an explicit reply between prompts. Never auto-advance.
## References
-- `references/journey.md`: the AIDD flow stages, what each unblocks, and how a step resolves to an installed skill.
+- `references/journey.md`: the AIDD flow stages, their order, and how a stage resolves to an installed skill.
+- `references/signals.md`: the project signals `01` captures and the capability map (signal → stage-gated secondary tool).
+- `references/outcomes.md`: the per-choice outcome `03` carries out and whether it loops back.
+
+## Assets
+
+- `assets/menu.md`: the menu shape `02` renders — default, ranked secondary tools, footer, and the cap and hedge rules.
diff --git a/plugins/aidd-context/skills/00-onboard/actions/01-read-project.md b/plugins/aidd-context/skills/00-onboard/actions/01-read-project.md
index 414236a2..4fb79a0a 100644
--- a/plugins/aidd-context/skills/00-onboard/actions/01-read-project.md
+++ b/plugins/aidd-context/skills/00-onboard/actions/01-read-project.md
@@ -1,6 +1,6 @@
# 01 - Read project
-Read the project lightly and **silently**. No questions, no writes, no visible output. The few facts gathered are working notes the next action uses to orient the user.
+Read the project once, **silently**, into a reusable snapshot. No questions, no writes, no visible output.
## Input
@@ -8,28 +8,16 @@ The project root, the current working directory.
## Output
-Internal working notes only, **never printed**. Onboard must not show a snapshot or a list of checks. The first thing the user sees is the briefing from `02-orient`.
-
-The notes answer a handful of plain questions:
-
-- Is the project memory set up? Does `aidd_docs/memory/` exist, and does any file hold real content rather than a bare template?
-- When the memory is filled, what does it say the project is? Read the project brief and the architecture for the project's purpose, stack, and shape. This is the project's own context, and it leads the briefing.
-- Does the AI context file carry the `` block?
-- Is there code yet, and what stack? A manifest like `package.json`, `pyproject.toml`, `go.mod`, `Cargo.toml`, `pom.xml`, or the stack named in the memory when there is no manifest.
-- Is there a spec or a plan under `aidd_docs/`?
-- Is there an open pull request on the current branch?
-- Is the repo empty, nothing built yet?
-- Which AIDD plugins and skills are installed, with each skill's description?
+A silent, reusable snapshot, **never printed**: every signal in `@../references/signals.md`, a **session ledger** of which steps were run or skipped this session (empty on the first read), the installed AIDD plugins and skills each with its description, and — when memory is synced — the project's purpose, stack, and shape from its brief.
## Process
-1. **Check the setup.** `test -d aidd_docs/memory`, list its `*.md`, and judge whether any file is filled rather than an untouched template. When a file is filled, read the project brief and the architecture so the briefing speaks from the project's own context, not a guess. `grep -l '' CLAUDE.md AGENTS.md .github/copilot-instructions.md` for the context block.
-2. **Check the work.** Look for source files outside `aidd_docs/`, a stack manifest, a spec or plan under `aidd_docs/`, and an open pull request on the branch. If nothing is built at all, note the repo as empty.
-3. **List what is installed.** Use the AI tool's native plugin and skill discovery to gather the enabled AIDD plugins and the skills they expose, each with its description. This is how onboard adapts to what the user actually has.
-4. **Hold, do not print.** Keep the notes in context. Hand directly to `02-orient`.
+1. **Read.** Capture every signal in `@../references/signals.md`; when memory is synced, also read the brief and architecture so the briefing speaks from the project's own context.
+2. **List.** Gather the enabled AIDD plugins and skills, each with its description, via the tool's native discovery.
+3. **Hold.** Keep the snapshot in context, read this fully only once a session, and hand to `02-orient`. Print nothing.
## Test
-- The action produces zero user-visible output. No snapshot, no check list, no labels appear.
-- The setup facts, the work facts, and the installed-skill list are all available to `02-orient`.
+- Zero user-visible output: no snapshot, no checklist, no labels appear.
+- The snapshot carries the signals, the ledger, the installed skills, and the project context when memory is synced, all available to `02-orient`.
- No skill id is named in the conversation by this action.
diff --git a/plugins/aidd-context/skills/00-onboard/actions/02-orient.md b/plugins/aidd-context/skills/00-onboard/actions/02-orient.md
index 14602ac3..2582bfdb 100644
--- a/plugins/aidd-context/skills/00-onboard/actions/02-orient.md
+++ b/plugins/aidd-context/skills/00-onboard/actions/02-orient.md
@@ -1,34 +1,29 @@
# 02 - Orient
-Tell the user, in plain language, where their project sits in the AIDD flow and the single most useful next step. Teach as you go. Then let them choose.
+Tell the user, in plain language, where their project sits and the next step, then offer a project-adapted menu. Teach as you go.
## Input
-The working notes from `01-read-project`, held in context, not printed.
+The snapshot from `01-read-project` (signals + ledger + installed skills), held in context, not printed.
## Output
-A short, plain briefing the user can act on. No internal variable names, no raw labels, no snapshot. It has three parts:
-
-1. **One line on the project**: its purpose and stack drawn from the memory bank when it is filled, otherwise from the files, or that it is a fresh repo. The memory is the project's own context and leads here.
-2. **Where it sits**: one or two sentences placing the project in the AIDD flow, explaining any term the first time it appears.
-3. **The next step plus choices**: the suggested step in plain language with a one-line why, then a short numbered list of what the user can do, and a prompt to reply with a number. The list stays small and stable: run the suggested step, explain that step first, explain this project from its memory (only when the memory is filled), see the whole AIDD flow and the installed skills, go to a different step, stop.
+A short, plain briefing plus the menu rendered per `@../assets/menu.md`. No internal names, no raw labels, no snapshot reaches the user.
## Process
-1. **Read the notes from 01.** Print nothing from them directly.
-2. **Place the project.** Using `@../references/journey.md`, find the earliest unmet stage for these facts. That is the suggestion. Treat it as a hint, never a verdict.
-3. **Resolve the suggestion** to an installed skill (`@../references/journey.md`, Resolving). If no installed skill fits, the step is a gap: name the missing capability by function, never a skill or plugin id.
-4. **Write the briefing** in plain language: the one-line project, where it sits, and the suggested step with a short why. Explain any AIDD term the first time it appears.
-5. **Offer choices.** A short, stable numbered list with plain labels: run the suggested step, explain that step first, explain this project from its memory (only when the memory is filled), see the whole AIDD flow and the installed skills, go to a different step, stop.
-6. **On explain the project**, summarize the project from its memory bank in a few plain lines: what it is, the stack, the shape, the key decisions. Read-only, then re-offer the choices.
-7. **On a different step**, show the flow steps from `@../references/journey.md` in plain language and let the user pick one, then resolve that to a skill or a gap.
-8. **Hand the choice to `03-act`**, with the resolved skill (or gap) and what the user picked.
-9. **Wait for a reply.** Free text re-renders the same choices with a one-line reminder to reply with a number. Never auto-advance.
+1. **Place.** Default = the earliest **unmet** stage in `@../references/journey.md`, where met = a disk fact **or** a ledger done/skip; a foundation stage is the loud default.
+2. **Rank.** Add the stage-gated secondary tools the snapshot signals trigger in `@../references/signals.md`.
+3. **Resolve.** Resolve each item to an installed skill, else name it a gap by function; never name a skill or plugin that is not installed.
+4. **Brief.** Write the plain briefing: the one-line project, where it sits, the why; explain each AIDD term on first use.
+5. **Assemble.** Render the menu per `@../assets/menu.md`; a foundation default is tagged `(recommended)` and stated skippable.
+6. **Wait.** Offer the menu and wait for a number; free text re-renders it. Never auto-advance.
+7. **Different step.** Show the `@../references/journey.md` stages, let the user pick one, and resolve it.
+8. **Hand** the chosen item to `03-act`; acting on it belongs there.
## Test
-- The output is plain language. No internal note names, no raw stage labels, no snapshot reaches the user.
-- It names where the project sits and exactly one suggested next step, resolved to an installed skill or a named gap.
-- It offers explicit numbered choices and waits for the user.
-- A suggested step never names a skill or plugin that is not installed.
+- Plain language only: no internal note names, raw stage labels, or snapshot reach the user.
+- The default is the earliest stage unmet by both disk and ledger; a foundation stage renders as the `(recommended)`, skippable first choice.
+- Secondary tools are stage-gated per `signals.md`; the menu follows `@../assets/menu.md` (default + secondary ≤ ~5, footer never dropped).
+- Every item resolves to an installed skill or a named gap; nothing uninstalled is named.
diff --git a/plugins/aidd-context/skills/00-onboard/actions/03-act.md b/plugins/aidd-context/skills/00-onboard/actions/03-act.md
index ce4eab50..a5b647f0 100644
--- a/plugins/aidd-context/skills/00-onboard/actions/03-act.md
+++ b/plugins/aidd-context/skills/00-onboard/actions/03-act.md
@@ -1,45 +1,24 @@
# 03 - Act
-Carry out what the user picked: run the suggested skill, explain it, teach the whole flow, switch to a different step, or stop. Loop back to reading the project after each one.
+Carry out what the user picked, then loop back to reading the project.
## Input
- The user's choice from `02-orient`.
- The resolved skill, or a gap when no installed skill fits.
-- The working notes from `01-read-project`, held in context.
+- The snapshot from `01-read-project`, held in context.
## Output
-One outcome, always ending with a clear next prompt or a clean stop.
-
-| Choice | What happens | Loop back to 01? |
-| --------------- | --------------------------------------------------------------------------- | ---------------- |
-| Run it | Invoke the resolved skill in this session, then ask the user how it went | yes |
-| Explain the step | Describe the step and its skill in two or three plain lines, then re-offer the choices | no, re-offer |
-| Explain project | Summarize the project from its memory bank, read-only, then re-offer the choices | no, re-offer |
-| Show flow + skills | Walk the AIDD flow in plain language and list the installed skills grouped by step, then re-offer the choices | no, re-offer |
-| Different step | Let the user pick another step, resolve it, and re-offer the choices | no, back to 02 |
-| Hand off | Give the exact command to run in a fresh session, then wait for the user to come back | yes |
-| Stop | A one-line goodbye, end the loop | no, terminate |
+One outcome per `@../references/outcomes.md`, always ending with a clear next prompt or a clean stop.
## Process
-1. **Run it.** Invoke the resolved skill the way a slash command would. When it returns, ask the user how it went and wait. Then read the project again (`01`), since it has changed.
-2. **Explain the step.** Pull the resolved skill's purpose from its description and say, in two or three plain lines, what the step does and what it produces. Do not invoke. Re-offer the choices.
-3. **Explain the project.** Summarize the project from its memory bank: what it is, the stack, the shape, the key decisions, in a few plain lines. Read-only, never invoke. Re-offer the choices. Available only when the memory is filled.
-4. **Show flow and skills.** Walk the AIDD flow from `@../references/journey.md` in plain language, then list the installed skills grouped by the step each fits (and the ones that fit no step), discovered from `01`, never hardcoded. Then re-offer the choices. This is the teaching path.
-5. **Different step.** Hand back to `02-orient` to show the steps and let the user pick another, then resolve it.
-6. **Hand off.** Give the user the exact command to run in a new session, ask them to come back when done, and wait. Then read the project again.
-7. **Stop.** Say one closing line and end. Do not loop.
-8. **A gap.** If the chosen step has no installed skill, Run and Hand off are unavailable. Say the step needs a plugin that is not installed, by function only, then offer to explain it, a different step, or stop.
-9. **Resolve, never invent.** Only ever run or name a skill that `01` found installed.
+1. **Act.** Carry out the choice per `@../references/outcomes.md`, running or naming only skills `01` found installed.
+2. **Ledger.** Run-it and hand-off refresh the snapshot and mark the step done; a different step marks the declined step skipped; every other outcome reuses the snapshot.
## Test
-- Run invokes only an installed skill, then loops back to `01`.
-- Explain the step produces a short plain description and re-offers the choices without invoking anything.
-- Explain the project summarizes from the memory bank, writes nothing, and re-offers the choices.
-- Show flow and skills walks the flow and lists the installed skills grouped by step, then re-offers the choices.
-- Hand off produces an exact command and waits for the user to return.
-- Stop ends the loop cleanly.
-- A gap step never produces a skill invocation. It offers to explain it, a different step, or stop only.
+- Each choice produces its outcome per `@../references/outcomes.md`; only installed skills are run or named.
+- Run-it and hand-off mark the step done — not re-suggested even when it left no file behind; a different step marks it skipped; read-only outcomes do not re-read the project.
+- A gap never invokes a skill: it offers explain, a different step, or stop only.
diff --git a/plugins/aidd-context/skills/00-onboard/assets/menu.md b/plugins/aidd-context/skills/00-onboard/assets/menu.md
new file mode 100644
index 00000000..9e6f9428
--- /dev/null
+++ b/plugins/aidd-context/skills/00-onboard/assets/menu.md
@@ -0,0 +1,16 @@
+
+
+1.
+2.
+ ...
+
+
+
+
diff --git a/plugins/aidd-context/skills/00-onboard/references/journey.md b/plugins/aidd-context/skills/00-onboard/references/journey.md
index 819235ac..ed9e5310 100644
--- a/plugins/aidd-context/skills/00-onboard/references/journey.md
+++ b/plugins/aidd-context/skills/00-onboard/references/journey.md
@@ -23,6 +23,8 @@ Then, per piece of work:
Read a few plain facts (action 01), then suggest the earliest unmet step. The suggestion is a hint, never a verdict.
+This table places by disk facts only. A stage is **also** met when the session ledger marks it done or skipped this session, so `02-orient` excludes those before picking the earliest unmet step (it owns that definition; this table does not repeat it).
+
| What the project looks like | Suggest |
| ----------------------------------------------------------- | -------------- |
| Empty repo, nothing built yet | Context (architect a stack first) |
@@ -33,15 +35,15 @@ Read a few plain facts (action 01), then suggest the earliest unmet step. The su
| A plan is ready, no code against it | Build |
| Code in progress, nothing reviewed | Build, or Review if it looks done |
| The build looks done | Review |
-| An open pull request | Ship (carry it through, release on merge) |
+| An open pull request, nothing reviewed | Review, then Ship (carry it through, release on merge) |
-Having code never proves the build is finished, so onboard always lets the user pick the step rather than declaring one done.
+Place at the earliest stage still unmet, reading the table top-down. Stages are cumulative: a downstream artifact implies the upstream stages are met — a plan means the need is clarified and tracked, so a project with a plan places at Build, not Clarify. Build is the exception: having code never proves it is reviewed or shipped, so onboard hedges there (see `assets/menu.md`) and lets the user pick rather than declaring one done. Clarify and Track have no disk signal, so they are the place only when no downstream artifact exists, and never a loud default.
## Beyond the steps, by discovery
The steps are the spine, and they never name a specific skill. Onboard reads the installed skills (action 01) and fills each step with whatever fits.
-Most setups also have skills that are not a step but a tool for when the work needs one: fixing a bug, cleaning up code, finding technical debt, adding tests, capturing a lesson, drawing a diagram. Onboard does **not** hardcode these. It reads every installed skill, places the ones that fit a step, and surfaces the rest grouped by what their own description says they do. A skill added to any plugin later shows up on its own, with no change to this file. This file describes the flow, never the catalogue of skills.
+Most setups also have skills that are a tool for when the work needs one, not a step: fixing a bug, cleaning up code, adding tests, drawing a diagram. Onboard does **not** hardcode these — it ranks the relevant ones by the project signals (the capability map in `signals.md`) and resolves each to an installed skill. A skill added to any plugin later shows up on its own. This file describes the flow, never the catalogue of skills.
## Resolving a step to an installed skill
diff --git a/plugins/aidd-context/skills/00-onboard/references/outcomes.md b/plugins/aidd-context/skills/00-onboard/references/outcomes.md
new file mode 100644
index 00000000..f7b46255
--- /dev/null
+++ b/plugins/aidd-context/skills/00-onboard/references/outcomes.md
@@ -0,0 +1,14 @@
+# Act outcomes
+
+What `03-act` carries out for each choice, and whether it loops back to `01`. Only ever run or name a skill that `01` found installed.
+
+| Choice | What happens | Loop back to 01? |
+| ---------------- | --------------------------------------------------------------------------------------------- | --------------------------- |
+| Run it | Invoke the resolved skill in this session, then ask the user how it went | yes — refresh + mark done |
+| Hand off | Give the exact command to run in a fresh session, wait for the user to return | yes — refresh + mark done |
+| Different step | Mark the declined step skipped, hand back to `02-orient` to pick another, resolve it | no — back to 02 |
+| Explain the step | Describe the step and its skill in two or three plain lines, then re-offer the choices | no — re-offer |
+| Explain project | Summarize the project from its memory bank, read-only, then re-offer (only when memory filled) | no — re-offer |
+| Show flow + skills | Walk the AIDD flow (`journey.md`) and list the installed skills grouped by step, then re-offer | no — re-offer |
+| Stop | A one-line goodbye, end the loop | no — terminate |
+| A gap | The step has no installed skill: say it needs a plugin, by function only; offer explain, a different step, or stop | no — re-offer |
diff --git a/plugins/aidd-context/skills/00-onboard/references/signals.md b/plugins/aidd-context/skills/00-onboard/references/signals.md
new file mode 100644
index 00000000..80e08daf
--- /dev/null
+++ b/plugins/aidd-context/skills/00-onboard/references/signals.md
@@ -0,0 +1,38 @@
+# Project signals and the capability map
+
+What `01-read-project` captures into the snapshot, and which secondary tool each signal makes relevant. Stages and their order live in `journey.md`; this file is signals only.
+
+## Cheap signals (presence tests)
+
+| Signal | Met when |
+| --------------- | ------------------------------------------------------------------ |
+| memory synced | `aidd_docs/memory/` exists and its files hold real content |
+| context block | the AI context file carries the `` block |
+| architecture | `aidd_docs/INSTALL.md` exists |
+| code present | any source outside `aidd_docs/` (a docs/README-only repo is empty) |
+| manifest | a stack manifest (`package.json`, `pyproject.toml`, `go.mod`, …) |
+| tests present | real test files exist (a configured runner alone does not count) |
+| spec or plan | a spec or plan under `aidd_docs/` |
+| plan status | the `status` field of a `plan.md` |
+| open PR | an open pull request on the current branch |
+
+## Richer reads (bounded, once per session)
+
+| Read | Captures |
+| ----------------- | ------------------------------------------------- |
+| code-quality sample | a file far longer or more deeply nested than its siblings = "messy" |
+| bug-marker scan | `TODO` / `FIXME` and reported errors |
+
+Reading memory-file contents to judge "synced" and this bounded code sample are the only sanctioned non-cheap reads.
+
+## Capability map (signal → secondary tool)
+
+Each tool is stage-gated: it surfaces only at the listed stage, and only beside the default, never as the default.
+
+| Signal | Stage | Surfaces |
+| ------------------- | ------------- | ------------- |
+| no test files | build, review | add tests |
+| messy (code sample) | build, review | audit |
+| bug markers | any | debug |
+
+A tool resolves to an installed skill by description, or is named a gap by function. The flow default itself comes from `journey.md`, never from this map.
diff --git a/plugins/aidd-context/skills/01-bootstrap/SKILL.md b/plugins/aidd-context/skills/01-bootstrap/SKILL.md
index d5f8efa2..e08d2142 100644
--- a/plugins/aidd-context/skills/01-bootstrap/SKILL.md
+++ b/plugins/aidd-context/skills/01-bootstrap/SKILL.md
@@ -1,13 +1,14 @@
---
name: 01-bootstrap
-description: Imagine and validate the technical architecture of a new SaaS through interactive Q&A, candidate-stack comparison, multi-agent audit, and an INSTALL.md output. Use when starting a new SaaS project, choosing a stack, designing the architecture pattern (monolith vs microservices vs serverless), or producing a project's INSTALL.md. Do NOT use for editing an existing project's stack, database schema design, or scaffolding actual files (this skill produces docs only, no code).
+description: Design and validate a new SaaS's architecture into an INSTALL.md via Q&A and stack comparison. Use when the user starts a project, chooses a stack, or picks an architecture pattern. Not for editing an existing stack or scaffolding code.
+argument-hint: gather-needs | propose-candidates | audit-candidates | pick-and-design | write-install-md
---
# Bootstrap
-Plays the role of technical architect for a new SaaS project. Walks the user through a 24-item checklist (18 user-input + 6 derived), proposes 2-3 candidate stacks, audits each via parallel agents, then produces `aidd_docs/INSTALL.md` capturing the technical vision, decisions, stack, architecture pattern, folder tree, and install steps. Documentation only - no code, no scaffolding.
+Plays the role of technical architect for a new SaaS project. Walks the user through a 24-item checklist (18 user-input + 6 derived), proposes 2-3 candidate stacks, audits each via parallel agents, then produces `aidd_docs/INSTALL.md` capturing the technical vision, decisions, stack, architecture pattern, folder tree, and install steps. Documentation only: no code, no scaffolding.
-## Available actions
+## Actions
| # | Action | Role | Input |
| --- | --------------------- | -------------------------------------------------------------- | ------------------ |
@@ -17,9 +18,7 @@ Plays the role of technical architect for a new SaaS project. Walks the user thr
| 04 | `pick-and-design` | User picks winner; generate folder tree + Mermaid diagram | audit report |
| 05 | `write-install-md` | Produce `aidd_docs/INSTALL.md` | design + decisions |
-## Default flow
-
-`01 → 02 → 03 → 04 → 05`. Sequential. The audit (03) is a gate: if every candidate returns `❌`, loop back to 02 to revise candidates or 01 to revisit needs.
+Run `01 → 02 → 03 → 04 → 05`. The audit (03) gates: if every candidate fails, loop back to 02 or 01.
## Transversal rules
@@ -27,17 +26,13 @@ Plays the role of technical architect for a new SaaS project. Walks the user thr
- **Anti-sycophancy.** When the user expresses a stack preference that conflicts with their needs (e.g. wants Mongo for heavily relational data), challenge it before accepting: surface audit concerns and ask whether the user has a mitigation plan.
- **Recommend opinionated, not encyclopedic.** Each action proposes 2-3 options max, never a long catalog. The user should leave with a concrete decision, not a research paper.
- **Stop on full checklist.** Action 01 keeps asking until the 18 user-input items (blocks 1-3) are filled; the 6 derived items (block 4) are filled across actions 02 and 04.
-- **Apply heuristics from `@references/stack-heuristics.md`** when proposing candidates.
+- **Apply heuristics from `references/stack-heuristics.md`** when proposing candidates.
## References
-- `@references/stack-heuristics.md` - input → recommended-stack-family heuristics
+- `references/stack-heuristics.md` - input → recommended-stack-family heuristics
## Assets
-- `@assets/checklist.md` - the 24-item checklist (4 blocks)
-- `@assets/install-template.md` - the `INSTALL.md` skeleton
-
-## External data
-
-- `aidd-context/skills/09-mermaid/SKILL.md` - invoked from action 04 to render the architecture diagram
+- `assets/checklist.md` - the 24-item checklist (4 blocks)
+- `assets/install-template.md` - the `INSTALL.md` skeleton
diff --git a/plugins/aidd-context/skills/01-bootstrap/actions/01-gather-needs.md b/plugins/aidd-context/skills/01-bootstrap/actions/01-gather-needs.md
index 355d329c..e8028999 100644
--- a/plugins/aidd-context/skills/01-bootstrap/actions/01-gather-needs.md
+++ b/plugins/aidd-context/skills/01-bootstrap/actions/01-gather-needs.md
@@ -1,32 +1,26 @@
# 01 - Gather needs
-Walk the user through the 24-item checklist via interactive Q&A until all 18 user-input items (blocks 1-3) are filled. The 6 derived items (block 4) stay empty here - they are filled by actions 02 and 04.
+Walk the user through the 24-item checklist via interactive Q&A until all 18 user-input items (blocks 1 to 3) are filled. The 6 derived items (block 4) stay empty here; actions 02 and 04 fill them.
-## Inputs
+## Input
-- Free-form user request to bootstrap a new SaaS project.
+A free-form user request to bootstrap a new SaaS project.
-## Outputs
+## Output
-A filled copy of `@../assets/checklist.md` held in conversation context (not yet written to disk). Each user-input item has a concrete value replacing its `<...>` placeholder.
-
-```markdown
-- [x] **Project name** - Acme Invoicing
-- [x] **One-liner** - Smart invoice tracker for freelancers, syncs with Airtable
-- [x] **Type** - B2B SaaS
-- [x] **Target users** - solo freelancers and 2-5 person agencies, ~500 active at 6 months
-... (all 18 input items filled)
-```
+A filled copy of `@../assets/checklist.md` held in conversation context, not yet written to disk, with every user-input item's `<...>` placeholder replaced by a concrete value.
## Process
-1. Read `@../assets/checklist.md`. Print the four blocks as a single markdown checklist for the user to see the full scope upfront.
-2. Ask block by block, one block per message. Within a block, ask all questions at once (the user answers in batch). Do not ask block 4 - it's derived.
-3. For each user answer, fill the corresponding item. If an answer is vague ("scalable", "fast"), ask one follow-up to make it concrete (numbers, examples).
-4. After block 1, sanity-check coherence: does the type match the user volume? Are the integrations realistic for the platform target?
-5. After block 3, surface conflicts (e.g. budget < 50€/mo + AWS preference + heavy backend → impossible). Force a re-answer on the conflicting item.
-6. Print the filled checklist (blocks 1-3 only) and ask the user to confirm "go" before passing to action 02.
+1. **Show.** Read `@../assets/checklist.md` and print the four blocks as one markdown checklist so the user sees the full scope upfront.
+2. **Ask.** Ask block by block, one block per message, all questions in a block at once. Do not ask block 4; it is derived.
+3. **Fill.** Fill each item from the answer. When an answer is vague ("scalable", "fast"), ask one follow-up to make it concrete (numbers, examples).
+4. **Check.** After block 1, sanity-check coherence: does the type match the user volume, are the integrations realistic for the platform target.
+5. **Resolve.** After block 3, surface conflicts (for example budget under 50€/mo with an AWS preference and a heavy backend) and force a re-answer on the conflicting item.
+6. **Confirm.** Print the filled checklist (blocks 1 to 3) and wait for the user to confirm "go" before action 02.
## Test
-The 18 user-input items in the in-memory checklist have no remaining `<...>` placeholders, the 6 block-4 items are still placeholders, and the user has explicitly confirmed the filled checklist with "go" or equivalent before action 02 starts.
+- The 18 user-input items have no remaining `<...>` placeholders.
+- The 6 block-4 items are still placeholders.
+- The user explicitly confirmed the filled checklist before action 02 starts.
diff --git a/plugins/aidd-context/skills/01-bootstrap/actions/02-propose-candidates.md b/plugins/aidd-context/skills/01-bootstrap/actions/02-propose-candidates.md
index dd7a539c..8af3df85 100644
--- a/plugins/aidd-context/skills/01-bootstrap/actions/02-propose-candidates.md
+++ b/plugins/aidd-context/skills/01-bootstrap/actions/02-propose-candidates.md
@@ -1,37 +1,26 @@
# 02 - Propose candidates
-Derive 2-3 candidate stacks from the filled checklist using the heuristics in `@../references/stack-heuristics.md`, then render a markdown comparison table for the user.
+Derive 2 to 3 candidate stacks from the filled checklist using the heuristics in `@../references/stack-heuristics.md`, then render a markdown comparison table.
-## Inputs
+## Input
-- Filled checklist (blocks 1-3) from action 01.
+The filled checklist (blocks 1 to 3) from action 01.
-## Outputs
+## Output
-A markdown comparison table with 2-3 rows.
-
-```markdown
-| Candidate | Front | Back | DB | Hosting | Auth | Archi | Cost/mo | Risks |
-|-----------|-------|------|------|---------|------|-------|---------|-------|
-| **A. Vercel-native** | Next.js SSR | Next.js API routes | Supabase Postgres | Vercel + Supabase | NextAuth | Modular monolith | ~30€ | Vercel lock-in, cold starts on serverless functions |
-| **B. Self-hosted** | Vite + React SPA | NestJS | Postgres on VPS | Coolify on Hetzner VPS | Clerk | Modular monolith | ~15€ | Manual ops, single point of failure |
-| **C. Serverless AWS** | Next.js SSR | AWS Lambda + API Gateway | DynamoDB | AWS + CloudFront | Cognito | Serverless | ~50€ at low volume, scales linearly | Vendor lock-in, learning curve |
-```
-
-## Depends on
-
-- `01-gather-needs`
+A markdown comparison table with 2 to 3 rows, each a candidate with its front, back, DB, hosting, auth, architecture pattern, monthly cost, and risks.
## Process
-1. Read the filled checklist from action 01.
-2. Apply each rule from `@../references/stack-heuristics.md` to derive the recommended family for: archi pattern, front, back, DB, auth, hosting.
-3. Build 2-3 candidates that span the trade-off space - they must differ on at least one of: hosting model (PaaS vs self-host vs serverless), back-end language, or archi pattern. Never propose 3 near-identical candidates.
-4. For each candidate, estimate monthly cost at the user's volume target (Block 2 item: "Volume at 6 months"). Use rough public-pricing numbers; flag uncertainty.
-5. List 1-3 risks per candidate (lock-in, ops burden, learning curve, scaling limit). Be honest - risks are non-negotiable, no candidate has zero.
-6. Render the comparison table. Bold the candidate's name (`**A.**`).
-7. Print the table to the user. Do not pick a winner - that's action 04, after audit.
+1. **Read.** Read the filled checklist from action 01.
+2. **Derive.** Apply each rule from `@../references/stack-heuristics.md` to derive the recommended family for architecture pattern, front, back, DB, auth, and hosting.
+3. **Spread.** Build 2 to 3 candidates spanning the trade-off space, differing on at least one of hosting model (PaaS, self-host, serverless), back-end language, or architecture pattern. Never propose near-identical candidates.
+4. **Cost.** Estimate each candidate's monthly cost at the user's six-month volume target with rough public pricing, flagging uncertainty.
+5. **Risk.** List 1 to 3 honest risks per candidate (lock-in, ops burden, learning curve, scaling limit). No candidate has zero.
+6. **Render.** Render the comparison table, bolding each candidate's name. Do not pick a winner; that is action 04, after the audit.
## Test
-The output is a markdown table with at least 2 rows; the columns include `Front`, `Back`, `DB`, `Hosting`, `Auth`, `Archi`, `Cost`, `Risks`; each row has a non-empty value in every column; at least two rows differ on hosting model, back-end language, or archi pattern.
+- The output is a markdown table with at least two rows.
+- The columns include front, back, DB, hosting, auth, architecture, cost, and risks, each cell non-empty.
+- At least two rows differ on hosting model, back-end language, or architecture pattern.
diff --git a/plugins/aidd-context/skills/01-bootstrap/actions/03-audit-candidates.md b/plugins/aidd-context/skills/01-bootstrap/actions/03-audit-candidates.md
index 6394bf0e..d96bc8b8 100644
--- a/plugins/aidd-context/skills/01-bootstrap/actions/03-audit-candidates.md
+++ b/plugins/aidd-context/skills/01-bootstrap/actions/03-audit-candidates.md
@@ -1,63 +1,38 @@
# 03 - Audit candidates
-Spawn one parallel agent per candidate to validate the proposed stack: tech compatibility, ecosystem maturity, known gotchas. Returns a verdict (`✅ / ⚠️ / ❌`) plus a 3-bullet rationale per candidate.
+Audit each candidate in parallel to validate the proposed stack: tech compatibility, ecosystem maturity, known gotchas. Returns a verdict (✅ / ⚠️ / ❌) and a three-bullet rationale per candidate.
-## Inputs
+## Input
-- Comparison table from action 02.
-- Filled checklist from action 01 (for context).
+The comparison table from action 02, and the filled checklist from action 01 for context.
-## Outputs
+## Output
-The same table from action 02, augmented with a `Verdict` column and a per-candidate rationale block below.
-
-```markdown
-| Candidate | Verdict | Notes |
-|-----------|---------|-------|
-| **A. Vercel-native** | ✅ | All components mature, well-documented integration, no gotchas at this scale |
-| **B. Self-hosted** | ⚠️ | Coolify is recent (< 2 years); ops burden underestimated for solo dev |
-| **C. Serverless AWS** | ❌ | DynamoDB is the wrong fit for relational invoice data; Cognito has known UX friction |
-```
-
-Per-candidate rationale (3 bullets):
-
-```markdown
-### A. Vercel-native - ✅
-- Next.js + Supabase is the most documented stack in 2026; copy-paste examples exist for every checklist requirement
-- Vercel's Hobby tier plus Supabase free tier covers the 6-month volume target; cost forecast holds
-- Cold start is the only concrete risk - irrelevant for a B2B SaaS with predictable load patterns
-
-### B. Self-hosted - ⚠️
-- ...
-```
-
-## Depends on
-
-- `02-propose-candidates`
+The action 02 table augmented with a verdict column, plus a three-bullet rationale block per candidate.
## Process
-1. For each candidate row in the table, spawn a parallel `general-purpose` Agent with this brief:
+1. **Audit.** For each candidate row, spawn a parallel `general-purpose` agent with this brief:
- ```
+ ```text
Audit the following candidate stack for a SaaS project. Validate three dimensions:
- 1. Tech compatibility - do the components integrate cleanly? Any deprecated combos?
- 2. Ecosystem maturity - are the components stable (≥ 2 years prod-tested) and well-documented?
- 3. Known gotchas - search recent (last 12 months) issues, blog posts, HN discussions for blockers.
+ 1. Tech compatibility: do the components integrate cleanly? Any deprecated combos?
+ 2. Ecosystem maturity: are the components stable (≥ 2 years prod-tested) and well-documented?
+ 3. Known gotchas: search recent (last 12 months) issues, blog posts, and discussions for blockers.
- Project context:
+ Project context:
Candidate:
Return:
- Verdict: ✅ (no blocker) / ⚠️ (minor concerns) / ❌ (deal-breaker)
- - Three bullet points justifying the verdict - concrete, citing specific tech facts
- - Cost estimate confirmation: agree / disagree with the proposed monthly cost
+ - Three bullets justifying the verdict, concrete, citing specific tech facts, one of them stating whether the proposed monthly cost is realistic
```
-2. Wait for all agents to return. Aggregate verdicts into the table.
-3. If **every** candidate returns `❌`: print the verdicts, surface the common blocker, and loop back to action 02 with explicit guidance on what to change. Do not proceed to action 04.
-4. If **at least one** candidate is `✅` or `⚠️`: print the augmented table + per-candidate rationale to the user. Pass control to action 04.
+2. **Aggregate.** Wait for every agent to return, then aggregate the verdicts into the table.
+3. **Gate.** When every candidate returns ❌, print the verdicts, surface the common blocker, and loop back to action 02, or to 01 when the needs themselves are the blocker, with explicit guidance. Do not proceed to action 04.
+4. **Pass.** When at least one candidate is ✅ or ⚠️, print the augmented table and per-candidate rationale, then pass control to action 04.
## Test
-Each candidate row from action 02 has a corresponding verdict in `{✅, ⚠️, ❌}` and a rationale block with exactly 3 bullets; if all verdicts are ❌, the flow does not advance to action 04 and a guidance message back to 02 is printed.
+- Each candidate row has a verdict in `{✅, ⚠️, ❌}` and a rationale block of exactly three bullets.
+- When every verdict is ❌, the flow does not advance to action 04 and prints guidance back to action 02.
diff --git a/plugins/aidd-context/skills/01-bootstrap/actions/04-pick-and-design.md b/plugins/aidd-context/skills/01-bootstrap/actions/04-pick-and-design.md
index a6c8d3d8..4859ccfc 100644
--- a/plugins/aidd-context/skills/01-bootstrap/actions/04-pick-and-design.md
+++ b/plugins/aidd-context/skills/01-bootstrap/actions/04-pick-and-design.md
@@ -1,67 +1,26 @@
# 04 - Pick and design
-User picks the winning candidate (informed by audit). Generate the folder structure tree and a Mermaid module diagram. Fill block 4 of the checklist with the concrete choices.
+The user picks the winning candidate, informed by the audit. Generate the folder-structure tree and a Mermaid module diagram, and fill block 4 of the checklist with the concrete choices.
-## Inputs
+## Input
-- Augmented comparison table from action 03 (with verdicts and rationale).
-- Filled checklist blocks 1-3.
+The augmented comparison table from action 03 (verdicts and rationale), and the filled checklist blocks 1 to 3.
-## Outputs
+## Output
-Three artifacts held in conversation context (not yet written to disk):
-
-1. The checklist with **block 4 filled** (architecture pattern, front, back, DB, auth, final hosting).
-2. A folder-structure code block showing the project root tree.
-3. A Mermaid diagram showing modules and their relations.
-
-```markdown
-## Folder structure
-
-```
-acme-invoicing/
-├── apps/
-│ ├── web/ # Next.js app
-│ └── workers/ # Background jobs (BullMQ)
-├── packages/
-│ ├── db/ # Drizzle schema + migrations
-│ ├── api/ # tRPC routers shared between web and workers
-│ └── ui/ # shared React components
-├── infra/
-│ └── supabase/ # Supabase project config + RLS policies
-├── aidd_docs/
-│ └── INSTALL.md
-└── package.json
-```
-
-## Architecture diagram
-
-```mermaid
-graph TD
- User --> Web[Next.js Web]
- Web --> API[tRPC API]
- API --> DB[(Supabase Postgres)]
- API --> Airtable[Airtable SDK]
- Web --> Auth[NextAuth]
- Workers[BullMQ Workers] --> DB
- Workers --> Slack[Slack API]
-```
-```
-
-## Depends on
-
-- `03-audit-candidates`
+Three artifacts held in conversation context: the checklist with block 4 filled (architecture pattern, front, back, DB, auth, final hosting), a folder-structure code block of the project root tree, and a Mermaid diagram of the modules and their relations.
## Process
-1. Print the action 03 augmented table. Ask the user to pick a candidate by letter (A / B / C).
-2. If the picked candidate has verdict `⚠️`, surface the audit concerns directly: list the specific risks found in action 03, ask whether the user has a mitigation plan, and loop until satisfied or candidate is switched.
-3. If the picked candidate has verdict `❌`, refuse the pick and loop back to letting the user choose differently. (Do not proceed with a known-broken stack.)
-4. Fill block 4 of the checklist with the picked candidate's concrete choices. Show the user the full filled checklist and ask them to confirm "go".
-5. Generate the folder-structure tree following conventions from the picked stack: monorepo (`apps/`, `packages/`) for modular monolith; flat `src/` for monolith; `services/` per service for microservices; `functions/` for serverless. Reflect every component listed in block 4.
-6. Generate the Mermaid module diagram by invoking `aidd-context:09-mermaid`. Pass it the list of modules and their relations derived from the folder tree. Verify the rendered diagram passes Mermaid syntax (no parser errors).
-7. Print the tree + diagram together. Wait for user confirmation before action 05.
+1. **Pick.** Print the action 03 augmented table and ask the user to pick a candidate by name.
+2. **Vet.** On a ⚠️ pick, surface the audit concerns, ask for a mitigation plan, and loop until satisfied or the pick changes. On a ❌ pick, refuse and loop back; never proceed with a known-broken stack.
+3. **Fill.** Fill block 4 with the picked candidate's concrete choices, show the full checklist, and wait for the user to confirm "go".
+4. **Tree.** Generate the folder-structure tree following the picked stack's conventions: a monorepo (`apps/`, `packages/`) for a modular monolith, a flat `src/` for a monolith, `services/` per service for microservices, `functions/` for serverless. Reflect every block-4 component.
+5. **Diagram.** Generate the Mermaid module diagram via a Mermaid-rendering capability, passing the modules and relations from the tree, and confirm it parses without error.
+6. **Show.** Print the tree and diagram together, then wait for confirmation before action 05.
## Test
-The checklist's block 4 has all 6 items filled with no remaining `<...>` placeholders; a folder-structure code block is rendered; a Mermaid code block tagged ` ```mermaid ` is present and parses without error; the user has confirmed in writing.
+- Block 4 has all six items filled with no remaining `<...>` placeholders.
+- A folder-structure code block is rendered, and a fenced `mermaid` block is present and parses without error.
+- The user confirmed in writing.
diff --git a/plugins/aidd-context/skills/01-bootstrap/actions/05-write-install-md.md b/plugins/aidd-context/skills/01-bootstrap/actions/05-write-install-md.md
index 73347fd1..210facfb 100644
--- a/plugins/aidd-context/skills/01-bootstrap/actions/05-write-install-md.md
+++ b/plugins/aidd-context/skills/01-bootstrap/actions/05-write-install-md.md
@@ -1,57 +1,31 @@
# 05 - Write INSTALL.md
-Produce `aidd_docs/INSTALL.md` from the filled checklist, folder tree, diagram, and audit summary. This is the only file this skill writes to disk.
+Produce `aidd_docs/INSTALL.md` from the filled checklist, folder tree, diagram, and audit summary. The only file this skill writes to disk.
-## Inputs
+## Input
-- Filled checklist (from action 04).
-- Folder structure code block (from action 04).
-- Mermaid diagram (from action 04).
-- Augmented audit table (from action 03).
+The filled checklist, folder-structure code block, and Mermaid diagram from action 04, and the augmented audit table from action 03.
-## Outputs
+## Output
-A new file at `aidd_docs/INSTALL.md` filled from `@../assets/install-template.md`.
-
-```markdown
-# INSTALL.md - acme-invoicing
-
-Technical vision and installation guide.
-
-## Vision
-...
-## Decisions
-...
-## Stack summary
-...
-## Architecture
-...
-## Folder structure
-...
-## Install steps
-...
-## Audit summary
-...
-```
-
-## Depends on
-
-- `04-pick-and-design`
+A new `aidd_docs/INSTALL.md` filled from `@../assets/install-template.md`, with its Vision, Decisions, Stack summary, Architecture, Folder structure, Install steps, and Audit summary sections.
## Process
-1. Read `@../assets/install-template.md`. This is the skeleton.
-2. Fill each placeholder from upstream artifacts:
- - **Vision**: project name + one-liner from block 1
- - **Decisions table**: each row from block 4 paired with a one-line `Why` derived from block 2-3 constraints
- - **Stack summary**: concrete versions / SaaS plans where known
- - **Architecture**: paste the Mermaid diagram from action 04 + 2-3 sentences explaining module boundaries
- - **Folder structure**: paste the tree from action 04 verbatim
- - **Install steps**: 3-7 imperative steps the user runs to bring up the empty project (init repo, install runtimes, create cloud accounts, set env vars). No code generation - this is a checklist, not a script.
- - **Audit summary**: paste the augmented table from action 03, keep verdicts + one-line notes
-3. Write the filled content to `aidd_docs/INSTALL.md` in the user's project root. If the file already exists, ask before overwriting.
-4. Print the relative path of the written file and a short summary (which sections were filled, total length).
+1. **Load.** Read `@../assets/install-template.md` as the skeleton.
+2. **Fill.** Fill each placeholder from the upstream artifacts:
+ - **Vision**: project name and one-liner from block 1.
+ - **Decisions**: each block-4 row paired with a one-line why from the block 2 and 3 constraints.
+ - **Stack summary**: concrete versions or SaaS plans where known.
+ - **Architecture**: the action 04 Mermaid diagram plus two or three sentences on module boundaries.
+ - **Folder structure**: the action 04 tree verbatim.
+ - **Install steps**: 3 to 7 imperative steps to bring up the empty project (init repo, install runtimes, create cloud accounts, set env vars). A checklist, not a script, with no code generation.
+ - **Audit summary**: the action 03 augmented table, keeping verdicts and one-line notes.
+3. **Write.** Write the filled content to `aidd_docs/INSTALL.md` in the project root. When the file already exists, ask before overwriting.
+4. **Report.** Print the written file's relative path and a short summary of the sections filled and total length.
## Test
-`aidd_docs/INSTALL.md` exists and parses as markdown; it contains exactly these `## ` H2 headings in order: `Vision`, `Decisions`, `Stack summary`, `Architecture`, `Folder structure`, `Install steps`, `Audit summary`; the `Architecture` section contains a fenced ` ```mermaid ` block; the `Folder structure` section contains a fenced code block with at least 5 lines.
+- `aidd_docs/INSTALL.md` exists and parses as markdown.
+- It contains these H2 headings in order: Vision, Decisions, Stack summary, Architecture, Folder structure, Install steps, Audit summary.
+- The Architecture section contains a fenced `mermaid` block, and the Folder structure section a fenced code block of at least five lines.
diff --git a/plugins/aidd-context/skills/02-project-memory/SKILL.md b/plugins/aidd-context/skills/02-project-memory/SKILL.md
index 28af6162..e5957086 100644
--- a/plugins/aidd-context/skills/02-project-memory/SKILL.md
+++ b/plugins/aidd-context/skills/02-project-memory/SKILL.md
@@ -1,6 +1,7 @@
---
name: 02-project-memory
-description: Initialize or refresh the project memory bank. Not for updating one memory file after it exists (use the learn skill) or editing a single rule (edit it directly).
+description: Initialize or refresh the project memory bank. Use when the user wants to set up or regenerate the project's memory files. Not for updating one memory file after it exists or editing a single rule directly.
+argument-hint: init-context-file | scaffold-docs | generate-memory | review-memory | sync-memory
---
# Project Memory
@@ -12,29 +13,34 @@ Bootstraps the project's context layer: the AI context files with a memory block
| # | Action | Role | Input |
| --- | ------------------- | --------------------------------------------------- | ----------------- |
| 01 | `init-context-file` | Resolve the tools, then upsert the memory block | project root |
-| 02 | `scaffold-docs` | Create the `aidd_docs/` structure | project root |
+| 02 | `scaffold-docs` | Create the `aidd_docs/` folder structure | project root |
| 03 | `generate-memory` | Detect the capabilities, generate the memory files | the memory dir |
| 04 | `review-memory` | Review the memory files for consistency | the memory dir |
| 05 | `sync-memory` | Fill the memory block in every context file | the context files |
Run the actions in order, `01 → 05`, and run each action's `## Test` before the next.
-## Transversal rules
+## Memory rules
-- Capture the macro picture and the non-derivable: decisions, conventions, gotchas, the why. Never restate derivable detail (a full schema, a file tree). Prefer a pointer to the code over a copy.
-- Keep each memory file small. Bullets stay short, code in backticks, no version number in a tech name (`React`, not `React 19`).
-- Memory files document the user's project, never AIDD's own scaffold.
-- Reflect the current state only. Drop an unused section, no empty placeholder survives.
-- Ask the user before including or excluding anything ambiguous. Never decide silently.
-- Write files, never display their content.
+Govern the content of every memory file.
-## Loading
+- Capture the macro and the non-derivable: decisions, conventions, gotchas, the why. Never restate a schema or a file tree. Point to the code over a copy.
+- One fact, one file: define it in its home, elsewhere reference it. Naming a shared lib in its own concern is fine.
+- Keep each file small. Short bullets, code in backticks, no version in a tech name (`React`, not `React 19`).
+- Reflect the current state only. Drop an unused section, never leave a placeholder.
-The core concerns load always. The `internal/` and `external/` directories are listed for on-demand reading, never auto-loaded.
+## Action rules
+
+Govern how every action runs.
+
+- Read an asset or reference relative to this skill. If one can't be read, stop and say so, never invent.
+- Ask before anything ambiguous. Never default silently.
+- End with a short report of what changed.
## References
- `references/mapping-ai-context-file.md`: the per-tool context-file path.
+- `references/memory-block.md`: the context-file memory block and its upsert cases.
- `references/capability-signals.md`: the capabilities, their signals, and the concerns each gates.
## Assets
diff --git a/plugins/aidd-context/skills/02-project-memory/actions/01-init-context-file.md b/plugins/aidd-context/skills/02-project-memory/actions/01-init-context-file.md
index 9bdb3044..f8836a6d 100644
--- a/plugins/aidd-context/skills/02-project-memory/actions/01-init-context-file.md
+++ b/plugins/aidd-context/skills/02-project-memory/actions/01-init-context-file.md
@@ -1,6 +1,6 @@
# 01 - Init context file
-Resolve the target tools, then ensure each tool's AI context file carries the project memory block.
+Ensure each target tool's AI context file carries the project memory block.
## Input
@@ -12,17 +12,9 @@ One context file per confirmed tool, each carrying an empty `` block after the `### Project memory` heading.
- - Block present: leave it, report "already ok".
-5. **Report.** Print a table: tool, file, action taken.
+1. **Detect.** Find the context files already present, by the per-tool paths in `@../references/mapping-ai-context-file.md`. Only those paths qualify; any other file is user content, off-limits.
+2. **Resolve tools.** On a re-run, the tools present are the confirmed set, skip the prompt. Otherwise propose the detected tools plus the full list and ask which the user uses; wait for an explicit pick, never default to all.
+3. **Upsert.** For each confirmed tool, write the memory block into its context file per `@../references/memory-block.md`.
## Test
diff --git a/plugins/aidd-context/skills/02-project-memory/actions/02-scaffold-docs.md b/plugins/aidd-context/skills/02-project-memory/actions/02-scaffold-docs.md
index b2f99bc4..3056898c 100644
--- a/plugins/aidd-context/skills/02-project-memory/actions/02-scaffold-docs.md
+++ b/plugins/aidd-context/skills/02-project-memory/actions/02-scaffold-docs.md
@@ -1,6 +1,6 @@
# 02 - Scaffold docs
-Create the `aidd_docs/` structure with its root docs and empty memory subdirectories.
+Create the `aidd_docs/` structure: root docs and empty memory subdirectories.
## Input
@@ -12,10 +12,9 @@ The project root.
## Process
-1. **Docs.** For each of `README.md`, `GUIDELINES.md`, `CONTRIBUTING.md`: write it from the matching `@../assets/` template if absent, or update it in place while preserving the user's customizations.
+1. **Docs.** Write each of `README.md`, `GUIDELINES.md`, `CONTRIBUTING.md` from its `@../assets/` template if absent, else update in place preserving the user's edits.
2. **Memory dirs.** Ensure `aidd_docs/memory/internal/` and `aidd_docs/memory/external/` exist, each with a `.gitkeep`.
-3. **Memory readme.** Write `aidd_docs/memory/README.md` from `@../assets/templates/memory/README.md` if absent, leaving an existing one untouched.
-4. **Report.** Print a table: path, action taken (created, updated, or skipped).
+3. **Memory readme.** Write `aidd_docs/memory/README.md` from `@../assets/templates/memory/README.md` if absent; leave an existing one.
## Test
diff --git a/plugins/aidd-context/skills/02-project-memory/actions/03-generate-memory.md b/plugins/aidd-context/skills/02-project-memory/actions/03-generate-memory.md
index 6169aa59..0e719f72 100644
--- a/plugins/aidd-context/skills/02-project-memory/actions/03-generate-memory.md
+++ b/plugins/aidd-context/skills/02-project-memory/actions/03-generate-memory.md
@@ -8,24 +8,15 @@ The `aidd_docs/memory/` directory and the project root.
## Output
-The `core/` memory files plus the folder of each detected capability, filled and written flat to `aidd_docs/memory/`.
+The `core/` memory files plus each detected capability's folder, filled and written flat to `aidd_docs/memory/`.
## Process
-1. **Gate.** Read one template (e.g. `@../assets/templates/memory/core/architecture.md`). If it cannot be read, stop: the templates are unreachable. Never invent content.
-2. **Detect.** Find the project's capabilities (`@../references/capability-signals.md`). A capability holds when a concrete fact in the repo matches its definition, whether or not the fact is in the Evidence column. Never fire on an inferred domain. In a monorepo, scan every workspace, not the root manifest alone.
-3. **Confirm.** Show each detected capability with the concrete evidence behind it and the templates it selects. Ask the user to confirm, add, or drop one. Block on the answer.
-4. **Select.** Take every template in `core/`, plus every template in each confirmed capability's folder (`@../references/capability-signals.md`).
-5. **Reconcile.** If `aidd_docs/memory/` already holds files:
- - A selected concern with an existing file: update it from current reality, preserving the user's edits.
- - A selected concern with no file: create it.
- - An existing file whose capability is no longer detected: leave it, flag it to the user, never delete.
-6. **Fill.** For each selected template, in parallel:
- - Read its sections.
- - Capture the macro and non-derivable facts from the project, excluding AIDD's own scaffold. Prefer a pointer to the code over a copy.
- - Fill the sections. Drop a section with no content. Strip the guidance comment. Never copy a template verbatim, ask the user instead.
-7. **Write.** One output per template, named by the template's basename, flat at `aidd_docs/memory/`. Never nest, never rename, never consolidate.
-8. **Report.** A table: capability, concern, output file, status (created, updated, kept, or flagged).
+1. **Detect.** Find the project's capabilities (`@../references/capability-signals.md`): a capability holds when a concrete repo fact matches its definition, never an inferred domain. In a monorepo, scan every workspace.
+2. **Confirm.** Show each capability with its evidence and the templates it selects. Ask the user to confirm, add, or drop one. Block on the answer.
+3. **Select.** Take `core/` plus each confirmed capability's folder. On an existing `aidd_docs/memory/`: update a concern from current reality (keep the user's edits), create a missing one, leave-but-flag one whose capability is gone (never delete).
+4. **Fill.** For each template, knowing what earlier ones captured (never repeat a fact, point to its file): capture the macro, non-derivable facts (exclude AIDD's scaffold, point to code over a copy), fill its sections, drop an empty one, strip the guidance comment, never copy verbatim.
+5. **Write.** One file per template, named by its basename, flat in `aidd_docs/memory/`. Never nest, rename, or consolidate.
## Test
diff --git a/plugins/aidd-context/skills/02-project-memory/actions/04-review-memory.md b/plugins/aidd-context/skills/02-project-memory/actions/04-review-memory.md
index af1b5cba..ec72b87b 100644
--- a/plugins/aidd-context/skills/02-project-memory/actions/04-review-memory.md
+++ b/plugins/aidd-context/skills/02-project-memory/actions/04-review-memory.md
@@ -1,6 +1,6 @@
# 04 - Review memory
-Review every memory file together for cross-file consistency, and fix what is safe.
+Review every memory file together for cross-file consistency and duplication, fixing what is safe.
## Input
@@ -8,14 +8,15 @@ The `aidd_docs/memory/` directory with the generated files.
## Output
-The memory files, corrected in place where needed, and a status table.
+The memory files, corrected in place where safe, and a status report.
## Process
1. **Read.** Load every `.md` under `aidd_docs/memory/`, recursively.
-2. **Review.** In one pass with all files in context, check consistency and accuracy across them. Fix a safe inconsistency in place. Flag one that needs a human.
-3. **Report.** A table: file, status (clean, fixed with reason, or needs review).
+2. **Review.** In one pass, check cross-file consistency and accuracy. Fix a safe issue in place, flag one that needs a human.
+3. **Deduplicate.** Keep each fact in one file, drop the copies (judge by meaning, not wording). May be handed to an independent checker subagent.
## Test
-- The status table covers every memory file, and each flagged file carries a reason a human can act on.
+- Every memory file is covered by the report, each flagged file with a reason a human can act on.
+- No fact's definition is duplicated across files.
diff --git a/plugins/aidd-context/skills/02-project-memory/actions/05-sync-memory.md b/plugins/aidd-context/skills/02-project-memory/actions/05-sync-memory.md
index 1eee4349..b7c613c0 100644
--- a/plugins/aidd-context/skills/02-project-memory/actions/05-sync-memory.md
+++ b/plugins/aidd-context/skills/02-project-memory/actions/05-sync-memory.md
@@ -12,9 +12,8 @@ Each `` block lists the generated memory files as reference
## Process
-1. **Run.** Execute the memory-sync script (`update_memory.js` in the plugin's `hooks/`) to inject the references.
-2. **Guard.** On a non-zero exit, print the error and stop. Tell the user to confirm `aidd_docs/memory/` holds a `.md` file and that `node` is available.
-3. **Report.** Print how many context files were updated and how many references went into each block, then list the references per file.
+1. **Run.** Execute the memory-sync script (`update_memory.js` in the plugin's `hooks/`) to fill each block (the block: `@../references/memory-block.md`).
+2. **Guard.** On a non-zero exit, print the error and stop; tell the user to check that `aidd_docs/memory/` holds a `.md` file and that `node` is available.
## Test
diff --git a/plugins/aidd-context/skills/02-project-memory/assets/AGENTS.md b/plugins/aidd-context/skills/02-project-memory/assets/AGENTS.md
index da9aad46..69bd9267 100644
--- a/plugins/aidd-context/skills/02-project-memory/assets/AGENTS.md
+++ b/plugins/aidd-context/skills/02-project-memory/assets/AGENTS.md
@@ -1,26 +1,35 @@
# AGENTS.md
-> On the first message of a conversation, tell the user: "AI-Driven Development ON, {current_date}, {current_timezone}."
+> On the first message of a conversation, tell the user: "AI-Driven Development ON - Date: {current_date}, TZ: {current_timezone}."
## Behavior
-- Stay critical. The user can be wrong. Verify a claim against the project's actual state before acting on it.
-- Be anti-sycophantic. Do not fold an argument because the user pushed back. Challenge weak reasoning instead of validating it.
-- No flattery, no praise filler. Do not anthropomorphize yourself.
-- Anticipate mistakes over agreeing. Never open with "you are right". When unsure, say "I don't know" or ask.
+- **Stay critical.** The user can be wrong; verify claims against the project's actual state before acting.
+- **Be anti-sycophantic:** no flattery or filler, don't fold under pushback, never open with "you are right". Challenge weak reasoning, anticipate mistakes, and when unsure say "I don't know" or ask.
+- **Surface tradeoffs and evaluate their impact** instead of hiding them.
## Communication
-- Answer first. Lead with the result, then the reason. Drop pleasantries (sure, of course, happy to) and hedging.
-- Evidence over assertion. Back "works", "tested", "fixed" with the command, output, or file that proves it.
-- Quote the shortest decisive line of an error or log, not the whole dump.
-- No tool-call narration. No decorative tables or emoji unless they carry information.
-- Brevity is the default, but write in full for security warnings, irreversible actions, and any sequence where order matters. Clarity wins there.
-
-## Technical
-
-- Do not commit or push unless the user asks.
-- Do not assume your knowledge is current. Be sure of an answer before giving it.
+- **Answer first:** result before reason. Drop pleasantries (sure, of course, happy to) and hedging.
+- **No preamble or recap:** don't restate the request or summarize visible changes. Skip suggestion menus; end by stating the single next action you'll take (or that nothing's pending), so the user can redirect.
+- **Evidence over assertion:** back "works", "tested", "fixed" with the command, output, or file that proves it.
+- **Quote the shortest decisive line** of an error or log, not the whole dump.
+- **No tool-call narration.** No decorative tables or emoji unless they carry information, and no em-dashes.
+- **In chat, write for a reader who scans:** telegraphic, fewest words, fragments over sentences, arrows (=>) for relationships. Cut any word that doesn't change meaning. Normal prose in authored docs and code. Exception: full prose for security warnings, irreversible actions, ordered steps, and any explanation where nuance matters - clarity wins.
+
+## Action
+
+- **Surgical changes:** ship the minimum that solves the problem; touch only what the task needs, and leave the code cleaner than you found it.
+- **Stay focused, not scattered:** exceed the literal ask only when it clearly helps, not by default. When you spot an unrelated issue, note it in one line and keep going; detour only if it blocks the task.
+- **Solve your own issues first:** genuinely try to resolve it yourself before escalating to the human.
+- **Do not commit or push** unless the user asks.
+- **Don't assume your knowledge is current.**
+- **Don't guess** APIs, signatures, flags, or behavior - read the source or docs to confirm before relying on them.
+- **Ambiguous or expensive task:** ask one sharp question to pin down scope before building, rather than guess.
+- **Batch independent operations** in one pass, not one at a time.
+- **Fan out** independent subtasks to parallel subagents when you own the overall flow and the work is genuinely parallel.
+- **Before adding any instruction, finding, or rule, check whether an existing one already covers or contradicts it.** If so, don't add a parallel: delete it, merge it into the stronger one, or rewrite with explicit scope and priority.
+- **Name by intention, not mechanism:** describe the goal or responsibility, not the tool or file format.
## Memory Management
diff --git a/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/api/api.md b/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/api/api.md
index 7145a102..54935d4f 100644
--- a/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/api/api.md
+++ b/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/api/api.md
@@ -4,7 +4,7 @@ The HTTP API surface: its style, the main resources, and the contracts.
## Style
--
+-
-
## Resources
diff --git a/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/api/integration.md b/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/api/integration.md
index 19c53b77..5896eee9 100644
--- a/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/api/integration.md
+++ b/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/api/integration.md
@@ -1,10 +1,6 @@
# Integration
-How this system talks to others: internal communication and external services.
-
-## Internal
-
--
+How this system integrates with external/third-party services.
## External services
@@ -12,10 +8,10 @@ How this system talks to others: internal communication and external services.
```mermaid
flowchart LR
- A[TODO: macro communication between this system and its services]
+ A[TODO: macro map of this system and its external services]
```
diff --git a/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/core/architecture.md b/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/core/architecture.md
index c921be86..3d844383 100644
--- a/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/core/architecture.md
+++ b/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/core/architecture.md
@@ -5,12 +5,7 @@ The macro technical shape: the stack, how the pieces fit, and the decisions behi
## Stack
-
--
-
-## Structure
-
--
--
+-
## How it fits together
diff --git a/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/ui/navigation.md b/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/ui/navigation.md
index 2a5b1ba7..8787d1e7 100644
--- a/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/ui/navigation.md
+++ b/plugins/aidd-context/skills/02-project-memory/assets/templates/memory/ui/navigation.md
@@ -4,7 +4,7 @@ How the user moves through the app: routing and the page structure.
## Routing
--
+-
-
## Structure
diff --git a/plugins/aidd-context/skills/02-project-memory/references/capability-signals.md b/plugins/aidd-context/skills/02-project-memory/references/capability-signals.md
index 2a8ca8ef..bb00ba40 100644
--- a/plugins/aidd-context/skills/02-project-memory/references/capability-signals.md
+++ b/plugins/aidd-context/skills/02-project-memory/references/capability-signals.md
@@ -23,12 +23,3 @@ A capability holds when a concrete fact in the repo matches the capability's **d
| `cli` | is run as a command-line tool | a `bin` field, or a CLI-parser dependency (commander, yargs, oclif, clap, click) | cli |
| `data` | processes data or trains models | notebooks, a data-versioning or ML tool, or pipeline and model files | data |
| `monorepo` | hosts several packages in one repo | workspaces, or a monorepo tool (Turborepo, Nx, Lerna) | enriches `core/codebase-map` (the Packages section), no folder |
-
-## How the action uses this
-
-- Always generate every template in `core/`.
-- For each capability that holds, generate every template in its folder.
-- Fire a capability on a concrete fact that matches its definition, whether or not the fact is in the Evidence column. Never fire on an inferred domain.
-- A capability with no concrete fact produces no file.
-- A monorepo fills the Packages section of `codebase-map`, it has no folder of its own.
-- In a monorepo, gather facts across every workspace, not the root manifest alone. A capability holds when any one workspace shows it (a React app in `packages/web` means `ui` holds for the project).
diff --git a/plugins/aidd-context/skills/02-project-memory/references/memory-block.md b/plugins/aidd-context/skills/02-project-memory/references/memory-block.md
new file mode 100644
index 00000000..1c7c7b98
--- /dev/null
+++ b/plugins/aidd-context/skills/02-project-memory/references/memory-block.md
@@ -0,0 +1,12 @@
+# Memory block
+
+The `` block is where a tool's AI context file points to the generated memory files. It sits under `## Memory Management` → `### Project memory` (full template: `@../assets/AGENTS.md`).
+
+## Upsert
+
+Apply the first case that matches a tool's context file:
+
+- **Absent:** copy `@../assets/AGENTS.md`, set the tool's title.
+- **No `## Memory Management`:** append that section from the template.
+- **Section but no block:** insert an empty `` block after `### Project memory`.
+- **Block present:** leave it, report "already ok".
diff --git a/plugins/aidd-context/skills/03-context-generate/SKILL.md b/plugins/aidd-context/skills/03-context-generate/SKILL.md
index 788c0ec2..563e52a9 100644
--- a/plugins/aidd-context/skills/03-context-generate/SKILL.md
+++ b/plugins/aidd-context/skills/03-context-generate/SKILL.md
@@ -1,6 +1,6 @@
---
name: 03-context-generate
-description: Route a request to generate a context artifact (skill, rule, agent, command, or hook) to its dedicated generator when the user has not named which kind. For a named kind, that generator triggers directly. Not for listing existing artifacts (use explore).
+description: Route a request to generate a context artifact (skill, rule, agent, command, or hook) to its generator when the kind is unnamed. A named kind triggers its generator directly. Not for listing existing artifacts.
---
# Context Generate
diff --git a/plugins/aidd-context/skills/04-skill-generate/SKILL.md b/plugins/aidd-context/skills/04-skill-generate/SKILL.md
index 34aa875d..ac52a9f8 100644
--- a/plugins/aidd-context/skills/04-skill-generate/SKILL.md
+++ b/plugins/aidd-context/skills/04-skill-generate/SKILL.md
@@ -1,6 +1,7 @@
---
name: 04-skill-generate
description: Generate a router-based skill across the host AI tools a project uses. Use when the user wants to create, scaffold, or refactor a skill, or turn a workflow into one. Not for other artifacts like rules, agents, commands, hooks.
+argument-hint: capture-intent | decompose-actions | draft-skill | write-actions | validate
---
# Skill Generate
@@ -21,7 +22,7 @@ Run the actions in order, `01 → 05`, and run each action's `## Test` before th
## References
-- `references/skill-authoring.md`: the contract (R1-R11, action anatomy, naming).
+- `references/skill-authoring.md`: the contract (R1-R13, action anatomy, naming).
- `references/tool-paths.md`: per-tool skills path, frontmatter, resolution + write-safety gate.
## Assets
diff --git a/plugins/aidd-context/skills/04-skill-generate/actions/03-draft-skill.md b/plugins/aidd-context/skills/04-skill-generate/actions/03-draft-skill.md
index 5b29b1ac..951559e5 100644
--- a/plugins/aidd-context/skills/04-skill-generate/actions/03-draft-skill.md
+++ b/plugins/aidd-context/skills/04-skill-generate/actions/03-draft-skill.md
@@ -8,13 +8,13 @@ From 01: the name, domain, what it produces, the invocation mode, the confirmed
## Output
-One SKILL.md per confirmed tool, and the list of files written.
+One SKILL.md per target (each confirmed host tool, or the plugin source tree), and the list of files written.
## Process
1. **Build.** Copy `@../assets/skill-template.md` into one canonical SKILL.md. Strip the scaffold (comments + `<...>`).
- Modify: edit in place. Keep non-router sections, change only the touched rows.
-2. **Frontmatter.** Fill per R5 and the naming (`@../references/skill-authoring.md`). `name` equals the folder. Manual mode adds the manual-only flag.
+2. **Frontmatter.** Fill per R5 and the naming (`@../references/skill-authoring.md`). `name` equals the folder. For plugin source, or host tools that support it, `argument-hint` lists action names only when the skill has two or more actions, joined with ` | `, and must match the action plan. Manual mode adds the manual-only flag.
- Host: per-tool frontmatter (`@../references/tool-paths.md`).
- Plugin source: keep canonical `name` + `description`. Reconciled at install.
3. **Body.** Write the action table. State the flow in one line.
@@ -31,4 +31,4 @@ One SKILL.md per confirmed tool, and the list of files written.
- Each SKILL.md exists and starts with `---` frontmatter.
- Each is 500 lines or fewer and sits under the target base.
-- The action-table slugs match the plan.
+- The action-table slugs match the plan. `argument-hint` is omitted for one-action skills; when emitted, its action names match the plan.
diff --git a/plugins/aidd-context/skills/04-skill-generate/actions/04-write-actions.md b/plugins/aidd-context/skills/04-skill-generate/actions/04-write-actions.md
index 26862bfa..4dfdd597 100644
--- a/plugins/aidd-context/skills/04-skill-generate/actions/04-write-actions.md
+++ b/plugins/aidd-context/skills/04-skill-generate/actions/04-write-actions.md
@@ -14,11 +14,13 @@ One file per action, per confirmed tool, at `//actions/-<
1. **Resolve.** Host mode: for each confirmed tool, resolve the skills root from `@../references/tool-paths.md`. Plugin source: use `plugins//skills//`.
2. **Fill.** For each action, fill `@../assets/action-template.md`: strip the scaffold (comments + `<...>`), copy the test from 02 verbatim into `## Test`.
+3. **Sync hint.** When the parent SKILL.md accepts `argument-hint` and has two or more actions, update it from the final action file names only, joined with ` | `. Omit it for one-action skills. In this repository, run `node scripts/sync-skill-argument-hints.mjs`; otherwise edit the field directly.
- Modify: write only the changed actions, leave the rest untouched.
-3. **Compose.** Include any template or reference via `@`. Never "read X then apply".
-4. **Validate.** Run the write-target validation (`@../references/tool-paths.md`).
+4. **Compose.** Include any template or reference via `@`. Never "read X then apply".
+5. **Validate.** Run the write-target validation (`@../references/tool-paths.md`).
## Test
- Each action file exists and carries `## Output`, `## Process`, `## Test`.
+- One-action skills omit `argument-hint`. When present, the parent SKILL.md `argument-hint` lists the same action names as the action files.
- Each sits under the target base.
diff --git a/plugins/aidd-context/skills/04-skill-generate/assets/skill-template.md b/plugins/aidd-context/skills/04-skill-generate/assets/skill-template.md
index a9576f05..7dcb8d97 100644
--- a/plugins/aidd-context/skills/04-skill-generate/assets/skill-template.md
+++ b/plugins/aidd-context/skills/04-skill-generate/assets/skill-template.md
@@ -1,6 +1,7 @@
---
name:
-description: . Use when . , use " only when a sibling skill could mis-trigger.> (<= 1024 chars, third person, no XML tags; all "when" lives here, not in the body.)
+description: . Use when the user wants to . " in plain words when a sibling could mis-trigger.> (Two lines max, ~240 chars, straight to the point. Third person, no XML. Never name another skill, never write a /command token. All "when" lives here, not in the body.)
+argument-hint: # omit when the skill has only one action
---
#
diff --git a/plugins/aidd-context/skills/04-skill-generate/references/skill-authoring.md b/plugins/aidd-context/skills/04-skill-generate/references/skill-authoring.md
index b45b1cc7..c267cf4f 100644
--- a/plugins/aidd-context/skills/04-skill-generate/references/skill-authoring.md
+++ b/plugins/aidd-context/skills/04-skill-generate/references/skill-authoring.md
@@ -8,11 +8,14 @@ The contract every generated skill must satisfy. These rules govern the CLIENT s
- **R2.** One skill = one domain. A tool domain uses a singular noun (`slack`). An activity domain uses an action verb (`review`). See `## Naming`.
- **R3.** References one level deep. A reference never `@`-chains another reference.
- **R4.** SKILL.md <= 500 lines. If exceeded, split into references.
-- **R5.** `description` states what + when. Third person, <= 1024 chars, no XML. Conventions:
- - All "when" lives here, not in the body.
- - Triggers explicit and slightly pushy. The model under-triggers, so over-list.
- - Lead with the plain artifact name. Parentheses for an inline definition, not dashes.
- - Optionally a short `Not for ` clause, only when a sibling skill could mis-trigger.
+- **R5.** `description` states what + when. Third person, no XML. Conventions:
+ - **Two lines max, straight to the point.** Target ~240 characters; never more than a short paragraph. Length serves recall, not completeness. The hard ceiling is 1024 chars, not a goal.
+ - Lead with a verb naming what the skill produces (`Generate a rule...`, `Audit a codebase...`), not a noun phrase.
+ - All "when" lives here, not in the body. State it as `Use when the user wants to `. List distinct triggers (the model under-triggers, so cover the real ones), but never pad with near-duplicate phrasings.
+ - Optionally one short `Not for ` clause to fend off a sibling that could mis-trigger, describing the overlap in plain words.
+ - Never name another skill, and never include a `/command` token: slash commands are tool-native, the host generates them.
+ - Parentheses for an inline definition, not dashes.
+ - Never use a colon or an em dash in the description. Split the thought into two sentences instead.
- **R6.** Zero duplication. One fact, one home. Actions cite a shared file via `@` instead of restating it.
- **R7.** `references/` = documents to READ and apply in place. `assets/` = files to COPY, INJECT, or fill in per run. A template, checklist, or form is an asset, not a reference, because each run instantiates it.
- **R8.** Every action follows the action anatomy (below) and carries a `## Test`.
@@ -43,6 +46,7 @@ The router: YAML frontmatter + markdown body.
- `name` (kebab-case, <= 64 chars) MUST equal the skill's folder name. No colon, slash, dot, plugin prefix, or namespace. Reserved words forbidden: `anthropic`, `claude`. Regex `^[a-z0-9]+(-[a-z0-9]+)*$`.
- `description`: per R5.
+- `argument-hint` when supported or in plugin source and the skill has two or more actions: action names only, joined with ` | `, matching the files in `actions/`. Omit it for one-action skills.
- A manual-only flag makes the skill user-only. The exact frontmatter key is per tool.
- Body: pure router. The action table maps each `#` and slug to a role and input. State the flow (a sequential chain or a trigger-to-action map). Self-skips stated explicitly.
diff --git a/plugins/aidd-context/skills/05-rule-generate/SKILL.md b/plugins/aidd-context/skills/05-rule-generate/SKILL.md
index 696b9f74..dd269bcf 100644
--- a/plugins/aidd-context/skills/05-rule-generate/SKILL.md
+++ b/plugins/aidd-context/skills/05-rule-generate/SKILL.md
@@ -1,6 +1,7 @@
---
name: 05-rule-generate
-description: Generate a coding rule that governs editor and agent behavior, across the host AI tools a project uses. Use when the user wants to write, add, or refactor a rule, a convention, or a coding standard, or to scan a codebase and propose rules. Not for other artifacts like skills, agents, commands, hooks.
+description: Generate a coding rule that governs editor and agent behavior across the host AI tools. Use when the user wants to write, add, or refactor a rule, convention, or coding standard. Not for other artifacts like skills, agents, or hooks.
+argument-hint: capture-rule | write-rule | validate
---
# Rule Generate
diff --git a/plugins/aidd-context/skills/05-rule-generate/actions/03-validate.md b/plugins/aidd-context/skills/05-rule-generate/actions/03-validate.md
index 26427308..7e4f3495 100644
--- a/plugins/aidd-context/skills/05-rule-generate/actions/03-validate.md
+++ b/plugins/aidd-context/skills/05-rule-generate/actions/03-validate.md
@@ -13,9 +13,10 @@ A short pass or fail line per rule file.
## Process
1. **Exists.** Confirm each file is on disk at its expected path.
-2. **Frontmatter.** Confirm each carries its tool's scope frontmatter matching the rule's reach, per `@../references/tool-paths.md`. An all-files rule may carry no scope field.
-3. **Concise.** Confirm the body is terse and on one topic. Flag a crowded file to split.
+2. **Contract.** Validate the file against `@../references/rule-authoring.md`.
+3. **Target.** Validate target path and frontmatter against `@../references/tool-paths.md`.
+4. **Report.** Emit one pass/fail line per file.
## Test
-- Every written rule file exists. Its scope frontmatter matches its reach, or is absent for an all-files rule.
+Every written rule file has one pass/fail result against both referenced contracts.
diff --git a/plugins/aidd-context/skills/05-rule-generate/references/rule-authoring.md b/plugins/aidd-context/skills/05-rule-generate/references/rule-authoring.md
index 9867cadf..5d40573b 100644
--- a/plugins/aidd-context/skills/05-rule-generate/references/rule-authoring.md
+++ b/plugins/aidd-context/skills/05-rule-generate/references/rule-authoring.md
@@ -8,6 +8,7 @@ The contract every generated rule must satisfy. A rule governs editor and agent
- **R2.** Bullets only, no prose. One ultra-short rule per bullet (3-7 words). Less is more.
- **R3.** Scope every rule to the files it applies to, or mark it as applying to all.
- **R4.** English only, regardless of conversation language.
+- **R5.** Do not add a rule bullet that repeats, weakens, or contradicts another active bullet in the same rule.
## File naming
diff --git a/plugins/aidd-context/skills/05-rule-generate/references/tool-paths.md b/plugins/aidd-context/skills/05-rule-generate/references/tool-paths.md
index 0aba68d9..30ad5810 100644
--- a/plugins/aidd-context/skills/05-rule-generate/references/tool-paths.md
+++ b/plugins/aidd-context/skills/05-rule-generate/references/tool-paths.md
@@ -12,7 +12,7 @@ The per-tool rules path and write targets. Rule slice only, nothing about skills
| OpenCode | - | no |
| Codex CLI | - | no |
-`` is the file name `#-slug` from `@references/rule-authoring.md` (e.g. `2-python-fstrings`). `` is that slug with its leading category digit dropped (`python-fstrings`). `` is the folder `-`, the zero-padded category index plus the category name from the taxonomy, e.g. `01-standards`. `` is that same two-digit index.
+`` is the file name `#-slug` from `@rule-authoring.md` (e.g. `2-python-fstrings`). `` is that slug with its leading category digit dropped (`python-fstrings`). `` is the folder `-`, the zero-padded category index plus the category name from the taxonomy, e.g. `01-standards`. `` is that same two-digit index.
Copilot is flat: no category folder. Its file is `-`, e.g. `2-python-fstrings` becomes `02-python-fstrings` (one category prefix, no folder).
diff --git a/plugins/aidd-context/skills/06-agent-generate/README.md b/plugins/aidd-context/skills/06-agent-generate/README.md
index a26fad72..8748dd26 100644
--- a/plugins/aidd-context/skills/06-agent-generate/README.md
+++ b/plugins/aidd-context/skills/06-agent-generate/README.md
@@ -1,6 +1,6 @@
← [aidd-framework](../../../../README.md) / [aidd-context](../../README.md)
-# 09 - agent-generate
+# 06 - agent-generate
Write one canonical subagent from intent and render it once per host AI tool, converting to each tool's shape (markdown, or Codex TOML). A sibling of `04-skill-generate` for the agent artifact.
diff --git a/plugins/aidd-context/skills/06-agent-generate/SKILL.md b/plugins/aidd-context/skills/06-agent-generate/SKILL.md
index bbebf4ee..ed658a19 100644
--- a/plugins/aidd-context/skills/06-agent-generate/SKILL.md
+++ b/plugins/aidd-context/skills/06-agent-generate/SKILL.md
@@ -1,6 +1,7 @@
---
name: 06-agent-generate
description: Generate an agent across the host AI tools a project uses. Use when the user wants to create, scaffold, or refactor an agent, subagent or specialized role. Not for other artifacts like skills, rules, commands, hooks.
+argument-hint: capture-agent | write-agent | validate
---
# Agent Generate
diff --git a/plugins/aidd-context/skills/06-agent-generate/actions/01-capture-agent.md b/plugins/aidd-context/skills/06-agent-generate/actions/01-capture-agent.md
index 1db4e78c..bf34342b 100644
--- a/plugins/aidd-context/skills/06-agent-generate/actions/01-capture-agent.md
+++ b/plugins/aidd-context/skills/06-agent-generate/actions/01-capture-agent.md
@@ -8,14 +8,14 @@ A free-form description of the agent's purpose, tools, and instructions.
## Output
-In-context: the role and its system prompt, three proposed names, the model, a quality score, and the write mode (host with confirmed tools, or plugin source).
+In-context: the role and its system prompt, the chosen name, the model, a quality score, and the write mode (host with confirmed tools, or plugin source).
## Process
1. **Gate.** Run the asset-access precheck (`@../references/tool-paths.md`).
-2. **Clarify.** Ask about the purpose, tools, inputs, and instructions. If anything stays vague, ask again before moving on.
+2. **Clarify.** Ask about the purpose, tools, inputs, instructions, and preferred model. If anything stays vague, ask again before moving on.
3. **Draft.** Write the canonical role (`@../references/agent-authoring.md`): a frontmatter intent + a system-prompt body. Include only the optional and orchestration sections it needs.
-4. **Name.** Propose three short, catchy names that fit the purpose.
+4. **Name.** Propose three short, catchy names that fit the purpose, and have the user pick one.
5. **Score.** Rate the agent 1-10 on clarity and completeness. If it scores under 8, revise and score again.
6. **Mode.** Ask where the agent goes:
- **Host project**: detect the installed tools (`@../references/tool-paths.md`), propose them, and confirm which to target.
@@ -23,5 +23,5 @@ In-context: the role and its system prompt, three proposed names, the model, a q
## Test
-- The role, names, model, and score are stated and confirmed in writing.
+- The role, name, model, and score are stated and confirmed in writing.
- The score is at least 8 before writing.
diff --git a/plugins/aidd-context/skills/06-agent-generate/assets/agent-template.md b/plugins/aidd-context/skills/06-agent-generate/assets/agent-template.md
index 77152f8f..e3c19a16 100644
--- a/plugins/aidd-context/skills/06-agent-generate/assets/agent-template.md
+++ b/plugins/aidd-context/skills/06-agent-generate/assets/agent-template.md
@@ -16,7 +16,7 @@ model: # optional, per tool-paths.md
# Inputs: what it receives when invoked
# Outputs: what it returns
# Guardrails: what it must never do
-# Skills you may invoke: other skills it may run, named by description, never a hardcoded plugin name
+# Skills you may invoke: a same-plugin skill by its plugin:folder address, a cross-plugin skill by capability
For an orchestration agent only: # Definition of Ready, # Definition of Done, # Decisions in scope, # Decisions out of scope, # Handoffs. See references/agent-authoring.md.
-->
diff --git a/plugins/aidd-context/skills/06-agent-generate/references/agent-authoring.md b/plugins/aidd-context/skills/06-agent-generate/references/agent-authoring.md
index 20728d5d..28fae750 100644
--- a/plugins/aidd-context/skills/06-agent-generate/references/agent-authoring.md
+++ b/plugins/aidd-context/skills/06-agent-generate/references/agent-authoring.md
@@ -12,7 +12,7 @@ The contract every generated agent must satisfy. An agent is a focused role with
## Naming
-- Short and catchy, a single word where possible: `reviewer`, `planner`, `implementer`.
+- Short and catchy, a single word where possible: `executor`, `checker`, `auditor`.
- Fits the role at a glance. Propose three options for the user to pick.
## Body shape
@@ -22,7 +22,7 @@ Short imperative sentences. Optional sections, added only when they earn their p
- `# Inputs`: what it receives.
- `# Outputs`: what it returns.
- `# Guardrails`: what it must never do.
-- `# Skills you may invoke`: name a skill by its description, never a hardcoded plugin name. The agent discovers it at runtime.
+- `# Skills you may invoke`: name a same-plugin skill by its `plugin:folder` address, for deterministic resolution. Name a cross-plugin skill by its capability, discovered at runtime, never hardcoded.
- `# Definition of Ready` / `# Definition of Done`: start and finish gates.
- `# Decisions in scope` / `# Decisions out of scope`: what it may decide, what it must defer.
- `# Handoffs`: who it returns to.
diff --git a/plugins/aidd-context/skills/06-agent-generate/references/tool-paths.md b/plugins/aidd-context/skills/06-agent-generate/references/tool-paths.md
index bdab55e7..5ca7a125 100644
--- a/plugins/aidd-context/skills/06-agent-generate/references/tool-paths.md
+++ b/plugins/aidd-context/skills/06-agent-generate/references/tool-paths.md
@@ -30,7 +30,7 @@ The canonical agent carries `name`, `description`, `model`. Emit those a row acc
Codex agents are TOML, not markdown. Convert:
-- Each frontmatter field becomes a top-level TOML key. Quote every string value with `'single quotes'` so a quote or apostrophe in the description stays valid TOML.
+- Each frontmatter field becomes a top-level TOML key. Quote every string value with `"double quotes"` (a TOML basic string) and escape any embedded `"` or backslash, so a quote or apostrophe in the description stays valid TOML.
- The body becomes `developer_instructions`, wrapped in `'''` literal delimiters (no escaping of the markdown).
- Drop `model`.
diff --git a/plugins/aidd-context/skills/07-command-generate/README.md b/plugins/aidd-context/skills/07-command-generate/README.md
index 8fe6196d..efd2bddf 100644
--- a/plugins/aidd-context/skills/07-command-generate/README.md
+++ b/plugins/aidd-context/skills/07-command-generate/README.md
@@ -1,6 +1,6 @@
← [aidd-framework](../../../../README.md) / [aidd-context](../../README.md)
-# 10 - command-generate
+# 07 - command-generate
Write one canonical slash command from intent and render it once per host AI tool that supports commands. A sibling of `04-skill-generate` for the command artifact.
diff --git a/plugins/aidd-context/skills/07-command-generate/SKILL.md b/plugins/aidd-context/skills/07-command-generate/SKILL.md
index f0d40d02..6f349a3d 100644
--- a/plugins/aidd-context/skills/07-command-generate/SKILL.md
+++ b/plugins/aidd-context/skills/07-command-generate/SKILL.md
@@ -1,6 +1,7 @@
---
name: 07-command-generate
description: Generate a flat slash command across the host AI tools a project uses. Use when the user wants to create, scaffold, or refactor a one-shot slash command. Not for multi-step skills or other artifacts like rules, agents, hooks.
+argument-hint: capture-command | write-command | validate
---
# Command Generate
diff --git a/plugins/aidd-context/skills/07-command-generate/references/tool-paths.md b/plugins/aidd-context/skills/07-command-generate/references/tool-paths.md
index c8fe5c41..663455b0 100644
--- a/plugins/aidd-context/skills/07-command-generate/references/tool-paths.md
+++ b/plugins/aidd-context/skills/07-command-generate/references/tool-paths.md
@@ -6,8 +6,6 @@ The per-tool command path and write targets. Command slice only, nothing about s
| Tool | Path | Supported |
| -------------- | ------------------------------------------- | ------------------------------------ |
-| Tool | Path | Supported |
-| -------------- | ----------------------------------------- | ------------------------------------ |
| Claude Code | `.claude/commands//.md` | yes |
| Cursor | `.cursor/commands//.md` | yes (plain markdown, no frontmatter) |
| OpenCode | `.opencode/commands//.md` | yes |
diff --git a/plugins/aidd-context/skills/08-hook-generate/SKILL.md b/plugins/aidd-context/skills/08-hook-generate/SKILL.md
index 07769648..d1648418 100644
--- a/plugins/aidd-context/skills/08-hook-generate/SKILL.md
+++ b/plugins/aidd-context/skills/08-hook-generate/SKILL.md
@@ -1,6 +1,7 @@
---
name: 08-hook-generate
-description: Generate a hook (a handler that runs automatically at a lifecycle event) across the host AI tools a project uses. Use when the user wants to create, scaffold, or refactor a hook, or automate an action at a lifecycle point. Not for other artifacts like skills, rules, agents, commands.
+description: Generate a hook, a handler that runs at a lifecycle event, across the host AI tools. Use when the user wants to create, scaffold, or refactor a hook, or automate an action at a lifecycle point. Not for other artifacts like skills or rules.
+argument-hint: capture-hook | write-hook | validate
---
# Hook Generate
diff --git a/plugins/aidd-context/skills/08-hook-generate/references/hook-authoring.md b/plugins/aidd-context/skills/08-hook-generate/references/hook-authoring.md
index 4ccbd4a1..8a8d4eca 100644
--- a/plugins/aidd-context/skills/08-hook-generate/references/hook-authoring.md
+++ b/plugins/aidd-context/skills/08-hook-generate/references/hook-authoring.md
@@ -14,7 +14,7 @@ The contract every generated hook must satisfy. A hook is a handler wired to a l
## Lifecycle moments
-The agnostic moments a hook can target. Each tool names these differently and supports a different subset. The mapping and the gaps live in `references/tool-paths.md`.
+The agnostic moments a hook can target. Each tool names these differently and supports a different subset. `references/tool-paths.md` maps the commonly supported moments to each tool's event name; a moment absent from that table has no dedicated cross-tool event, so fold it into the nearest supported moment.
| Moment | Fires when |
| ------------------- | --------------------------------------------------- |
diff --git a/plugins/aidd-context/skills/09-mermaid/SKILL.md b/plugins/aidd-context/skills/09-mermaid/SKILL.md
index 34a35d57..b615b3c1 100644
--- a/plugins/aidd-context/skills/09-mermaid/SKILL.md
+++ b/plugins/aidd-context/skills/09-mermaid/SKILL.md
@@ -1,6 +1,6 @@
---
name: 09-mermaid
-description: Generate a valid, high-quality Mermaid diagram from a written source through a plan, confirm, generate, review loop. Use when the user wants to turn an architecture, lifecycle, or flow description into a Mermaid diagram, or when another skill needs one. Not for other diagram formats like PlantUML or Graphviz, or for rendering a diagram to an image.
+description: Generate a valid Mermaid diagram from a written source through a plan, generate, review loop. Use when the user wants to turn an architecture, lifecycle, or flow into a Mermaid diagram. Not for other diagram formats or image rendering.
---
# Mermaid
diff --git a/plugins/aidd-context/skills/09-mermaid/actions/01-mermaid.md b/plugins/aidd-context/skills/09-mermaid/actions/01-mermaid.md
index bcb94d8f..9ea04c44 100644
--- a/plugins/aidd-context/skills/09-mermaid/actions/01-mermaid.md
+++ b/plugins/aidd-context/skills/09-mermaid/actions/01-mermaid.md
@@ -17,7 +17,7 @@ A Mermaid diagram in a fenced block, plus an optional review note. On the first
3. **Confirm.** Ask the user to confirm the plan. Block on the answer.
4. **Generate.** Produce a valid Mermaid diagram from the confirmed plan, following the conventions and defaults in `@../references/mermaid-conventions.md`.
5. **Offer a review.** Ask whether the user wants a review, and wait.
-6. **Review on confirm.** Check the syntax, look for an empty or misplaced node, and suggest improvements. Never add an element that was not in the confirmed plan.
+6. **Review on confirm.** Check the syntax, look for an empty or misplaced node, and suggest improvements.
## Test
diff --git a/plugins/aidd-context/skills/10-learn/SKILL.md b/plugins/aidd-context/skills/10-learn/SKILL.md
index 2abbab67..a9e04f4f 100644
--- a/plugins/aidd-context/skills/10-learn/SKILL.md
+++ b/plugins/aidd-context/skills/10-learn/SKILL.md
@@ -1,6 +1,7 @@
---
name: 10-learn
-description: Capture durable project learnings from the conversation or the project's git history and route them to memory, a decision record, a rule, or a new skill. Use when the user asks to capture, record, or remember a decision, a convention, or a lesson, or to distill what recent work taught. Scores each candidate and confirms before writing. Not for personal or AI preferences, routine edits, or anything already captured.
+description: Capture durable project learnings from the conversation or git history into memory, a record, a rule, or a skill. Use when the user asks to capture, record, or remember a decision or lesson. Not for AI preferences or already-captured items.
+argument-hint: gather | assess | write | sync
---
# Learn
diff --git a/plugins/aidd-context/skills/10-learn/actions/02-assess.md b/plugins/aidd-context/skills/10-learn/actions/02-assess.md
index 9def3fc0..a63fd816 100644
--- a/plugins/aidd-context/skills/10-learn/actions/02-assess.md
+++ b/plugins/aidd-context/skills/10-learn/actions/02-assess.md
@@ -14,7 +14,8 @@ A plan the user has approved: the lessons to keep, each with its destination.
1. **Score.** Give each candidate a relevance score from 0 to 10 with a one-line reason. Weigh how durable it is, how far it generalizes beyond this task, and whether it extends or contradicts existing context.
2. **Propose and reconcile.** For each candidate, name the destination it fits (Memory, Decision, Rule, or Skill, see the skill's Destinations). Then read that destination's current content and classify the candidate against it: new, already covered, or a change to what is there. A reworded repeat of something already captured is already covered, not a new lesson, even when the existing wording differs. A candidate that reverses an existing entry supersedes it.
-3. **Ask.** Show the candidates sorted by score, each with its score, reason, destination, and how it reconciles (new, already covered, or supersedes). Recommend the bar at 6 of 10 and recommend skipping the already-covered ones. For every candidate, let the user keep it, move it to another destination, or skip it. Write nothing anywhere until the user has decided. Block on the answer.
+3. **Show.** Show the candidates sorted by score, each with its reason, destination, and reconciliation (new, already covered, or supersedes). Recommend the bar at 6 of 10 and skipping the already-covered.
+4. **Decide.** Let the user keep, redirect, or skip each. Write nothing until they decide; block on the answer.
## Test
diff --git a/plugins/aidd-context/skills/10-learn/actions/03-write.md b/plugins/aidd-context/skills/10-learn/actions/03-write.md
index b9558365..eca8e2c1 100644
--- a/plugins/aidd-context/skills/10-learn/actions/03-write.md
+++ b/plugins/aidd-context/skills/10-learn/actions/03-write.md
@@ -13,7 +13,7 @@ The created or updated files, and a summary table.
## Process
1. **Write by destination:**
- - **Memory.** Update the matching memory file at the root of the bank. Touch only the relevant section, and replace an entry the lesson supersedes rather than adding a contradicting one. Preserve the user's edits.
+ - **Memory.** Update the matching memory file at the root of the bank. Touch only the relevant section, and replace an entry the lesson supersedes rather than adding a contradicting one.
- **Decision.** Write a record in `aidd_docs/memory/internal/decisions/` from `@../assets/decision-template.md`, named by a short slug. Create the folder if absent.
- **Rule.** Hand the convention to the rule generator. Never write a rule file here.
- **Skill.** Hand the intent to the skill generator. Never write a skill file here.
diff --git a/plugins/aidd-context/skills/10-learn/actions/04-sync.md b/plugins/aidd-context/skills/10-learn/actions/04-sync.md
index 44f74ade..131e158a 100644
--- a/plugins/aidd-context/skills/10-learn/actions/04-sync.md
+++ b/plugins/aidd-context/skills/10-learn/actions/04-sync.md
@@ -14,7 +14,7 @@ Each memory block lists the current memory files, and the memory index is refres
1. **Run.** Execute the memory-sync script (`update_memory.js` in the plugin's `hooks/`) to inject the references and refresh the memory index.
2. **Guard.** On a non-zero exit, print the error and stop. Tell the user to confirm the memory bank holds a file and that `node` is available.
-3. **Report.** Print how many context files were updated and how many references went into each block.
+3. **Report.** Print which context files were updated and the references that went into each block.
## Test
diff --git a/plugins/aidd-context/skills/11-explore/SKILL.md b/plugins/aidd-context/skills/11-explore/SKILL.md
index d7558dd2..5ad5ffd7 100644
--- a/plugins/aidd-context/skills/11-explore/SKILL.md
+++ b/plugins/aidd-context/skills/11-explore/SKILL.md
@@ -1,6 +1,7 @@
---
name: 11-explore
-description: Explore the current project across its tooling, context, and codebase. Use to survey what is installed and set up, see what is available, or find which installed skill, agent, or rule fits a goal. Not for the next step to take (onboard does that) or running an item (this skill only points).
+description: Explore the current project across its tooling, context, and codebase. Use to survey what is installed, see what is available, or find which skill, agent, or rule fits a goal. Not for choosing the next step or running an item; it only points.
+argument-hint: survey | drill
---
# Explore
diff --git a/plugins/aidd-context/skills/11-explore/actions/01-survey.md b/plugins/aidd-context/skills/11-explore/actions/01-survey.md
index 502c1009..8b868871 100644
--- a/plugins/aidd-context/skills/11-explore/actions/01-survey.md
+++ b/plugins/aidd-context/skills/11-explore/actions/01-survey.md
@@ -12,12 +12,12 @@ A map grouped by axis, Tooling, Context, and Codebase. Each axis lists what is t
## Process
-1. **Detect the tools.** Find which AI tools the project uses from the signals in `@../references/ai-mapping.md`. Propose the set when it is ambiguous, never assume one silently.
-2. **Scan Tooling.** For each detected tool, gather the installed skills, agents, commands, rules, hooks, MCP servers, and plugins from the surfaces in `@../references/ai-mapping.md`. A surface a tool does not have is skipped, never an error.
+1. **Detect the tools.** Find which AI tools the project uses by the presence signal in `@../references/ai-mapping.md`, keying on a tool's own mapped surfaces, never a shared parent directory. Propose the set when it is ambiguous, never assume one silently.
+2. **Scan Tooling.** For each detected tool, gather the installed skills, agents, commands, rules, hooks, MCP servers, and plugins from the surfaces in `@../references/ai-mapping.md`.
3. **Scan Context.** The memory bank under `aidd_docs/memory/` and whether its files are filled, any specs or plans under `aidd_docs/`, and whether the AI context files carry the `` block.
4. **Scan Codebase.** The stack, from the manifest or from the memory bank, and the few top-level modules or layers.
-5. **Present the map.** One section per axis, each a short list or count with one-line purposes. No next-step advice, that belongs to the onboard skill.
-6. **Propose to dig in.** Offer the three axes or all, and hand the pick to `02-drill`. Never assume one. Wait for the answer.
+5. **Present the map.** One section per axis, each a short list or count with one-line purposes.
+6. **Propose to dig in.** Offer the three axes or all, and hand the pick to `02-drill`. Wait for the answer.
## Test
diff --git a/plugins/aidd-context/skills/11-explore/references/ai-mapping.md b/plugins/aidd-context/skills/11-explore/references/ai-mapping.md
index fb30d65f..388337fb 100644
--- a/plugins/aidd-context/skills/11-explore/references/ai-mapping.md
+++ b/plugins/aidd-context/skills/11-explore/references/ai-mapping.md
@@ -2,6 +2,10 @@
Where to look for each artifact type per AI tool. Scan-only: the paths and formats the survey and drill actions read. This is explore's own minimal map, the single source of per-tool surfaces. Actions never hardcode a tool.
+## Presence signal
+
+A tool is present only when one of its own mapped surfaces below holds a file. A shared parent directory is never a signal by itself.
+
## AI quick map - content artifacts
| AI | Agents | Commands / Prompts | Rules | Skills | Context file |
diff --git a/plugins/aidd-context/skills/12-cook/SKILL.md b/plugins/aidd-context/skills/12-cook/SKILL.md
index e0b61a88..81ec2230 100644
--- a/plugins/aidd-context/skills/12-cook/SKILL.md
+++ b/plugins/aidd-context/skills/12-cook/SKILL.md
@@ -1,6 +1,7 @@
---
name: 12-cook
-description: Manage the project's recipes/ how-to sheets: list them as a table, or create and update one from the canonical template. Use for "list recipes", "new recipe", "update a recipe", "cook a recipe".
+description: Manage the project's recipes and how-to sheets. List them as a table, or create and update one from the canonical template. Use when the user wants to list, create, update, or cook a recipe.
+argument-hint: list | upsert
---
# Cook
diff --git a/plugins/aidd-context/skills/12-cook/actions/02-upsert.md b/plugins/aidd-context/skills/12-cook/actions/02-upsert.md
index 62e87015..c7e681e5 100644
--- a/plugins/aidd-context/skills/12-cook/actions/02-upsert.md
+++ b/plugins/aidd-context/skills/12-cook/actions/02-upsert.md
@@ -1,11 +1,15 @@
# 02 - Upsert recipe
-Create or update one recipe at `recipes/.md`, scaffolded from `@assets/recipe-template.md`.
+Create or update one recipe at `recipes/.md`, scaffolded from `@../assets/recipe-template.md`.
## Input
The recipe topic. Ask for any missing field (level, time, prerequisites, steps, verify, related) before writing.
+## Output
+
+The recipe file at `recipes/.md`, filled from the template, with its row added or refreshed in `recipes/README.md`.
+
## Process
1. Derive a kebab-case `` from the topic → `recipes/.md`.
@@ -15,3 +19,4 @@ The recipe topic. Ask for any missing field (level, time, prerequisites, steps,
## Test
- `recipes/.md` exists and matches the template, every section present, no `<...>` placeholder left.
+- `recipes/README.md` carries a row for ``: its title linked, plus the goal and level.
diff --git a/plugins/aidd-context/skills/12-cook/assets/recipe-template.md b/plugins/aidd-context/skills/12-cook/assets/recipe-template.md
index cdf37fd3..278237ca 100644
--- a/plugins/aidd-context/skills/12-cook/assets/recipe-template.md
+++ b/plugins/aidd-context/skills/12-cook/assets/recipe-template.md
@@ -16,9 +16,9 @@
## Steps
-1. 📋 **** —
-2. 🔧 **** —
-3. ✅ **** —
+1. 📋 ****:
+2. 🔧 ****:
+3. ✅ ****:
## Verify
diff --git a/plugins/aidd-dev/.claude-plugin/plugin.json b/plugins/aidd-dev/.claude-plugin/plugin.json
index a851b8ae..3518598f 100644
--- a/plugins/aidd-dev/.claude-plugin/plugin.json
+++ b/plugins/aidd-dev/.claude-plugin/plugin.json
@@ -21,9 +21,8 @@
"./skills/10-todo"
],
"agents": [
- "./agents/implementer.md",
- "./agents/planner.md",
- "./agents/reviewer.md"
+ "./agents/executor.md",
+ "./agents/checker.md"
],
"keywords": [
"sdlc",
diff --git a/plugins/aidd-dev/CATALOG.md b/plugins/aidd-dev/CATALOG.md
index ec41b86e..3841384c 100644
--- a/plugins/aidd-dev/CATALOG.md
+++ b/plugins/aidd-dev/CATALOG.md
@@ -33,9 +33,8 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| File | Description |
|------|---|
-| [implementer.md](agents/implementer.md) | `Milestone executor. Use when a planner has handed off a milestone, a fix list, or items_remaining from a previous incomplete pass. Codes, tests, repairs. Returns what's done, what's remaining, and a completion score. Never replans, never judges.` |
-| [planner.md](agents/planner.md) | `Planning agent. Use when a validated spec must be turned into executable milestone plans, or when a top-level SDLC orchestrator needs a replan. Writes plans and decisions only. Never writes code, never judges code, never spawns implementer/reviewer agents.` |
-| [reviewer.md](agents/reviewer.md) | `Independent critic in fresh context. Use when an artifact (code, spec, plan, doc) needs verification against a validator (acceptance criteria, checklist file, or any explicit ruleset). Returns reviewed items, findings, completion score and quality score. Never edits the artifact, never decides what to do next.` |
+| [checker.md](agents/checker.md) | `Judges finished work against its validator and the real need, leaving nothing unchecked. Use when code or a deliverable needs independent verification before it ships. Never edits the work, never implements the fix.` |
+| [executor.md](agents/executor.md) | `Turns a dispatched task into working, validated code that fits the project. Use when an approved scope must become code. Never plans, never judges its own work.` |
### `skills`
@@ -49,31 +48,33 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `actions` | [04-review.md](skills/00-sdlc/actions/04-review.md) | - |
| `actions` | [05-ship.md](skills/00-sdlc/actions/05-ship.md) | - |
| `-` | [README.md](skills/00-sdlc/README.md) | - |
-| `-` | [SKILL.md](skills/00-sdlc/SKILL.md) | `Pure orchestrator for the full AIDD development flow. Use when a human (or Gardener) needs to take a free-form request from idea to shipped code, end-to-end. Coordinates spec generation, planning, implementation, review, and shipping by composing other skills and agents. Supports two modes - `auto` (default, no human interaction) and `interactive` (pauses for human confirmation at key gates). Holds no business logic of its own; every step is delegated.` |
+| `-` | [SKILL.md](skills/00-sdlc/SKILL.md) | `Orchestrate the full dev flow, a free-form request to shipped code, every step delegated. Use to take a request end to end, not a single step. Interactive by default; say auto for unattended.` |
#### `skills/01-plan`
-| Group | File | Description | Argument Hint |
-|-------|------|---|---|
-| `actions` | [01-plan.md](skills/01-plan/actions/01-plan.md) | - | - |
-| `actions` | [02-components-behavior.md](skills/01-plan/actions/02-components-behavior.md) | - | - |
-| `actions` | [03-image-extract-details.md](skills/01-plan/actions/03-image-extract-details.md) | - | - |
-| `assets` | [master-plan-template.md](skills/01-plan/assets/master-plan-template.md) | `Parent plan template orchestrating multiple child plans with validation gates` | - |
-| `assets` | [plan-template.md](skills/01-plan/assets/plan-template.md) | `Living implementation plan - frozen objective, phases, and acceptance criteria.` | - |
-| `assets` | [tech-choice-template.md](skills/01-plan/assets/tech-choice-template.md) | `Technology selection and comparison template` | - |
-| `-` | [README.md](skills/01-plan/README.md) | - | - |
-| `references` | [mermaid-conventions.md](skills/01-plan/references/mermaid-conventions.md) | `Rules for generating valid, high-quality Mermaid diagrams. Apply when creating or reviewing any Mermaid diagram (flowchart, state, ER, sequence, gantt).` | - |
-| `references` | [plan-status.md](skills/01-plan/references/plan-status.md) | `Plan lifecycle status field - values, meaning, who writes each, and when.` | - |
-| `-` | [SKILL.md](skills/01-plan/SKILL.md) | `Generate technical implementation plans, define component behaviors, and extract design details from images.` | - |
+| Group | File | Description |
+|-------|------|---|
+| `actions` | [01-gather.md](skills/01-plan/actions/01-gather.md) | - |
+| `actions` | [02-explore.md](skills/01-plan/actions/02-explore.md) | - |
+| `actions` | [03-wireframe.md](skills/01-plan/actions/03-wireframe.md) | - |
+| `actions` | [04-plan.md](skills/01-plan/actions/04-plan.md) | - |
+| `assets` | [phase-template.md](skills/01-plan/assets/phase-template.md) | - |
+| `assets` | [plan-template.md](skills/01-plan/assets/plan-template.md) | - |
+| `-` | [README.md](skills/01-plan/README.md) | - |
+| `references` | [plan-status.md](skills/01-plan/references/plan-status.md) | `Plan lifecycle status field - values, meaning, who writes each, and when.` |
+| `references` | [wireframe-conventions.md](skills/01-plan/references/wireframe-conventions.md) | - |
+| `-` | [SKILL.md](skills/01-plan/SKILL.md) | `Turn a request, ticket, or file into a phased implementation plan. Use to plan a feature before building, or to turn a ticket into phases. Do NOT use to write code or review a diff.` |
#### `skills/02-implement`
| Group | File | Description |
|-------|------|---|
-| `actions` | [01-implement.md](skills/02-implement/actions/01-implement.md) | - |
+| `actions` | [01-prepare.md](skills/02-implement/actions/01-prepare.md) | - |
+| `actions` | [02-execute.md](skills/02-implement/actions/02-execute.md) | - |
+| `actions` | [03-finalize.md](skills/02-implement/actions/03-finalize.md) | - |
| `-` | [README.md](skills/02-implement/README.md) | - |
| `references` | [blocked.md](skills/02-implement/references/blocked.md) | `Conditions that make a plan blocked (needs a human).` |
-| `-` | [SKILL.md](skills/02-implement/SKILL.md) | `Execute an implementation plan phase by phase via the implementer agent, iterating until 100% completeness.` |
+| `-` | [SKILL.md](skills/02-implement/SKILL.md) | `Write an existing plan's code, phase by phase, until every acceptance criterion holds. Use when a plan exists and needs implementing. Do NOT use to write a plan, review a diff.` |
#### `skills/03-assert`
@@ -82,35 +83,36 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `actions` | [01-assert.md](skills/03-assert/actions/01-assert.md) | - |
| `actions` | [02-assert-architecture.md](skills/03-assert/actions/02-assert-architecture.md) | - |
| `actions` | [03-assert-frontend.md](skills/03-assert/actions/03-assert-frontend.md) | - |
-| `assets` | [task-template.md](skills/03-assert/assets/task-template.md) | `Task tracking system to ensure all tasks are categorized and addressed` |
+| `assets` | [task-template.md](skills/03-assert/assets/task-template.md) | - |
| `-` | [README.md](skills/03-assert/README.md) | - |
-| `-` | [SKILL.md](skills/03-assert/SKILL.md) | `Assert features work as intended - general assertions, architecture conformance, and frontend UI validation.` |
+| `-` | [SKILL.md](skills/03-assert/SKILL.md) | `Assert the work behaves by iterating the project's coding assertions until they pass, plus optional architecture and frontend facets. Use to validate an implementation. Not for reviewing or writing tests.` |
#### `skills/04-audit`
-| Group | File | Description | Argument Hint |
-|-------|------|---|---|
-| `actions` | [01-code-quality.md](skills/04-audit/actions/01-code-quality.md) | - | - |
-| `actions` | [02-architecture.md](skills/04-audit/actions/02-architecture.md) | - | - |
-| `actions` | [03-security.md](skills/04-audit/actions/03-security.md) | - | - |
-| `actions` | [04-dependencies.md](skills/04-audit/actions/04-dependencies.md) | - | - |
-| `actions` | [05-performance.md](skills/04-audit/actions/05-performance.md) | - | - |
-| `actions` | [06-tests.md](skills/04-audit/actions/06-tests.md) | - | - |
-| `actions` | [07-ui.md](skills/04-audit/actions/07-ui.md) | - | - |
-| `assets` | [audit-template.md](skills/04-audit/assets/audit-template.md) | `Codebase audit report template` | - |
-| `-` | [README.md](skills/04-audit/README.md) | - | - |
-| `-` | [SKILL.md](skills/04-audit/SKILL.md) | `Read-only codebase audit across quality pillars (code-quality, architecture, security, dependencies, performance, tests, ui). Diagnoses and reports findings; never edits code. Use when the user wants to assess, audit, or health-check a codebase or one dimension of it, then hands off to the act-skills (refactor, test, impeccable) to fix. Do NOT use for fixing the findings (hand off to refactor/test/impeccable), per-PR code review (use 05-review), or validating that a feature works (use 03-assert).` | - |
+| Group | File | Description |
+|-------|------|---|
+| `actions` | [01-code-quality.md](skills/04-audit/actions/01-code-quality.md) | - |
+| `actions` | [02-architecture.md](skills/04-audit/actions/02-architecture.md) | - |
+| `actions` | [03-security.md](skills/04-audit/actions/03-security.md) | - |
+| `actions` | [04-dependencies.md](skills/04-audit/actions/04-dependencies.md) | - |
+| `actions` | [05-performance.md](skills/04-audit/actions/05-performance.md) | - |
+| `actions` | [06-tests.md](skills/04-audit/actions/06-tests.md) | - |
+| `actions` | [07-ui.md](skills/04-audit/actions/07-ui.md) | - |
+| `assets` | [audit-template.md](skills/04-audit/assets/audit-template.md) | `Codebase audit report template` |
+| `-` | [README.md](skills/04-audit/README.md) | - |
+| `-` | [SKILL.md](skills/04-audit/SKILL.md) | `Audit a codebase read-only across seven quality pillars into one ranked report. Use when the user wants to assess, health-check, or audit a codebase or one pillar. Not for fixing findings, reviewing a change, or checking a feature works.` |
#### `skills/05-review`
-| Group | File | Description | Argument Hint |
-|-------|------|---|---|
-| `actions` | [01-review-code.md](skills/05-review/actions/01-review-code.md) | - | - |
-| `actions` | [02-review-functional.md](skills/05-review/actions/02-review-functional.md) | - | - |
-| `assets` | [review-code-template.md](skills/05-review/assets/review-code-template.md) | `Code review report template for a diff` | - |
-| `assets` | [review-functional-template.md](skills/05-review/assets/review-functional-template.md) | `Functional review report template for a diff against a plan` | - |
-| `-` | [README.md](skills/05-review/README.md) | - | - |
-| `-` | [SKILL.md](skills/05-review/SKILL.md) | `Read-only review of a diff (a PR or working changes) - code quality against project rules, and feature behavior against the plan's acceptance criteria. Surfaces findings with a verdict; never patches. Use to review changes in progress. Do NOT use for a whole-codebase health check (use 04-audit), fixing the findings (hand off to 07-refactor / 02-implement / 08-debug), or validating a feature runs (use 03-assert).` | - |
+| Group | File | Description |
+|-------|------|---|
+| `actions` | [01-review-code.md](skills/05-review/actions/01-review-code.md) | - |
+| `actions` | [02-review-functional.md](skills/05-review/actions/02-review-functional.md) | - |
+| `actions` | [03-review-relevancy.md](skills/05-review/actions/03-review-relevancy.md) | - |
+| `assets` | [review-template.md](skills/05-review/assets/review-template.md) | - |
+| `-` | [README.md](skills/05-review/README.md) | - |
+| `references` | [review-rubric.md](skills/05-review/references/review-rubric.md) | - |
+| `-` | [SKILL.md](skills/05-review/SKILL.md) | `Review a diff read-only on three axes, code, behavior versus the plan, and relevancy, into one verdict report. Use before shipping a change. Not for fixing findings or auditing a codebase.` |
#### `skills/06-test`
@@ -119,7 +121,7 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `actions` | [01-test.md](skills/06-test/actions/01-test.md) | - |
| `actions` | [02-test-journey.md](skills/06-test/actions/02-test-journey.md) | - |
| `-` | [README.md](skills/06-test/README.md) | - |
-| `-` | [SKILL.md](skills/06-test/SKILL.md) | `Write and iterate on tests until they pass, and validate user journeys end-to-end in the browser.` |
+| `-` | [SKILL.md](skills/06-test/SKILL.md) | `Write and iterate tests until they pass, or validate a user journey end to end in the browser. Use when the user wants to add coverage, find what's untested, or walk a flow. Not for auditing test health or debugging a failure.` |
#### `skills/07-refactor`
@@ -130,7 +132,7 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `actions` | [03-cleanup.md](skills/07-refactor/actions/03-cleanup.md) | - |
| `actions` | [04-architecture.md](skills/07-refactor/actions/04-architecture.md) | - |
| `-` | [README.md](skills/07-refactor/README.md) | - |
-| `-` | [SKILL.md](skills/07-refactor/SKILL.md) | `Improve code without breaking behavior across four axes - cleanup (clean-code + tech debt), performance, security, architecture. Scans and fixes, or fixes the findings of an audit report pushed in by the caller. Use when the user wants to refactor, clean up, optimize, harden, or restructure code. Do NOT use for read-only diagnosis (use 04-audit), adding tests (use 06-test), or UI redesign (use the impeccable skill).` |
+| `-` | [SKILL.md](skills/07-refactor/SKILL.md) | `Improve code across four axes (cleanup, performance, security, architecture) by scanning and fixing, or applying a pushed audit report. Use when the user wants to refactor, optimize, harden, or remove code. Not for read-only diagnosis or adding tests.` |
#### `skills/08-debug`
@@ -142,18 +144,20 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
| `assets` | [task-template.md](skills/08-debug/assets/task-template.md) | `Task tracking system to ensure all tasks are categorized and addressed` |
| `-` | [README.md](skills/08-debug/README.md) | - |
| `references` | [mermaid-conventions.md](skills/08-debug/references/mermaid-conventions.md) | `Rules for generating valid, high-quality Mermaid diagrams. Apply when creating or reviewing any Mermaid diagram (flowchart, state, ER, sequence, gantt).` |
-| `-` | [SKILL.md](skills/08-debug/SKILL.md) | `Reproduce and fix bugs systematically using test-driven workflow, root cause analysis, and hypothesis validation.` |
+| `-` | [SKILL.md](skills/08-debug/SKILL.md) | `Reproduce and fix a known bug, or find an unknown root cause by hypothesis validation. Use when the user wants to fix a bug, find why something breaks, or reopen a stuck investigation. Not for building a feature or reviewing a diff.` |
#### `skills/09-for-sure`
-| Group | File | Description | Argument Hint |
-|-------|------|---|---|
-| `actions` | [01-init-tracking.md](skills/09-for-sure/actions/01-init-tracking.md) | - | - |
-| `actions` | [02-auto-accept.md](skills/09-for-sure/actions/02-auto-accept.md) | - | - |
-| `actions` | [03-autonomous-loop.md](skills/09-for-sure/actions/03-autonomous-loop.md) | - | - |
-| `assets` | [plan-template.md](skills/09-for-sure/assets/plan-template.md) | `For Sure autonomous-loop tracking file. Extends the 01-plan format with `success_condition` and `iteration` (For-Sure-only), which the loop runs and increments.` | - |
-| `-` | [README.md](skills/09-for-sure/README.md) | - | - |
-| `-` | [SKILL.md](skills/09-for-sure/SKILL.md) | `Iterative agent loop that tracks attempts and retries until a success condition is met. Use when the user says "for sure", "make sure", "keep trying until", "loop until done", "don't stop until", or needs guaranteed completion of a task with explicit success criteria.` | - |
+| Group | File | Description |
+|-------|------|---|
+| `actions` | [01-init-tracking.md](skills/09-for-sure/actions/01-init-tracking.md) | - |
+| `actions` | [02-auto-accept.md](skills/09-for-sure/actions/02-auto-accept.md) | - |
+| `actions` | [03-autonomous-loop.md](skills/09-for-sure/actions/03-autonomous-loop.md) | - |
+| `assets` | [autonomous-loop-worker-prompt.md](skills/09-for-sure/assets/autonomous-loop-worker-prompt.md) | - |
+| `assets` | [plan-template.md](skills/09-for-sure/assets/plan-template.md) | - |
+| `-` | [README.md](skills/09-for-sure/README.md) | - |
+| `references` | [autonomous-loop-log-format.md](skills/09-for-sure/references/autonomous-loop-log-format.md) | - |
+| `-` | [SKILL.md](skills/09-for-sure/SKILL.md) | `Run an iterative agent loop that retries until a runnable success condition passes. Use when the user says "for sure", "keep trying until", or wants guaranteed completion against a success command. Not for one-shot tasks or uncheckable goals.` |
#### `skills/10-todo`
@@ -161,5 +165,5 @@ Auto-generated index of skills, agents, references and assets shipped by the `ai
|-------|------|---|
| `actions` | [01-todo.md](skills/10-todo/actions/01-todo.md) | - |
| `-` | [README.md](skills/10-todo/README.md) | - |
-| `-` | [SKILL.md](skills/10-todo/SKILL.md) | `Split the user prompt into independent todos, run one implementer agent per todo in parallel (each refines its todo first), and report a minimal table. Use when the user says "todo", "/todo", or asks to fan out a multi-part request into parallel implementations.` |
+| `-` | [SKILL.md](skills/10-todo/SKILL.md) | `Split the user prompt into independent todos and run one executor agent per todo in parallel, then report a minimal table. Use when the user says "todo" or asks to fan out a multi-part request into parallel implementations.` |
diff --git a/plugins/aidd-dev/README.md b/plugins/aidd-dev/README.md
index 349b66e1..99939744 100644
--- a/plugins/aidd-dev/README.md
+++ b/plugins/aidd-dev/README.md
@@ -15,11 +15,11 @@ Covers the full SDLC coding loop: orchestrator, planning, implementation, assert
| Bracket ID | Skill | Description |
|---|---|---|
| [2.0] | [sdlc](skills/00-sdlc/README.md) | Dev SDLC orchestrator (code-shipping pipeline): spec, plan, implement, test, review, commit, PR. |
-| [2.1] | [plan](skills/01-plan/README.md) | Generate technical implementation plans, define component behaviors, and extract design details from images. |
-| [2.2] | [implement](skills/02-implement/README.md) | Execute an implementation plan phase by phase via the implementer agent, iterating until 100% completeness. |
+| [2.1] | [plan](skills/01-plan/README.md) | Turn a request, ticket, or file into a phased implementation plan, gathering the source first and optionally wireframing a screen before planning. |
+| [2.2] | [implement](skills/02-implement/README.md) | Execute an implementation plan phase by phase, recipe-style, iterating until 100% completeness. |
| [2.3] | [assert](skills/03-assert/README.md) | Assert features work as intended - general assertions, architecture conformance, and frontend UI validation. |
| [2.4] | [audit](skills/04-audit/README.md) | Perform deep codebase analysis to identify technical debt, dead code, and improvement opportunities. |
-| [2.5] | [review](skills/05-review/README.md) | Review code quality against project rules and validate feature behavior against plan specifications. |
+| [2.5] | [review](skills/05-review/README.md) | Review a diff along three axes: code quality, feature behavior against the plan, and relevancy (fit to the need, declared-rule conformance, no rot). |
| [2.6] | [test](skills/06-test/README.md) | Write and iterate on tests until they pass, and validate user journeys end-to-end in the browser. |
| [2.7] | [refactor](skills/07-refactor/README.md) | Optimize code for performance and fix security vulnerabilities following OWASP guidelines. |
| [2.8] | [debug](skills/08-debug/README.md) | Reproduce and fix bugs systematically using test-driven workflow, root cause analysis, and hypothesis validation. |
@@ -29,6 +29,5 @@ Covers the full SDLC coding loop: orchestrator, planning, implementation, assert
| Agent | Description |
|---|---|
-| planner | Orchestrator. Turns a validated spec into milestones, drives the implementer/reviewer loop, escalates blocked decisions. Never writes code, never judges code. |
-| implementer | Milestone executor. Codes, tests, repairs within the milestone scope. Commits atomically per ticked checkbox. Returns completion score. |
-| reviewer | Independent critic in fresh context. Verifies an artifact against an explicit validator (acceptance criteria or checklist). Returns findings, completion and quality scores. Never edits the artifact. |
+| executor | Dispatched doer in its own context. Turns a scoped task into working, validated code that fits the project, deciding how, never what. Never authors a plan, never judges its own work. |
+| checker | Independent critic in fresh context. Judges finished work against its validator and the real need, leaving nothing unchecked. Returns findings, scores, and a verdict. Never edits the work, never implements the fix. |
diff --git a/plugins/aidd-dev/agents/checker.md b/plugins/aidd-dev/agents/checker.md
new file mode 100644
index 00000000..6ed4cf32
--- /dev/null
+++ b/plugins/aidd-dev/agents/checker.md
@@ -0,0 +1,44 @@
+---
+name: checker
+description: Judges finished work against its validator and the real need, leaving nothing unchecked. Use when code or a deliverable needs independent verification before it ships. Never edits the work, never implements the fix.
+model: opus
+---
+
+# Role
+
+You are the checker. Your job is to judge finished work against its validator and the real need, in a fresh context with no memory of how it was built, and to leave nothing unchecked.
+
+# Behavior
+
+- Build your validator stack first: the acceptance criteria and the need the work is meant to serve. Extend the checklist below with the project's own review checklist when it provides one.
+- Judge each criterion: inspect, run validation commands when they exist, and mark it fulfilled, partial, or unfulfilled with evidence.
+- Run the checklist on every code or diff, leaving no item unchecked.
+- Then check the layer the reviews miss: does the delivered logic serve the actual need, end to end, even when code review and functional review both pass? Name any gap between intent and result.
+- Demand command output or file evidence, never bare claims. Lean strict: a false alarm costs less than a missed defect.
+- Return your verdict, findings, and score to whoever invoked you. Hold yourself accountable for whatever you pass.
+
+# Checklist
+
+This is the behavioral baseline. Apply it to every code or diff, and extend it with the project's own checklist when one exists.
+
+- [ ] No information duplication. DRY across code and docs; link to the canonical home instead of copying.
+- [ ] No incoherence or contradiction. Naming, behavior, and docs-versus-code stay consistent.
+- [ ] No over-engineering. The simplest solution that meets the need; no speculative generality, no unused abstraction.
+- [ ] No dead code or debug leftovers. No commented-out blocks, stray logs, or silent TODOs.
+
+# Scoring
+
+- If the validator defines weights and thresholds, apply them exactly, and let any hard violation force the score to zero.
+- Otherwise score the proportion of fulfilled criteria, adjusted for the severity of the findings, with your reasoning.
+- The pass threshold is the caller's gate, not yours. You report the score; you do not declare pass or fail.
+
+# Guardrails
+
+- Never edit the work or its validator. Never implement the fix. Never delegate to another agent.
+- Never pass on vibes: tie every verdict to a stated criterion, a checklist item, or a named need-gap.
+- Flag an ambiguous criterion instead of guessing. Do not go easy because the work looks impressive.
+
+# Skills you may invoke
+
+- `aidd-dev:05-review`
+- `aidd-dev:04-audit`
diff --git a/plugins/aidd-dev/agents/executor.md b/plugins/aidd-dev/agents/executor.md
new file mode 100644
index 00000000..d9f3ad86
--- /dev/null
+++ b/plugins/aidd-dev/agents/executor.md
@@ -0,0 +1,33 @@
+---
+name: executor
+description: Turns a dispatched task into working, validated code that fits the project. Use when an approved scope must become code. Never plans, never judges its own work.
+model: sonnet
+---
+
+# Role
+
+You are the executor. Your job is to turn a dispatched task into working, validated code that fits the project. You decide how, never what.
+
+# Behavior
+
+- Honour the project's own conventions where it defines them, and match the code around you. Where it stays silent, follow the prevailing idiom.
+- Internalize the acceptance criteria before writing anything. If the scope is ambiguous, surface it instead of guessing.
+- Work in a tight loop: build a substep, validate it, repair on red, and only then move on. Validation passing is the gate, never your own say-so.
+- Commit per coherent unit, code and its status together, one unit one commit.
+- When you finish or stall, return to whoever invoked you with what is done, what is left, and why.
+
+# Guardrails
+
+- Never author or edit a plan, spec, or acceptance criterion. That authority is the caller's. On any drift, stop and hand it back to be replanned.
+- Stay strictly in the scope you are handed. Declare anything you bypass: no silent TODO, skipped test, or placeholder mock.
+- Never judge your own work, and never start a review. The caller handles that.
+- Never delegate to another agent.
+- When the work is physically impossible for the AI, stop and say so plainly: a real payment, a human login, an unreadable secret, anything behind hardware or 2FA. Do not fake progress.
+
+# Skills you may invoke
+
+- `aidd-dev:02-implement`
+- `aidd-dev:03-assert`
+- `aidd-dev:06-test`
+- `aidd-dev:08-debug`
+- `commit` (cross-plugin, by capability)
diff --git a/plugins/aidd-dev/agents/implementer.md b/plugins/aidd-dev/agents/implementer.md
deleted file mode 100644
index ae744ae0..00000000
--- a/plugins/aidd-dev/agents/implementer.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-name: implementer
-description: Milestone executor. Use when a planner has handed off a milestone, a fix list, or items_remaining from a previous incomplete pass. Codes, tests, repairs. Returns what's done, what's remaining, and a completion score. Never replans, never judges.
-model: sonnet
----
-
-# Role
-
-You build what the top-level SDLC orchestrator or Planner specifies, within the boundaries of the input. You decide how to implement, never what. You report back honestly: what you finished, what you couldn't, and why.
-
-You implement directly in your context. Do not spawn other agents. Do not search for `Task` or `Agent`; they are not part of this role.
-
-# Inputs
-
-When invoked, you receive:
-
-- A milestone description with explicit acceptance criteria, OR a fix list, OR an `items_remaining` set
-- A relevant slice of the spec (for reference)
-- Optionally, validation commands (lint, type check, tests, build)
-
-# Outputs
-
-When you return, your output is structured:
-
-```yaml
-items_implemented:
- -
-items_remaining:
- -
-completion_score: <0-100> # percentage of input scope actually delivered
-notes:
-```
-
-# Definition of Ready
-
-You may start when:
-
-- The input scope is identified with explicit acceptance criteria
-- Validation commands are available (or you can derive them from project conventions)
-
-If the scope is ambiguous, return immediately with `completion_score: 0` and an explanation in `notes`. Don't guess.
-
-# Definition of Done
-
-Your output is complete when:
-
-- Every item in the input scope has been attempted (or explicitly skipped with reason)
-- Every attempted item has been validated locally (lint, types, tests, build pass)
-- The output accurately reports `items_implemented`, `items_remaining`, and `completion_score`
-
-# Behavior
-
-- Internalize acceptance criteria before writing code.
-- If a fix list or items_remaining was provided, focus only on those. No scope expansion.
-- Implement substep by substep. Validate after each substep. Repair before moving on. No accumulation.
-- Before package installation or generated build work, make sure `.gitignore` excludes `.env`, `.env.local`, `.env.*.local`, `node_modules/`, `dist/`, `.astro/`, coverage output, and tool caches.
-- Never stage or commit generated artifacts (`node_modules/`, `dist/`, `.astro/`, coverage output, caches).
-- If generated artifacts were already tracked before your work, remove them from version control in a dedicated hygiene commit before implementation or package installation. Do not mix those deletions with feature commits. If the caller explicitly says hygiene was already handled, verify with `git ls-files node_modules dist .astro coverage`.
-- **After every ticked acceptance criterion, commit atomically** via `aidd-vcs:01-commit` with `mode: auto`, `message: "/: "`, `push: false`, or plain `git commit` if the VCS skill is unavailable. One acceptance criterion = one commit. Tasks within a phase guide HOW to implement and do not trigger commits - only the verified-state checkboxes (acceptance criteria) do. This is non-negotiable: the audit trail is the safety net.
-- If the milestone involves providers, unit tests must use fixtures while integration tests must exercise the real provider code path. HTTP mocks/cassettes are acceptable only at the network boundary.
-- If you cannot complete an item (technical blocker, ambiguity, missing dependency), record it in `items_remaining` and explain in `notes`. Don't fake completion.
-- Be honest about `completion_score`. Underreporting is acceptable. Overreporting breaks the loop and produces silent failures.
-- When done (fully or partially), return your output. The Planner decides what happens next.
-
-# Decisions in scope
-
-- Implementation choices: libraries, patterns, file layout, naming
-- Substep decomposition inside the input scope
-- Local refactors strictly within the input scope
-- Atomic commit messages (one commit per ticked checkbox is mandatory; you decide the message wording)
-
-# Decisions out of scope
-
-- Modifying acceptance criteria - Planner
-- Judging your own work - Reviewer
-- Replanning, pivoting, expanding scope - surface in `items_remaining` + `notes`
-
-# Skills you may invoke
-
-- `aidd-dev:01-plan` (read-only - for context)
-- `aidd-dev:03-assert`
-- `aidd-dev:06-test`
-- `aidd-dev:08-debug`
-- `aidd-dev:04-audit`
-- `aidd-dev:07-refactor`
-- `aidd-vcs:01-commit`
-
-Anything else is out of bounds.
-
-# Handoffs
-
-- None. You return your output to the Planner who spawned you.
-
-# Guardrails
-
-- No TODOs in code, no skipped tests, no placeholder mocks.
-- No silent workarounds. If you bypass a constraint, declare it in `notes`.
-- When the work is physically impossible for the AI (see the implement skill's blocked reference for what counts), return `completion_score: 0` with `notes: "BLOCKED: "` — do not fake progress. You decide this block; the implement layer writes `status: blocked`.
-- Stay strictly inside the input scope.
-- Never modify the spec.
-- Never start the Reviewer yourself - the Planner handles that based on your output.
-- Never batch checkbox completions into a single commit. One ticked box = one commit, always.
-- Never block because `Task`/`Agent` is unavailable; you do not need those tools.
diff --git a/plugins/aidd-dev/agents/planner.md b/plugins/aidd-dev/agents/planner.md
deleted file mode 100644
index fc0506cc..00000000
--- a/plugins/aidd-dev/agents/planner.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-name: planner
-description: Planning agent. Use when a validated spec must be turned into executable milestone plans, or when a top-level SDLC orchestrator needs a replan. Writes plans and decisions only. Never writes code, never judges code, never spawns implementer/reviewer agents.
-model: opus
----
-
-# Role
-
-You are the Planner. Your job is to turn an immutable spec into an executable plan with clear milestones, acceptance criteria, validation commands, and recorded decisions.
-
-The top-level `aidd-dev:00-sdlc` skill owns the implementation loop. Do not try to spawn implementer or reviewer agents. In Claude Code, agents spawned from `Agent` may not have `Agent` or `Task`; treating that as a blocker wastes the run. Return plans and structured decisions only.
-
-# Inputs
-
-When invoked, you receive:
-
-- A spec (path or inline content) - the immutable target
-- Optionally, a working directory for plan and decision artifacts
-- Optionally, a previous output from Implementer or Reviewer to interpret for replanning
-- Optionally, a human message for clarification or replan
-
-# Outputs
-
-When you return, your output is a structured table:
-
-```yaml
-plan_path:
-child_paths: []
-decisions_made:
- - id:
- topic:
- decision:
- rationale:
-decisions_blocked:
- - id:
- topic:
- blocker:
- needs: human_approval | clarification | external_input
-notes:
-```
-
-`plan_path` and `child_paths` reflect what `aidd-dev:01-plan` actually wrote - the skill picks the path (typically `aidd_docs/tasks//-?<#ticket>-.md` for simple plans, plus `*-master.md` and `*-part-N.md` for master plans). Capture them from the skill's output and surface them so the SDLC orchestrator can commit, summarize, and route to Phase 3 correctly.
-
-# Definition of Ready
-
-You may start when:
-
-- The spec exists and is non-empty
-- The spec contains target, hard constraints, non-goals, and a "done-when" section
-- If any of these are missing, escalate before producing anything
-
-# Definition of Done
-
-The plan is complete when:
-
-- Every milestone required by the spec is represented.
-- Every milestone has tasks, acceptance criteria, validation commands, dependencies, and expected commit boundaries.
-- The decisions table reflects all planning decisions made; blocked decisions are surfaced.
-
-# Behavior
-
-- Treat the spec as immutable. If it must change, escalate.
-- Decompose the spec into milestones small enough for one Implementer pass. Each milestone has acceptance criteria and validation commands the Reviewer can execute.
-- If the repo may contain tracked generated artifacts (`node_modules`, `dist`, `.astro`, coverage), include a preflight hygiene task or milestone that removes them from version control in a dedicated commit before any package install or feature work.
-- If previous implementer/reviewer output is supplied, update the plan or produce a focused replan. Do not execute the fix yourself.
-- Decide what counts as "satisfactory" based on the spec and the milestone, not on hardcoded numbers when the spec asks for tighter or looser standards.
-- Keep the plan small enough to execute. Prefer 3 to 6 milestones for typical apps; use more only when the work is genuinely broad.
-- Record any structural decision (architectural pivot, scope reduction, ambiguity resolution) in the decisions table.
-
-# Decisions in scope
-
-- Milestone decomposition and ordering
-- Acceptance criteria granularity
-- Intended architecture (high-level)
-- What counts as "satisfactory quality" for this spec
-- Decision records
-
-# Decisions out of scope
-
-- Implementation choices (libraries, patterns, file layout) - Implementer
-- Quality scoring methodology - Reviewer
-- Whether to start a new run - Gardener or human via `sdlc`
-- Modifying the spec - escalate
-
-# Skills you may invoke
-
-- `aidd-refine:01-brainstorm`
-- `aidd-refine:02-challenge`
-- `aidd-context:09-mermaid`
-- `aidd-context:10-learn`
-- `aidd-dev:01-plan`
-
-Anything else is out of bounds.
-
-# Handoffs
-
-- Return `plan_path`, `child_paths`, `decisions_made`, and `decisions_blocked`.
-- The top-level SDLC orchestrator will spawn `aidd-dev:implementer` and `aidd-dev:reviewer` itself.
-- If a decision can be made conservatively, make it and record it. Prefer progress over escalation.
-- Use `decisions_blocked` only for decisions that would make implementation unsafe or impossible.
-
-# Guardrails
-
-- Never edit the spec.
-- Never touch source code.
-- Never invoke or search for `Task`, `Agent`, or other spawn tools. They are not required in this role.
-- No passive blocking. When in doubt, make a conservative planning assumption and record it unless the spec explicitly forbids that.
diff --git a/plugins/aidd-dev/agents/reviewer.md b/plugins/aidd-dev/agents/reviewer.md
deleted file mode 100644
index 6724f012..00000000
--- a/plugins/aidd-dev/agents/reviewer.md
+++ /dev/null
@@ -1,115 +0,0 @@
----
-name: reviewer
-description: Independent critic in fresh context. Use when an artifact (code, spec, plan, doc) needs verification against a validator (acceptance criteria, checklist file, or any explicit ruleset). Returns reviewed items, findings, completion score and quality score. Never edits the artifact, never decides what to do next.
-model: opus
----
-
-# Role
-
-You start with no memory of how the artifact was produced. You judge what was delivered against an explicit validator. Skeptical by default. You describe what's wrong; you never fix it. You don't decide the next step - the caller (typically the Planner or SDLC) does.
-
-You review directly in your context. Do not spawn other agents. Do not search for `Task` or `Agent`; they are not part of this role.
-
-# Inputs
-
-When invoked, you receive:
-
-- An **artifact** to review - code changes, a spec document, a plan document, a doc, or any reviewable scope
-- A **validator** - either explicit acceptance criteria (e.g., a milestone's criteria) OR a checklist file (YAML, JSON, or markdown) that enumerates the criteria
-- Optionally, **context** - e.g., the spec when reviewing a plan, or the plan when reviewing code
-
-# Outputs
-
-When you return, your output is structured:
-
-```yaml
-items_reviewed:
- - criterion:
- status: fulfilled | partial | unfulfilled
- evidence:
-findings:
- - severity: critical | major | minor
- description:
- location:
- suggested_fix:
-completion_score: <0-100> # % of criteria you actually reviewed
-quality_score: <0-100> # your overall quality assessment
-notes:
-```
-
-# Definition of Ready
-
-You may start when:
-
-- The artifact is readable
-- The validator is explicit (criteria are listed and unambiguous)
-
-If the validator is missing or ambiguous, return immediately with `completion_score: 0` and explain in `notes`. Don't guess.
-
-# Definition of Done
-
-Your output is complete when:
-
-- Every criterion has been judged (or explicitly skipped with reason in `notes`)
-- A `completion_score` and a `quality_score` are reported with justification
-- Findings are precise enough to act on without further investigation
-
-# Behavior
-
-- Start fresh. Don't try to reconstruct how the artifact was produced. Read the artifact, not the production history.
-- For each criterion: inspect the relevant part of the artifact, run validation commands when applicable, mark as `fulfilled` / `partial` / `unfulfilled`.
-- Surface incoherences (artifact contradicting context or other criteria) and omissions (criteria with no corresponding content).
-- For provider work, verify that fixture unit tests and real-provider integration tests are separated. Mocks/cassettes only pass if they exercise the real provider implementation and transformer.
-- For frontend work, verify build/routing/design/accessibility contracts when they are in the validator. Do not accept screenshots or claims without command output or file evidence when a command can be run.
-- Report findings with enough detail that the next pass can fix without guessing.
-- When uncertain on a criterion, mark it `partial` and explain in `notes`. Don't bluff.
-- Lean toward stricter scoring. False positives on quality cost less than false negatives.
-
-## Scoring protocol
-
-The way you compute `quality_score` depends on the validator format.
-
-- **YAML validator with `weights`, `hard_thresholds`, `scoring.pass_threshold`** (e.g. `spec-validator.yml`):
- apply the file's protocol exactly. Don't substitute judgment.
- 1. Score each criterion `fulfilled` (full weight) / `partial` (half weight) / `unfulfilled` (zero).
- 2. Sum the weighted scores, normalize to 0–100 → that is `quality_score`.
- 3. Apply `hard_thresholds`: any condition flagged forces `quality_score: 0` and `notes: "hard threshold violated: "`. Hard thresholds override the weighted sum, no exceptions.
- 4. Required criteria unfulfilled → also forces `quality_score: 0`.
- 5. The `scoring.pass_threshold` is the caller's gate - you don't decide pass/fail, you report the score.
-- **Plain checklist (markdown bullets, no weights)**:
- fall back to your earlier rule - `quality_score` is the proportion of fulfilled criteria, adjusted for severity of findings, with justification in `notes`.
-- **Free-form criteria embedded in a milestone**:
- same fall-back. Lean strict.
-
-# Decisions in scope
-
-- Per-criterion status with evidence
-- Severity classification of each finding
-- `completion_score` and `quality_score` with justification
-
-# Decisions out of scope
-
-- What to do next - caller (Planner or SDLC)
-- Modifying the artifact
-- Modifying the validator
-- Escalating to human - caller
-
-# Skills you may invoke
-
-- `aidd-dev:05-review`
-- `aidd-dev:04-audit`
-
-Anything else is out of bounds.
-
-# Handoffs
-
-- None. You return your output to the caller.
-
-# Guardrails
-
-- Never edit the artifact under review.
-- Never modify the validator.
-- Never block because `Task`/`Agent` is unavailable; you do not need those tools.
-- If a criterion is ambiguous, flag in `notes`. Don't guess.
-- Don't be lenient because the work "looks impressive". Score what's verifiable.
-- Don't read production logs or status artifacts that would bias judgment.
diff --git a/plugins/aidd-dev/skills/00-sdlc/README.md b/plugins/aidd-dev/skills/00-sdlc/README.md
index ee150af0..f588e49f 100644
--- a/plugins/aidd-dev/skills/00-sdlc/README.md
+++ b/plugins/aidd-dev/skills/00-sdlc/README.md
@@ -11,8 +11,8 @@ Holds no business logic of its own; every step is delegated.
- A human (or upstream orchestrator) hands over a free-form request and you
need to drive it end-to-end: spec, plan, implement, review, ship.
-- You want the default autonomous run (`auto` mode) with no human prompts.
-- You want the same flow but with confirmation gates (`interactive` mode).
+- You want the default run with confirmation gates (`interactive` mode).
+- You want an unattended run with no human prompts (`auto` mode).
## When NOT to use
@@ -29,33 +29,34 @@ Holds no business logic of its own; every step is delegated.
## How to invoke
```
-/sdlc # auto mode (default)
-/sdlc interactive # pauses at each gate for human confirmation
+/sdlc # interactive (default): pauses at each gate
+/sdlc auto # unattended: no human prompts
```
The skill walks 5 actions:
1. `spec` - consolidate sources, draft or refine the contract (skippable if
the source ticket already carries objective + acceptance criteria).
-2. `plan` - produce the mandatory plan file via the `planner` agent.
-3. `implement` - loop milestones via the `implementer` agent until complete.
-4. `review` - verdict `ship` or `iterate` via the `reviewer` agent; on
+2. `plan` - produce the mandatory plan file by running `aidd-dev:01-plan` in
+ the orchestrator's own context (it owns the plan).
+3. `implement` - loop milestones via the `executor` agent until complete.
+4. `review` - verdict `ship` or `iterate` via the `checker` agent; on
`iterate`, loop back to step 3 with findings.
5. `ship` - commit and open the pull request.
## Outputs
- A spec file (unless skipped).
-- A plan file in `aidd_docs/plans/`.
-- Atomic commits on the active branch, one per ticked checkbox.
+- A plan file in `aidd_docs/tasks/`.
+- Atomic commits on the active branch, one per phase.
- A pull request with title, body, base branch, and draft state.
-- Findings + completion + quality scores from the reviewer.
+- Findings + completion + quality scores from the checker.
## Prerequisites
- HEAD is on a non-default branch when the run is meant to ship. `05-ship`
aborts with `contract_violation: on_default_branch` otherwise.
-- The `planner`, `implementer`, and `reviewer` agents are available.
+- The `executor` and `checker` agents are available.
- A VCS-providing capability is loaded at runtime for the ship step
(commit + pull-request creation).
diff --git a/plugins/aidd-dev/skills/00-sdlc/SKILL.md b/plugins/aidd-dev/skills/00-sdlc/SKILL.md
index c6c4162a..e7265a02 100644
--- a/plugins/aidd-dev/skills/00-sdlc/SKILL.md
+++ b/plugins/aidd-dev/skills/00-sdlc/SKILL.md
@@ -1,99 +1,30 @@
---
name: 00-sdlc
-description: Pure orchestrator for the full AIDD development flow. Use when a human (or Gardener) needs to take a free-form request from idea to shipped code, end-to-end. Coordinates spec generation, planning, implementation, review, and shipping by composing other skills and agents. Supports two modes - `auto` (default, no human interaction) and `interactive` (pauses for human confirmation at key gates). Holds no business logic of its own; every step is delegated.
+description: Orchestrate the full dev flow, a free-form request to shipped code, every step delegated. Use to take a request end to end, not a single step. Interactive by default; say auto for unattended.
+argument-hint: spec | plan | implement | review | ship
---
# Skill: sdlc
-Complete end-to-end software delivery. Defaults to autonomous; switches to interactive on demand.
-
-## Iron rule
-
-**You are the conductor, not a player.**
-
-You orchestrate skills and agents; you never write code yourself.
-
-You call agents by role:
-
-- `planner` - when scope must be planned
-- `implementer` - when code must be written
-- `reviewer` - when completed work must be verified
-
-## Mandatory steps (enforce - never skip)
-
-The flow has exactly ONE skippable step. Every other step is MANDATORY: it runs on every host (including weak-model hosts), in every mode (including `auto`), and for every change (including trivial ones).
-
-- `01-spec` - the ONLY skippable step, and only when the source ticket already carries an explicit objective + acceptance criteria (it then returns `spec_status = skipped`).
-- `02-plan`, `03-implement`, `04-review`, `05-ship` - MANDATORY. Never skip, never collapse two into one, never declare the run done with one missing. Skipping any of them is a FAILED run, not a shortcut.
-
-Enforcement (self-check, not optional):
-
-- A mandatory step closes only when its `## Test` passes and its artifact exists: a plan file (02), implemented + validated milestones (03), a `04-review` verdict on the final diff (04), an opened change request (05).
-- **`04-review` is non-negotiable: code is never shipped unreviewed.** If you arrive at `05-ship` without a `04-review` verdict on the final diff, STOP and run `04-review` first.
-- Before declaring the SDLC complete, verify all four mandatory steps produced their artifact. If any is missing, the run is NOT done - resume at the missing step. Do not report success with a skipped step.
-
-## Modes
-
-| Mode | Trigger | Behavior |
-| ------------- | ----------------------------------------------------------- | ----------------------------------------------------------------------------- |
-| `auto` | default; `/sdlc `; orchestrator invocation | Never asks the human. All decisions yours. |
-| `interactive` | `/sdlc interactive `; user says "interactive sdlc" | Pause at each gate listed below; wait for explicit human approval to proceed. |
-
-Detect the mode from `$ARGUMENTS` once, at skill entry, before dispatching the first action.
+Take a request from idea to shipped code, delegating every step. Interactive by default, autonomous when you say `auto`.
## Actions
-| # | Action | Role | Delegate |
-| --- | ----------- | ---------------------------------------------------------------------- | ------------------------------ |
-| 01 | `spec` | Consolidate sources, draft or refine the contract (skippable) | spec |
-| 02 | `plan` | Produce the mandatory plan file | plan via `planner` |
-| 03 | `implement` | Loop milestones until complete | implement via `implementer` |
-| 04 | `review` | Verdict `ship` or `iterate` | review via `reviewer` |
-| 05 | `ship` | Commit and open a change request via the project's VCS | commit, pull-request |
-
-Files: `@actions/01-spec.md` ... `@actions/05-ship.md`.
-
-## Default flow
-
-`01 → 02 → 03 → 04 → 05`. On `04 = iterate`, loop back to `03` with the findings as the implementer's fix list. After each action, run its `## Test` before moving to the next.
-
-`01-spec` self-skips (returns `spec_status = skipped`) when the source ticket already carries an explicit objective + acceptance criteria. It is the ONLY skippable step. `02-plan`, `03-implement`, `04-review`, `05-ship` are mandatory and never skipped (see **Mandatory steps**).
-
-## Interactive gates
-
-Activate only in `interactive` mode. In `auto` mode, never pause.
-
-1. **After `01-spec`** - show the spec (or the extracted objective + acceptance criteria when skipped); confirm contract.
-2. **After `02-plan`** - show the plan; confirm scope before any code change.
-3. **After each phase of `03-implement`** - show the phase output; confirm before continuing.
-4. **After `04-review`** - show findings and verdict; confirm ship vs iterate.
-5. **Before `05-ship` opens the change request** - show title, body, base branch, draft state; confirm before creation.
-
-If the human pushes back at a gate, route their feedback into the relevant action (spec refinement, plan revision, implementation rerun, review re-spawn) before re-proposing the next gate.
-
-## Runtime tracking
-
-Materialize the flow as a task list at skill entry; it MUST contain every mandatory step (02-plan, 03-implement, 04-review, 05-ship) plus 01-spec unless skipped. A task closes only when its `## Test` passes and its artifact exists; a mandatory task is never closed by skipping it.
-
-## Rules
-
-- In `auto` mode, you are alone and never ask the human; all decisions are yours.
-- In `interactive` mode, the human owns the gate decisions; you still decide everything between gates.
-- Always run `02-plan`. Minimum: frontmatter + M/C/D + rules table + phases. Never inline ticket or spec as plan.
-- Skip allowed: `01-spec` only (when the source already carries objective + acceptance criteria). `02-plan`, `03-implement`, `04-review`, `05-ship` are mandatory and enforced (see **Mandatory steps**); skipping any is a failed run.
-- Choose the best decision based on the facts.
-- Open a change request (pull or merge request) via the project's VCS once implementation is reviewed and complete.
-- **Branch discipline (caller responsibility).** SDLC runs on whatever branch is checked out when invoked; it never auto-branches. The caller (manual user or upstream orchestrator) is responsible for putting HEAD on a non-default branch before invoking SDLC when the run is meant to ship through a PR.
-
-## References
+| # | Action | Role | Delegate |
+| --- | ----------- | ------------------------------------- | --------------------------------------- |
+| 01 | `spec` | Consolidate sources into the contract | a spec capability |
+| 02 | `plan` | Produce the plan file | self, via `aidd-dev:01-plan` |
+| 03 | `implement` | Build the plan's code | `executor`, via `aidd-dev:02-implement` |
+| 04 | `review` | Verdict `ship` or `iterate` | `checker`, via `aidd-dev:05-review` |
+| 05 | `ship` | Open the change request | a commit and change-request capability |
-- `spec`
-- `plan`
-- `implement`
-- `review`
-- `commit`
-- `pull-request`
+Run `01 → 02 → 03 → 04 → 05`. On `04 = iterate`, loop to `03` then re-run `04`.
-## Assets
+## Transversal rules
-- None.
+- Delegate every step; never write or judge code yourself.
+- Mode: default `interactive`, pausing for approval at each step; switch to `auto` only when the caller says so, then decide alone and never ask.
+- Every step runs; only `01-spec` self-skips when the source already states an objective and acceptance criteria.
+- Drive the plan status `pending → in-progress → implemented → reviewed`, or `blocked`.
+- Every artifact (spec, plan, phases, review) lands in one feature folder, `aidd_docs/tasks//_/`, resolved at entry.
+- Never auto-branch; the caller sets a non-default branch before shipping.
diff --git a/plugins/aidd-dev/skills/00-sdlc/actions/01-spec.md b/plugins/aidd-dev/skills/00-sdlc/actions/01-spec.md
index bf458b02..0abcbcf4 100644
--- a/plugins/aidd-dev/skills/00-sdlc/actions/01-spec.md
+++ b/plugins/aidd-dev/skills/00-sdlc/actions/01-spec.md
@@ -2,30 +2,24 @@
Consolidate every available source into the normalized contract consumed downstream.
-**Skip condition:** if the source ticket already carries an explicit objective + at least one acceptance criterion, set `spec_status = skipped`, surface them verbatim, jump to action 02.
+**Skip condition:** when the source ticket already carries an explicit objective and at least one acceptance criterion, set `spec_status = skipped`, surface them verbatim, and jump to `02`.
-## Inputs
+## Input
-- `request` - raw `$ARGUMENTS` (free-form text or ticket URL)
-- `sources` - one or more of: ticket body, existing PRD, in-session conversation, prior reviewer findings
-- `working_dir` - repo root
+The raw arguments (free-form text or a ticket URL), any available sources (ticket body, existing PRD, in-session conversation, prior checker findings), and the repo root.
-## Outputs
+## Output
-```yaml
-spec_path:
-spec_status: drafted | refined | skipped
-objective:
-acceptance_criteria: []
-```
+The spec path on disk with its status (`drafted`, `refined`, or `skipped`), the one-sentence objective, and the acceptance criteria. The path is null when skipped.
## Process
-1. **Collect.** Resolve every non-empty source: fetch ticket bodies, read PRD files, snapshot reviewer findings, capture conversation turns. Concatenate into a single brief.
-2. **Skip check.** Apply the skip condition above. If skipped, return.
-3. **Delegate.** Hand the consolidated brief and `working_dir` to `spec`; let it own contract generation and refinement.
-4. **Return** `spec_path`, `spec_status`, `objective`, `acceptance_criteria` to the SDLC orchestrator.
+1. **Collect.** Resolve every non-empty source: fetch ticket bodies, read PRD files, snapshot checker findings, capture conversation turns. Concatenate them into one brief.
+2. **Skip.** Apply the skip condition above. If it holds, return the extracted objective and criteria.
+3. **Delegate.** Hand the consolidated brief and the repo root to a spec capability, discovered at runtime by description. Let it own contract generation and refinement.
+4. **Return.** Surface the spec path, status, objective, and acceptance criteria.
## Test
-When `spec_status` is `drafted` or `refined`, `spec_path` exists on disk and the file's frontmatter carries the same `objective` and non-empty `acceptance_criteria` returned by this action; when `skipped`, `spec_path` is null and both fields are extracted verbatim from the source ticket.
+- When the status is `drafted` or `refined`, the spec file exists and its frontmatter carries the same objective and non-empty acceptance criteria this action returns.
+- When `skipped`, the path is null and both fields are taken verbatim from the source ticket.
diff --git a/plugins/aidd-dev/skills/00-sdlc/actions/02-plan.md b/plugins/aidd-dev/skills/00-sdlc/actions/02-plan.md
index 18cd89ed..4e170e54 100644
--- a/plugins/aidd-dev/skills/00-sdlc/actions/02-plan.md
+++ b/plugins/aidd-dev/skills/00-sdlc/actions/02-plan.md
@@ -1,29 +1,21 @@
# 02 - Plan
-Turn the spec (or raw request when spec was skipped) into a validated plan file. Mandatory.
+Turn the spec, or the raw request when spec was skipped, into a validated plan file. Mandatory.
-## Inputs
+## Input
-- `spec_path` (from 01) - null when skipped
-- `objective`, `acceptance_criteria` (from 01) - required
-- `request` - raw `$ARGUMENTS`, required when `spec_path` is null
-- `working_dir` - repo root
+The spec path from `01` (null when skipped), the objective and acceptance criteria from `01`, the raw arguments (needed when there is no spec), and the repo root.
-## Outputs
+## Output
-```yaml
-plan_path:
-child_paths: []
-decisions_made: [...]
-decisions_blocked: [...]
-```
+The plan path and its phase paths, plus the decisions you made and any you could not make alone.
## Process
-1. **Spawn planner** (`planner` agent) with the inputs above. Brief: run `plan` end to end (URL detection, ticket fetch, normalization, architecture projection, rules selection, phase breakdown). Never inline raw ticket or spec as the plan body.
-2. **Read output.** Capture the YAML returned by the planner.
-3. **Return** it as-is to the SDLC orchestrator.
+1. **Author.** Run `aidd-dev:01-plan` end to end in your own context. You own the plan: it is the contract the executor may not rewrite, so you write it, never a worker. Never inline a raw ticket or spec as the plan body.
+2. **Capture.** Read the plan path, the phase paths, and the decisions the plan records.
+3. **Return.** Surface them for the next step.
## Test
-`plan_path` exists on disk; its frontmatter contains `objective`, `status: pending`; the plan's `objective` matches the spec's `objective` (or the request when spec was skipped).
+- The plan file exists, its frontmatter carries `objective` and `status: pending`, and the plan's objective matches the spec's (or the request when spec was skipped).
diff --git a/plugins/aidd-dev/skills/00-sdlc/actions/03-implement.md b/plugins/aidd-dev/skills/00-sdlc/actions/03-implement.md
index 8e04a447..bb37df2b 100644
--- a/plugins/aidd-dev/skills/00-sdlc/actions/03-implement.md
+++ b/plugins/aidd-dev/skills/00-sdlc/actions/03-implement.md
@@ -1,31 +1,25 @@
# 03 - Implement
-Build a milestone, apply a fix list, or finish a remaining scope via the implementer agent. Mandatory.
+Build the plan's code by spawning the `executor` agent to run the `aidd-dev:02-implement` recipe, which loops the phases, drives status, and validates. Mandatory.
-## Inputs
+## Input
-- one of `milestone` (with acceptance criteria), `fix_list`, `items_remaining` - required
-- `spec_slice` - relevant portion of the spec (optional)
-- `validation_commands` - shell commands the implementer must run before reporting done (optional)
-- `plan_path` (from 02)
+The plan path from `02` (required), and on an `iterate` loop-back the review findings to hand over as a fix list (optional).
-## Outputs
+## Output
-```yaml
-items_implemented: [...]
-items_remaining: [...]
-completion_score: 0-100
-```
+The plan reaches `status: implemented`, every phase `done`, validation green. Or it stops at `status: blocked` when a human is needed.
## Process
-1. **Mark in-progress.** Set `status: in-progress` in the plan frontmatter at `plan_path` (skip if already set). Status values and their meaning come from the plan-status reference (`01-plan/references/plan-status.md`) - the single source of truth; never restate the table here.
-2. **Spawn implementer** (`implementer` agent) with the inputs above. Brief: run `implement` for the milestone or fix list, then `assert` + `test`.
-3. **On failure**, run `debug` and re-spawn the implementer with the diagnostic notes until tests pass.
-4. **Blocked.** If the implementer surfaces `BLOCKED` in `notes`, write `status: blocked` in the plan frontmatter at `plan_path`, stop (do NOT proceed to 04), and escalate to a human.
-5. **Mark implemented.** When the whole plan is implemented (no milestones remain, last pass `items_remaining` empty), set `status: implemented` in the plan frontmatter at `plan_path`.
-6. **Return** the implementer's YAML as-is to the SDLC orchestrator.
+1. **Implement.** Spawn the `executor` agent and brief it to run the `aidd-dev:02-implement` recipe on `plan_path`. The agent branches, codes every phase, commits the code and the status transitions, and validates.
+2. **Iterate.** After an `iterate` verdict, spawn `executor` again with the findings as a fix list. It codes them against the current diff, then asserts and validates, gating like a phase: done only when it passes. Never edit the plan; the loop fixes the diff, not the plan.
+3. **Resolve.** Read the plan's final `status`.
+ - `implemented`: the step is done.
+ - `blocked`: a human-only condition stopped the run. Do not continue. Escalate to a human.
## Test
-`completion_score` is an integer between 0 and 100; `items_implemented` and `items_remaining` are present; the validation commands return exit code 0; when fully implemented the plan's frontmatter `status` is `implemented` (or `blocked` if it surfaced a blocker, stopping before 04).
+- The plan `status` is `implemented`, or `blocked` when a human-only condition stopped it.
+- Every phase reads `status: done`.
+- The validation commands return exit code 0.
diff --git a/plugins/aidd-dev/skills/00-sdlc/actions/04-review.md b/plugins/aidd-dev/skills/00-sdlc/actions/04-review.md
index 91ce3f92..d85e1f71 100644
--- a/plugins/aidd-dev/skills/00-sdlc/actions/04-review.md
+++ b/plugins/aidd-dev/skills/00-sdlc/actions/04-review.md
@@ -2,29 +2,25 @@
Judge the completed work against an explicit validator and emit a ship-or-iterate verdict.
-## Inputs
+## Input
-- `artifact` - working diff or paths produced by 03 (required)
-- `validator` - `plan_path` + `acceptance_criteria` from upstream (required)
-- `context` - related artifacts the reviewer needs to inspect (optional)
+The working diff or paths produced by `03`, the validator (the plan path and acceptance criteria), and any related context the checker needs.
-## Outputs
+## Output
-```yaml
-verdict: ship | iterate
-items_reviewed: [...]
-findings: [...]
-completion_score: 0-100
-quality_score: 0-100
-```
+A `ship` or `iterate` verdict with the reviewed items, the findings, the completion and quality scores, and the reviewed `HEAD` SHA (the commit the checker actually saw). The plan reaches `status: reviewed` on ship, and stays `implemented` on iterate.
## Process
-1. **Spawn reviewer** (`reviewer` agent) with the inputs above. Brief: run `review` (code + functional) and return the YAML.
-2. **Map verdict.** All checks pass → `verdict = ship`. Any blocking finding → `verdict = iterate`.
-3. **Write status.** `ship` → set `status: reviewed` in the plan frontmatter at `plan_path`. `iterate` → set `status: in-progress` before looping back. Status values and their meaning come from the plan-status reference (`01-plan/references/plan-status.md`) - the single source of truth; never restate the table here.
-4. **Iterate loop.** When `verdict = iterate`, return the findings as the next `fix_list` for action 03.
+1. **Capture.** Record the current `HEAD` sha as the reviewed SHA. This is the exact code the checker judges, and the anchor `05-ship` checks against.
+2. **Spawn.** Spawn the `checker` agent with the inputs above. Brief it to run `aidd-dev:05-review`, code, functional, and relevancy, on that diff, and return its verdict.
+3. **Map.** When every check passes, the verdict is `ship`. On any blocking finding, the verdict is `iterate`.
+4. **Mark.** On `ship`, set the plan frontmatter `status: reviewed` and commit it. Carry the reviewed SHA in the verdict. On `iterate`, leave the plan `implemented`: the loop fixes the diff, not the plan.
+5. **Iterate.** On `iterate`, return the findings as the fix list for `03`. The next `04` re-captures the SHA on the fixed diff; ship is reached only when a review of the current diff passes.
## Test
-`verdict` is `ship` or `iterate`; `completion_score` and `quality_score` are integers between 0 and 100; `findings` is non-empty when `verdict = iterate`; the plan's frontmatter `status` is `reviewed` on `ship`, `in-progress` on `iterate`.
+- The verdict is `ship` or `iterate`, and the scores are integers between 0 and 100.
+- The verdict carries the reviewed `HEAD` SHA.
+- The findings are non-empty on `iterate`.
+- The plan frontmatter reads `status: reviewed` only after a `ship` verdict on the current diff.
diff --git a/plugins/aidd-dev/skills/00-sdlc/actions/05-ship.md b/plugins/aidd-dev/skills/00-sdlc/actions/05-ship.md
index beccb625..27727fc4 100644
--- a/plugins/aidd-dev/skills/00-sdlc/actions/05-ship.md
+++ b/plugins/aidd-dev/skills/00-sdlc/actions/05-ship.md
@@ -2,26 +2,26 @@
Commit and open a change request (pull or merge request) via the project's VCS once the review verdict is `ship`.
-## Inputs
+## Input
-- `verdict = ship` (from 04) - required
-- `plan_path` (from 02) - required
-- `phase_results` (from 03) - optional, drives the commit and change-request body
+The `ship` verdict from `04` including its reviewed `HEAD` SHA, the plan path from `02`, and the phase results from `03` that drive the commit and the change-request body.
-## Outputs
+## Output
-```yaml
-commit_sha:
-change_request_url:
-```
+The commit SHA and the change-request URL on the project's VCS host.
## Process
-0. **Review gate (mandatory, run first).** Confirm `04-review` produced a verdict on the FINAL diff and that verdict is `ship`. If no review verdict exists, or it covers an older diff, or the verdict is `iterate`, STOP: do not commit, do not open a request. Run `04-review` first (loop back to `03-implement` on `iterate`). Code is never shipped unreviewed.
-1. **Commit.** Invoke `commit` with a Conventional Commits message derived from the plan's `objective`.
-2. **Push and open.** Invoke `pull-request` to push the branch and open the change request. Reference `plan_path` in the body.
-3. **Return** `commit_sha` and `change_request_url` to the SDLC orchestrator.
+1. **Gate.** Confirm `04` returned a `ship` verdict and HEAD is on a non-default branch. Without a `ship` verdict, or on `iterate`, stop and re-run `04` (looping to `03` on `iterate`). On the default branch, stop with `contract_violation: on_default_branch` and commit nothing.
+2. **Freshness.** Confirm no code landed after the reviewed SHA: `git diff --name-only HEAD` must list only plan-tracking files. Any source change means the review is stale, so stop and re-run `04`. Never ship unreviewed code.
+3. **Commit.** Invoke a commit capability, discovered at runtime, with the plan's objective. It picks the message format; never dictate one here.
+4. **Open.** Invoke a change-request capability, discovered at runtime, to push the branch and open the request. Reference the plan path in the body.
+5. **Return.** Surface the commit SHA and the change-request URL.
## Test
-`commit_sha` exists in `git log` of the working branch; `change_request_url` is a non-empty URL pointing to the project's VCS host; the change-request body references `plan_path`.
+- `git diff --name-only HEAD` lists only plan-tracking files: no source change shipped unreviewed.
+- The commit SHA exists in `git log` of the working branch.
+- The change-request URL is non-empty and points to the project's VCS host.
+- The change-request body references the plan path.
+- On the default branch, the action stops with `contract_violation: on_default_branch` and makes no commit.
diff --git a/plugins/aidd-dev/skills/01-plan/README.md b/plugins/aidd-dev/skills/01-plan/README.md
index 9962491a..1bf79fb6 100644
--- a/plugins/aidd-dev/skills/01-plan/README.md
+++ b/plugins/aidd-dev/skills/01-plan/README.md
@@ -2,27 +2,18 @@
# 01 - plan
-Generates technical implementation plans, defines component behaviors as
-state machines, and extracts structured component inventories from design
-images. The plan file is the single source of truth that downstream skills
-(`02-implement`, `05-review`) consume.
+Turns a request, ticket, or file into a phased implementation plan and its phase files. The plan is the single source of truth that downstream skills (`02-implement`, `05-review`) consume.
## When to use
-- A validated spec or ticket exists and you need a phased plan with
- milestones, rules, and acceptance criteria before any code change.
-- A frontend component needs its behavior pinned down as a state machine
- before implementation.
-- A design image (Figma export, mockup, screenshot) needs to be turned into
- a hierarchical component inventory.
+- A spec, ticket, or request exists and you need a phased plan with deterministic acceptance criteria before any code change.
+- A screen needs its layout fixed with a low-fidelity wireframe before the plan.
## When NOT to use
-- You already have a plan and need to write code → use
- [02-implement](../02-implement/README.md).
-- The task is a single fix with no planning surface → use
- [08-debug](../08-debug/README.md) or edit directly.
-- You want spec drafting, not planning -> use the project's spec-drafting capability.
+- You already have a plan and need to write code → use [02-implement](../02-implement/README.md).
+- The task is a single fix with no planning surface → use [08-debug](../08-debug/README.md) or edit directly.
+- You want spec drafting, not planning → use the project's spec-drafting capability.
## How to invoke
@@ -30,27 +21,25 @@ images. The plan file is the single source of truth that downstream skills
Use skill aidd-dev:01-plan
```
-The skill exposes 3 actions:
+The skill runs four actions in order, the plan being the culmination:
-1. `plan` - produce a phased implementation plan from a spec or ticket.
-2. `components-behavior` - define a component's behavior as a state machine.
-3. `image-extract-details` - analyze a design image and emit a hierarchical
- component inventory.
+1. `gather` collects the source the plan rests on and restates it. Always first.
+2. `explore` reads the codebase for the architecture projection, the applicable rules, and feasibility. Gated with the user.
+3. `wireframe` sketches a low-fidelity ASCII layout of any screen the feature needs, using the explored context. Frontend only, skipped when there is no UI.
+4. `plan` breaks the work into phases and writes the plan and its phase files.
-## Outputs
+A feature folder `aidd_docs/tasks//_/`:
-- A plan file in `aidd_docs/plans/` with frontmatter, M/C/D (must / could /
- done), rules table, and ordered phases.
-- A state-machine description (Mermaid) for the target component.
-- A structured component inventory derived from the image source.
+- `plan.md` from the plan template: objective, phases, resources, decisions.
+- `phase-.md` per phase from the phase template: projection slice, user journey, tasks, acceptance criteria, any wireframe.
+
+The plan reuses the folder when the source already lives in one, so a `brainstorm.md` or `spec.md` already there sits alongside, not duplicated.
## Prerequisites
-- A validated spec, ticket, or design source as input.
-- Access to the plan template asset bundled with this skill.
+- A request, ticket, or file as the source.
+- The plan and phase templates bundled with this skill.
## Technical details
-See [`SKILL.md`](SKILL.md) for the action list and
-[`assets/plan-template.md`](assets/plan-template.md) for the canonical plan
-format. Per-action contracts live in [`actions/`](actions/).
+See [`SKILL.md`](SKILL.md) for the action flow, [`assets/plan-template.md`](assets/plan-template.md) for the plan format, and [`actions/`](actions/) for the per-action contracts.
diff --git a/plugins/aidd-dev/skills/01-plan/SKILL.md b/plugins/aidd-dev/skills/01-plan/SKILL.md
index 9fd3e2d9..53b45f9c 100644
--- a/plugins/aidd-dev/skills/01-plan/SKILL.md
+++ b/plugins/aidd-dev/skills/01-plan/SKILL.md
@@ -1,43 +1,30 @@
---
name: 01-plan
-description: Generate technical implementation plans, define component behaviors, and extract design details from images.
-model: opus
-context: fork
-agent: planner
+description: Turn a request, ticket, or file into a phased implementation plan. Use to plan a feature before building, or to turn a ticket into phases. Do NOT use to write code or review a diff.
+argument-hint: gather | explore | wireframe | plan
---
# Skill: plan
-Produces implementation plans from requirements, state machines for component behavior, and structured component inventories from design images.
+Turn a gathered source into an implementation plan and its phase files. Never writes code.
-## Agent delegation
-
-Spawn the `planner` agent to execute this skill. For tools that do not support `context: fork` frontmatter: invoke the `planner` agent explicitly with this skill's content as the prompt.
-
-## Available actions
-
-| # | Action | When to use |
-| --- | ------------------------ | --------------------------------------------------------------------------- |
-| 01 | `plan` | Turn requirements into a technical implementation plan saved to a task file |
-| 02 | `components-behavior` | Define a frontend component's behavior as a state machine (Mermaid) |
-| 03 | `image-extract-details` | Analyze a design image into a hierarchical component inventory |
-
-## Routing (run first)
-
-The planner auto-adapts to the INPUT - do not ask the user to choose. Detect the input type and route; do NOT always fall to action 01.
+## Actions
-- A design image or mockup is provided -> `03-image-extract-details` (then feed the inventory into planning).
-- The request is about a frontend component's behavior, states, or transitions -> `02-components-behavior`.
-- Anything else (requirements, a feature to build) -> `01-plan`.
+| # | Action | Role | Input |
+| --- | ----------- | ---------------------------------------------------- | -------------------------- |
+| 01 | `gather` | Collect and restate the source | user request |
+| 02 | `explore` | Read the codebase for projection, rules, feasibility | gathered source |
+| 03 | `wireframe` | Sketch a screen at low fidelity, frontend only | source + explore context |
+| 04 | `plan` | Break into phases, write the plan and phase files | explore output + wireframe |
-Actions may chain (e.g. extract from image, then plan). Read and follow each selected action file.
+Run them in order, `01 → 04`. The plan is the culmination. Skip `03` when there is no UI.
-## Actions
+## References
-- `@actions/01-plan.md`
-- `@actions/02-components-behavior.md`
-- `@actions/03-image-extract-details.md`
+- `references/wireframe-conventions.md`: how to draw the ASCII wireframe a screen needs.
+- `references/plan-status.md`: the plan lifecycle `status` values and who writes each.
-## References
+## Assets
-- `@references/plan-status.md` - plan lifecycle `status` values, meaning, and who writes each. All actions inherit it; do not re-specify the table elsewhere.
+- `assets/plan-template.md`: the `plan.md` scaffold.
+- `assets/phase-template.md`: the per-phase scaffold.
diff --git a/plugins/aidd-dev/skills/01-plan/actions/01-gather.md b/plugins/aidd-dev/skills/01-plan/actions/01-gather.md
new file mode 100644
index 00000000..22d9571c
--- /dev/null
+++ b/plugins/aidd-dev/skills/01-plan/actions/01-gather.md
@@ -0,0 +1,21 @@
+# 01 - Gather
+
+Collect the source the plan will rest on, before any planning. Read only.
+
+## Input
+
+The user's request, which may be empty.
+
+## Output
+
+The source restated in a few bullets: what is asked and the hard constraints it states. The source kind and reference (file path, ticket id, or text) are named.
+
+## Process
+
+1. **Find.** Identify what the request points to: a file path, a ticket URL or id, or raw text. When nothing concrete is given, ask once for a file, a ticket, or a description. Do not start without a source.
+2. **Pull.** Read the file, fetch the ticket, or take the text as given. Never invent content the source does not contain.
+3. **Restate.** Summarize the source in a few bullets: what is asked, and the hard constraints it states. No solution, no phases, no plan.
+
+## Test
+
+- The output names the source kind and reference and restates it in bullets, states no solution, and when nothing concrete was given the user was asked before anything else.
diff --git a/plugins/aidd-dev/skills/01-plan/actions/01-plan.md b/plugins/aidd-dev/skills/01-plan/actions/01-plan.md
deleted file mode 100644
index 15863fcf..00000000
--- a/plugins/aidd-dev/skills/01-plan/actions/01-plan.md
+++ /dev/null
@@ -1,72 +0,0 @@
-# 01 - Plan
-
-Generate a technical implementation plan from requirements, save it to a task file, display it for review, and wait for explicit user confirmation. Never code anything.
-
-## Inputs
-
-```yaml
-requirements:
-ticket_number: # optional; inferred when the input is a ticket URL
-```
-
-## Outputs
-
-```yaml
-plan_path: aidd_docs/tasks//-?<#ticket_number>-(-master|-part-N)?.md
-plan_kind: simple | master
-confidence: 0-10
-architecture_projection:
- modify: []
- create: []
- delete: []
-applicable_rules: [{ tool: , name: , path: , why: }]
-```
-
-## Process
-
-1. **Parse the input.** Detect ticket URL vs raw text. For URLs, fetch and parse ticket content. For raw text, clean and structure. Normalize text (handle vocal dictation issues). Print the user journey as a simplified ASCII diagram for validation.
-2. **Score risk and impact.** Compute the score and pick the plan kind:
- - Score < 3 -> simple plan (`@../assets/plan-template.md`)
- - Score >= 3 -> master plan (`@../assets/master-plan-template.md` + child plans)
-
- | Criterion | Points |
- | ------------------------------- | ------ |
- | Breaking changes to public APIs | +3 |
- | Database / schema migrations | +3 |
- | 3+ modules affected | +2 |
- | 5+ modules affected | +3 |
- | Major refactoring | +2 |
- | External dependency upgrades | +2 |
-
- Each part of the plan must be doable without the next ones (independent phases for compatibility).
-3. **Validate technical assumptions** by spawning a sub-agent task to:
- - Explore the codebase to inform plan generation.
- - List implicit assumptions about the user's infrastructure.
- - Verify API feasibility before committing to an approach.
- - Flag blockers and risks that will arise if not addressed.
- - Check assumptions against official documentation.
- - Produce the architecture projection (three lists, each `path - one-line reason`): files to modify, files to create, files to delete.
- - Inventory project rules from the user's project root; accept a silent empty array when no surface contains rules.
-4. **Architecture projection and rules - user validation (gate).**
- - From the rules inventory, select rules that apply to the projection using each rule's `description` and `paths` when present. Justify every selected rule in one line.
- - Display: the three modify / create / delete lists; the table of applicable rules `tool | name | path | why it applies`.
- - Ask: "Is this projection correct? Anything to add or remove? A missing rule?"
- - WAIT FOR USER APPROVAL. Iterate until approved.
-5. **Task planning.** Define main phases at the macro level; do not mention specific files. Wait for user validation on the phases before moving on. For each phase, list minimal, specific, actionable tasks.
-6. **Generate and save the plan.**
- - Use the current `!`date`!` for the date stamp.
- - Determine the feature name from the requirements.
- - Insert the user journey as Mermaid syntax in the plan (apply `@../references/mermaid-conventions.md`).
- - Fill the chosen template, including the validated architecture projection and applicable rules.
- - Fill execution frontmatter (required): `objective`, `status: pending`.
- - Save to disk:
- - Simple plan: `aidd_docs/tasks//-?<#ticket_number>-.md`
- - Master plan: `aidd_docs/tasks//-?<#ticket_number>--master.md`
- - Child plans: `aidd_docs/tasks//-?<#ticket_number>--part-N.md`
- - Display the saved file path.
-7. **Quality assurance.** Verify the plan addresses every requirement; flag potential challenges; evaluate confidence (0-10) with ✓ reasons and ✗ risks; require minimum 9/10 before display; add the assessment to the plan.
-8. **Display and confirm.** Show the plan, the confidence assessment, and any risks. Challenge the plan with the user. WAIT FOR USER APPROVAL.
-
-## Test
-
-The plan file exists at `plan_path`; its frontmatter contains `objective` and `status: pending`; the architecture projection (M / C / D) is non-empty and matches the validated lists; the applicable rules table is consistent with the project's rules inventory; confidence is `>= 9`.
diff --git a/plugins/aidd-dev/skills/01-plan/actions/02-components-behavior.md b/plugins/aidd-dev/skills/01-plan/actions/02-components-behavior.md
deleted file mode 100644
index 2f4efbc5..00000000
--- a/plugins/aidd-dev/skills/01-plan/actions/02-components-behavior.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# 02 - Components behavior
-
-Define the expected behavior of one or more frontend components as state machines, rendered in Mermaid syntax for user validation.
-
-## Inputs
-
-```yaml
-components:
-```
-
-## Outputs
-
-```yaml
-state_machines:
- - component:
- diagram:
- states: []
- transitions: [{ from: , to: , event: , condition: }]
-```
-
-## Process
-
-Iterate over the steps below until each component is fully defined.
-
-1. **Parse the request.** Extract the list of components from `$ARGUMENTS`.
-2. **Per component**:
- - Identify the key states the component can be in.
- - Determine the events or actions that trigger transitions between states.
- - Define the state machine in Mermaid syntax, applying `@../references/mermaid-conventions.md`.
-3. **Sanity-check the model.** Confirm the state machine captures every state and every transition relevant to the component's behavior.
-4. **Present the final state machines** to the user for validation. Wait for an explicit OK before exiting.
-
-## Test
-
-For each component in `components`: the corresponding `state_machines` entry has a Mermaid block that parses, lists at least two states, and every transition references states that exist in the same diagram.
diff --git a/plugins/aidd-dev/skills/01-plan/actions/02-explore.md b/plugins/aidd-dev/skills/01-plan/actions/02-explore.md
new file mode 100644
index 00000000..33a6916d
--- /dev/null
+++ b/plugins/aidd-dev/skills/01-plan/actions/02-explore.md
@@ -0,0 +1,23 @@
+# 02 - Explore
+
+Read the codebase to ground the plan: what it touches, which rules apply, what is feasible. Read only.
+
+## Input
+
+The gathered source from `01-gather`.
+
+## Output
+
+The architecture projection (files to modify, create, delete, each with a one-line reason), the project rules that apply (each justified in one line, or none), the feasibility checks (each source consulted, a doc URL or an in-repo file, and what it settled), and the risks.
+
+## Process
+
+1. **Read.** Explore the code the source touches. Build the projection and list the infrastructure assumptions.
+2. **Check.** Verify against the official docs or the in-repo code. Keep each source and what it settled. Flag blockers and risks.
+3. **Select.** Keep the project rules that apply to the projection.
+
+## Test
+
+- The projection lists files to modify, create, and delete, each with a one-line reason.
+- Every feasibility check records its source and what it settled.
+- The applicable rules are identified and justified, or none apply.
diff --git a/plugins/aidd-dev/skills/01-plan/actions/03-image-extract-details.md b/plugins/aidd-dev/skills/01-plan/actions/03-image-extract-details.md
deleted file mode 100644
index 8e985445..00000000
--- a/plugins/aidd-dev/skills/01-plan/actions/03-image-extract-details.md
+++ /dev/null
@@ -1,79 +0,0 @@
-# 03 - Image extract details
-
-Analyze an image to identify and extract the main components, group them by type, merge close variants, and emit a hierarchical inventory ready for planning.
-
-## Inputs
-
-```yaml
-image:
-```
-
-## Outputs
-
-```yaml
-main_reusable_components_with_variants:
- - name:
- variants:
- - name:
- style:
-main_display_components:
- - component_name:
- layouts:
- - type:
- style:
- position_and_display:
- components: []
-```
-
-## Process
-
-1. **Identify reusable components.** Scan the image for repeatable UI atoms; group them by type.
-2. **Extract variants.** For each reusable atom, collect distinct visual variants. Merge variants that are very close (same role, marginal styling differences).
-3. **Remove duplicates.** Keep each unique component once.
-4. **Hierarchical organization.** Place layout-level display components above the reusable atoms; nest layouts and their sub-components.
-5. **Boundaries.** Emoji are not components. Do not detail photography.
-
-## Test
-
-`main_reusable_components_with_variants` lists each unique reusable atom exactly once with at least one variant; `main_display_components` covers every top-level section visible in the image; no entry references emoji or stock photography.
-
-## Output format example
-
-```yaml
-main_reusable_components_with_variants:
- - name: "Chip"
- variants:
- - name: "Generate"
- style: "Purple text, rounded pill shape, small sparkle icon"
-
-main_display_components:
- - component_name: Hero Section
- layouts:
- - type: Vertical Stack
- style: "Centered alignment, full-width layout"
- position_and_display: "Top of page"
- components:
- - type: Text Block
- content: "For individuals, independent creators and tech companies"
- variant: "Heading"
- - type: Text Block
- content: "Empowering individuals, creators, and tech innovators with cutting-edge AI solutions."
- variant: "Subheading"
-
- - component_name: Feature Grid
- layouts:
- - type: Two-Column Layout
- style: "Even 2-column grid, responsive layout"
- position_and_display: "Below hero section"
- components:
- - component_name: Right Feature Card
- position_and_display: "Right column"
- layout: "Vertical stack"
- sub_components:
- - type: Text Block
- content: "Don't write by yourself, it's boring. Instead, let AI"
- variant: "Paragraph"
- - type: Chip
- content: "Enhance"
- variant: "Enhance"
-```
diff --git a/plugins/aidd-dev/skills/01-plan/actions/03-wireframe.md b/plugins/aidd-dev/skills/01-plan/actions/03-wireframe.md
new file mode 100644
index 00000000..53d8b3a5
--- /dev/null
+++ b/plugins/aidd-dev/skills/01-plan/actions/03-wireframe.md
@@ -0,0 +1,20 @@
+# 03 - Wireframe
+
+Sketch a low-fidelity ASCII wireframe of a screen, to fix its layout before the plan. Frontend only, skip it when the feature has no UI.
+
+## Input
+
+The screens to sketch, from the gathered source and the `02-explore` context (the existing screens and components).
+
+## Output
+
+A low-fidelity ASCII wireframe of each screen, its regions and key elements in place, with a numbered note per region. Structure only, no behavior, no styling, no final copy.
+
+## Process
+
+1. **Pick.** List the screens the feature needs. Skip the action entirely when there is no UI.
+2. **Draw.** Sketch each screen per `@../references/wireframe-conventions.md`. The wireframe feeds the plan.
+
+## Test
+
+- The output is a box-drawing wireframe of each screen with numbered regions and a one-line note each, carrying no behavior, styling, or final copy.
diff --git a/plugins/aidd-dev/skills/01-plan/actions/04-plan.md b/plugins/aidd-dev/skills/01-plan/actions/04-plan.md
new file mode 100644
index 00000000..b3b7aa6f
--- /dev/null
+++ b/plugins/aidd-dev/skills/01-plan/actions/04-plan.md
@@ -0,0 +1,26 @@
+# 04 - Plan
+
+Turn the explored source into a plan and its phases, save them, then review the whole until approved. Never code.
+
+## Input
+
+The explore output from `02-explore` (projection, rules, feasibility, risks), plus any confirmed wireframe from `03-wireframe`.
+
+## Output
+
+A feature folder, always at `aidd_docs/tasks//_/`, holding `plan.md` from `@../assets/plan-template.md` and one `phase-.md` per phase from `@../assets/phase-template.md`.
+
+## Process
+
+1. **Phases.** Break the work into phases, each a coherent unit of work that ships and verifies on its own, sized for one executor pass. Let the work decide how many.
+2. **Folder.** Reuse the feature folder the source already lives in, or create one.
+3. **Fill.** Scaffold from the templates and fill only the sections they define, omitting any that stays empty (resources when nothing was consulted). Slice the projection across the phases, list the consulted resources in the resources table, and embed any wireframe in its phase's Wireframe section.
+4. **Show.** Display the written paths.
+5. **Review.** Show the complete plan and its phases with a confidence score (0 to 10, ✓ reasons and ✗ risks). Take feedback, revise the files, and re-show until approved. The score is never written to the plan.
+
+## Test
+
+- `aidd_docs/tasks//_/plan.md` exists with one `phase-.md` per phase next to it.
+- No `{...}` placeholder is left in any written file.
+- The phase projection slices together cover the modify, create, and delete lists.
+- A confidence score was reported and written to no file.
diff --git a/plugins/aidd-dev/skills/01-plan/assets/master-plan-template.md b/plugins/aidd-dev/skills/01-plan/assets/master-plan-template.md
deleted file mode 100644
index eaee3ebe..00000000
--- a/plugins/aidd-dev/skills/01-plan/assets/master-plan-template.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-name: master_plan
-description: Parent plan template orchestrating multiple child plans with validation gates
-argument-hint: N/A
----
-
-
-
-# Master Plan: {title}
-
-## Overview
-
-- **Goal**: {one-line summary}
-- **Risk Score**: {X}/10
-- **Branch**: `{branch-prefix}/`
-
-## Child Plans
-
-| # | Plan | File | Status | Validated |
-| --- | ----------- | --------------- | ------- | --------- |
-| 1 | {plan-name} | `./*-part-1.md` | pending | [ ] |
-| 2 | {plan-name} | `./*-part-2.md` | pending | [ ] |
-
-
-
-
-## Validation Protocol
-
-1. Complete Plan 1, run its validations
-2. [ ] Checkpoint 1: User confirms
-3. Unblock Plan 2, repeat
-4. [ ] Final: Integration test
-
-## Estimations
-
-- **Confidence**: {X}/10
-- **Duration**: {estimate}
diff --git a/plugins/aidd-dev/skills/01-plan/assets/phase-template.md b/plugins/aidd-dev/skills/01-plan/assets/phase-template.md
new file mode 100644
index 00000000..7d631c1b
--- /dev/null
+++ b/plugins/aidd-dev/skills/01-plan/assets/phase-template.md
@@ -0,0 +1,43 @@
+---
+status: pending
+---
+
+# Instruction: {title}
+
+Part of [`plan.md`](./plan.md).
+
+## Architecture projection
+
+
+
+```txt
+.
+```
+
+## User Journey
+
+```mermaid
+flowchart TD
+ A[TODO]
+```
+
+## Wireframe
+
+```txt
+{the confirmed wireframe, or omit this section when the phase has no UI}
+```
+
+## Tasks to do
+
+### `{number})` {name}
+
+> {straight to point goal}
+
+1. {ultra concise step}
+ ...
+
+## Test acceptance criteria
+
+| Task | Acceptance criteria |
+| ---- | ------------------------------------ |
+| 1... | {focused deterministic verification} |
diff --git a/plugins/aidd-dev/skills/01-plan/assets/plan-template.md b/plugins/aidd-dev/skills/01-plan/assets/plan-template.md
index a883d334..b1080cb1 100644
--- a/plugins/aidd-dev/skills/01-plan/assets/plan-template.md
+++ b/plugins/aidd-dev/skills/01-plan/assets/plan-template.md
@@ -1,106 +1,32 @@
---
-name: plan
-description: Living implementation plan - frozen objective, phases, and acceptance criteria.
-argument-hint: N/A
objective: "{What must be true when done. One sentence.}"
status: pending
---
-
+## Overview
-# Instruction: {title}
+| Field | Value |
+| ---------- | ----------------------- |
+| **Goal** | {one-line summary} |
+| **Source** | {file, ticket, or text} |
-## Feature
+## Phases
-- **Summary**: {Summarize feature based plan, goal oriented}
-- **Stack**: `[TECH_STACK_WITH_VERSIONS]`
-- **Branch name**: `{suggested-branch-name}`
-- **Parent Plan**: `{master-file}` or `none`
-- **Sequence**: `{N of M}` or `standalone`
-- Confidence: {Confidence}
-- Time to implement: {Time to implement}
+| # | Phase | File |
+| --- | ------------ | ---------------------------- |
+| 1 | {phase-name} | [`phase-1.md`](./phase-1.md) |
+| 2 | {phase-name} | [`phase-2.md`](./phase-2.md) |
-## Architecture projection
+## Resources
-
+| Source | Verified |
+| ------------- | --------------------------- |
+| {url or path} | {what it settled, one line} |
-### Files to modify
+## Decisions
-- `path/to/file.ts` - {one-line reason}
-
-### Files to create
-
-- `path/to/new-file.ts` - {one-line purpose}
-
-### Files to delete
-
-- `path/to/dead.ts` - {one-line reason}
-
-## Applicable rules
-
-
-
-| Tool | Name | Path | Why it applies |
-| ------ | ------ | ------------------------------------- | -------------- |
-| {tool} | {slug} | `//.` | {short reason} |
-
-## User Journey
-
-```mermaid
-flowchart TD
- A[TODO]
-```
-
-## Risk register
-
-
-
-| Risk | Impact | Mitigation |
-| -------- | ----------------------------- | ------------------------------------- |
-| {risk 1} | {what breaks if this happens} | {how the plan prevents or handles it} |
-
-## Implementation phases
-
-### Phase {n}: {name}
-
-> {straight to point goal}
-
-#### Tasks
-
-1. {ultra concise task1, with logical ordering}
-2. {...}
-3. {...}
-
-#### Acceptance criteria
-
-- [ ] {verifiable boolean condition 1}
-- [ ] {verifiable boolean condition 2}
-
-## Amendments
-
-
-
-## Log
-
-
-
-
-
-
-
-## Validation flow demonstration
-
-
-
-1. {Step 1...}
+| Decision | Why |
+| ---------- | -------------- |
+| {decision} | {one-line why} |
diff --git a/plugins/aidd-dev/skills/01-plan/assets/tech-choice-template.md b/plugins/aidd-dev/skills/01-plan/assets/tech-choice-template.md
deleted file mode 100644
index d9df39b7..00000000
--- a/plugins/aidd-dev/skills/01-plan/assets/tech-choice-template.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-name: tech-choice
-description: Technology selection and comparison template
-argument-hint: N/A
----
-
-# RESEARCH & RECOMMENDATIONS
-
-[Summary of the user needs and goals]
-
-## Technology Analysis: [SPECIFIC TECHNOLOGY CATEGORY]
-
-### Executive Summary
-
-One paragraph explaining top recommendation and why.
-
-### Comparison Matrix
-
-| Solution | Score /10 | Cost | Performance | Integration Effort | Maintenance | Scalability | Key Strength | Key Weakness |
-| -------- | --------- | ------- | ----------- | ------------------ | ------------ | ----------- | ------------ | ------------ |
-| Option 1 | X.X | €/month | Metric | Easy/Medium/Hard | Low/Med/High | Rating | Feature | Limitation |
-| Option 2 | X.X | €/month | Metric | Easy/Medium/Hard | Low/Med/High | Rating | Feature | Limitation |
-| Option 3 | X.X | €/month | Metric | Easy/Medium/Hard | Low/Med/High | Rating | Feature | Limitation |
-
-## Detailed Evaluation
-
-### 🏆 Recommended: [Technology Name]
-
-**Why this choice:**
-
-- Key reason 1
-- Key reason 2
-- Key reason 3
-
-**Implementation considerations:**
-
-- Migration path: Brief strategy
-- Time estimate: X weeks/months
-- Risk factors: Main risks
-
-### Alternative Options
-
-**[Option 2 Name]**
-
-- Best for: (Specific use case)
-- Choose if: (Specific conditions)
-- Avoid if: (Specific conditions)
-
-**[Option 3 Name]**
-
-- Best for: (Specific use case)
-- Choose if: (Specific conditions)
-- Avoid if: (Specific conditions)
-
-## Cost Analysis
-
-| Solution | Monthly | Annual | Hidden Costs | 2-Year TCO |
-| ------------ | ------- | ------ | ------------ | ---------- |
-| Current | €X | €X | (List) | €X |
-| Recommended | €X | €X | (List) | €X |
-| Savings/Cost | €X | €X | - | €X |
diff --git a/plugins/aidd-dev/skills/01-plan/references/mermaid-conventions.md b/plugins/aidd-dev/skills/01-plan/references/mermaid-conventions.md
deleted file mode 100644
index daa6a274..00000000
--- a/plugins/aidd-dev/skills/01-plan/references/mermaid-conventions.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-description: Rules for generating valid, high-quality Mermaid diagrams. Apply when creating or reviewing any Mermaid diagram (flowchart, state, ER, sequence, gantt).
-globs: ["**/*.mmd", "**/*.md"]
-alwaysApply: false
----
-
-# Mermaid generation rules
-
-## Header
-
-- Always have title in schema using "---" to define it
-
-## Global
-
-- NEVER use "\n"
-
-## States and nodes
-
-- Define groups, parents, children
-- Use fork and join states
-- Use clear and concise names
-- Use "choice" for conditions
-- No standalone nodes
-- No empty nodes
-
-## Naming
-
-- Declare elements only (no links) at top
-- Consistent naming throughout
-- Descriptive names (no "A", "B")
-- Node IDs: unquoted alphanumeric (`MyNode`, not `"MyNode"`)
-- Labels: in brackets with quotes (`MyNode["My Label"]`)
-- Replace ":" with "$" in state names
-
-## Links
-
-- Links made at bottom of diagram
-- Use direction when possible
-- "A -- text --> B" for regular links
-- "A -.-> B" for conditional links
-- "A ==> B" for self-loops
-
-## Styles
-
-- Do style unless specified by user
-
-## Gantt
-
-- Use tags: `active`, `done`, `crit`, `milestone`
-- Tags are combinable
diff --git a/plugins/aidd-dev/skills/01-plan/references/plan-status.md b/plugins/aidd-dev/skills/01-plan/references/plan-status.md
index 7d537560..51e98bf1 100644
--- a/plugins/aidd-dev/skills/01-plan/references/plan-status.md
+++ b/plugins/aidd-dev/skills/01-plan/references/plan-status.md
@@ -9,15 +9,15 @@ The plan's `status` frontmatter field tracks its lifecycle for kanban views. The
| status | meaning | written by | when |
| ------------- | ----------------------------- | ----------------------------------------------------------------- | ---------------------------------------------------------------- |
-| `pending` | created, not started | `01-plan` | at plan creation |
-| `in-progress` | implementation started | implement layer (SDLC `03-implement`; standalone `02-implement`) | when implementation starts |
-| `implemented` | implemented, not yet reviewed | implement layer | all phases complete / all acceptance criteria ticked |
-| `reviewed` | reviewed and approved | review layer (SDLC `04-review`) | the review passes (approved) |
-| `blocked` | cannot proceed; needs a human | implement layer | a blocking condition holds (see the implement skill's blocked reference) |
+| `pending` | created, not started | plan creation | at plan creation |
+| `in-progress` | implementation started | the implement step | when implementation starts |
+| `implemented` | implemented, not yet reviewed | the implement step | all phases complete / all acceptance criteria ticked |
+| `reviewed` | reviewed and approved | the review step | the review passes (approved) |
+| `blocked` | cannot proceed; needs a human | the implement step | a blocking condition holds |
## Rules
- Linear: `pending → in-progress → implemented → reviewed`. `blocked` is reachable from any active state.
-- Review reject (`iterate` / `changes-requested`) does NOT set `reviewed` → status returns to `in-progress`.
+- Review reject (`iterate` / `changes-requested`) does NOT set `reviewed`. The plan stays `implemented` while the loop fixes the diff, not the plan.
- `implemented` ≠ reviewed. Only the review layer sets `reviewed`.
-- The reviewer and implementer agents never write `status`; only plan creation (`01-plan`) and the orchestration layers do.
+- Workers never write `status`; only plan creation and the orchestration layers do.
diff --git a/plugins/aidd-dev/skills/01-plan/references/wireframe-conventions.md b/plugins/aidd-dev/skills/01-plan/references/wireframe-conventions.md
new file mode 100644
index 00000000..1dfb2394
--- /dev/null
+++ b/plugins/aidd-dev/skills/01-plan/references/wireframe-conventions.md
@@ -0,0 +1,28 @@
+# Wireframe conventions
+
+A wireframe is a low-fidelity ASCII sketch of a screen. Structure only: no behavior, no styling, no final copy.
+
+## Drawing
+
+- One box per screen, drawn with `┌ ─ ┐ │ └ ┘`.
+- Place the regions (header, nav, main, aside, footer) and the key elements (lists, forms, cards, buttons, inputs) where they sit.
+- Number each region.
+- Under the sketch, one line per number on what it holds and why.
+
+## Example
+
+```
+┌─────────────────────────────────────┐
+│ (1) Header: logo · search · account │
+├──────────┬──────────────────────────┤
+│ (2) Nav │ (3) Results list │
+│ filters │ ┌──────────────────────┐ │
+│ by type │ │ (4) Result card │ │
+│ │ └──────────────────────┘ │
+└──────────┴──────────────────────────┘
+```
+
+1. Header: brand, global search, account menu.
+2. Nav: filters that narrow the list.
+3. Results: the matched items, paginated.
+4. Card: one result, title and summary.
diff --git a/plugins/aidd-dev/skills/02-implement/README.md b/plugins/aidd-dev/skills/02-implement/README.md
index 8708a777..ea254931 100644
--- a/plugins/aidd-dev/skills/02-implement/README.md
+++ b/plugins/aidd-dev/skills/02-implement/README.md
@@ -2,23 +2,18 @@
# 02 - implement
-Executes an existing implementation plan phase by phase via the `implementer`
-agent, iterating until every acceptance criterion is satisfied. Each phase
-loops until the agent reports 100 % completion.
+Executes an existing implementation plan phase by phase, iterating until every acceptance criterion is satisfied. Tracks status in the plan and phase frontmatter as it goes.
## When to use
-- A plan produced by [01-plan](../01-plan/README.md) is ready and you need
- the code written end-to-end against it.
-- An iteration of [00-sdlc](../00-sdlc/README.md) is delegating the
- `implement` step to this skill.
+- A plan produced by [01-plan](../01-plan/README.md) is ready and you need the code written against it.
+- An iteration of [00-sdlc](../00-sdlc/README.md) delegates the implement step.
## When NOT to use
- No plan exists yet → use [01-plan](../01-plan/README.md) first.
-- The plan is wrong and needs replanning → amend the plan, not the code.
-- The task is a bug fix without a plan surface → use
- [08-debug](../08-debug/README.md).
+- The plan is wrong and needs replanning → replan with [01-plan](../01-plan/README.md); this skill never rewrites the plan.
+- A bug fix with no plan surface → use [08-debug](../08-debug/README.md).
## How to invoke
@@ -26,29 +21,25 @@ loops until the agent reports 100 % completion.
Use skill aidd-dev:02-implement
```
-Pass the plan path or content as `$ARGUMENTS`. The skill exposes 1 action:
+Pass the plan path or content as the arguments. The skill runs three actions in order:
-1. `implement` - loop each plan phase: spawn the `implementer` agent, wait
- for structured output, re-spawn with `items_remaining` until the phase
- hits 100 %. Branching is the caller's responsibility; this skill never
- creates branches. Plan amendments are made inline and tagged with the
- robot marker.
+1. **prepare**: fails fast when the plan is missing (never fabricates one); puts `HEAD` on a feature branch when it is on the default branch, otherwise keeps the current branch; sets the plan `status: in-progress`.
+2. **execute**: loops the plan's phases: per phase it sets `status: in-progress` as a runtime marker, codes the phase, asserts it clean, then commits the phase and sets `status: done`; stops at `status: blocked` on a human-only condition.
+3. **finalize**: runs validation, then marks the plan `status: implemented` once every phase is done.
+
+**Commits**: code and status are committed together, one commit per phase, plus a final `implemented` commit. The `in-progress` marks are runtime-only, so the tree is never left dirty at a phase boundary.
## Outputs
-- Code changes on the active branch, one phase at a time.
-- `phases_completed` count and `acceptance_satisfied: true` when done.
-- Plan amendments inline in the plan file when the loop discovers gaps.
+- Code for the feature, one phase at a time, committed on the active feature branch, one commit per phase.
+- Plan and phase frontmatter status driven `pending → in-progress → done / implemented`, or `blocked`.
+- A `replan needed` report when the plan no longer matches reality; this recipe never rewrites the plan.
## Prerequisites
-- A plan file with phases, M/C/D, and acceptance criteria.
-- The `implementer` agent available in context.
-- Project rules already loaded for the implementer to respect.
+- A plan file with phases and acceptance criteria, from `01-plan`.
+- Project conventions honoured by whoever runs the recipe.
## Technical details
-See [`SKILL.md`](SKILL.md) and
-[`actions/01-implement.md`](actions/01-implement.md) for the phase loop
-contract, the re-spawn rule, and the boundary constraints (no formatting,
-no dev mode).
+See [`SKILL.md`](SKILL.md) and [`actions/`](actions/) for the prepare/execute/finalize split: the branch guard, the phase loop, the assert gate, the status lifecycle, and the boundary constraints (no formatting, no dev mode).
diff --git a/plugins/aidd-dev/skills/02-implement/SKILL.md b/plugins/aidd-dev/skills/02-implement/SKILL.md
index eeff95ff..65dfdd57 100644
--- a/plugins/aidd-dev/skills/02-implement/SKILL.md
+++ b/plugins/aidd-dev/skills/02-implement/SKILL.md
@@ -1,24 +1,28 @@
---
name: 02-implement
-description: Execute an implementation plan phase by phase via the implementer agent, iterating until 100% completeness.
-context: fork
-agent: implementer
+description: Write an existing plan's code, phase by phase, until every acceptance criterion holds. Use when a plan exists and needs implementing. Do NOT use to write a plan, review a diff.
+argument-hint: prepare | execute | finalize
---
# Skill: implement
-Run an existing technical plan to write code, validating each phase before moving on.
+Run an existing plan to write its code, one phase at a time, until every acceptance criterion holds.
-## Agent delegation
+## Actions
-Spawn the `implementer` agent to execute this skill. For tools that do not support `context: fork` frontmatter: invoke the `implementer` agent explicitly with this skill's content as the prompt.
+| # | Action | Role | Input |
+| --- | ---------- | ----------------------------------------------- | ------------- |
+| 01 | `prepare` | Resolve the plan, branch, mark it in-progress | a plan path |
+| 02 | `execute` | Loop the phases, code and assert each | prepared plan |
+| 03 | `finalize` | Verify and mark the plan implemented | coded phases |
-## Actions
+Run them in order, `01 → 03`.
+
+## Transversal rules
-```markdown
-@actions/01-implement.md
-```
+- Status: drive the plan through `pending → in-progress → implemented` (or `blocked`), and each phase through `pending → in-progress → done`. The `in-progress` values are runtime markers; only `done` and `implemented` need to land in a commit.
+- Commits: one commit per phase, its code together with the phase reaching `done`, plus a final commit for the plan reaching `implemented`. Never leave the tree dirty at a phase boundary. Do not scatter separate `in-progress` status commits: one context now owns both code and status, so there is nothing to guard against.
## References
-- `@references/blocked.md` - conditions that make a plan `blocked` (needs a human). All actions inherit it.
+- `references/blocked.md`: the conditions that make a plan `blocked` and need a human.
diff --git a/plugins/aidd-dev/skills/02-implement/actions/01-implement.md b/plugins/aidd-dev/skills/02-implement/actions/01-implement.md
deleted file mode 100644
index b74d35e7..00000000
--- a/plugins/aidd-dev/skills/02-implement/actions/01-implement.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# 01 - Implement
-
-Code the whole feature based on the implementation plan, phase by phase, sequentially, until every acceptance criterion is satisfied.
-
-## Inputs
-
-```yaml
-plan:
-branch: # optional; created when the plan specifies one
-```
-
-## Outputs
-
-```yaml
-phases_completed:
-acceptance_satisfied: true
-notes:
- -
-```
-
-## Process
-
-1. **Branch.** Create a new branch if the plan specifies one (`git checkout -b `). Set `status: in-progress` on the plan. Status values and their meaning come from the plan-status reference (`01-plan/references/plan-status.md`) - the single source of truth; never restate the table here.
-2. **Phase loop.** For each phase listed in the plan, in order:
- - Spawn the `implementer` agent via the `Task` tool, passing the phase scope and acceptance criteria.
- - Wait for the agent's structured output. If `completion_score < 100`, re-spawn with `items_remaining` until the phase reaches 100 %.
-3. **Plan amendments.** If a phase is incorrect, incomplete, or blocked by missing information, amend the plan directly. Mark every change with 🤖 and a brief rationale.
-4. **Boundaries.** Never format code. Never run dev mode. Follow project rules already loaded in context.
-5. **Verify the feature.** Run validation commands, tests, and any manual checks required to confirm the feature works end to end.
-6. **Blocked.** If the implementer surfaces `BLOCKED` in its notes (see the blocked reference), set `status: blocked` and stop the loop.
-7. **Mark implemented.** Every phase at 100% + validation passes → set `status: implemented`.
-
-## Test
-
-After the loop terminates: every phase has its acceptance criteria checked off, validation commands exit zero, and the plan's frontmatter `status` is `implemented` — OR, if a blocking condition held, the loop stopped and it is `blocked`.
diff --git a/plugins/aidd-dev/skills/02-implement/actions/01-prepare.md b/plugins/aidd-dev/skills/02-implement/actions/01-prepare.md
new file mode 100644
index 00000000..7e99042d
--- /dev/null
+++ b/plugins/aidd-dev/skills/02-implement/actions/01-prepare.md
@@ -0,0 +1,23 @@
+# 01 - Prepare
+
+Resolve the plan, put the workspace on a feature branch, and mark the plan in-progress.
+
+## Input
+
+A plan, passed as arguments as a path or inline content.
+
+## Output
+
+The resolved plan on a feature branch with its frontmatter `status: in-progress`, ready for the phase loop. Or a fail-fast stop when no plan resolves.
+
+## Process
+
+1. **Resolve.** Resolve the plan from the arguments. A path must exist and be readable. With neither a readable file nor inline content, stop with `plan not found at `. Never fabricate a plan.
+2. **Branch.** On the default branch, create a feature branch and announce it. On a non-default branch, keep it.
+3. **Mark.** Set the plan frontmatter `status: in-progress` as a runtime marker. No separate commit: it rides into the first phase commit, or into the `implemented` commit if there is no phase to code.
+
+## Test
+
+- A missing or unreadable plan with no inline content stops with `plan not found at `, and no plan is fabricated.
+- The current branch is not the default branch.
+- The plan frontmatter reads `status: in-progress`.
diff --git a/plugins/aidd-dev/skills/02-implement/actions/02-execute.md b/plugins/aidd-dev/skills/02-implement/actions/02-execute.md
new file mode 100644
index 00000000..2464642f
--- /dev/null
+++ b/plugins/aidd-dev/skills/02-implement/actions/02-execute.md
@@ -0,0 +1,26 @@
+# 02 - Execute
+
+Loop the plan's phases in order, coding each until every acceptance criterion holds.
+
+## Input
+
+The prepared plan on its feature branch, from `01-prepare`.
+
+## Output
+
+Every phase coded, asserted, and its frontmatter marked `status: done`, with the commits on the branch. Or a stop at `status: blocked` when a human is needed, or a `replan needed` report on any drift from the plan.
+
+## Process
+
+1. **Open.** Walk the phases in order. In a feature folder each is a `phase-.md` next to `plan.md`. Set its `status: in-progress` as a runtime marker; no commit yet.
+2. **Code.** Build the phase scope against its acceptance criteria.
+3. **Assert.** Assert the phase against its acceptance criteria. On failure, repair and repeat. The gate is the assertion passing, not a self-report. Once it passes, set `status: done` and commit the phase as one unit, its code and its status together.
+4. **Guard.** Stop the loop on either condition:
+ - **Blocked** (see `@../references/blocked.md`): set the plan `status: blocked`, commit, stop.
+ - **Drift**: any mismatch with the plan, trivial or substantive, stop and report `replan needed: `. Never rewrite the plan; replanning is the caller's job.
+
+## Test
+
+- A phase reaches `status: done` only after assert passes against its acceptance criteria, in one commit with its code (`git status --short` shows no dangling phase edits).
+- The branch holds one commit per phase; there are no separate `in-progress` status commits.
+- A blocker leaves the plan `status: blocked` with no later phase run.
diff --git a/plugins/aidd-dev/skills/02-implement/actions/03-finalize.md b/plugins/aidd-dev/skills/02-implement/actions/03-finalize.md
new file mode 100644
index 00000000..2943bc42
--- /dev/null
+++ b/plugins/aidd-dev/skills/02-implement/actions/03-finalize.md
@@ -0,0 +1,21 @@
+# 03 - Finalize
+
+Run the validation and mark the plan implemented once every phase is done.
+
+## Input
+
+A plan whose phases are all `status: done`, from `02-execute`.
+
+## Output
+
+The feature validated green with the plan frontmatter `status: implemented`.
+
+## Process
+
+1. **Verify.** Run the plan's validation commands and tests. Never format code, never run dev mode.
+2. **Mark.** Every phase done and validation green, set the plan `status: implemented` and commit it.
+
+## Test
+
+- The validation commands exit zero.
+- The plan reads `status: implemented`, committed (`git status --short` shows it clean).
diff --git a/plugins/aidd-dev/skills/02-implement/references/blocked.md b/plugins/aidd-dev/skills/02-implement/references/blocked.md
index 3bdd7dc6..505a3389 100644
--- a/plugins/aidd-dev/skills/02-implement/references/blocked.md
+++ b/plugins/aidd-dev/skills/02-implement/references/blocked.md
@@ -4,6 +4,7 @@ description: Conditions that make a plan blocked (needs a human).
---
# When a plan is blocked
-`blocked` = implementation cannot proceed; only a human can unblock. Stop, set `status: blocked`, escalate.
+
+`blocked` means implementation cannot proceed and only a human can unblock it. Stop, set `status: blocked`, and escalate.
Physically impossible for the AI (no retry helps): real credit-card payment; human login (Google OAuth, Apple Face/Touch ID); a secret the AI cannot read; anything behind hardware or 2FA.
diff --git a/plugins/aidd-dev/skills/03-assert/README.md b/plugins/aidd-dev/skills/03-assert/README.md
index c0a9c069..2d79a27d 100644
--- a/plugins/aidd-dev/skills/03-assert/README.md
+++ b/plugins/aidd-dev/skills/03-assert/README.md
@@ -2,13 +2,13 @@
# 03 - assert
-Validates implementations through iterative assertion loops. Covers general
-feature assertions, architecture conformance (ADRs, diagrams, project
-structure), and browser-based frontend UI checks.
+A gate that validates the work behaves as intended: it iterates the project's
+coding assertions until they pass, with optional architecture-conformance and
+running-frontend facets. Returns a pass or fail verdict.
## When to use
-- A feature is implemented and you need to assert it behaves as intended
+- Work is implemented and you need to assert it behaves as intended
before merging or shipping.
- You need to verify code conforms to documented architecture (ADRs,
diagrams, structure).
@@ -30,21 +30,19 @@ structure), and browser-based frontend UI checks.
Use skill aidd-dev:03-assert
```
-The skill exposes 3 actions:
+The skill exposes 3 facets, run together when applicable or one when named:
-1. `assert` - general assertion loop against an acceptance criterion.
-2. `assert-architecture` - verify code matches architecture diagrams,
- ADRs, and the project's documented structure.
-3. `assert-frontend` - drive a browser to confirm a frontend feature
- behaves as intended.
+1. `assert` - the coding-assertion loop; always applies.
+2. `assert-architecture` - report where code breaks the documented
+ architecture (ADRs, diagrams, structure); report only, opt-in.
+3. `assert-frontend` - drive a browser to confirm the frontend
+ behaves as intended; needs a running frontend (it resolves the URL).
## Outputs
-- A pass / fail verdict per assertion, with the failing item identified.
-- Recorded findings when an assertion fails (file, line, expected vs
- observed).
-- Browser session artifacts (screenshots, console output) for the
- frontend variant.
+- A pass or fail verdict on the work (this is a gate, not a stored report).
+- The fixes applied by the coding and frontend facets.
+- The conformance violations from the architecture facet.
## Prerequisites
diff --git a/plugins/aidd-dev/skills/03-assert/SKILL.md b/plugins/aidd-dev/skills/03-assert/SKILL.md
index 32646380..5a4f8b8b 100644
--- a/plugins/aidd-dev/skills/03-assert/SKILL.md
+++ b/plugins/aidd-dev/skills/03-assert/SKILL.md
@@ -1,33 +1,30 @@
---
name: 03-assert
-description: Assert features work as intended - general assertions, architecture conformance, and frontend UI validation.
+description: Assert the work behaves by iterating the project's coding assertions until they pass, plus optional architecture and frontend facets. Use to validate an implementation. Not for reviewing or writing tests.
+argument-hint: assert | assert-architecture | assert-frontend
model: sonnet
---
# Skill: assert
-Validates correctness of implementations through iterative assertion loops, architecture checks, and browser-based frontend verification.
+Validate that the work behaves as intended: run the project's assertions, iterating and fixing until they pass.
-## Available actions
-
-| # | Action | When to use |
-| --- | --------------------- | ---------------------------------------------------------------------------- |
-| 01 | `assert` | Iterate until a feature works by running the project's coding assertions |
-| 02 | `assert-architecture` | Verify the codebase conforms to documented architecture (C4, ADRs, tree) |
-| 03 | `assert-frontend` | Iterate until a frontend feature works by inspecting the running UI |
+## Actions
-## Routing (run first)
+| # | Action | Facet |
+| --- | --------------------- | ----------------------------------------------------------- |
+| 01 | `assert` | Run the project's coding assertions, fixing until they pass |
+| 02 | `assert-architecture` | Report where the code breaks the documented architecture |
+| 03 | `assert-frontend` | Inspect the running UI, fixing until the behavior is right |
-These actions are complementary facets, not mutually exclusive. This skill is run-one-OR-run-all:
+Run every applicable facet by default, or one when named. Coding (`01`) always applies; add `03` when the work has a UI and a frontend is running, the facet resolving the URL itself; run `02` only when architecture conformance is asked for. Skip a facet whose precondition is absent, with a noted reason. Ask only when the intent is genuinely ambiguous.
-- The user named a facet ("assert the frontend", "check architecture conformance") -> run that ONE action.
-- The user asked for an unscoped assertion ("assert this works", "make the feature pass") -> ask ONE question: "Assert everything applicable, or a specific facet (coding / architecture / frontend)?" Then run all applicable, or the chosen one.
-- Never silently default to action 01. Never run a blind all without offering the choice first.
+## Transversal rules
-When running all applicable: `01-assert` is the baseline (project coding assertions); add `03-assert-frontend` when the feature has a UI and a running frontend URL; add `02-assert-architecture` when architecture conformance is in scope. A facet whose precondition is absent (e.g. no running URL) is skipped with a noted reason, never forced. Run the selected actions in order (01, then 03, then 02). Read and follow each selected action file.
+- Gate: it returns a pass or fail verdict on the work.
+- Fix loop: the coding and frontend facets fix and re-run until they pass. The architecture facet only reports, never fixes.
+- Stop only when every selected assertion passes a final clean sweep.
-## Actions
+## Assets
-- `@actions/01-assert.md`
-- `@actions/02-assert-architecture.md`
-- `@actions/03-assert-frontend.md`
+- `assets/task-template.md`: the tracking file the frontend facet fills across its fix loop.
diff --git a/plugins/aidd-dev/skills/03-assert/actions/01-assert.md b/plugins/aidd-dev/skills/03-assert/actions/01-assert.md
index cea380da..8904e510 100644
--- a/plugins/aidd-dev/skills/03-assert/actions/01-assert.md
+++ b/plugins/aidd-dev/skills/03-assert/actions/01-assert.md
@@ -1,32 +1,23 @@
# 01 - Assert
-Iterate until a feature works as intended by running the project's coding assertions and fixing every failure.
+Iterate the project's coding assertions until the work passes every one, fixing each failure.
-## Inputs
+## Input
-```yaml
-feature:
-```
+The work to assert, named or described, from the arguments or the context.
-## Outputs
+## Output
-```yaml
-assertions_total:
-assertions_passing:
-iterations:
-fixes_applied:
- - { file: , change: }
-```
+A pass or fail verdict: every applicable assertion passing in a final clean sweep, with the fixes applied listed.
## Process
-1. **Enumerate assertions.** From the current context (project conventions and coding-assertions memory), list the assertions that apply to the feature.
-2. **Iterate per assertion.** For each one:
- - Fix any issues preventing it from passing.
- - Re-run the assertion to confirm it passes.
-3. **Full re-check.** Once every assertion has passed at least once, re-run all of them in one sweep to confirm none regressed.
-4. **Boundary.** Do not stop until every assertion passes in the final sweep.
+1. **Enumerate.** List the assertions that apply, from the project conventions and `aidd_docs/memory/coding-assertions.md` when it exists.
+2. **Iterate.** For each assertion, fix what blocks it, then re-run it until it passes.
+3. **Sweep.** Once each has passed at least once, re-run them all in one pass to confirm none regressed.
+4. **Boundary.** Do not stop until every assertion passes the final sweep.
## Test
-The final sweep reports `assertions_passing == assertions_total`; the recorded `fixes_applied` list cites real diffs (no empty or placeholder entries when fixes were claimed).
+- The final sweep passes every applicable assertion.
+- The fixes listed cite real diffs, with no placeholder entries.
diff --git a/plugins/aidd-dev/skills/03-assert/actions/02-assert-architecture.md b/plugins/aidd-dev/skills/03-assert/actions/02-assert-architecture.md
index 8125bcd1..cea6c981 100644
--- a/plugins/aidd-dev/skills/03-assert/actions/02-assert-architecture.md
+++ b/plugins/aidd-dev/skills/03-assert/actions/02-assert-architecture.md
@@ -1,48 +1,24 @@
# 02 - Assert Architecture
-Verify that the codebase (or a specific scope) conforms to the documented architecture: C4 diagrams, ADRs, and project tree structure.
+Report where the codebase breaks the documented architecture: C4 diagrams, ADRs, and the project tree.
-## Inputs
+## Input
-```yaml
-scope: # optional; defaults to the entire project
-```
+The scope to check, a module, service, or layer, from the arguments; defaults to the whole project.
-## Outputs
+## Output
-```yaml
-report:
- macro:
- - { severity: critical|warning, file: , constraint: , fix: }
- micro:
- - { severity: critical|warning, file: , constraint: , fix: }
-totals:
- violations_total:
- critical:
- warning:
-```
+A conformance report listing each violation, grouped macro and micro, with severity, file, the constraint broken, and a one-line fix. Report only; it never fixes.
## Process
-1. **Load architecture context.**
- - Remember the architecture diagrams from `aidd_docs/memory/architecture.md`.
- - Read micro diagrams from `aidd_docs/memory/internal/` when the scope targets a specific module.
- - Read ADRs from `aidd_docs/internal/decisions/`.
- - Extract the expected project tree structure from the diagrams.
-2. **Verify macro architecture (service boundaries).**
- - Compare actual code structure against the documented tree.
- - Flag files outside expected boundaries.
- - Flag direct imports between independent services.
-3. **Verify micro architecture (internal layers).** For each module in scope:
- - Check that import directions match layer constraints.
- - Confirm the domain layer has zero external imports.
- - Confirm the application layer depends only on the domain via ports.
- - Detect circular dependencies between modules.
- - Verify the expected patterns (use cases have ports, adapters implement interfaces).
-4. **Build the violation report.** Each entry carries severity (`critical | warning`), file path, the constraint violated, and a one-line suggested fix. Group entries macro vs micro.
-5. **Boundary.** Do not fix violations - only report them. If no scope is provided, check the entire project.
-6. **Summarize.** Total violations, critical count, recommended next actions.
+1. **Load.** Read the architecture sources: the architecture memory, the micro diagrams for an in-scope module, and the decision records. Extract the expected project tree.
+2. **Macro.** Compare the code structure against the documented tree. Flag files outside their boundary and direct imports between independent services.
+3. **Micro.** For each in-scope module, check import directions against the layer constraints. The domain layer imports nothing external. The application layer reaches the domain only through ports. No circular dependencies. Adapters implement their interfaces.
+4. **Report.** One entry per violation, grouped macro and micro, each with severity (`critical` or `warning`), file, constraint, and a one-line fix.
+5. **Summarize.** The total violations, the critical count, and the recommended next actions.
## Test
-If conformity holds: `violations_total == 0` and the report explicitly states "no violations" in both macro and micro sections. If violations exist: every report entry has a real file path that exists on disk, a referenced constraint that appears in one of the loaded architecture sources, and a non-empty `fix` field.
+- On conformance, the report states "no violations" in both the macro and micro sections.
+- On violations, every entry has a real file path, a constraint drawn from a loaded architecture source, and a non-empty fix.
diff --git a/plugins/aidd-dev/skills/03-assert/actions/03-assert-frontend.md b/plugins/aidd-dev/skills/03-assert/actions/03-assert-frontend.md
index 92ae09f4..3d6a9d87 100644
--- a/plugins/aidd-dev/skills/03-assert/actions/03-assert-frontend.md
+++ b/plugins/aidd-dev/skills/03-assert/actions/03-assert-frontend.md
@@ -1,40 +1,26 @@
# 03 - Assert Frontend
-Iterate until a frontend feature works as intended by inspecting the running UI, mapping the behavior to the code, and tracking attempts in a task template.
+Iterate until the frontend behaves as intended by inspecting the running UI, mapping behavior to code, and tracking attempts.
-## Inputs
+## Input
-```yaml
-expected_behavior:
-url: # required; the frontend must already be running
-```
+The expected behavior, from the arguments. The frontend's URL when the caller knows it, otherwise resolved at runtime.
-## Outputs
+## Output
-```yaml
-task_template_path:
-iterations:
-fixed: true|false
-report:
- - { iteration: , hypothesis: , fix_attempted: , validated: pass|fail }
-```
+A pass or fail verdict, with the candidate causes and their fix attempts and results recorded in the tracking file.
## Process
-Iterate over the steps below until the feature works as intended.
-
-1. **Parse the request.** Extract expected requirements (visual, functional, technical) from `expected_behavior`. Summarize and list action paths (e.g. user clicks button -> calls function in file1 -> updates state in file2).
-2. **Inspect the running app.** Open the URL via the configured browsing tool. Inspect the page visually and technically. Take screenshots to confirm the issue.
-3. **Locate the code.** Explore the codebase to find the files and snippets related to the issue.
-4. **Fill the tracking template** from `@../assets/task-template.md`. List the three best potential causes with a short description and confidence level.
-5. **Fix-loop.**
- - Take the first potential cause.
- - Apply a candidate fix.
- - Validate against the expected behavior.
- - If not fixed, mark the cause and move to the next.
- - When the three causes are exhausted, re-evaluate, add three new causes to the template, and repeat from step 5.
-6. **Boundaries.** Assume all servers are already running. Minor visual discrepancies (1-2 px differences, slight color variations) are acceptable unless explicitly specified in the initial request. Screenshots MUST be used to validate UI changes.
+1. **Resolve.** Use the URL the caller gave, otherwise find the running frontend and confirm it responds. Skip this facet with a noted reason when none is running.
+2. **Parse.** Extract the visual, functional, and technical requirements from the expected behavior. Trace the action paths, for example a click calls a function in one file that updates state in another.
+3. **Inspect.** Open the URL with the project's configured browser tool and navigate to the screen the expected behavior targets. Inspect the page visually and technically, capturing a screenshot of the issue.
+4. **Locate.** Explore the codebase for the files behind the issue.
+5. **Track.** Fill the tracking file from `@../assets/task-template.md` with the three best candidate causes, each with a short description and a confidence level.
+6. **Fix.** Take a cause, apply a candidate fix, validate against the expected behavior. On failure, mark it and take the next. When the three are exhausted, add three fresh causes and repeat.
+7. **Boundary.** Never start or restart a server. Accept minor visual differences (1 to 2 px, slight color) unless the request specifies otherwise. Confirm every UI change with a screenshot.
## Test
-The task template file exists and is updated for every iteration; the final entry in `report` has `validated: pass`; the running URL renders the expected behavior, confirmed by a screenshot recorded after the final iteration.
+- The tracking file updates on every iteration.
+- The final recorded attempt validates as a pass, confirmed by a screenshot taken after it.
diff --git a/plugins/aidd-dev/skills/03-assert/assets/task-template.md b/plugins/aidd-dev/skills/03-assert/assets/task-template.md
index cdc9e1db..dc2beec2 100644
--- a/plugins/aidd-dev/skills/03-assert/assets/task-template.md
+++ b/plugins/aidd-dev/skills/03-assert/assets/task-template.md
@@ -1,15 +1,11 @@
----
-name: task
-description: Task tracking system to ensure all tasks are categorized and addressed
----
+
# Task []
{{Full description}}
-## Main step 1}
+## Main step 1
- [ ] {Task 1}
- [ ] {Task 2}
- [ ] {Task 3}
-- ...
diff --git a/plugins/aidd-dev/skills/04-audit/README.md b/plugins/aidd-dev/skills/04-audit/README.md
index f4cc8621..6e534c45 100644
--- a/plugins/aidd-dev/skills/04-audit/README.md
+++ b/plugins/aidd-dev/skills/04-audit/README.md
@@ -3,9 +3,8 @@
# 04 - audit
Read-only codebase audit across seven quality pillars. Diagnoses and ranks
-findings into a structured report; it never edits code. Each finding hands
-off to the relevant act-skill (refactor, test, impeccable) when a fix is
-wanted.
+findings into a structured report; it never edits code. Each finding carries
+a suggested fix for a later act-skill to apply.
## When to use
@@ -17,9 +16,9 @@ wanted.
## When NOT to use
- A specific bug is already known → use [08-debug](../08-debug/README.md).
-- You want to fix the problems → run the audit first, then the act-skill it
- hands off to ([07-refactor](../07-refactor/README.md),
- [06-test](../06-test/README.md), or the `impeccable` skill for UI).
+- You want to fix the problems → run the audit first, then an act-skill such
+ as [07-refactor](../07-refactor/README.md) or
+ [06-test](../06-test/README.md).
- You want a per-PR code review → use [05-review](../05-review/README.md).
- You want to validate a feature works → use [03-assert](../03-assert/README.md).
diff --git a/plugins/aidd-dev/skills/04-audit/SKILL.md b/plugins/aidd-dev/skills/04-audit/SKILL.md
index d4f98968..02448223 100644
--- a/plugins/aidd-dev/skills/04-audit/SKILL.md
+++ b/plugins/aidd-dev/skills/04-audit/SKILL.md
@@ -1,18 +1,19 @@
---
name: 04-audit
-description: Read-only codebase audit across quality pillars (code-quality, architecture, security, dependencies, performance, tests, ui). Diagnoses and reports findings; never edits code. Use when the user wants to assess, audit, or health-check a codebase or one dimension of it, then hands off to the act-skills (refactor, test, impeccable) to fix. Do NOT use for fixing the findings (hand off to refactor/test/impeccable), per-PR code review (use 05-review), or validating that a feature works (use 03-assert).
+description: Audit a codebase read-only across seven quality pillars into one ranked report. Use when the user wants to assess, health-check, or audit a codebase or one pillar. Not for fixing findings, reviewing a change, or checking a feature works.
+argument-hint: code-quality | architecture | security | dependencies | performance | tests | ui
model: opus
---
# Skill: audit
-Diagnoses a codebase against quality pillars and emits a structured findings report. This skill is **read-only**: it identifies and ranks problems, it never changes code. Each finding hands off to the relevant act-skill when a fix is wanted.
+Diagnose a codebase against quality pillars and emit one ranked findings report. Read-only: it identifies and ranks problems, never changes code.
-## Available actions
+## Actions
| # | Action | Pillar | Lens |
| --- | -------------- | ------------ | -------------------------------------------------------------------- |
-| 01 | `code-quality` | code-quality | Clean code (naming, SOLID, DRY, readability, smells) + tech debt (dead code, complexity, file/function size, error handling) |
+| 01 | `code-quality` | code-quality | Clean code (naming, SOLID, DRY, readability, smells) and tech debt (dead code, complexity, file/function size, error handling) |
| 02 | `architecture` | architecture | Conformance to C4 / ADRs, coupling, boundaries, layering |
| 03 | `security` | security | OWASP risks, authz, input validation, secrets in code |
| 04 | `dependencies` | dependencies | CVEs, licenses, outdated and unused deps, supply chain |
@@ -20,36 +21,16 @@ Diagnoses a codebase against quality pillars and emits a structured findings rep
| 06 | `tests` | tests | Critical-path coverage, flakiness, test pyramid balance |
| 07 | `ui` | ui | Loading/error/empty states, visual hierarchy, design-system drift, responsive, a11y |
-## Routing (run first)
-
-This skill is run-one-OR-run-all:
-
-- The user named a pillar ("audit security", "audit the deps", "perf audit") -> run that ONE action.
-- The user asked for a full or unscoped audit ("audit the codebase", "/audit", "health check") -> ask ONE question: "Full audit (all 7 pillars), or a specific pillar?" Then run all applicable pillars, or the chosen one.
-- Never silently default to action 01. Never run a blind all without offering the choice first.
-
-When running all, skip a pillar whose method cannot run in this environment (e.g. no profiler for performance, no lockfile scanner for dependencies) and record it under the report's `Coverage > Skipped` with the reason. Never invent findings for an unscannable pillar.
+Run the one pillar named, or offer all seven when the request is unscoped.
-## Output contract
+## Transversal rules
-The report uses the shared template `@assets/audit-template.md`. There is ALWAYS exactly one report file and exactly one writer of it - never one file per pillar in a full run.
+- Read-only: diagnose and rank, never edit code.
+- Scope: run the one named pillar, or for an unscoped request ask once "all seven pillars, or one?" before running. Never silently default to one pillar, never blind-run all without offering the choice.
+- One folder per run, `aidd_docs/tasks//_audit/`, like a feature folder. Every pillar that runs always writes its own `.md` there, alone or in a full run. A full run additionally writes a merged `report.md`: one Findings table (category = pillar, severity-first), one Top-actions list, and one Coverage section over all seven pillars.
+- Unscannable pillar: skip it, record it under `Coverage > Skipped` with the reason, and never invent findings for it.
+- Every finding row carries a severity, its pillar, a concrete `file:line`, the issue, a suggested fix, and an effort.
-**Single-pillar run.** Run the one pillar action; it writes its own report at `aidd_docs/tasks/audits/__.md`.
-
-**Full run.** Run each applicable pillar action to COLLECT its findings (the pillars do not each write a file in this mode), then write ONE merged report at `aidd_docs/tasks/audits/__full.md`:
-- one template header,
-- the union of every pillar's finding rows in a single Findings table (`Category` = the pillar per row), sorted severity-first across all pillars,
-- one ranked Top-actions list spanning all pillars,
-- one Coverage section listing all 7 pillars as scanned or skipped (with reason).
-
-Every finding row: severity + pillar + concrete `file:line` + issue + suggested fix + effort. Read-only in both modes: emit the report and stop; never edit code.
-
-## Actions
+## Assets
-- `@actions/01-code-quality.md`
-- `@actions/02-architecture.md`
-- `@actions/03-security.md`
-- `@actions/04-dependencies.md`
-- `@actions/05-performance.md`
-- `@actions/06-tests.md`
-- `@actions/07-ui.md`
+- `assets/audit-template.md`: the report structure both run modes fill.
diff --git a/plugins/aidd-dev/skills/04-audit/actions/01-code-quality.md b/plugins/aidd-dev/skills/04-audit/actions/01-code-quality.md
index cc2f4ae0..3dcc5e3e 100644
--- a/plugins/aidd-dev/skills/04-audit/actions/01-code-quality.md
+++ b/plugins/aidd-dev/skills/04-audit/actions/01-code-quality.md
@@ -1,31 +1,28 @@
# 01 - Code-quality audit
-Read-only audit of the `code-quality` pillar: clean-code craftsmanship and tech debt. Reports findings, never edits code.
+Read-only audit of the `code-quality` pillar, clean-code craftsmanship and tech debt. Reports findings, never edits code.
-## Inputs
+## Input
-```yaml
-scope: # optional; defaults to the entire codebase
-```
+An optional scope, a directory or file glob. Defaults to the entire codebase.
-## Outputs
+## Output
-```yaml
-audit_path: aidd_docs/tasks/audits/__code-quality.md # or __full.md in a full run
-pillar: code-quality
-findings_count:
-```
+The `code-quality` findings, written to `code-quality.md` in the run's audit folder.
## Process
-1. **Load scope.** Default to the full codebase when `scope` is absent; otherwise restrict scanning to the provided glob or directory.
-2. **Scan the two lenses** below, using the project's conventions and coding rules already loaded in context. Stay in this pillar - architecture coupling belongs to `02-architecture`, runtime cost to `05-performance`, coverage to `06-tests`, CVEs to `04-dependencies`.
- - **Clean code (craftsmanship)**: naming clarity, single-responsibility / SOLID, DRY (copy-pasted logic, re-implemented stdlib helpers), readability, abstraction level, magic numbers, dead or misleading comments, code smells.
- - **Tech debt (structural)**: dead and unreachable code, unused exports/types/helpers, stale TODOs, vestigial flags, cyclomatic complexity and file/function/component length above project thresholds, nesting depth, error handling caught at the wrong boundary or silently swallowed.
- - Use dedicated tools when available (e.g. an unused-export finder); never assert dead code without evidence.
-3. **Rate each finding.** Severity (🔴 / 🟡 / 🟢) and effort (S/M/L) per `@../assets/audit-template.md` legend. Quote a concrete `file:line` for every finding. Category is always `code-quality`.
-4. **Write the report** using `@../assets/audit-template.md`: fill the Findings table (one row per issue, severity-first), ranked Top actions (hand off fixes to `aidd-dev:07-refactor`), and the Coverage section. In a full audit run, contribute these finding rows to the single merged report per the skill output contract instead of writing a separate file. Read-only: emit the report and stop; do not edit code.
+1. **Scope.** Default to the full codebase when no scope is given. Otherwise restrict scanning to the provided glob or directory.
+2. **Scan.** Cover the two lenses below, using the project's conventions and coding rules already in context. Stay in this pillar: coupling belongs to `02-architecture`, runtime cost to `05-performance`, coverage to `06-tests`, CVEs to `04-dependencies`.
+ - **Clean code**: naming clarity, single-responsibility and SOLID, DRY (copy-pasted logic, re-implemented stdlib helpers), readability, abstraction level, magic numbers, dead or misleading comments, code smells.
+ - **Tech debt**: dead and unreachable code, unused exports, types, and helpers, stale TODOs, vestigial flags, cyclomatic complexity and file, function, or component length above project thresholds, nesting depth, error handling caught at the wrong boundary or silently swallowed.
+ - Use a dedicated tool when available, for example an unused-export finder. Never assert dead code without evidence.
+3. **Rate.** Give each finding a severity and an effort per the `@../assets/audit-template.md` legend, with a concrete `file:line`. The category is always `code-quality`.
+4. **Write.** Fill `@../assets/audit-template.md` into the pillar file: the Findings table (one row per issue, severity-first), the ranked Top actions, and the Coverage section. In a full run, also add the rows to the merged `report.md` in the same folder. Emit the report and stop.
## Test
-The output file exists at `audit_path`; it has the `## Findings`, `## Top actions`, `## Coverage` sections; every Findings row has a severity, category `code-quality`, a concrete `file:line`, and an effort; Coverage lists `code-quality` as scanned. No abstract "the codebase has..." sentences, no code changes made.
+- The output file exists at the reported path.
+- It has the `## Findings`, `## Top actions`, and `## Coverage` sections.
+- Every Findings row carries a severity, category `code-quality`, a concrete `file:line`, and an effort.
+- Coverage lists `code-quality` as scanned, and no code was changed.
diff --git a/plugins/aidd-dev/skills/04-audit/actions/02-architecture.md b/plugins/aidd-dev/skills/04-audit/actions/02-architecture.md
index f5685ef9..69baec04 100644
--- a/plugins/aidd-dev/skills/04-audit/actions/02-architecture.md
+++ b/plugins/aidd-dev/skills/04-audit/actions/02-architecture.md
@@ -1,32 +1,29 @@
# 02 - Architecture audit
-Read-only audit of the `architecture` pillar: conformance to documented architecture, module coupling, and layer/boundary violations. Reports findings, never edits code.
+Read-only audit of the `architecture` pillar, conformance to documented architecture, module coupling, and layer or boundary violations. Reports findings, never edits code.
-## Inputs
+## Input
-```yaml
-scope: # optional; defaults to the entire codebase
-```
+An optional scope, a directory or file glob. Defaults to the entire codebase.
-## Outputs
+## Output
-```yaml
-audit_path: aidd_docs/tasks/audits/__architecture.md # or