Memory · Development
Julien Memory
A memory for my AI assistants, where nothing becomes official until I approve it.
In short
- Problem
- AI assistants forget everything from one conversation to the next. And when you give them a memory, they mix up the personal, the professional and what is shared with a team.
- Solution
- A memory organised into separate spaces, where outdated information is replaced rather than piled up, and where assistants can only suggest. I am the one who approves.
- What it brings
- Context survives from one conversation to the next, the spaces never mix, and nothing becomes official without my approval.
- Where it stands
- Works and I use it every day. 82 tests pass. The memory fills up little by little.
- My role
- I defined what the memory had to do and its rules, steered its build with coding assistants, then checked the result through tests.
Why this project
AI assistants forget everything from one conversation to the next. Everyone knows the problem.
The one people talk about less comes right after: once you give an assistant a memory, what do you let it write there? That is where things get tricky.
What goes wrong with an ordinary memory
As soon as it holds more than a few dozen pieces of information, three problems appear.
Everything gets mixed up. A personal detail, a work decision and team data end up in the same place. The day you need to share something, there is no clean way to sort it.
Nothing gets replaced. A decision made in January and its cancellation in March carry the same weight. The memory becomes less reliable than having no memory at all.
It fills up with guesses. If the assistant decides alone what to keep, it ends up remembering its own assumptions and treating them as facts.
What I built
A memory organised around four rules:
- every note has a precise shape, with its source, status and dates. Making the source mandatory is enough to stop a guess from getting in;
- the spaces are separate: personal, team and system. Moving between them takes a deliberate action;
- a note can replace another. The old one stays readable, but no longer counts;
- assistants suggest, I approve. Nothing becomes official without my say-so.
What it changes
When I ask a question today, the assistant finds the context of a decision from three weeks ago, with its status: confirmed, only suggested, or replaced since.
And information that was never approved stays a suggestion. It does not turn into a fact because it was repeated several times.
Show technical details
Notes
Each note is a Markdown file with a structured header, checked when it loads. A badly filled note is not silently ignored: loading stops and points to the file and field at fault.
Search
It works on words, giving more weight to the title and tags than to the text, and a confirmed note ranks above a suggestion. It is simple and runs locally. The trade-off: a question worded differently from the note may find nothing.
Quality check
A module spots possible contradictions between two notes, replaced notes with no replacement, and replacement loops. It flags, it does not decide: letting the system settle things on its own would give it back the right to say what is true.
Tests
82 tests, across 10 files, check in particular that private content can never end up in an export meant for a shared space. They run on temporary folders, never on the real memory.
Numbers
82
automated tests
across 10 files: schema, storage, security, export, merging, migration
Source · test suite re-run on 30 September 2026
3
separate spaces
a system space, a private space and a team space, with no automatic passage between them
Source · repository structure and export rules
7
modules
schema, storage, security, export, merging, migration and quality control
Source · source tree
What I did
Architecture
I defined the shape of a note: type, source, status, validity dates, links between notes.
Rule design
I wrote the separation rules between spaces, including the ban on moving private content into a shared space.
Assisted development
The server, storage, search, merging and migration were written in TypeScript with Claude Code and Codex.
Quality control
I had a check added that spots possible contradictions and inconsistent replacements between notes.
Testing
82 tests cover the schema, storage, security, export, merging and migration.
Documentation
I documented the note format, the usage rules and how to approve a piece of information.
Evidence
82 tests
verifiedThey cover the schema, storage, security, export, note merging and migration. The security tests make sure private content can never move into another space.
- Source
- the system's test suite
- Verify with
- Suite re-run on 30 September 2026: 82 tests passing across 10 files.
Truly separate spaces
verifiedEach space is its own folder. Moving information from one space to another takes a deliberate action; it never happens by accident during a conversation.
- Source
- space configuration and export rules
- Verify with
- Read the configuration, then checked through the tests that no private content leaves its space.
A quality check
verifiedA module spots possible contradictions between notes, replaced notes with no replacement, and replacement loops.
- Source
- system quality control module
- Verify with
- Read the module and ran its tests.
I am the one who approves
verifiedNo assistant can write directly into the official memory. It leaves a suggestion, which waits for my approval.
- Source
- system usage rules and tools exposed to agents
- Verify with
- Read the rules, and checked that the approval tool is not available to assistants.
Limitations
- Search works on words, not meaning. A question worded differently from the note may find nothing.
- The contradiction check flags, it does not decide. That is up to me.
- The memory still holds little. It gains value as it fills up.
- Everything runs locally, on a single machine.
- If I do not review the suggestions, the official memory stays empty. It all depends on that discipline.
What I take away
- The most useful thing is not writing, it is replacing. A memory that piles everything up ends up making old information as believable as new.
- Banning assistants from writing directly into the official memory cost me a little comfort, but fixed the real problem: it no longer fills up with guesses.
- Making a field mandatory, like the source, forces you to think about what you write.
What it could bring to a company
- A team can use the same replacement principle so that a cancelled decision no longer looks valid, without erasing the history.
- A company that gives sensitive data to AI assistants can reuse the separation of spaces, so one client's file never ends up in another's.
- A compliance team can clearly tell what a system suggested from what a person approved.
Technologies
- TypeScript
- Node.js
- Model Context Protocol
- Zod
- Vitest
- Markdown