Skip to main content
Glama

Make0 Brain: shared AI memory for every agent

One AI memory for every agent you use. Claude Code, Claude Desktop, Cursor, Codex, Windsurf, VS Code, Gemini CLI, Hermes Agent, and OpenClaw all read and write the same memory, and every change is versioned.

A local-first, open-source AI memory server for MCP. After a one-time model download it runs offline with no API key, keeps everything in one SQLite file on your machine, and speaks the same 7 tools as the hosted Make0 Brain. It can also start full: one command imports the sessions 41 coding agents already keep on disk.

Make0 · SWE-ContextBench results · LongMemEval results

npx @make0-ai/brain init

Only using Cursor or VS Code? These buttons add the server to that one app. Run init too if you want it to download the models up front and write the custom instruction.


Why

Every agent keeps its own memory. Claude has CLAUDE.md, Cursor has rules, Codex has AGENTS.md, ChatGPT has its memory page. You end up explaining your stack, your preferences, and last week's decisions again in each one, and the copies drift apart.

Make0 Brain is one memory that all of them share:

  • Tell one agent, every agent knows. A fact saved from Cursor is found by Claude Code in the next session.

  • Nothing is overwritten silently. Every edit, from any agent, is kept as a version with who wrote it and when.

  • It stays yours. One SQLite file on your machine, MIT licensed, exportable to plain Markdown.

Related MCP server: kepta

Quick start

1. Connect your agents.

npx @make0-ai/brain init

init finds Claude Code, Claude Desktop, Cursor, Windsurf, VS Code, Codex CLI, Gemini CLI, Hermes Agent, and OpenClaw. When more than one is installed, it shows a checklist of them, all ticked; untick any you want to leave out. Pass --clients to choose up front, or --yes to configure every detected agent without asking. It then shows what it will change, asks once, keeps a .make0-backup of each config file, and adds Make0 Brain to each chosen app. It downloads the two local models (about 50 MB, once) with a progress bar, so your first question to an agent doesn't wait on a download. Restart the apps afterwards.

Connecting the server is not enough. The agent also needs a custom instruction so it searches Brain before answering and saves lasting facts there. init writes this into the global rules file for Claude Code (~/.claude/CLAUDE.md), Codex (~/.codex/AGENTS.md), Gemini (~/.gemini/GEMINI.md), and Windsurf. Cursor, Claude Desktop, VS Code, Hermes Agent, and OpenClaw keep rules in settings or a persona file, so init prints the same text for you to paste:

Make0 Brain is my source of truth for durable memory. Always search it before answering about me, my work, people, preferences, or past decisions. Save lasting facts and decisions to Brain. Never guess or invent memories. Use Brain exclusively for durable memory.

App

Where it goes

Claude Code

~/.claude/CLAUDE.md, written by init

Codex CLI

~/.codex/AGENTS.md, written by init

Gemini CLI

~/.gemini/GEMINI.md, written by init

Windsurf

Global rules, written by init

Cursor

Settings → Rules → User Rules. Paste it.

Claude Desktop

Settings → Profile → personal preferences. Paste it.

VS Code

.github/copilot-instructions.md in the repo. Paste it.

Hermes Agent

~/.hermes/SOUL.md. Paste it.

OpenClaw

~/.openclaw/workspace/AGENTS.md. Paste it.

Skip the rule with init --no-rules.

2. Bring in the context you already have.

npx @make0-ai/brain import --detect             # CLAUDE.md, AGENTS.md, Cursor/Windsurf/Copilot rules
npx @make0-ai/brain import --sessions           # past sessions from 41 coding agents, one digest each
npx @make0-ai/brain import ~/Documents/MyVault  # an Obsidian vault or any Markdown folder
pbpaste | npx @make0-ai/brain import -          # e.g. a memory dump copied from ChatGPT

import on its own asks what to import. The details are under Import and export.

3. Look at it.

npx @make0-ai/brain view

The viewer opens on 127.0.0.1 with every brain, how many memories each holds, and what your apps retrieved and added this week.

Models live in ~/.make0/models and data in ~/.make0/brain.db. If you skip init (or pass --no-models), the first save or search downloads the models instead.

Or run it without arguments

Typed in a terminal, npx @make0-ai/brain opens a menu: connect agents, import sessions or notes, open the viewer, create a brain, choose which brains an app can use, export, restore an archived memory, or show stats. Any command run without its arguments asks for them the same way, one step at a time, with arrow keys, checkboxes, and a default on Enter. Ctrl+C cancels without changing anything.

Scripts and MCP clients are unaffected. Passing the arguments, adding --yes, or running without a terminal skips every question, and MCP clients, which start the server without a terminal, get the server as before. make0-brain serve starts the server even in a terminal.

Verify it works

Restart the apps you connected, then check that a memory written by one agent reaches another:

  1. Save from one agent. In Cursor (or any connected app), say: "Remember that my test fruit is mango." It should call add_memory.

  2. Find it from another. In a new Claude Code session (or any other connected app), ask: "What is my test fruit?" It should call search_brain and answer "mango" without being told.

  3. Check who wrote it. Run npx @make0-ai/brain view, open the personal brain, and click the memory. It shows Added by Cursor and a version timeline.

Delete the test memory in the viewer when you are done. If step 1 or 2 doesn't call a Brain tool, the app is missing the custom instruction above (Cursor, Claude Desktop, and VS Code need it pasted) or wasn't restarted. Run npx @make0-ai/brain agents to confirm the app can use the personal brain.

Import directly from

Your coding agents already keep every session on disk. One command reads that history from 41 agents and saves each session as a memory, filed under its project, so the next agent can find what was asked, decided, changed, and broken last time. No API key and no model are needed.

npx @make0-ai/brain import --sessions                          # pick agents and a brain step by step
npx @make0-ai/brain import --sessions --agent cursor,codex     # only these agents
npx @make0-ai/brain import --list-agents                       # agent ids and names

In a terminal it asks three things: which of the agents it found to import, which brain to save into (or a new one), and whether the summary is right. Each memory is a digest of one session: what you asked, your corrections, the files that changed, the commands that failed, and how it ended. Credentials are redacted before anything is saved. Coding-agent sessions covers the time window, the session cap, scripting flags, and the stores that cannot be read.

One context across all agents

Same tools in every app

After init, every connected agent gets the same 7 tools:

Tool

What the agent uses it for

list_brains

Get the brain ids this app can use. personal is always there until you allocate others.

search_brain

Find memories for a focused query before answering.

get_memory

Read one memory in full.

get_memory_versions

Read every saved version of a memory, newest first.

add_memory

Save a fact or a short Markdown note when you ask it to.

update_memory

Change a memory. The previous text is kept as a version.

delete_memory

Archive a memory. Its versions are kept and you can restore it.

The names and schemas match the hosted Make0 Brain, so a prompt or agent setup works against either one.

More than one brain

The personal brain is created with the database and cannot be deleted. Add others when a project should not share those memories:

npx @make0-ai/brain brains create "Work" --description "Client work" --agents cursor,claude-code
npx @make0-ai/brain brains                 # list brains
npx @make0-ai/brain agents                 # which app can use which brain
npx @make0-ai/brain import ~/Notes --brain Work
npx @make0-ai/brain view --brain Work

An app with no allocation sees only personal. agents grant and agents revoke change that, and so does the Connect dialog in view. Revoking every brain leaves the app with none: list_brains comes back empty until you grant one again. The viewer and the CLI can open every brain. Agents only see brains you give them, and list_brains is how they learn the id to pass to the other tools.

Open a brain to see its memories as a board, one column per category, with the app that wrote each one.

Every memory knows who wrote it

Make0 Brain reads the client name each app sends when it connects and records it as the writer: claude, chatgpt, or cursor. Any other app is recorded as mcp, with its own client name kept too. Search results show addedBy for each memory, and every version records who wrote it. You can see which agent learned what.

See what each app reads and writes

Every memory an app retrieves or writes is counted per app and per brain, with a rough token count. The home page shows this week at a glance; Details opens the full chart, filterable by brain, range, and app, in memories, tokens, or average tokens per call. The counters stay in the local database.

Context stays consistent

  • Contradictions replace older facts. If Cursor saves "I don't like dark mode in my editor" after Claude saved "I like dark mode in my editor", the newer memory wins and the older one is archived, with its history intact.

  • Duplicates merge (with an API key or a local model). An LLM judge compares close matches and merges restatements into one memory. The merged text may only use words from the two originals, so it cannot invent facts. Without one, duplicates are kept rather than guessed at.

  • Related memories are linked. Similar memories get links automatically, and search follows them up to two hops, so asking about a project also surfaces the decisions tied to it.

Switch a brain to 3D to orbit and zoom through it: categories branch from the center, and each memory sits on its category.

Memory versioning

Every write to a memory creates a version, whether it comes from an agent, an import, or you in the viewer. Nothing is overwritten in place.

What a version records

Field

Meaning

versionNumber

1, 2, 3… per memory.

current

The version agents read now. Exactly one per memory.

content, category, kind, entityType, confidence

The memory as it was at that point.

writtenBy

user, make0, claude, chatgpt, cursor, or mcp.

writerName

The app's own client name when writtenBy is the generic mcp.

embeddingModel

The embedder that indexed the text while this version was current.

createdAt

When the version was written.

A version is written when the content, category, kind, or entity type changes. A confidence-only change does not add one.

Agents can read the history

Search results include versionCount. When it is greater than 1, an agent can call get_memory_versions to see how a fact changed and who changed it: for example, that you switched from npm to pnpm last month and which agent recorded it.

Nothing is lost

Action

What happens

update_memory or an edit in the viewer

A new current version. Older versions stay.

A contradicting or merged memory

The older memory is archived with all its versions.

delete_memory

Archived: hidden from search and reads, versions kept.

Re-import of an edited note

A new version of that memory, not a duplicate.

Re-import of a note you deleted

Skipped. Deleted stays deleted.

make0-brain purge <id> --yes

The only permanent delete. Agents cannot do it.

Browse and restore

npx @make0-ai/brain history <id>               # every version, current one marked *
npx @make0-ai/brain restore <id> --version 2   # make version 2 current again
npx @make0-ai/brain restore <id>               # bring back an archived memory
* v3  2026-10-27T09:14:02.118Z  claude
    The project uses pnpm and Node 22.
  v2  2026-10-20T16:40:51.502Z  cursor
    The project uses pnpm.
  v1  2026-10-02T11:05:33.910Z  user
    The project uses npm.

Restoring makes an older version current again and re-indexes it. No version is deleted.

npx @make0-ai/brain view opens a local page (on 127.0.0.1 only) where you can create and switch brains, browse memories as a board or in 3D, search, add, and edit them, read each memory's version timeline, restore a version, bring back archived memories, inspect the stored embedding, and permanently delete.

Search quality

Measured on SWE-ContextBench Lite, the same comparison as the Make0 benchmark page: 300 earlier coding sessions and 99 related issues. The score is how often search returns the gold past session. The local install uses the offline MiniLM embedder and the ms-marco MiniLM reranker. Once the models are loaded, search takes about 80ms per query on an Apple M2 Pro.

Rank 1, the gold session is the first result:

Make0 Brain (cloud)   █████████████████████████████░░░░░░░░░░░  71.7%
Make0 Brain (local)   █████████████████████████░░░░░░░░░░░░░░░  62.6%  ~80ms
LangMem               ██████████████████████░░░░░░░░░░░░░░░░░░  55.6%
OpenViking            ███████████████░░░░░░░░░░░░░░░░░░░░░░░░░  38.4%
Free summary search   ██████████████░░░░░░░░░░░░░░░░░░░░░░░░░░  34.3%
Mem0                  ██████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░  25.3%
Supermemory           █████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░  23.2%

Overall, the gold session appears anywhere in the results:

Make0 Brain (cloud)   ██████████████████████████████████████░░  93.9%  top 10
Make0 Brain (local)   █████████████████████████████████████░░░  92.9%  top 10   ~80ms
LangMem               █████████████████████████████░░░░░░░░░░░  73.3%  top 10
Supermemory           ████████████████████████░░░░░░░░░░░░░░░░  59.6%  top 15
OpenViking            █████████████████████░░░░░░░░░░░░░░░░░░░  51.5%  top 3
Mem0                  ████████████████░░░░░░░░░░░░░░░░░░░░░░░░  39.4%  top 3
Free summary search   ███████████████░░░░░░░░░░░░░░░░░░░░░░░░░  36.4%  agent chooses

LangMem, OpenViking, Mem0, Supermemory, and free summary search are from Table 5 of that paper. "Overall" counts a hit anywhere in each system's own result list; Make0 cloud, Make0 Brain, and LangMem each return 10. On the full benchmark (1,007 past tasks, 357 related issues), hosted Make0 scores 71.4% at rank 1 and 88.2% overall. A stronger embedder and reranker raise accuracy.

How search works: MiniLM embeddings and BM25 keyword scores are blended, a cross-encoder reranks the shortlist (or an LLM filter, with a key), weak results are pruned, and the top results are expanded two hops along memory links.

LongMemEval

Measured on LongMemEval_S with the open-source local install. Each question comes with its own history of past chat sessions, and the score is how often search returns the session that holds the answer. Overall covers the 470 standard questions. The 30 abstention questions, which ask about something the history never says, are scored on their own in the last row.

Question type

Recall@5

Recall@10

MRR

Overall

91.6%

94.4%

0.915

Knowledge update

98.6%

99.3%

0.972

Multi-session

86.9%

91.1%

0.934

Single-session assistant

100%

100%

1.000

Single-session preference

76.7%

86.7%

0.597

Single-session user

100%

100%

0.941

Temporal reasoning

87.6%

91.1%

0.887

Abstention (not in Overall)

88.1%

88.9%

0.894

Import and export

Import

  • Folders and vaults. Each note becomes one memory. Long notes split by heading, and each part keeps the note title. Frontmatter tags or the folder name become the category. Obsidian [[wikilinks]] become links between memories. .obsidian/ and .trash/ are skipped.

  • Agent rule files. --detect finds the rule files you already wrote for one agent (global ones under your home folder, project ones in the current folder) and makes them available to all of them. Make0 Brain's own "search Brain first" block is stripped out, so it is never imported as a memory.

  • Coding-agent sessions. --sessions; see below.

  • Re-runs are safe. Unchanged items are skipped, edited ones get a new version, and memories you deleted stay deleted.

  • --extract (needs an API key or a local model) turns files into one-fact memories instead of note-sized ones. With --sessions it keeps only what stays true after the session: your preferences and corrections, project decisions, and fixes for errors that may come back.

  • --brain <id> picks the brain; at a terminal you are asked instead. --dry-run shows what would change without saving or creating anything. Imports over 200 memories ask first; --yes skips the question.

Coding-agent sessions

--sessions reads the session history coding agents already keep on your machine and saves one memory per session, in a category per project (Sessions · acme-api), so the board shows a column per project. Each memory records what you asked, your corrections, the files that changed, the commands that failed with their first error line, and how the session ended. No model is involved, so it needs no key.

  • At a terminal it lists the agents it found, busiest first, all ticked; then asks for a brain, or creates one; then shows a summary to confirm. In scripts, --agent cursor,claude-code picks agents, --brain <id> the brain (default personal), and --yes skips the questions. --list-agents prints every agent id.

  • Time window and cap. It reads the last 30 days and at most 500 sessions, the most recently active first. --since 2w or --since all changes the window, and --limit 100 or --limit all the cap. Sessions outside them are never opened, so a large history (Cursor's database can pass 50 GB) costs a quick scan, not a full read.

  • Privacy. API keys, tokens, private keys, passwords, and long random tokens are replaced with [redacted:<kind>] before anything is stored.

  • What is skipped. Sessions with no prompt you typed, subagent runs, and files under temp folders. When an agent keeps one session in two places (Cursor's CLI transcript and its IDE database), it is imported once.

  • Re-running picks up new sessions; a session that grew gets a new version.

  • Agents read: the 41 under Import directly from.

  • Not read: Windsurf and TRAE IDE (their chats are encrypted), JetBrains AI Assistant, Kiro's headless data.sqlite3, Reasonix 1.x frame logs, and Amp threads that live only on ampcode.com.

  • zstd. Zed, DeepSeek Harness, and OpenClaw's compressed events are zstd-compressed. Node.js 22.15 or newer decompresses them itself; on older Node.js, Make0 Brain uses the zstd command when it is installed and otherwise skips those sessions.

  • The store locations and record formats follow the session format registry in deja-vu (MIT).

Export

npx @make0-ai/brain export ./my-brain          # one Markdown file per memory, opens as an Obsidian vault
npx @make0-ai/brain export --json brain.json   # every memory, version, and link (the Make0 port format)

The Markdown export imports back in. The JSON bundle includes archived memories and the full version history. It does not include embeddings; whoever reads it re-embeds with their own model.

Optional API key or local model

Nothing needs a key. With one, Make0 Brain also merges duplicate memories, picks better categories, filters search results with an LLM, and can import --extract. A model running on your own machine can do the same work without a key.

Copy .env.example to .env in this folder, or to ~/.make0/.env so every app shares one file:

cp .env.example ~/.make0/.env
OPENAI_API_KEY=sk-...          # or OPENROUTER_API_KEY, or MAKE0_BRAIN_API_KEY
MAKE0_BRAIN_LLM_BASE_URL=      # any OpenAI-compatible endpoint (optional)
MAKE0_BRAIN_LLM_MODEL=         # default gpt-6-luna
MAKE0_BRAIN_EMBEDDINGS=api     # API embeddings instead of local MiniLM
MAKE0_BRAIN_LLM_SEARCH=0       # keep search on the local reranker

Local model (Ollama, LM Studio, llama.cpp)

Point MAKE0_BRAIN_LLM_BASE_URL at a server on localhost and no key is needed. Nothing leaves your computer.

ollama pull llama3.2
MAKE0_BRAIN_LLM_BASE_URL=http://localhost:11434/v1   # Ollama; LM Studio is http://localhost:1234/v1
MAKE0_BRAIN_LLM_MODEL=llama3.2                       # default llama3.2 on localhost

A local URL wins over a hosted key set in the same environment. A local model is slower than a hosted API, so its calls get five times longer to answer, and search stays on the fast local reranker unless you set MAKE0_BRAIN_LLM_SEARCH=1. Servers that reject OpenAI's JSON mode are asked again without it. A model of 7B parameters or more gives noticeably better merges and extractions than a 1B to 3B one.

MAKE0_BRAIN_BASE_URL, the name before 0.3, still works.

Make0 Brain reads ./.env, then .env in the data folder (MAKE0_BRAIN_HOME, default ~/.make0). A variable already set in the environment, including in an MCP client's env block, wins. Switching embedders is safe: memories indexed by another model are re-embedded on the next search.

Privacy and security

What leaves your machine

When

What is sent

To

init, or the first save or search

Download requests for the two local models (no memory content)

Hugging Face

Normal use with no API key

Nothing

With an API key: saves

The new memory and close matches, to merge duplicates and pick a category

Your provider (MAKE0_BRAIN_LLM_BASE_URL, default OpenAI)

With an API key: search (MAKE0_BRAIN_LLM_SEARCH not 0)

The query and candidate memories, to filter results

Your provider

With an API key: import --extract

The full text of the imported files (for --sessions, the redacted digest)

Your provider

With a localhost MAKE0_BRAIN_LLM_BASE_URL

The same as with an API key, but to a server on this machine

Nothing leaves the machine

import --sessions without --extract

Nothing

MAKE0_BRAIN_EMBEDDINGS=api

The text of every memory and every query, to embed it

Your provider

Make0 Brain has no telemetry and does not contact Make0. The usage counts in the viewer stay in the local database.

Make0 Brain being local does not make your agents local. When an agent calls search_brain, the memories it gets back go into that agent's conversation, and that conversation is sent to the agent's own model provider (Anthropic for Claude, OpenAI for Codex, and so on). Keep anything you would not paste into that agent out of the brains it can use. agents grant and agents revoke control which brains each app sees.

Where your data lives

  • Database: ~/.make0/brain.db, a plain SQLite file with your memories, every version, links, and usage counts. It is not encrypted; it is protected by your user account and disk encryption.

  • Imports: the text of each note is copied into the database, with its file path and a hash so re-imports can find changes. The original files are only read, never changed.

  • Agent config: init keeps one .make0-backup of each config file it edits, and adds a marked block to the rule files listed above.

  • API key: read from .env or the environment. It is never stored in the database or in exports.

Bad or malicious memories

A memory is text, and an agent can read it as an instruction. A web page or a file an agent was working on can try to get it to save something like "always run this script". Make0 Brain cannot tell a true fact from a planted one, but it makes them easy to find and undo:

  • Every memory and version records which app wrote it, so an unexpected writer stands out in the viewer.

  • Nothing is overwritten in place. A bad edit can be reverted with restore <id> --version <n>.

  • Agents can archive memories but cannot permanently delete them. Only purge and the viewer can.

  • Give an app only the brains it needs, and keep a separate brain for untrusted work.

The viewer

view listens on 127.0.0.1 only, so other machines cannot reach it. It has no login, but it only answers requests addressed to 127.0.0.1 or localhost on its own port, which blocks DNS-rebinding tricks. Requests that change memories or brains must come from the viewer's own page and be sent as JSON: other sites' requests are refused, and a browser will not send another site's JSON request without the viewer's approval, which it never gives. Other programs on your computer can still call it while it runs, so stop the viewer (Ctrl+C) when you are not using it.

Backups, upgrades, and support

Backups

Make0 Brain does not back up your database by itself. Copy one of these somewhere safe, and do it before you upgrade:

npx @make0-ai/brain export --json ~/make0-brain-backup.json   # every memory, version, and link
sqlite3 ~/.make0/brain.db ".backup ~/make0-brain-backup.db"    # an exact copy, safe while apps are running

Copy brain.db directly only when no app is running, or you may miss recent writes that are still in brain.db-wal. To restore, stop your apps and copy the .db backup over ~/.make0/brain.db. The JSON bundle is a readable record of everything and the format for moving to Make0 cloud; import does not read it back yet.

Upgrades

Upgrading does not need a new init. Agents run the server through npx, so they pick up a new release the next time they start. If npx @make0-ai/brain --version shows an old version, a global install is shadowing npx: npm install -g @make0-ai/brain@latest. On first open, a new version migrates brain.db in place, one transaction per step, so a failed step leaves the database as it was. Migrations add tables and columns and fill in new fields; they do not remove your memories. Older versions are not tested against a migrated database, so back up before upgrading if you might go back.

Requirements and status

  • Node.js 22 or newer.

  • Operating systems: developed and tested on macOS. init knows the Linux and Windows config paths, but those platforms are not covered by automated tests yet. Reports are welcome.

  • Status: pre-1.0. The 7 MCP tools match the hosted Make0 Brain and are kept stable. CLI flags and the viewer may still change between minor versions.

  • Known limits: one machine, no sync between devices; one memory holds up to 4,000 characters; without an API key or a local model, duplicates are kept rather than merged; the viewer has no login (see above).

Releases

Each release is published to npm from GitHub Actions with provenance, tagged vX.Y.Z in GitHub Releases, and listed in the MCP Registry. CHANGELOG.md describes what changed. Patch releases are fixes. Minor releases can add features and database migrations.

Reporting a problem

Open an issue at github.com/make0-official/brain-oss/issues with:

  • the output of npx @make0-ai/brain --version and npx @make0-ai/brain stats;

  • your OS, Node version, and the agent app involved;

  • the command or prompt, and any error text.

Do not paste private memories or your .env. For a security problem, don't open an issue: report it privately as described in SECURITY.md.

Local or cloud

This repo

Make0 cloud

Best for

Local agents, data on your machine

Every device and web app, including ChatGPT and Claude on the web

Setup

npx @make0-ai/brain init

Sign in at make0.ai

API key

None required

Make0 account

Brains

Personal and custom

Personal, project, and custom brains

Storage

~/.make0/brain.db

Hosted

Search

MiniLM + BM25 + cross-encoder, ~80ms on an Apple M2 Pro

Stronger embedder and reranker

A one-command port from local to Make0 cloud is coming. The export --json bundle is the format it will use, with history and attribution included.

Reference

CLI

make0-brain                      Run the MCP server over stdio; typed in a terminal, open the menu
make0-brain serve                Run the MCP server, even in a terminal
make0-brain init                 Add Make0 Brain to your AI apps and download the models (--dry-run, --yes, --clients, --no-rules, --no-models)
make0-brain import <path…>       Import files, folders, or a vault (--detect, -, --extract, --brain, --dry-run, --yes)
make0-brain import --sessions    Import coding-agent sessions (--agent, --since, --limit, --brain, --extract, --dry-run, --yes)
make0-brain import --list-agents List the agents --sessions can read
make0-brain export [dir]         Markdown export (--json [file] for the bundle, --brain to limit it)
make0-brain brains               List, create, edit, or delete brains
make0-brain agents               Show or change which brains each app can use (grant, revoke)
make0-brain view                 Open the memory viewer in a browser (--port, --no-open, --brain)
make0-brain stats                Show memory and link counts (--brain)
make0-brain history <id>         List saved versions of a memory
make0-brain restore <id>         Restore an archived memory (--version <n> for an older version)
make0-brain purge <id> --yes     Permanently delete a memory and its versions

At a terminal, a command missing its arguments asks for them: import asks what to import, brains create for a name, description and apps, brains edit|delete, restore, purge, and history let you pick from a list, agents grant|revoke asks for the app and brains, and export for the format and destination. purge and brains delete default to No. init --clients takes a comma-separated list of claude-code, claude-desktop, cursor, windsurf, vscode, codex, gemini, hermes, openclaw.

Manual setup

If init doesn't cover your app, add a stdio server and paste the custom instruction from the quick start into that app's rules:

{
  "mcpServers": {
    "make0-brain": { "command": "npx", "args": ["-y", "@make0-ai/brain"] }
  }
}

Environment

Variable

Default

Purpose

MAKE0_BRAIN_HOME

~/.make0

Data folder: database, models, .env.

MAKE0_BRAIN_DB

$MAKE0_BRAIN_HOME/brain.db

Database file.

OPENAI_API_KEY / OPENROUTER_API_KEY / MAKE0_BRAIN_API_KEY

unset

Turns on the optional LLM features.

MAKE0_BRAIN_LLM_BASE_URL

OpenAI, or OpenRouter for an OpenRouter key

OpenAI-compatible endpoint. A localhost one needs no key. Formerly MAKE0_BRAIN_BASE_URL.

MAKE0_BRAIN_LLM_MODEL

gpt-6-luna; llama3.2 on localhost

Chat model.

MAKE0_BRAIN_EMBEDDINGS

local

local (MiniLM) or api.

MAKE0_BRAIN_EMBEDDING_MODEL

text-embedding-3-small

Embedding model when api.

MAKE0_BRAIN_LLM_SEARCH

on with a key, off with a local model

0 keeps search on the local reranker; 1 sends it to a local model.

Develop

npm install
npm test            # fast suite, no model downloads
npm run test:models # real local models
npm run test:e2e    # build, then drive the stdio server

The viewer UI is a React app in web/, built into dist/web and served by make0-brain view.

npm run build:web                                   # once, so `npm run dev -- view` has a UI
MAKE0_BRAIN_DB=/tmp/try.db npm run dev -- view --no-open
npm run dev:web                                     # hot reload at http://localhost:5173, API proxied to :4173

See CONTRIBUTING.md for pull requests and releases.

License

MIT

Available Tools

7 tools
add_memoryAdd memoryA

Save a new Brain memory when the user explicitly asks to remember, save, or store something. Store either one singular fact or one short Markdown mini-doc (headings, lists, bold, links, code, and Mermaid diagrams) up to about 800 words. Use one memory for one coherent fact or note; do not paste a long document. A new memory that contradicts or restates an older one replaces it; the older one stays in version history.

NameRequiredDescriptionDefault
kindNo
brainYesBrain id from list_brains. The personal brain is "personal".
contentYesMemory text: one singular fact, or one short Markdown mini-doc (headings, lists, bold, links, code, and Mermaid diagrams in ```mermaid fences). Keep it under about 800 words. Hard cap 4000 characters.
categoryNo
confidenceNo
entityTypeNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavior beyond the annotations: a contradicting or restating memory replaces the older one, and the older version stays in history. That supersession-and-versioning rule is exactly the kind of non-obvious effect an agent needs. Size limits are also restated, and nothing contradicts the non-destructive hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the trigger, then content shape, then supersession semantics. Slight redundancy in restating the ~800-word / Markdown guidance that the content schema already carries.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers the write's side effects well but omits how to obtain the required brain id (the list_brains sibling) and how to choose kind, category, confidence, or entityType. Those gaps are significant for a 6-parameter create.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% across 6 params. The description covers 'content' (already described in the schema) and says nothing about brain, kind, category, confidence, or entityType — four of which are undocumented in the schema as well. It leaves the agent guessing where the brain id comes from and how to set metadata.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Save a new Brain memory') and implicitly distinguishes itself from update_memory and delete_memory by the word 'new'. An agent can tell immediately this is the creation path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger condition ('when the user explicitly asks to remember, save, or store something') plus a scoping rule (one memory per coherent fact, don't paste a long document). It does not name update_memory or search_brain as alternatives, so the when-not is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_memoryDelete memoryA
DestructiveIdempotent

Delete a Brain memory when the user explicitly asks to remove a saved fact. The memory leaves search and reads, and every saved version is kept so the user can restore it with npx @make0-ai/brain restore <id>.

NameRequiredDescriptionDefault
brainYesBrain id from list_brains. The personal brain is "personal".
memoryIdYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the bar is lower, yet the description goes further by disclosing that this is a reversible removal: the memory disappears from search and reads while "every saved version is kept," plus the concrete restore command. This is exactly the post-destructive recovery context an agent needs to reassure a user.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste. The precondition is front-loaded and the recovery mechanism follows as supporting context; nothing is repeated from the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive two-param mutation with no output schema, the description covers the critical unknowns: reversibility, visibility impact, and the restore path. The one gap is that memoryId's meaning and how to obtain it is left entirely to the schema, which does not describe it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: `brain` is documented (personal brain is "personal") but `memoryId` carries no description in either the schema or the prose. The description never mentions any parameter, so it does not compensate for the undocumented id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Delete a Brain memory" names a specific verb and resource, and the description immediately qualifies the semantics as a soft delete where the memory "leaves search and reads" but versions persist. That is distinguishable from siblings like update_memory or get_memory_versions without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The trigger condition is explicit and restrictive: only "when the user explicitly asks to remove a saved fact." That implicitly excludes correction-style edits (which belong to update_memory), but no sibling tool is named as the alternative the way a 5 would require.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_memoryGet memoryA
Read-onlyIdempotent

Fetch one Brain memory by id. Content is either a singular fact or a short Markdown mini-doc (up to about 800 words). The memory includes addedBy (who first saved it) and versionCount (saved revisions). When versionCount is greater than 1, call get_memory_versions to read every saved revision.

NameRequiredDescriptionDefault
brainYesBrain id from list_brains. The personal brain is "personal".
memoryIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered. The description adds value beyond them by disclosing the shape and size bound of the payload and the presence of addedBy and versionCount fields, and it flags a follow-up call. It does not mention behavior on a missing/invalid id (error vs empty), which is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler; the identity of the tool and its scope lead, then payload characteristics, then the conditional escalation to get_memory_versions. Every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does a reasonable job sketching the return shape (content, addedBy, versionCount) and the size limit, which is what an agent needs to decide whether to call it. Missing only id-format guidance and error/not-found behavior for full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: 'brain' is documented in the schema (including the "personal" default), but 'memoryId' has no schema description at all. The description only says 'by id' and adds nothing about id format or where to obtain it, so it does not compensate for the undocumented parameter. Baseline 3 is the correct ceiling here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Fetch one Brain memory by id') and immediately characterizes what the returned content is (a fact or a Markdown mini-doc up to ~800 words). An agent can distinguish this from search_brain and list_brains without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit conditional branch: 'When versionCount is greater than 1, call get_memory_versions to read every saved revision.' That is a genuinely useful routing rule to a named sibling. It does not state when *not* to use this tool (e.g. when you only have a query and not an id, use search_brain), so it falls short of full 5-level guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_memory_versionsGet memory versionsA
Read-onlyIdempotent

Fetch every saved version of one Brain memory, newest first, including the current version. Use this when you need to see how a fact changed. Each version includes its full content. The version with current: true matches the memory returned by get_memory.

NameRequiredDescriptionDefault
brainYesBrain id from list_brains. The personal brain is "personal".
memoryIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a safe read operation (readOnlyHint, idempotentHint, non-destructive), so the description does not need to repeat that. It adds real context beyond the annotations: result ordering (newest first), that each version carries full content, and that the current:true entry duplicates what get_memory returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, with the core action, the ordering, the usage trigger, and the get_memory equivalence all front-loaded. Nothing is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description does explain the return shape well: version list, newest-first, full content per version, and the current:true marker. It does not mention whether history is truncated or paginated for long-lived memories, a minor but real omission for a version-history tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: the 'brain' parameter is documented in the schema, but 'memoryId' has no description anywhere. The description implies that memoryId identifies 'one Brain memory' but does not explain how to obtain it (for example, from get_memory or search_brain). It therefore does not fully compensate for the gap, so the baseline score of 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Fetch every saved version of one Brain memory'), adds ordering ('newest first'), and explicitly separates it from the sibling get_memory, which returns only the current state. An agent can distinguish it from search_brain and get_memory without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this when you need to see how a fact changed' gives a clear use condition, and the closing sentence about current: true routes agents to get_memory for the current-state case. There is no explicit 'do not use when' statement, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_brainsList brainsA
Read-onlyIdempotent

List Make0 brains this connection can use. Call this first to get a brain id for search_brain. Does not list memories.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, closed-world and non-destructive, so the safety profile is covered. The description adds context annotations can't express: results are limited to brains visible to the current connection, and memories are not returned. It doesn't say anything about ordering or result size, but the tool is trivial enough that this is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and scope, then the required call ordering, then the disambiguation. Every sentence carries distinct information with no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool with full annotation coverage, the description covers purpose, sequencing, and scope exclusions. Since there is no output schema, it could say slightly more about what a brain entry contains (e.g., id and name), but the mention of retrieving a brain id largely fills that role.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline of 4 applies. There is nothing parameter-related the description could clarify, and it doesn't waste words pretending otherwise.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List Make0 brains") and scopes it to "this connection can use". The final sentence explicitly excludes memories, which is exactly the confusion risk given the sibling memory tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Call this first to get a brain id for search_brain" gives an explicit ordering and names the dependent sibling. The agent knows both when to use it and what to use the result for, with no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_brainSearch brainA
Read-onlyIdempotent

Search saved Brain memories. A memory may be a singular fact or a short Markdown mini-doc. Use a short, focused query with the key people, entities, preferences, or topics needed—not the full user message. Memories are retrieved with semantic + BM25 keyword search, reranked by a MiniLM cross-encoder, then expanded up to two hops along related_to graph links so connected memories surface with the seeds. Each memory includes addedBy (who first saved it) and versionCount (saved revisions). When versionCount is greater than 1, call get_memory_versions for the full history. Call get_memory whenever a result has truncated: true so you read the full note, not a clipped preview. Always pass brain from list_brains.

NameRequiredDescriptionDefault
kindNoOptionally restrict results to work or profile memories.
brainYesBrain id from list_brains. The personal brain is "personal".
limitNoMaximum memories to return (1-64). Score-gated, then padded to at least 10 when candidates exist.
queryYesFocused query for the saved facts needed.
entityTypeNoOptionally restrict results to one memory entity type.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description goes well beyond them: it discloses the retrieval pipeline (semantic + BM25, MiniLM cross-encoder rerank, two-hop related_to expansion), the fields attached to each result (addedBy, versionCount, truncated), and the truncation behavior. That is exactly the kind of operational context an agent needs to interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then query guidance, then retrieval mechanics, then follow-up routing rules. Six sentences with no repetition of schema or annotation content, and each carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fills the gap by naming the salient result fields and the truncation signal, and it explains how to handle each follow-up case. Nothing material for a correct call or correct result interpretation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: it constrains the query parameter's shape (focused key terms, not the whole user message) and reinforces that brain must come from list_brains. It does not explain kind or entityType, which the schema already handles adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Search saved Brain memories") and immediately clarifies what a memory is (singular fact or short Markdown mini-doc). This clearly separates it from siblings like get_memory (single fetch by id), list_brains (enumeration), and the mutation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit query-construction advice ("short, focused query with the key people, entities, preferences, or topics... not the full user message") and hard routing rules: call get_memory_versions when versionCount > 1, call get_memory when truncated: true, and always pass brain from list_brains. Both when-to-use and which-alternative conditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_memoryUpdate memoryA
DestructiveIdempotent

Update an existing Brain memory when the user asks to correct or change it. The new content can be a singular fact or a short Markdown mini-doc (headings, lists, bold, links, code, and Mermaid diagrams) up to about 800 words. New content replaces the old content, and the previous version is kept.

NameRequiredDescriptionDefault
kindNo
brainYesBrain id from list_brains. The personal brain is "personal".
contentNoMemory text: one singular fact, or one short Markdown mini-doc (headings, lists, bold, links, code, and Mermaid diagrams in ```mermaid fences). Keep it under about 800 words. Hard cap 4000 characters.
categoryNo
memoryIdYes
confidenceNo
entityTypeNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose destructiveHint=true, readOnlyHint=false, idempotentHint=true, and openWorldHint=false. The description adds important behavioral context beyond that: new content replaces the old content, and the previous version is kept. It does not cover permissions, failure modes, or response details, but the replacement and version-retention behavior is a meaningful addition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences, front-loaded with the trigger and purpose. The content-format sentence and the replacement/version sentence each add distinct value with no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with seven parameters, 29% schema coverage, and no output schema, the description covers the core operation well: when to use it, content format, and replacement/version behavior. However, it leaves several parameters unexplained, which matters given the low schema coverage. Annotations cover the safety profile, so the remaining gap is mainly parameter completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 29%, so the description must compensate for several undocumented parameters. It explains the content format and size, but says nothing about memoryId, kind, category, confidence, or entityType, and gives little beyond the schema for brain. Most parameter meaning is left to the schema despite low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: update an existing Brain memory. It also scopes the action to correcting or changing existing content, which distinguishes it from adding a new memory. However, it does not explicitly name siblings such as add_memory or delete_memory, so sibling differentiation is implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage trigger: when the user asks to correct or change an existing memory. It does not state when not to use it or explicitly point to alternatives like add_memory for new memories or get_memory_versions for history, so it falls short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.2.2
    • First observedadd_memory
    • First observeddelete_memory
    • First observedget_memory
    • First observedget_memory_versions
    • First observedlist_brains
    • First observedsearch_brain
    • First observedupdate_memory

TDQS

A4.3/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct role: listing brains, searching memories, fetching one memory, fetching version history, and add/update/delete operations. The descriptions explicitly clarify boundaries such as search_brain vs. get_memory and add_memory vs. update_memory.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern. The singular/plural noun forms match the operation (list_brains, search_brain, get_memory_versions), and no mixed conventions appear.

Tool Count5/5

Seven tools are well-scoped for a memory-management server. The set covers discovery, retrieval, versioning, and CRUD without unnecessary tools.

Completeness4/5

The surface covers the core memory lifecycle: add, get, update, delete, search, list brains, and inspect version history. Minor gaps remain because restore/undelete is only referenced via CLI, and there is no explicit list-all-memories operation.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Gives AI agents persistent, local-first memory using SQLite and on-device embeddings, enabling semantic search and recall across sessions with no cloud calls.
    8
    20 PyPI
    9
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Local memory for AI agents in one SQLite file on your own machine. Facts carry a validity window and a confidence score, so an outdated one is superseded and downweighted rather than deleted, and retrieval fuses BM25, vector similarity and a knowledge graph.
    3
    Business Source 1.1
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents like Codex, Grok Build, and Antigravity to share persistent local memory, preferences, project context, tasks, and handoffs using Markdown and SQLite.
    1
    MIT
  • F
    license
    A
    quality
    A
    maintenance
    Runs locally on your Mac to give AI agents a shared, private memory of your profile, notes, projects, and saved web pages, with semantic search and version history.
    31
    -