Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
fb1e0a2
chore(deps-dev): bump @commitlint/config-conventional from 21.2.0 to …
dependabot[bot] Aug 17, 2026
8c829a9
chore(deps-dev): bump js-yaml from 5.2.3 to 5.3.0 (#668)
dependabot[bot] Aug 17, 2026
9db0222
chore(deps-dev): bump @biomejs/biome from 2.5.7 to 2.5.8 in /cli (#669)
dependabot[bot] Aug 17, 2026
879f36b
chore(deps-dev): bump @commitlint/config-conventional from 21.2.0 to …
dependabot[bot] Aug 17, 2026
db37128
chore(deps-dev): bump jscpd from 5.0.14 to 5.0.15 in /cli (#671)
dependabot[bot] Aug 17, 2026
ec1987e
chore(deps-dev): bump knip from 6.32.0 to 6.32.2 in /cli (#673)
dependabot[bot] Aug 17, 2026
999221e
chore(deps): bump smol-toml from 1.7.1 to 1.8.0 in /cli (#674)
dependabot[bot] Aug 17, 2026
5211435
ci(deps): bump the github-actions group with 3 updates (#675)
dependabot[bot] Aug 17, 2026
d7921d0
chore(deps-dev): bump @commitlint/cli from 21.2.1 to 21.2.2 (#667)
dependabot[bot] Aug 17, 2026
ff8c43e
chore(deps-dev): bump @commitlint/cli from 21.2.1 to 21.2.2 in /cli (…
dependabot[bot] Aug 17, 2026
1262676
feat(aidd-context): add retrospective lens to learn (#712)
alexsoyes Aug 24, 2026
f1f2b4c
docs(framework): position README for enterprise teams (#664)
alexsoyes Aug 24, 2026
1c97866
chore(deps): bump @inquirer/prompts from 8.5.2 to 8.6.0 in /cli (#713)
dependabot[bot] Aug 24, 2026
252b82f
chore(deps-dev): bump jscpd from 5.0.15 to 5.0.16 in /cli (#714)
dependabot[bot] Aug 24, 2026
b21c3f8
chore(deps-dev): bump @biomejs/biome from 2.5.8 to 2.5.10 in /cli (#715)
dependabot[bot] Aug 24, 2026
c2d4dae
ci(deps): bump the github-actions group with 3 updates (#716)
dependabot[bot] Aug 24, 2026
f9a61e7
docs(readme): clarify the feature delivery flow (#717)
alexsoyes Aug 27, 2026
ec5182b
fix(aidd-context): load the project memory block in Claude Code (#721)
blafourcade Aug 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Initialize CodeQL
uses: github/codeql-action/init@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
with:
languages: ${{ matrix.language }}
queries: security-and-quality

- name: Autobuild
uses: github/codeql-action/autobuild@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
uses: github/codeql-action/autobuild@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
with:
category: "/language:${{ matrix.language }}"
6 changes: 4 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ Project docs, memory, specs, and plans live in `aidd_docs/`.

### Project memory

<aidd_project_memory>
<!-- aidd_project_memory:start -->

@aidd_docs/memory/architecture.md
@aidd_docs/memory/browsing.md
@aidd_docs/memory/codebase-map.md
Expand All @@ -47,7 +48,8 @@ Project docs, memory, specs, and plans live in `aidd_docs/`.
@aidd_docs/memory/project-brief.md
@aidd_docs/memory/testing.md
@aidd_docs/memory/vcs.md
</aidd_project_memory>

<!-- aidd_project_memory:end -->

- 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.
Expand Down
6 changes: 4 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ Project docs, memory, specs, and plans live in `aidd_docs/`.

### Project memory

<aidd_project_memory>
<!-- aidd_project_memory:start -->

@aidd_docs/memory/architecture.md
@aidd_docs/memory/browsing.md
@aidd_docs/memory/codebase-map.md
Expand All @@ -47,7 +48,8 @@ Project docs, memory, specs, and plans live in `aidd_docs/`.
@aidd_docs/memory/project-brief.md
@aidd_docs/memory/testing.md
@aidd_docs/memory/vcs.md
</aidd_project_memory>

<!-- aidd_project_memory:end -->

- 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.
Expand Down
40 changes: 30 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,24 @@

<img src="docs/assets/logo.png" alt="AIDD" width="100" />

# The AI-Driven Dev Framework 🇫🇷
# AI-Driven Dev Framework

`Open source` agnostic framework **to generate high quality clean code**.
## Enterprise-grade SDLC for high-quality software development.

_(Already tested on `Legacy` codebases)_
Unify **engineering teams** around **standardized workflows** and **shared best practices**, across modern stacks and **legacy systems**, while reducing **technical debt**.

[![Made in France](https://img.shields.io/badge/made%20in-France-0055A4?labelColor=EF4135)](https://www.ai-driven-dev.fr/)
🧱 **IDE agnostic** · 🏗️ **Legacy systems** · 🌱 **Token-optimized** · 🇫🇷 **Made in France**

<p>
<!--counts:start--><kbd>7 plugins</kbd> · <kbd>47 skills</kbd> · <kbd>2 agents</kbd><!--counts:end--> · <kbd>MIT</kbd>
<!--counts:start--><kbd>7 plugins</kbd> · <kbd>47 skills</kbd> · <kbd>2 agents</kbd><!--counts:end-->
</p>

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Open Source](https://img.shields.io/badge/Open_Source-Yes-yellow?logo=open-source-initiative&logoColor=white)](https://opensource.org/)
[![License: MIT](https://img.shields.io/badge/License-MIT-purple.svg)](LICENSE)
[![Latest Release](https://img.shields.io/github/v/release/ai-driven-dev/framework?include_prereleases&sort=semver)](https://github.com/ai-driven-dev/framework/releases)
[![CI](https://github.com/ai-driven-dev/framework/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/ai-driven-dev/framework/actions/workflows/ci.yml)


<p>🗺️ <a href="https://github.com/orgs/ai-driven-dev/projects/8"><b>Live roadmap</b></a></p>

</div>
Expand Down Expand Up @@ -195,18 +197,36 @@ flowchart TD
end

subgraph loop["② Per feature — repeat"]
direction LR
B["brainstorm"] --> P["plan"] --> I["implement"] --> R["review"] --> C["commit"] --> PR(["✅ PR"])
direction TB
subgraph frame["Frame"]
direction LR
N["functional need<br/>or User Story"] --> T["issue / ticket"] --> P["plan"]
end
subgraph deliver["Deliver"]
direction LR
I["implement"] --> V["validate"] --> R["review"]
end
subgraph ship["Ship"]
direction LR
PR["PR"] --> S(["✅ production"]) --> L["learn"]
end
P --> I
R --> PR
end

Onboard --> Memory --> B
Onboard --> Memory --> N
L -. next need .-> N

classDef hub fill:#D97757,stroke:#9c4f37,color:#fff;
classDef done fill:#2ea043,stroke:#1a7f37,color:#fff;
class Onboard hub;
class PR done;
class S done;
```

Start with a functional need or User Story, then track it as an issue or ticket
before planning. Shipping follows the project's own delivery process. Capture a
learning only when it is durable enough to improve the next feature.

> 🍳 **More flows** → bundled recipes: [start a project](plugins/aidd-context/skills/12-cook/assets/recipes/start-a-project.md), [ship a feature](plugins/aidd-context/skills/12-cook/assets/recipes/ship-a-feature.md), and more.

## 🧩 Plugins
Expand Down
2 changes: 1 addition & 1 deletion aidd_docs/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ The skill contract itself lives in one file: `aidd-context:04-skill-generate/ref

## Syncing Across Tools

If the project uses multiple AI tools (e.g. Claude Code plus Cursor), the same content must be available to each. The memory bank is shared automatically via the `<aidd_project_memory>` block kept in sync by `aidd-context:02-project-memory`. Skills are loaded per-plugin by the runtime, so any skill installed via the marketplace is available across tools that support skills.
If the project uses multiple AI tools (e.g. Claude Code plus Cursor), the same content must be available to each. The memory bank is shared automatically via the project memory block kept in sync by `aidd-context:02-project-memory`. Skills are loaded per-plugin by the runtime, so any skill installed via the marketplace is available across tools that support skills.

When tools differ in syntax (frontmatter, slash command name, references), follow the IDE mapping reference shipped with each plugin.

Expand Down
2 changes: 1 addition & 1 deletion aidd_docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ my-project/

### Memory Block Lifecycle

Each AI context file (`CLAUDE.md`, `AGENTS.md`, `.github/copilot-instructions.md`, etc.) contains an `<aidd_project_memory>` block. It is:
Each AI context file (`CLAUDE.md`, `AGENTS.md`, `.github/copilot-instructions.md`, etc.) contains a project memory block. It is:

1. **Seeded** the first time by `aidd-context:02-project-memory` (the skill creates the block if absent).
2. **Kept in sync** automatically by a session-start hook (`aidd-context/hooks/update_memory.js`) that scans `aidd_docs/memory/` and writes the current list of `.md` files into the block.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Memory block markers that cannot silently stop loading

The `<aidd_project_memory>` block that `update_memory.js` writes into every AI context file is delimited by a bare XML-style tag on its own line. Markdown treats that as an HTML block running until the next blank line, and Claude Code's import parser skips imports inside it exactly as it skips a fenced code block. Every `@aidd_docs/memory/*.md` line the hook generates is therefore ignored, and the project memory never loads. The failure is invisible from inside a session: the agent starts, nothing is reported, and it simply reasons without the memory bank.

The fix is to stop delimiting the block with a construct whose correctness depends on an adjacent blank line, and use HTML comment markers instead. A comment closes on its own line, so nothing following it can ever be captured, whatever a formatter or a future rewrite does to the surrounding whitespace. The same hook already uses that convention for the memory README index. Existing installed repositories carry the old tag, so the change is only complete if the hook migrates them; otherwise the fix ships and those repositories stay dark while the changelog claims otherwise.

## What Is Clear

- Reported in issue #719 and confirmed independently: `CLAUDE.md:41-50` in this repository holds the glued shape, and a session loading it shows the `@` lines unexpanded, with eight memory files absent.
- Single emitter: `buildBlockContent` in `plugins/aidd-context/hooks/update_memory.js`. `updateMarkers` splices between two constant strings and needs no change when those strings change.
- The bug is the tag shape, not the content. `buildBlockContent` already pushes a blank line before the on-demand note, so that blank line terminates the HTML block and the on-demand list renders correctly. Only the `@` lines above it are swallowed. That asymmetry is the signature.
- Chosen shape: the existing `### Project memory` heading for human readers, with `<!-- aidd_project_memory:start -->` and `<!-- aidd_project_memory:end -->` as the machine anchors. The heading is prose the hook does not own; the markers stay the anchor.
- Rejected: adding a blank line after the opening tag. It is one character and needs no migration, but it is a load-bearing convention nothing in the file declares, and a rewrite already reverted it once.
- Migration is part of the fix, not a follow-up. The hook returns `null` when the close marker is absent and skips the file with no output, so every already-installed repository would silently stop syncing.
- The tag name is load-bearing beyond the hook and those references move with it: `plugins/aidd-context/skills/00-onboard/references/state/zones.md`, `plugins/aidd-context/skills/11-explore/actions/01-survey.md`, and the `02-project-memory` templates for `AGENTS.md`, `README.md`, and `memory/README.md`.
- A regression guard stays in scope: walk a context file line by line, track whether a line opens an HTML block, and fail when an `@` import is found inside one. Comment markers make this specific regression near-impossible, but the guard covers hand-written context files and future generators.
- Out of scope, its own ticket: generating a `CLAUDE.md` that contains `@AGENTS.md` for repositories that only have `AGENTS.md`. It adds a capability rather than fixing a defect, and it drags in the separate question of which context files the project owns.

## Still Open

- Assumption, unverified: the XML tag currently buys nothing the model uses. Whether the wrapper survives import resolution into the prompt in a form the model reads has not been checked. If it does, the heading in the chosen shape is the replacement cue.
- Whether the CLI test fixtures under `cli/tests/fixtures/**` that embed the old tag should be migrated with the rest or left pinned to the legacy shape as regression material.

## Next Move

Turn this into a change: new markers in the hook, a one-pass rewrite of the legacy tag before the splice, the template and documentation references moved to the new shape, and a check that fails when an import sits inside an HTML block.
9 changes: 7 additions & 2 deletions cli/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ Project docs, memory, specs, and plans live in `aidd_docs/`.

### Project memory

<aidd_project_memory>
<!-- aidd_project_memory:start -->

@aidd_docs/memory/architecture.md
@aidd_docs/memory/auth.md
@aidd_docs/memory/cli.md
Expand All @@ -47,7 +48,11 @@ Project docs, memory, specs, and plans live in `aidd_docs/`.
@aidd_docs/memory/project-brief.md
@aidd_docs/memory/testing.md
@aidd_docs/memory/vcs.md
</aidd_project_memory>

<!-- read on demand, not auto-loaded -->
- aidd_docs/memory/internal/decisions/self-update-version-source-npm.md

<!-- aidd_project_memory:end -->

- 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.
Expand Down
6 changes: 5 additions & 1 deletion cli/aidd_docs/memory/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Structured context the AI assistant reads at the start of a session, so it does

## How it loads

- The files at the root of `memory/` are referenced by the `<aidd_project_memory>` block in the AI context file and load every session.
- The files at the root of `memory/` are referenced by the project memory block in the AI context file and load every session.
- `internal/` and `external/` are listed there too, but load on demand, only when relevant.

## Files
Expand All @@ -21,6 +21,10 @@ The list below is refreshed automatically by the memory hook. Do not edit it by
- [project-brief.md](project-brief.md)
- [testing.md](testing.md)
- [vcs.md](vcs.md)

Read on demand:

- [internal/decisions/self-update-version-source-npm.md](internal/decisions/self-update-version-source-npm.md)
<!-- files:end -->

## How to maintain it
Expand Down
Loading