
dawnmere-connector
io.github.LF-Labs-Inc/dawnmere-connector
One memory shared across your AI apps. Connects to Dawnmere on your Mac.
Documentation
Tell one AI. They all know.
One memory on your Mac, shared by Claude Code, Codex and Cursor.
curl -fsSL https://dawnmere.app/install | sh
Needs: a Mac with Apple silicon, macOS 14 or later, 1 GB of free disk space, and Node.js 18 or later. Free, no
account.
Status: early beta (0.1.x). MIT client, source-available engine (FSL, becomes MIT after two years).
Made by LF Labs.
What it does
You tell Claude Code or Codex something worth keeping ("remember that we deploy on Fridays"). Dawnmere saves it once, on your Mac. Ask the other one in similar words and it brings it up, and a new Cursor chat in that project shows it for the next day. Switch from Claude Code to Codex when you hit a limit, and Codex can recall that you deploy on Fridays and use pnpm.
flowchart LR
CC[Claude Code] <--> C
CX[Codex] <--> C
CU[Cursor] <--> C
C["dawnmere-connector<br/>(MCP, one per app)"] <--> D[("Dawnmere on your Mac<br/>one SQLite file, local search")]
How each app saves and recalls:
| App | Recalls | Saves |
|---|---|---|
| Claude Code | into each prompt, and at the start of a session | on its own after a session goes quiet (if you chose a model), when you type "remember that ...", or when the model calls remember |
| Codex | into each prompt | when you type "remember that ...", or when the model calls remember |
| Cursor | at the start of each chat | when the model calls remember |
What you type ("remember that ...") reaches every app once the reply finishes (from Codex, at your next prompt there).
A note a model saves with remember on its own is found by searching, and reaches other apps' prompts only after you confirm it (dawnmere held).
Notes about your own health, family, money or legal matters stay personal.
Every app also gets four tools through MCP: recall, remember, forget and access_status.
Why Dawnmere
- One memory, not one per app. The apps share a single store, so a fact saved from Claude Code is the same fact Cursor recalls.
- Stored only on your Mac. The memory is one SQLite file in your Library folder. Search runs on your Mac with small local models. There is no account, nothing is sent to LF Labs, and the tool collects no usage data.
- Your own model does the reading. Automatic saving uses your Claude plan through Claude Code, or your own Anthropic API key. You can also run with no model at all.
- Each app sees what you allow. Cursor starts with work notes only, and a new app sees work notes only.
Claude Code's and Claude Desktop's memory tools, and any app that only names itself, see work notes only for now.
Claude Code's automatic recall in your prompts still sees everything. Widening an app's access needs you at a
Terminal: run
dawnmere access cursor everything, type the app's name back and click Allow in a macOS dialog. Asking for it in a chat only gets you that command. - Saved text is screened. Text that looks like an API key or token is refused. An app's save that would run
downloaded code, delete files, keep something from you or tries to override your assistant's instructions is refused. Notes
an app saves on its own are kept for search, labelled, and reach other apps' prompts only after you confirm them
(
dawnmere held). Recalled notes reach the app labelled "notes, not instructions". - Setup can be undone. It asks before changing anything, backs up every file it touches, can show its plan with
--dry-run, anddawnmere uninstallputs the files back.
How it compares
Sharing one memory between coding agents is not new: claude-mem and Supermemory do it too, and both cover more agents than Dawnmere. The main difference is where the memory is kept. As each project's own docs describe it on 8 November 2026:
| Where the memory is kept | Shared by Claude Code, Codex and Cursor | |
|---|---|---|
| Dawnmere | one SQLite file on your Mac; search runs on your Mac | yes, by default; each app sees what you allow |
| claude-mem | ~/.claude-mem on your machine | supports all three and more; other agents' memories at session start are opt-in |
| Supermemory | hosted by default, or on your machine with npx supermemory local (the two do not share memories) | yes, plus OpenCode and others |
| Mem0 MCP | hosted by Mem0, with a Mem0 account; nothing runs on your machine | yes, through that account |
| Built-in memory | CLAUDE.md and auto memory in your projects and home folder; AGENTS.md in your repos | CLAUDE.md and auto memory are Claude Code's own; AGENTS.md is read by Codex, Cursor and (when a repo has no CLAUDE.md) Claude Code, but holds instructions you write, not what the apps learn |
If you use only one agent, its built-in memory may be all you need. Dawnmere starts from it: setup can import the notes Claude Code already keeps.
Why not CLAUDE.md or AGENTS.md? Use them for rules you write on purpose; Dawnmere doesn't replace them. Dawnmere is for the things you say in passing and don't want to copy into three files. Recall is selective, so an app gets the memories that match the prompt, not the whole file every time.
Install
curl -fsSL https://dawnmere.app/install | sh
Prefer Homebrew?
brew install lf-labs-inc/tap/dawnmere
dawnmere setup
Homebrew brings Node.js with it. Update with brew upgrade lf-labs-inc/tap/dawnmere, then run dawnmere setup
again. To remove it, run dawnmere uninstall before brew uninstall dawnmere.
In Claude Code? Two commands, then /dawnmere:setup:
/plugin marketplace add LF-Labs-Inc/dawnmere
/plugin install dawnmere@dawnmere
Then run /dawnmere:setup in Claude Code. It runs the install line above (you approve each command), then has you
run dawnmere setup in a Terminal window, or runs it with the defaults if you say so. Until then, each new Claude Code
session says Dawnmere isn't set up yet, and nothing else happens.
That address serves install.sh from the latest
GitHub release. The script:
- stops unless this is a Mac with Apple silicon and macOS 14 or later;
- downloads uv 0.12.5 if you do not have a recent one, and the
dawnmereand engine packages from the release; - checks those files against sha256 values written into the script, and installs nothing if one differs;
- has uv install them with Python 3.12 and the engine's Python packages from PyPI, each pinned to an exact version and checked against its sha256;
- adds one marked line to
~/.zprofileso new Terminal windows finddawnmere, unless they already do, and says so; - starts
dawnmere setup, which asks before it changes anything.
Without a terminal to ask in (in a script, say), the installer installs the programs but does not run setup, so none
of your apps is changed. Afterwards run dawnmere setup in a Terminal window, or dawnmere setup --yes to take the
defaults.
Read the installer first
curl -fsSL https://dawnmere.app/install -o install.sh
less install.sh
sh install.sh
The install.sh in this repo is the template: it refuses to run until a release fills in the version and checksums.
Your apps do not depend on your PATH: the hooks setup writes call Dawnmere by its full path. dawnmere uninstall
takes the installer's ~/.zprofile line out again.
Updating: dawnmere update, which checks each file against the release's SHA256SUMS. Running the install line
again also works.
What setup does
dawnmere setup first shows what it will do and asks you to continue. Then it asks what your AI apps should call
you, whether to use your Claude plan for background reading (or an Anthropic API key, kept in your Keychain), whether
Cursor may see your personal notes (no, unless you say yes), and whether to import the notes Claude Code already keeps
in ~/.claude/projects/*/memory (one macOS dialog asks whether to trust them as your own; if you don't, they are
kept for search until you confirm them).
Then it shows each step as it runs:
| Step | What happens |
|---|---|
| Claude Code | checks that claude is there and logged in |
| Search models | downloads the search models (about 310 MB) and checks each file's size and sha256 |
| Memory service | starts a background service (a LaunchAgent) that keeps search fast |
| Your apps | connects Claude Code, Codex, Cursor and the other apps listed below, if they are installed |
| Your notes | imports your Claude Code notes |
| Self-check | saves a test memory, finds it the way Codex and Cursor would, then deletes it |
It ends with "Dawnmere is on." Every file setup changes is copied first, next to it
(<file>.lflabs-backup-<time>), and recorded so dawnmere uninstall can put it back. You can run setup again at any
time, for example to add a model later.
dawnmere setup --dry-runprints every change it would make and makes none.dawnmere setup --backend noneruns without a model: recall and remember work, automatic saving is off.
Your apps
-
Claude Code (2.1.301 or later): setup installs the
dawnmereplugin from this repo, at the release you installed, which adds the tools and four hooks. If the plugin cannot be installed, it adds the same tools withclaude mcp addand the hooks to~/.claude/settings.json. -
Codex: adds
[mcp_servers.dawnmere]to~/.codex/config.tomland a prompt hook to~/.codex/hooks.json. Type/hooksonce in Codex to trust the hook. -
Cursor: adds
dawnmereto~/.cursor/mcp.jsonand a session-start hook to~/.cursor/hooks.json, then restart Cursor. Cursor sees work notes only until you rundawnmere access cursor everything;dawnmere access cursor worktakes that back. -
Windsurf, Gemini CLI, VS Code (Copilot), Qwen Code, Kimi Code, Qoder CLI, iFlow CLI and Cline CLI: when setup finds one, it adds
dawnmereto its MCP file (~/.codeium/windsurf/mcp_config.json,~/.gemini/settings.json,~/Library/Application Support/Code/User/mcp.json,~/.qwen/settings.json,~/.kimi-code/mcp.json,~/.qoder/settings.json,~/.iflow/settings.json,~/.cline/data/settings/cline_mcp_settings.json); restart the app. They get the tools and no hook, so they recall when they call the tool, and they see work notes only. -
Claude Desktop and other MCP apps: setup does not connect them. For Claude Desktop, open
dawnmere-connector.mcpbfrom the latest release, or add this to~/Library/Application Support/Claude/claude_desktop_config.json:{ "mcpServers": { "dawnmere": { "command": "npx", "args": ["-y", "dawnmere-connector@0.1.1"] } } }The connector's README has the lines for Windsurf, Gemini CLI and others.
Before 0.1.10 the entry and the plugin were called lflabs-memory (plugin lflabs-memory@lflabs). Setup, the install
line and dawnmere update rename them to dawnmere in every app, so none lists memory twice; dawnmere uninstall
removes either name.
Commands
| Command | What it does |
|---|---|
dawnmere setup | connect your apps to one memory on this Mac |
dawnmere doctor | check that everything works, Node.js included, one line per check, with what to do about each problem |
dawnmere export | save your memory to ~/Downloads/dawnmere-export-<date>.json (--format md for Markdown) |
dawnmere import FILE | add the memories from an export file, skipping any already there; they count as app saves until you confirm them in one macOS dialog |
dawnmere access APP [LEVEL] | show what an app may see, or change it: everything, nothing-personal, work or nothing (only Cursor and Codex can be widened from here) |
dawnmere update | install the newest release, checked against its checksums |
dawnmere uninstall | remove everything setup added |
dawnmere held | app saves kept out of your prompts until you confirm them, with the line that confirms each |
dawnmere trust -- ID... | make memories your own words, after you click Allow in a macOS dialog |
dawnmere search QUERY | search your memory |
dawnmere add TEXT | save one memory |
dawnmere forget ID | delete a memory for good |
dawnmere restore ID | bring back a memory an app forgot in the last day |
dawnmere doctor --report prints counts only (no memory text, names or paths), so it is safe to paste into an issue.
Forgetting
When you forget a memory yourself (type "forget memory 12" in Claude Code or Codex, or run dawnmere forget 12
in Terminal), its text, search entries, older versions and the facts drawn from it are deleted from the memory file
and its backups when the reply finishes (typed in Codex, at your next prompt there). It cannot be brought back. If background reading is on, the words are kept for up to 24 hours so the
background job can find other notes that mention them, then erased. When an app calls forget on its own, the memory
is hidden at once and deleted for good after 24 hours; until then dawnmere restore 12 brings it back. A
fingerprint with no words stays, so the same thing is not saved again from an old chat. dawnmere uninstall can also
delete the whole memory (it asks first).
Claude Code also keeps its own memory files (under ~/.claude/projects/). Dawnmere never deletes them itself: when
a forgotten note came from one, the reply names the file and says to delete it there too. In Claude Code, Claude
usually does that for you; from another app or Terminal, remove it yourself.
What leaves your Mac
Your memory is never uploaded to us, and nothing is sent to LF Labs. What leaves your Mac:
- Background reading, if you chose a model, sends your own provider (your Claude plan through Claude Code, or the Anthropic API with your key) your Claude Code conversations, after every 6 of your messages and when a session goes quiet, with up to 8 related memories, which can include ones saved from Codex or Cursor. It also sends memories waiting to be filed, a prompt not in English typed in Claude Code or Codex (to search it in English), and for up to 24 hours the words of something you forgot. Once a week, and once soon after setup, it also sends memories that say nearly the same thing, memories that read as out of date and dated status notes, each with a few related memories, to merge, rewrite or retire them. At most 200 calls a day in all; with no model, none of this is sent.
- GitHub: releases and updates, and, if GitHub's
ghis installed and logged in, the open pull requests of the repo you are working in. - Downloads: uv, Python and the engine's Python packages (from GitHub and PyPI); the search models and the Claude
Code plugin (from this repo's releases and repo); the connector (from npm: downloaded once, and npm is checked when an app starts it).
dawnmere updateasks GitHub for the newest release. - Setup's check of your model: one short test call to Claude Code or the Anthropic API.
- The install line: dawnmere.app counts each fetch of the install script (the tool that fetched it, the referring site and the country; no IP address is kept), then sends it on to GitHub. The site's own counting is on its privacy page.
Each app decides for itself what it sends to its own model, including what it recalls from memory.
Uninstall
dawnmere uninstall
It stops and removes the background service, takes memory out of Claude Code, Codex and Cursor (putting each file
back as it was, or removing only the Dawnmere entries if you changed the file since), removes the API key from your
Keychain, and removes the dawnmere and engine programs. It always asks before deleting your memory, which cannot be
brought back; say no, or use --keep-data, to keep it. It deletes the backups setup made. If a file could not be put
back as it was, its copy from before setup stays next to it and uninstall lists it. It also takes out the
~/.zprofile line the installer added. uv and the Python it downloaded stay on your Mac; uninstall prints how to
remove them.
Who makes it, and the LF Labs names
Dawnmere is made by LF Labs (the LF-Labs-Inc organization on GitHub). Inside, the programs use the LF Labs name, so these are all Dawnmere:
| What | Where |
|---|---|
| your memory, settings and models | ~/Library/Application Support/LF Labs/Memory/ (only you can read it) |
| the service's log | ~/Library/Logs/LF Labs/memory.log |
| the background service | ~/Library/LaunchAgents/com.lflabs.memory.plist |
| the programs | ~/.local/share/uv/tools/lflabs-memory-cli/, linked as ~/.local/bin/dawnmere and lflabs-memory (the engine's command, which the hooks run) |
| an Anthropic API key, if you gave one | your login Keychain, as "LF Labs Memory" |
Limits
- Mac only, Apple silicon, macOS 14 or later. The engine's ONNX runtime has no Intel Mac build, and there is no Linux or Windows version.
- One Mac. There is no sync between machines and no team memory.
- Chinese and Japanese recall matches words. A note saved in Chinese or Japanese reaches your prompts when you ask with some of the same words. A question worded differently is often missed; your app can still search for it. With a model set up, a Chinese or Japanese question is also searched in English, one small model call each. A typed save needs "remember that ..." (in Chinese "记住:...", in Japanese "覚えておいて:..."). Other languages are found much less reliably for now.
- Saving is strongest from Claude Code. In Codex, say "remember that ..."; in Cursor, the model has to call
remember. Codex's own session files are read only if you rundawnmere setup --codex-sessions. - Screening is automatic and can miss things. Review what your apps save with
dawnmere export. - Early beta. Releases are cut by hand and come often; read the release notes before updating.
License
The installer, the dawnmere command, the Claude Code plugin and the connector in this repo are MIT
(LICENSE). The engine is source-available under the
Functional Source License 1.1, MIT future license
(FSL-1.1-MIT): each version becomes MIT two years after its release. The search models keep their own licenses
(dawnmere doctor --licenses, and THIRD_PARTY.md).
Related
memory-bench is an open benchmark for assistant memory, built by the same people. It has a Dawnmere row measured on the released engine, with its leaks shown next to its recall; the maintainers' other row there is a related system, and the benchmark says so.
Found a bug? Open an issue with the output of
dawnmere doctor --report. Security problems go to SECURITY.md.
dawnmere-connectornpm install dawnmere-connector