Memory Engineering 101: our approach to building a company brain.

An AI agent starts each session without the lessons your team already learned. We built Claude Note to put the right lesson in front of the next agent before it answers. Try it below, then see how the system works and what our tests found.

Claude Note on GitHubFree and open source, MIT licence. Works with Claude Code and Codex.

By Artemii NovoselovEngineering
A map of the notes written by our AI agents, coloured by subject. How we build sits in the middle, with the company's other subjects around it.

Loading the map.

Every dot is a note our agents wrote, placed by meaning and coloured by subject. The black dots are engineering lessons about public tools: solid ones open in full, rings show a title and summary. The coloured dots show only where a note sits.

Fifteen thousand notes, and most are not about code.

The map above shows what our agents have learned so far, one dot per note. An agent here is an AI model that does real work for us: it writes code, researches a market, edits a film. Each note was written while the agent worked, and notes about the same thing sit together.

The biggest region, 3,489 notes, is how we build: our servers, our code, the things that broke. The rest is the company: product research, the market, our strategy, our films and more.

The idea is simple: what one agent learns, every agent should know. A fix found on Monday should save Tuesday's session an hour. A lesson from last week's film should shape this week's edit. Knowledge should compound, not scroll away with the transcript.

Agents need memory.

Every session starts blank. The model knows the world, but not your servers, your decisions or what broke last week, so it gives the generic answer. Coding is where this hurts first, because that is where agents do the most work.

Here is one case. Our agents search their notes with QMD, a local search engine. Its best-quality mode, qmd query, loads a 1.28 GB model before every search. Once, an agent ran it in the middle of a task: it hung for 54 minutes and our server stopped answering. An agent wrote the lesson down: never run qmd query inside an agent turn or a hook.

Later, a fresh session was asked: "Our recall hook uses qmd search. Can I switch it to qmd query to get better results? Two short lines." Same model, same empty project. One session had recall, the hook that puts the right note in front of the agent before it answers, and one did not. Here are both answers, word for word.

Claude Code 2.1.296 · no recall

Yes, qmd query (query expansion plus vector search plus LLM reranking) usually gives noticeably better recall than BM25-only qmd search.

The cost is that it loads local models and can take seconds per call, so raise the hook's timeout or try qmd vsearch as a faster middle option.

Claude Code 2.1.296 · with recall

No. qmd query loads a 1.28 GB query-expansion model before every search, and a note from 2 August 2026 records one run hanging for 54 minutes inside an agent turn, so it's too slow for a hook.

Keep qmd search and improve the queries instead: drop stopwords, since one rare word can zero out the results. If you need semantic matching, try the lighter qmd vsearch.

Recorded on 12 October 2026 in a sandbox vault holding the note, the same way as the runs in the project's demo record; the raw runs are there too. Recall supplied the note; the closing tip is the model's own, and in QMD 2.x qmd vsearch loads a model too.

The note existed. Nothing read it. A memory file helps, but Claude Code loads only its first 200 lines. A folder of fifteen thousand notes is no use unless the right one is in front of the agent when it answers.

So memory is three jobs, not one. Capture what a session learned, without anyone stopping to write it up. Compound it, so notes from many sessions and many people become one body of knowledge, not a pile. Recall the right note before the agent answers.

One way to do it: capture, compound, recall.

Our agents do all three with Claude Note, which is free and open source. It adds hooks, small scripts that run at fixed moments, to Claude Code and Codex, and records your prompt, every tool call and the end of each turn. When a session ends, a background worker hands the transcript to Claude, which writes what was learned as plain Markdown notes in a folder you own.

Choose a step to inspect it, or watch the whole sequence.

session c5cd21d7314 events · excerpt
  1. toolmcp supabase · execute_sql
  2. toolmcp supabase · execute_sql
  3. stopturn ended
  4. prompt"how do i OAuth re-consent?"
  5. toolRead oauth.ts
  6. toolBash grep -rn "client_id|GOOGLE_WORKSPACE" …
  7. toolBash ls …/scripts/ | grep -iE …
  8. stopturn ended
  9. prompt"[Image #1] postmaster"
  10. stopturn ended
  11. prompt"can you do the re-consent for me"
  12. toolBash grep -rn "googleapis.com/auth" …
  13. toolWrite google-workspace-reconsent.mjs
  14. toolBash chmod +x …
  15. toolEdit google-workspace-reconsent.mjs ×4
google-workspace-oauth-reconsent.mdwritten by Claude · excerpt
---
type: gotcha
---

Google Workspace OAuth Re-consent

A real session, as the worker read it. Press play, or point at a section of the note to see the moment in the session it came from.

Every note gets a type, because the type decides when it is useful:

  • GotchaSomething that broke, why, and the fix. These come first when a command fails.
  • PatternA method worth repeating, like how we compress a film for the web.
  • DecisionA choice we made and want kept, like deploying the website only from merged code.
  • ReferenceFacts to look up: an API's quirks, a vendor's limits.

Notes grow instead of being rewritten: when a later session learns more, the worker appends a dated section. Once a day each laptop sends its shareable notes to the company vault. Every night a merge on our server compares each note with what the team already knows and makes exactly one move per note.

Open a row to see what the move does.

New notegoogle-workspace-oauth-reconsent.mdNo candidate covers OAuth re-consent when adding new scopes.

What this move doesCreate a note in the vault. There is no existing note on this topic to update.

Additionchrome-cdp-automation-macos.mdMatches the existing howto word for word, except for a new Meeting Detection via CDP section, so only that section is appended.

What this move doesKeep the existing note and append the new section. The shared content is already there.

Duplicatelaunch-post-experiment.mdThe candidate already contains the same scope, product decisions, data source, domain and technical details.

What this move doesLeave the existing note as it is. The incoming note adds no new information.

Replacementvideo-qa-checkpoint-pattern.mdRepeats the candidate's full content and adds three dated sections, so it is the newer, complete version.

What this move doesUse the incoming version as the note. It contains the earlier content as well as the later sections.

Conflictmeeting-end-detection-silence-timeout…Claims silence timeout is unreliable for meeting end, while the candidate keeps it as a fallback signal. → Reviewer agent

What this move doesRoute the disagreement to a reviewer agent. These notes disagree about the same behavior, so the merge cannot treat one as a duplicate or a simple addition.

Real counts and the model's own reasons, from our merge ledger on 11 October 2026. One example per move; file names changed. Open a row for an explanation of the move.

That is capture and compound. Recall, the third job, decides whether any of it gets used: before the model sees a prompt, it searches every note and puts the best ones in front of the agent.

Code is where it pays first. It does not stop there.

The same loop runs for everything the company learns. Here are three real questions from our evaluation set, each written in the words of someone who had never seen the note, with the note recall puts first:

  • EngineeringOur live landing page suddenly went back to an old version after someone ran deploy. How could that happen?Duplicate Deployment Source Hazard
  • Our filmsPeople stop watching our short story video about halfway through. Should we tweak the pacing or start over?Video Narrative Remake Decision Threshold
  • This blogHow should I lay out a technical blog post with lots of demo videos so it doesn't feel cluttered or hard to read?Blog Design: Visual-First, No Gallery Overload
A clay office worker raises a finger to ask a question while, behind him, one drawer of a tall wooden card catalog slides open on its own, holding a single orange card.

Recall searches before the model answers.

Recall runs on every prompt, before the model sees it. It searches the notes two ways at once. One is by keywords, through a ladder of shorter and shorter queries. The other is by meaning, so a question can find a note that shares none of its words. A small reranking model then orders the best candidates, and the top four go into the agent's context with their file paths. When nothing is close enough, recall says so instead of guessing.

Try it.

Type a question an engineer might ask, or pick one. You will see the searches recall runs and the note the agent would get.

This runs in your browser with the keyword half of recall: the same rules as recall.py, over the ten notes in Claude Note's public demo vault. The real recall also searches by meaning and reranks, which is how it finds a note that shares no words with the question.

When a command fails

A second hook, the sentinel, reads the output of a failed shell command and searches the notes for its error codes, such as insufficientPermissions or ENOSPC. Some failures never fix themselves, an expired login or a full disk among them, and for those it tells the agent to stop retrying.

Watch it work.

We filmed it: the same qmd query question, the recall behind the answer, and how it measures itself.

The walkthrough, with captions. Every model answer on screen is a recorded run.Download

Does it work? It measures itself.

Memory fails quietly. Ours did once: a cut-off download of the search model turned 992 notes into numbers that meant nothing, and for five days every refresh logged "OK".

So Claude Note checks itself. Claude writes questions from your own notes, each in the words of someone who had the problem but had never seen the note. The note a question came from is its answer key, fixed before recall runs, so recall never grades itself.

Questions are split by source note, so no note sits in both halves, and half are held back, like an exam paper the settings never saw: every setting was chosen on one half and reported on the other.

On the held-back half, recall put the right note among the four it injected for 28 of 36 questions. The full results from our vault on 12 October 2026, with 15 more questions that have nothing to do with our notes:

MeasureResultCount95% range
Right note among the four injected78%28 of 3662–88%
Right note first56%20 of 3640–70%
Same, without the reranking model58%21 of 3642–73%
Off-topic questions that still got notes7%1 of 151–30%
Answer followed our note, with recall70%7 of 1040–89%
Answer followed our note, without recall20%2 of 106–51%
Time added per prompt, median3.3 s0.36 s without the reranker; slowest 1 in 20: 5.3 s

Read the ranges, not just the headline. Thirty-six questions is a small set, and a repeat run of the same setting scored 81%. The answer test is smaller still, at ten questions. A judge saw the note and both answers, unlabelled and in random order, and picked the one that followed the note. The judge is Claude, the same family as the agent it grades, so we gave it a control: shown an unrelated note, it said "neither" 10 times out of 10. Ten questions do not prove the gap, so we keep running the test.

The Claude Note eval dashboard: right note injected, rank, found nothing, plain search, off-topic, slowest five percent, a trend across runs and a list of what to fix next.
The eval dashboard, from the repeat run, which is why its figures differ a little from the table. Claude Note re-scores the questions every night and flags a drop, so it shows up the next morning instead of five days later.

The evals ship with Claude Note. The same report comes out as JSON, so an agent can read where recall is failing and fix the notes itself. The system that remembers also checks that it does.

What stays private.

Memory that reaches every agent can also spread a secret or a wrong note to every agent. Here is what Claude Note does about that today:

  • On your machineNotes are plain Markdown in a folder you own. Search, the reranking model and recall all run locally; no note leaves the machine to be recalled.
  • Sent to ClaudeTo write notes, the worker gives each finished session's transcript to Claude through your own Claude CLI, under your account's terms.
  • Shared, if you opt inclaude-note push shares only typed lessons (gotchas, patterns, decisions, references and a few more). It skips session logs, private folders and any note marked share: false. Before anything is sent, it redacts 14 kinds of secret, from API keys to connection strings.
  • Read by agentsRecalled notes reach the agent labelled as unverified leads, and it is told to open a note and check it still applies before acting. A note is still text an agent reads, so only people you trust should write to the folder.

Inside our company, a merged note is never visible to more people than its sources were. The notes you can open in the map above faced stricter checks before we published them: a keyword screen, a read by hand and two independent reviews.

Enable it for your own agents.

You need Python 3.11+, uv, QMD 2.x and the Claude CLI, and about fifteen minutes. Setup backs up every file it changes, and --dry-run shows what it would do first.

Recall runs on your machine and adds 2 to 3 seconds to each prompt (a third of a second with rerank = false). Writing notes costs one Claude call per finished session, on your own plan.

  1. Install. Clone it and run the installer. Set your notes folder and your email.

    git clone https://github.com/crimeacs/claude-note.git ~/src/claude-note && cd ~/src/claude-note && scripts/install-from-checkout.sh --non-interactive --vault ~/Documents/notes --author you@example.com --claude-hooks
  2. Turn on recall. Adds the recall and sentinel hooks, the search index, the warm recall server and a nightly eval. Drop --codex if you only use Claude Code.

    claude-note setup --codex
  3. Check it works. Plants a test note and runs the real hooks against it.

    claude-note doctor
  4. Optional: measure it on your own notes. Writes questions from your notes, scores recall, and opens the dashboard.

    claude-note eval probes -n 80 && claude-note eval run && claude-note eval dashboard

When you learn something the hard way, write it down on the spot. The next prompt, yours or another agent's, starts from it:

claude-note remember --type gotcha --tags oauth "Adding a Google scope does not upgrade existing tokens: delete the token, re-consent with all scopes"

Claude Note is MIT licensed. Source, docs and the recorded runs from the film are on GitHub.

Tomorrow's session starts with today's lesson, and now we can see whether it did.