Repository avatar
AI Tools
v0.1.2
active

dawnmere-connector

io.github.LF-Labs-Inc/dawnmere-connector

One memory shared across your AI apps. Connects to Dawnmere on your Mac.

Documentation

English | 简体中文 | 日本語

Dawnmere

Tell one AI. They all know.
One memory on your Mac, shared by Claude Code, Codex and Cursor.

Animation: a note saying 'we deploy on Fridays' drops into the Claude Code bucket and then into the lake. Kip, a kingfisher, carries copies to the Codex and Cursor buckets, and each app's logo lights up. Then Codex is told 'use pnpm, not npm' and the same thing happens.

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:

AppRecallsSaves
Claude Codeinto each prompt, and at the start of a sessionon its own after a session goes quiet (if you chose a model), when you type "remember that ...", or when the model calls remember
Codexinto each promptwhen you type "remember that ...", or when the model calls remember
Cursorat the start of each chatwhen 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, and dawnmere uninstall puts 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 keptShared by Claude Code, Codex and Cursor
Dawnmereone SQLite file on your Mac; search runs on your Macyes, by default; each app sees what you allow
claude-mem~/.claude-mem on your machinesupports all three and more; other agents' memories at session start are opt-in
Supermemoryhosted by default, or on your machine with npx supermemory local (the two do not share memories)yes, plus OpenCode and others
Mem0 MCPhosted by Mem0, with a Mem0 account; nothing runs on your machineyes, through that account
Built-in memoryCLAUDE.md and auto memory in your projects and home folder; AGENTS.md in your reposCLAUDE.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:

  1. stops unless this is a Mac with Apple silicon and macOS 14 or later;
  2. downloads uv 0.12.5 if you do not have a recent one, and the dawnmere and engine packages from the release;
  3. checks those files against sha256 values written into the script, and installs nothing if one differs;
  4. 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;
  5. adds one marked line to ~/.zprofile so new Terminal windows find dawnmere, unless they already do, and says so;
  6. 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:

StepWhat happens
Claude Codechecks that claude is there and logged in
Search modelsdownloads the search models (about 310 MB) and checks each file's size and sha256
Memory servicestarts a background service (a LaunchAgent) that keeps search fast
Your appsconnects Claude Code, Codex, Cursor and the other apps listed below, if they are installed
Your notesimports your Claude Code notes
Self-checksaves 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-run prints every change it would make and makes none.
  • dawnmere setup --backend none runs without a model: recall and remember work, automatic saving is off.

Your apps

  • Claude Code (2.1.301 or later): setup installs the dawnmere plugin 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 with claude mcp add and the hooks to ~/.claude/settings.json.

  • Codex: adds [mcp_servers.dawnmere] to ~/.codex/config.toml and a prompt hook to ~/.codex/hooks.json. Type /hooks once in Codex to trust the hook.

  • Cursor: adds dawnmere to ~/.cursor/mcp.json and a session-start hook to ~/.cursor/hooks.json, then restart Cursor. Cursor sees work notes only until you run dawnmere access cursor everything; dawnmere access cursor work takes 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 dawnmere to 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.mcpb from 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

CommandWhat it does
dawnmere setupconnect your apps to one memory on this Mac
dawnmere doctorcheck that everything works, Node.js included, one line per check, with what to do about each problem
dawnmere exportsave your memory to ~/Downloads/dawnmere-export-<date>.json (--format md for Markdown)
dawnmere import FILEadd 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 updateinstall the newest release, checked against its checksums
dawnmere uninstallremove everything setup added
dawnmere heldapp 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 QUERYsearch your memory
dawnmere add TEXTsave one memory
dawnmere forget IDdelete a memory for good
dawnmere restore IDbring 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 gh is 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 update asks 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:

WhatWhere
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 oneyour 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 run dawnmere 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.

NPM
dawnmere-connector
Install Command
npm install dawnmere-connector