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.

Loading the map.
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.
Yes,
qmd query(query expansion plus vector search plus LLM reranking) usually gives noticeably better recall than BM25-onlyqmd search.The cost is that it loads local models and can take seconds per call, so raise the hook's timeout or try
qmd vsearchas a faster middle option.
No.
qmd queryloads 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 searchand improve the queries instead: drop stopwords, since one rare word can zero out the results. If you need semantic matching, try the lighterqmd 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.
- toolmcp supabase · execute_sql
- toolmcp supabase · execute_sql
- stopturn ended
- prompt"how do i OAuth re-consent?"
- toolRead oauth.ts
- toolBash grep -rn "client_id|GOOGLE_WORKSPACE" …
- toolBash ls …/scripts/ | grep -iE …
- stopturn ended
- prompt"[Image #1] postmaster"
- stopturn ended
- prompt"can you do the re-consent for me"
- toolBash grep -rn "googleapis.com/auth" …
- toolWrite google-workspace-reconsent.mjs
- toolBash chmod +x …
- toolEdit google-workspace-reconsent.mjs ×4
type: gotcha
---
Google Workspace OAuth Re-consent
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.
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.
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:
- Engineering
Our live landing page suddenly went back to an old version after someone ran deploy. How could that happen?
Duplicate Deployment Source Hazard - Our films
People stop watching our short story video about halfway through. Should we tweak the pacing or start over?
Video Narrative Remake Decision Threshold - This blog
How 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

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.
Video couldn't load. Open the film directly.
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:
| Measure | Result | Count | 95% range |
|---|---|---|---|
| Right note among the four injected | 78% | 28 of 36 | 62–88% |
| Right note first | 56% | 20 of 36 | 40–70% |
| Same, without the reranking model | 58% | 21 of 36 | 42–73% |
| Off-topic questions that still got notes | 7% | 1 of 15 | 1–30% |
| Answer followed our note, with recall | 70% | 7 of 10 | 40–89% |
| Answer followed our note, without recall | 20% | 2 of 10 | 6–51% |
| Time added per prompt, median | 3.3 s | 0.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 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 in
claude-note pushshares only typed lessons (gotchas, patterns, decisions, references and a few more). It skips session logs, private folders and any note markedshare: 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.
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-hooksTurn on recall. Adds the recall and sentinel hooks, the search index, the warm recall server and a nightly eval. Drop
--codexif you only use Claude Code.claude-note setup --codexCheck it works. Plants a test note and runs the real hooks against it.
claude-note doctorOptional: 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.