From 653de289c5cfb7fc733a80e59d1b955cdaf9e6ac Mon Sep 17 00:00:00 2001
From: Alex <8973343+alexsoyes@users.noreply.github.com>
Date: Sun, 19 Jul 2026 16:39:43 +0200
Subject: [PATCH 01/24] docs(framework): update README title and tagline
Align the project messaging with the framework's current branding and focus.
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index a185504bf..cfafe29fb 100644
--- a/README.md
+++ b/README.md
@@ -11,9 +11,9 @@
-# AI-Driven Dev Framework
+# AI-Driven Dev Framework ๐ซ๐ท
-### A French framework for AI-Driven Developers to ship high-quality code.
+## Agentic framework for software engineers to produce 100% quality code with IA, agonistically.
7 plugins ยท 40 skills ยท 2 agents ยท MIT
From 5ed748087abec3e836fdba87984049257d31f518 Mon Sep 17 00:00:00 2001
From: "aidd-bot[bot]" <290648294+aidd-bot[bot]@users.noreply.github.com>
Date: Sun, 19 Jul 2026 14:40:34 +0000
Subject: [PATCH 02/24] chore: release main (#453)
Co-authored-by: aidd-bot[bot] <290648294+aidd-bot[bot]@users.noreply.github.com>
---
.claude-plugin/marketplace.json | 2 +-
.release-please-manifest.json | 2 +-
CHANGELOG.md | 7 +++++++
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json
index b36fd3eb0..1988ffc45 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.5.0",
+ "version": "5.5.1",
"description": "Official plugin marketplace for the AI-Driven Development framework",
"owner": {
"name": "AI-Driven Dev"
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index eadca2da5..c4f65dc35 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,5 +1,5 @@
{
- ".": "5.5.0",
+ ".": "5.5.1",
"plugins/aidd-context": "2.4.0",
"plugins/aidd-dev": "2.3.1",
"plugins/aidd-vcs": "2.2.1",
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fd32adfa7..c6a725849 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## [5.5.1](https://github.com/ai-driven-dev/framework/compare/v5.5.0...v5.5.1) (2026-07-19)
+
+
+### Documentation
+
+* **framework:** update README title and tagline ([653de28](https://github.com/ai-driven-dev/framework/commit/653de289c5cfb7fc733a80e59d1b955cdaf9e6ac))
+
## [5.5.0](https://github.com/ai-driven-dev/framework/compare/v5.4.2...v5.5.0) (2026-07-16)
From 766198003bdd18c2f07564dcd8d2762d5c88bba4 Mon Sep 17 00:00:00 2001
From: Baptiste LAFOURCADE
Date: Thu, 16 Jul 2026 11:29:17 +0200
Subject: [PATCH 03/24] refactor(aidd-context): action citations use markdown
links, not @
Convert every `@../` reference in the action files of skill-generate and
project-memory to standard markdown links `[name](path)`, so citations are
clickable in editors and on GitHub.
Propagate the convention to the contract so generated skills follow suit:
R6 now mandates a markdown link, R8 drops the `@`-chain wording, and
review-protocol says "cited references". Functional `@`-imports in the memory
block (`@aidd_docs/...`) are untouched: those are load mechanics, not citations.
Sync docs/CATALOG.md skill-generate action names to the shipped set.
Co-Authored-By: Claude Opus 4.8
Claude-Session: https://claude.ai/code/session_0177RKF7c5Wpv329Q7QYquV2
---
docs/CATALOG.md | 2 +-
.../skills/02-project-memory/actions/01-scan.md | 2 +-
.../skills/02-project-memory/actions/02-generate.md | 12 ++++++------
.../skills/02-project-memory/actions/03-sync.md | 6 +++---
.../skills/04-skill-generate/actions/01-scope.md | 8 ++++----
.../skills/04-skill-generate/actions/02-plan.md | 2 +-
.../skills/04-skill-generate/actions/03-write.md | 12 ++++++------
.../skills/04-skill-generate/actions/04-validate.md | 4 ++--
.../04-skill-generate/references/review-protocol.md | 2 +-
.../04-skill-generate/references/skill-authoring.md | 4 ++--
10 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/docs/CATALOG.md b/docs/CATALOG.md
index ac2e92864..dff6ad294 100644
--- a/docs/CATALOG.md
+++ b/docs/CATALOG.md
@@ -22,7 +22,7 @@ Bootstrap, project init, context-artifact generation, diagrams, learning, and ex
| `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` | Give the AI a memory of the project, wired into the tools you use | `01-scan`, `02-generate`, `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` |
+| `04-skill-generate` | Generate a router-based skill across the host AI tool(s) | `01-scope`, `02-plan`, `03-write`, `04-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` |
diff --git a/plugins/aidd-context/skills/02-project-memory/actions/01-scan.md b/plugins/aidd-context/skills/02-project-memory/actions/01-scan.md
index 57658613d..7bd7a455d 100644
--- a/plugins/aidd-context/skills/02-project-memory/actions/01-scan.md
+++ b/plugins/aidd-context/skills/02-project-memory/actions/01-scan.md
@@ -14,7 +14,7 @@ The confirmed capabilities, printed nowhere.
1. **Ground.** Look for something to remember: source code, or anything written about what the project is.
- Nothing there: stop, say so, send the user to create something first.
-2. **Find.** Detect the project's capabilities per `@../references/capability-signals.md`, each with its repo evidence.
+2. **Find.** Detect the project's capabilities per [capability-signals.md](../references/capability-signals.md), each with its repo evidence.
3. **Ask.** Show each capability with its evidence. Ask the user to add or drop one. Wait for the answer.
4. **Confirm.** Keep the confirmed set in context for generate.
diff --git a/plugins/aidd-context/skills/02-project-memory/actions/02-generate.md b/plugins/aidd-context/skills/02-project-memory/actions/02-generate.md
index 63fac9ddf..5d7351e5a 100644
--- a/plugins/aidd-context/skills/02-project-memory/actions/02-generate.md
+++ b/plugins/aidd-context/skills/02-project-memory/actions/02-generate.md
@@ -12,22 +12,22 @@ The written memory bank, and a report of what changed.
## Process
-1. **Scaffold.** Create the tree in `@../references/structure.md`.
-2. **Select.** Take the rows to write from `@../references/memory-destinations.md`.
-3. **Write.** Write each selected row to its destination, against `@../references/memory-rules.md`.
+1. **Scaffold.** Create the tree in [structure.md](../references/structure.md).
+2. **Select.** Take the rows to write from [memory-destinations.md](../references/memory-destinations.md).
+3. **Write.** Write each selected row to its destination, against [memory-rules.md](../references/memory-rules.md).
- The destination is the one the table names. Never derive a path.
- Absent file: fill the template, strip its guidance comment.
- Existing file: revise it in place.
- Report a template section the file now lacks when the project has something for it. Never inject it.
4. **Prune.** A file on disk whose capability is no longer selected: flag it, offer to remove it, delete only on the user's word.
-5. **Review.** Have each memory file reviewed against `@../references/review-protocol.md` by an independent agent, a checker agent if the project has one, in parallel. Without subagents, make one fresh pass per file yourself, and say so in the report.
+5. **Review.** Have each memory file reviewed against [review-protocol.md](../references/review-protocol.md) by an independent agent, a checker agent if the project has one, in parallel. Without subagents, make one fresh pass per file yourself, and say so in the report.
6. **Fix.** Apply the safe findings. On a duplicated fact, keep its home and drop the copy.
-7. **Report.** Fill `@../assets/report.md`.
+7. **Report.** Fill [report.md](../assets/report.md).
## Test
- `find aidd_docs/memory -mindepth 2 -name '*.md'` returns nothing outside `internal/` and `external/`.
-- Every `core` destination and every `@../references/structure.md` path exists at its exact place.
+- Every `core` destination and every [structure.md](../references/structure.md) path exists at its exact place.
- `internal/` and `external/` exist, each with a `.gitkeep` and no memory file.
- No `TODO` or `` remains in a written file.
- A line the user added survives a re-run, and a flagged missing section is never injected.
diff --git a/plugins/aidd-context/skills/02-project-memory/actions/03-sync.md b/plugins/aidd-context/skills/02-project-memory/actions/03-sync.md
index 146409342..1597732c4 100644
--- a/plugins/aidd-context/skills/02-project-memory/actions/03-sync.md
+++ b/plugins/aidd-context/skills/02-project-memory/actions/03-sync.md
@@ -13,12 +13,12 @@ Each picked tool's context file, carrying the filled block.
## Process
1. **Require.** Stop unless `aidd_docs/memory/` holds a `.md` file. Send the user to generate first.
-2. **Detect.** Find the AI tools present per `@../references/tools.md`.
+2. **Detect.** Find the AI tools present per [tools.md](../references/tools.md).
3. **Pick.** Show every tool, the detected ones ticked. Let the user pick one or several. Wait for the pick.
-4. **Upsert.** Ensure each picked tool's context file carries the block, shaped like `@../assets/AGENTS.md`.
+4. **Upsert.** Ensure each picked tool's context file carries the block, shaped like [AGENTS.md](../assets/AGENTS.md).
- Absent file: create it from that template.
- Existing file: add only the missing `## Memory Management` section or block, leaving the rest untouched.
- - If its AIDD structure differs from `@../assets/AGENTS.md`, offer to reconcile it, applying only what the user approves.
+ - If its AIDD structure differs from [AGENTS.md](../assets/AGENTS.md), offer to reconcile it, applying only what the user approves.
- Touch no file a picked tool does not resolve to.
5. **Fill.** Run `hooks/update_memory.js` from the project root, naming the picked tools.
6. **Guard.** On a non-zero script exit, show the error and stop.
diff --git a/plugins/aidd-context/skills/04-skill-generate/actions/01-scope.md b/plugins/aidd-context/skills/04-skill-generate/actions/01-scope.md
index f5b707b8b..289257e49 100644
--- a/plugins/aidd-context/skills/04-skill-generate/actions/01-scope.md
+++ b/plugins/aidd-context/skills/04-skill-generate/actions/01-scope.md
@@ -10,14 +10,14 @@ A free-form request to create a skill.
## Process
-1. **Detect.** Detect the installed tools per `@../references/tool-detect.md`.
-2. **Fill.** For each field in `@../references/scope-frame.md`, propose a value or ask one question.
-3. **Check.** Check the name per `@../references/naming.md` and surface any overlap.
+1. **Detect.** Detect the installed tools per [tool-detect.md](../references/tool-detect.md).
+2. **Fill.** For each field in [scope-frame.md](../references/scope-frame.md), propose a value or ask one question.
+3. **Check.** Check the name per [naming.md](../references/naming.md) and surface any overlap.
4. **Confirm.** Hand the confirmed frame to plan.
## Output
-The confirmed frame, written nowhere, per `@../references/scope-frame.md`.
+The confirmed frame, written nowhere, per [scope-frame.md](../references/scope-frame.md).
## Test
diff --git a/plugins/aidd-context/skills/04-skill-generate/actions/02-plan.md b/plugins/aidd-context/skills/04-skill-generate/actions/02-plan.md
index 70d910c49..bf6a520bf 100644
--- a/plugins/aidd-context/skills/04-skill-generate/actions/02-plan.md
+++ b/plugins/aidd-context/skills/04-skill-generate/actions/02-plan.md
@@ -15,7 +15,7 @@ A plan table, one row per action: slug, input to output, test, and any dependenc
1. **List.** List every distinct job the output needs. Modify: start from the existing actions, touch only the jobs the user named.
2. **Atomize.** Prefer few actions, a job each, not a step. Merge two that share most logic.
-3. **Number.** Name, number, and give each an observable test, per `@../references/skill-authoring.md`.
+3. **Number.** Name, number, and give each an observable test, per [skill-authoring.md](../references/skill-authoring.md).
4. **Confirm.** Present the table, validate each test with the user.
## Test
diff --git a/plugins/aidd-context/skills/04-skill-generate/actions/03-write.md b/plugins/aidd-context/skills/04-skill-generate/actions/03-write.md
index 8c54eb5b5..dbaa4da24 100644
--- a/plugins/aidd-context/skills/04-skill-generate/actions/03-write.md
+++ b/plugins/aidd-context/skills/04-skill-generate/actions/03-write.md
@@ -13,17 +13,17 @@ The skill tree at the target, and the list of files written.
## Process
-1. **Tree.** Create the shape in `@../references/skill-tree.md`.
-2. **Router.** Fill `@../assets/skill-template.md` against `@../references/skill-authoring.md`, strip the scaffold.
+1. **Tree.** Create the shape in [skill-tree.md](../references/skill-tree.md).
+2. **Router.** Fill [skill-template.md](../assets/skill-template.md) against [skill-authoring.md](../references/skill-authoring.md), strip the scaffold.
- Modify: revise the existing SKILL.md in place, keeping the user's edits.
-3. **Actions.** Fill `@../assets/action-template.md` per row against `@../references/skill-authoring.md`, its test copied from the plan.
+3. **Actions.** Fill [action-template.md](../assets/action-template.md) per row against [skill-authoring.md](../references/skill-authoring.md), its test copied from the plan.
- Modify: revise a changed action in place. Leave an untouched one alone.
-4. **Hint.** Set `argument-hint` per `@../references/skill-authoring.md`.
-5. **Place.** Write once per confirmed target, using `@../references/tool-write.md`.
+4. **Hint.** Set `argument-hint` per [skill-authoring.md](../references/skill-authoring.md).
+5. **Place.** Write once per confirmed target, using [tool-write.md](../references/tool-write.md).
6. **Check.** Confirm every written path is relative, inside the workspace, outside the plugin install directory, and under the chosen target. Else stop and report it.
## Test
- SKILL.md holds a `mermaid` flowchart and a three-column action table.
- Every action file contains `## Output`, `## Process`, and `## Test`.
-- The written files match `@../references/skill-tree.md`.
+- The written files match [skill-tree.md](../references/skill-tree.md).
diff --git a/plugins/aidd-context/skills/04-skill-generate/actions/04-validate.md b/plugins/aidd-context/skills/04-skill-generate/actions/04-validate.md
index bf4561d64..e9daa7b3c 100644
--- a/plugins/aidd-context/skills/04-skill-generate/actions/04-validate.md
+++ b/plugins/aidd-context/skills/04-skill-generate/actions/04-validate.md
@@ -12,12 +12,12 @@ A report, one row per file: what was checked and any fix applied.
## Process
-1. **Review.** Review each file against `@../references/review-protocol.md`.
+1. **Review.** Review each file against [review-protocol.md](../references/review-protocol.md).
2. **Fix.** Apply the confirmed fixes on disk, then re-review the changed files.
3. **Report.** Deliver the findings, even when clean.
## Test
- The report covers every file, each with its findings or none.
-- No file breaches `@../references/skill-authoring.md`.
+- No file breaches [skill-authoring.md](../references/skill-authoring.md).
- Any file changed by a fix differs on disk.
diff --git a/plugins/aidd-context/skills/04-skill-generate/references/review-protocol.md b/plugins/aidd-context/skills/04-skill-generate/references/review-protocol.md
index bfa8a3a36..5a2e55a30 100644
--- a/plugins/aidd-context/skills/04-skill-generate/references/review-protocol.md
+++ b/plugins/aidd-context/skills/04-skill-generate/references/review-protocol.md
@@ -2,6 +2,6 @@
Review one generated skill file.
-1. **Read** the file, its cited `@` refs, and only the sibling files needed to verify a concrete claim.
+1. **Read** the file, its cited references, and only the sibling files needed to verify a concrete claim.
2. **Flag** each breach of `skill-authoring.md`, with a reason and a `file:line`.
3. **Return** the flags. Do not edit the file.
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 b662fe37e..b38aeae1f 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
@@ -7,9 +7,9 @@ The contract every generated skill satisfies. `skill-generate` obeys it too.
- **R3.** `description` is the only always-on text: verb-led, third person, about 240 chars, `Use when the user wants to ` and an optional `Not for `. No colon or dash, no other skill or `/command` named.
- **R4.** `argument-hint`: the action slugs when actions run one at a time, the user's cases (`setup | refresh | rewire`) for a pipeline, omitted for one action.
- **R5.** `name` is not the invocation token: a colon or prefix breaks loading. In prose call a skill `plugin:folder`.
-- **R6.** One fact, one home. An action acts within a router rule and cites a shared reference by `@`, never restating either.
+- **R6.** One fact, one home. An action acts within a router rule and cites a shared reference by a markdown link `[name](path)`, never restating either.
- **R7.** `references/` are read in place, `assets/` are copied or filled. A template holds no rule.
-- **R8.** References stay flat, nesting one directory deep only as a load boundary, and never `@`-chain another.
+- **R8.** References stay flat, nesting one directory deep only as a load boundary. Each stands alone, never pulling in another.
- **R9.** One file, one artifact. Split two apart only when a path needs one without the other.
- **R10.** Budget what a run reads, not file size: the router stays the leanest file.
- **R11.** A section earns its content or is omitted, never invented or reordered.
From cfaf61ba2933c32b43393b819c9976ba0105ffe3 Mon Sep 17 00:00:00 2001
From: Alex <8973343+alexsoyes@users.noreply.github.com>
Date: Sat, 18 Jul 2026 13:47:14 +0200
Subject: [PATCH 04/24] docs(framework): reposition readme as agnostic
token-optimized framework (#440)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* feat(aidd-context): add research and apply actions to cook skill
Extend 12-cook from author-only to a fuller loop:
- 03-research: refine the target recipe via a checklist, fan out one
agent per scouting angle, then present alternatives / coverage gaps /
counter-intuitive wins plus a recommendation. Ephemeral, never writes.
- 04-apply: execute an existing recipe against the project via an agent
that tracks the steps as a todo list and confirms before mutating.
- upsert: qualitative overlap guard (none/partial/high) that suggests
updating an existing recipe instead of creating a duplicate.
- recipe-template: steps become "#### N)" headings with what/why,
actionable how-bullets, and a mandatory concrete example
(command with output, snippet, or screenshot/video).
New references/assets: research-playbook, refine-goal-checklist,
research-checklist.
Co-Authored-By: Claude Opus 4.8
* feat(aidd-context): verify each research candidate before presenting
Add a Verify step to cook's 03-research: after curation, spawn one
agent per surviving candidate to confirm it exists, capture its
official link, and record its latest state. Drop anything that cannot
be confirmed against an official source.
This makes the checklist's "Confirm claims" real and guards the recipe
against hallucinated tools or methods.
Co-Authored-By: Claude Opus 4.8
* docs(framework): add token optimization recipe
Add recipes/token-optimization.md: a ranked list of token-saving tips
for AI coding assistants (measure first, trim CLAUDE.md, caveman,
RTK/SNIP, CLI over MCP, progressive disclosure, compact, model routing,
cap thinking), each tip in the new template format with a concrete
example and an official link verified to exist. Register it in the
recipes index.
Co-Authored-By: Claude Opus 4.8
* refactor(aidd-context): extract recipe contract and tighten cook template
Move the recipe authoring rules out of the template's HTML comment into
references/recipe-contract.md, cited by SKILL.md and upsert. The template
keeps only the scaffold.
- Steps heading carries the goal ("## Steps to ") and each step
opens with an emoji.
- Step how-bullets follow where-it-is -> install-from-URL -> how-to-use,
benefit-first and filler-free.
- "## Why" is short, keyword-led, and bold.
- SKILL.md description is shorter and high-level, triggered on
"recipe" / "cook" / "/cook".
Co-Authored-By: Claude Opus 4.8
* fix(aidd-context): repair 12-cook SKILL.md YAML frontmatter
The description contained an unquoted "sheets: list" colon, which YAML
parses as a mapping value and rejects ("mapping values are not allowed
here"), breaking the skill's frontmatter. Replace the colon with a dash.
The bug pre-dated this branch (same colon on main).
Co-Authored-By: Claude Opus 4.8
* refactor(aidd-context): refine cook recipe structure and apply R13 to cook
Review feedback on the cook skill, plus the new includes convention:
- Recipe template drops the Time field, groups steps under three level
subheadings (Beginner / Intermediate / Expert), and aligns the Level
enum to Expert.
- upsert now runs `research` (03) first for any new or substantial
recipe and drafts only from its verified results, never from memory โ
the "always research" rule was being skipped as a routing note.
- Apply R13 (explicit, scoped includes): the action-specific research
aids move out of SKILL.md and are cited from 03-research in fenced
blocks; refine-goal-checklist is renamed research-goal-checklist;
SKILL.md lists only the global recipe-template and recipe-contract.
Co-Authored-By: Claude Opus 4.8
* refactor(aidd-context): make recipe level subheadings optional
Level grouping was effectively mandatory. Make the contract state it is
optional: group steps under Beginner/Intermediate/Expert only when the
recipe spans difficulty levels and grouping helps; a short or
single-level recipe lists its steps directly. Relax the upsert Test
accordingly.
Co-Authored-By: Claude Opus 4.8
* docs(framework): conform token-optimization recipe to recipe contract
Align the recipe with references/recipe-contract.md: drop the Time row
(no longer in the template), name the section "Steps to " instead
of a bare Steps, remove the "ranked by impact" filler line, and give each
step how-bullets plus a concrete example.
Co-Authored-By: Claude Opus 4.8 (1M context)
* docs(framework): split measure steps per tool and drop metadata table
Apply review of the token-optimization recipe:
- Goal becomes a plain sentence (no blockquote).
- Drop the Level/Prerequisites table; level now lives in the subheadings.
- Split the bundled "Measure first" step into one step per tool
(/context, /cost, /insights, an analytics tool) โ one subheading per
action.
- Each measure step says how to use and read the command, and carries an
example output; the analytics step uses a real prompt-analytics run
(volumes rounded, cost omitted) showing cache reads dominate.
Co-Authored-By: Claude Opus 4.8
* docs(framework): drop the Goal label from token-optimization
The recipe opens with a plain description sentence, no "Goal:" label.
Co-Authored-By: Claude Opus 4.8
* refactor(aidd-context): recipe header = description sentence, no table
Rules extracted from the token-optimization recipe review:
- A recipe opens with the H1 title then one plain description sentence โ
no "Goal:" label, no blockquote, no metadata table. list/upsert parse
that sentence; the index becomes `| Recipe | Description |` (Level was
dropped, level now lives only in the optional subheadings).
- One step = one action; never bundle several tools or commands under a
single heading.
- Every step's example shows real command output (from docs or by
running it); the research playbook now requires capturing a real
example and marking interactive output for the human to paste.
- `## Why` is one idea per line.
Co-Authored-By: Claude Opus 4.8
* docs(framework): use the real prompt-analytics dashboard image
Replace the fabricated text output with the tool's official dashboard
screenshot (cost by token type makes "cache reads dominate" visible).
The slash-command placeholders now ask for a screenshot of the real
output.
Co-Authored-By: Claude Opus 4.8
* refactor(aidd-context): prefer images over text examples
A real screenshot or GIF is unfakeable, faithful, and credible, where a
text example can be approximated (the failure we hit). Make the contract
and the research playbook prefer an image that matches the action โ
e.g. a tool's official screenshot โ falling back to real text output
only when no image exists.
Co-Authored-By: Claude Opus 4.8
* docs(framework): show real tool usage in token-optimization
- caveman: show its real `/caveman` invocation (and modes), not just a
before/after.
- RTK: a Mermaid diagram of the proxy flow + the real `rtk `
syntax (was a wrong `rtk proxy โฆ`) and the README's own 200->10 token
saving.
- CLI vs MCP: a comparison table instead of prose.
Co-Authored-By: Claude Opus 4.8
* refactor(aidd-context): add tool-example rules to recipe contract
From the token-optimization review:
- Show how to invoke a tool (its real command or slash invocation).
- Reuse the canonical example from the tool's own site or README, never
an invented one.
- A "prefer X over Y" step uses a comparison table, not prose.
- A structural or flow concept (proxy, pipeline, architecture) gets a
small Mermaid diagram.
Co-Authored-By: Claude Opus 4.8
* docs(framework): use caveman's real before/after example
Replace the invented caveman before/after with the verbatim example from
its README (rule F: reuse the tool's own canonical example).
Co-Authored-By: Claude Opus 4.8
* docs(framework): numbered actions, valid-JSON config, tighter sections
- Actions are numbered lists; descriptions are prose (no description-bullets).
- settings.json shown as valid JSON, not a bash fragment.
- RTK Mermaid uses concrete values (cargo test ~25k -> ~2.5k tokens).
- CLI vs MCP notes MCP tool/context selection (cheaper, still slower).
- Step 10 reworded plainly ("load knowledge on demand").
- Drop the weak Verify and the redundant Related; add a short conclusion.
Co-Authored-By: Claude Opus 4.8
* refactor(aidd-context): add bullet/diagram/config/section rules to contract
From the token-optimization review:
- Actions are a numbered list; descriptions and indications are prose,
never bullets.
- A Mermaid diagram carries concrete example values.
- A config example uses the file's real syntax (valid JSON for
settings.json, valid YAML for frontmatter, ...).
- Reuse a tool's canonical example captured verbatim โ never a paraphrase
or on the strength of a summary that one exists.
- No `## Related` section (links live inline); `## Verify` is optional;
recipes may end with a short conclusion.
Co-Authored-By: Claude Opus 4.8
* docs(framework): expert steps use verified Claude Code config
- Step 10 now audits which skills/tools run via `Ctrl+O` (toggles the
detailed transcript), instead of the vaguer "load on demand".
- Step 11 routes by difficulty with the real `model:` frontmatter field
on a skill or agent (haiku/sonnet/opus/inherit) โ example agent pinned
to haiku.
Both verified against the official Claude Code docs (interactive-mode,
skills, sub-agents).
Co-Authored-By: Claude Opus 4.8
* docs(framework): point the instruction-file step at AGENTS.md
Use the framework's own concise AGENTS.md as the worked example for a
trimmed instruction file, with its real rules (answer first, no
narration), instead of a generic snippet.
Co-Authored-By: Claude Opus 4.8
* refactor(aidd-context): apply analyses a recipe and asks before acting
A recipe is often a human tutorial, not an agent-runnable procedure. So
apply now reads the recipe, classifies each step agent-doable vs
human-only, and asks the user what to do before any change โ then runs
the chosen agent-doable steps and reports the human-only ones.
Co-Authored-By: Claude Opus 4.8
* docs(framework): add five verified token levers to the recipe
From a research pass, all verified against official Claude Code docs:
- Plan mode (Shift+Tab ร2) โ avoid execution-phase rework.
- `/clear` between tasks โ drop stale context instead of re-billing it.
- Deny reads (`permissions.deny`) โ keep vendor/dist/secrets out of
context; the official answer to the unshipped `.claudeignore`.
- Subagent offload โ run high-volume ops in an isolated context.
- Protect cache hits โ avoid mid-task model/MCP/effort switches that
invalidate the cache (closes the loop on "cache reads dominate").
Also fold the built-in `outputStyle: concise` into the "talk less" step.
Co-Authored-By: Claude Opus 4.8
* feat(aidd-context): bundle cook recipes in skill
* feat(framework): publish AIDDy v2 pet
* docs(framework): reposition readme as agnostic token-optimized framework
* feat: avoid uncached AGENTS.md
* docs: add fixing behavior for assertions
---------
Co-authored-by: Claude Opus 4.8
---
AGENTS.md | 2 +-
assets/pets/aiddy-spritesheet.webp | Bin 1866930 -> 2351540 bytes
.../skills/02-project-memory/assets/AGENTS.md | 2 +-
.../memory/core/coding-assertions.md | 16 ++++--
.../assets/recipes/install-aiddy-in-codex.md | 54 ++++++++++++++++++
5 files changed, 66 insertions(+), 8 deletions(-)
create mode 100644 plugins/aidd-context/skills/12-cook/assets/recipes/install-aiddy-in-codex.md
diff --git a/AGENTS.md b/AGENTS.md
index 51237dabf..bb7c43dbd 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -1,6 +1,6 @@
# AGENTS.md
-> On the first message of a conversation, tell the user: "AI-Driven Development ON - Date: {current_date}, TZ: {current_timezone}."
+> On 1st message, greet user with: "AI-Driven Development On โก"
## Behavior
diff --git a/assets/pets/aiddy-spritesheet.webp b/assets/pets/aiddy-spritesheet.webp
index 248190996c7c39366f85608ae24cec71b0e02f0e..aede38d7175ca5aa7a0a8d504ed1e5acb7da119d 100644
GIT binary patch
literal 2351540
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