Skip to content
← All projects

Memory · Development

Julien Memory

A memory for my AI assistants, where nothing becomes official until I approve it.

FunctionalJuly 2026 — ongoingPersonal project

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

No automatic passage between spaces: an export is always a deliberate action.

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

    verified

    They 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

    verified

    Each 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

    verified

    A 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

    verified

    No 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

Related projects