agentbrain
Local-first long-term memory for AI agents — a plain Markdown vault + a thin MCP server. 给 AI Agent 用的本地长期记忆:纯 Markdown 知识库 + 薄 MCP server。
三步上手 / Quick start (3 steps)
pip install mnemosyne-lite # Python >= 3.10(PyPI 包名;命令仍是 agentbrain)
agentbrain init ~/agentbrain # 建立记忆库(幂等,可重复执行)
agentbrain doctor # 自检:一切正常会显示 "Everything looks healthy."
{
"mcpServers": {
"agentbrain": {
"command": "agentbrain",
"args": ["serve"],
"env": { "AGENTBRAIN_VAULT": "~/agentbrain" }
}
}
}
AGENTBRAIN_VAULT 可省略(默认 ~/agentbrain);vault 在别处时才需要写,路径按你的实际情况改。把上面 JSON 粘进任意 MCP 客户端(Claude Code / Codex / Cursor / DSH / Open WebUI…),重启客户端,完成。Agent 从此有了跨会话、跨工具的长期记忆。
以后接入新的 agent 不用你教:对它说一句「读 AGENTS.md 照做」即可——文件开头会把新来者引导到 ONBOARDING.md,它自己就能判断接入状态(已接 MCP / 只有 shell / 只能读文件)并完成配置或降级。
Paste that JSON (with your vault path) into any MCP client and restart it — done. Your agents now share one long-term memory.
Why agentbrain / 设计理念
- Plain Markdown, no lock-in — your memory is a folder of
.mdfiles. Open it in Obsidian, grep it, version it with Git. Remove agentbrain and the memory stays. - Token-efficient by design — index-first retrieval:
Index.mdis the cheap first layer, BM25 (CJK-aware) only ranks candidates, and query output is compact by default (mode='index'); full text only on demand. - Append-only for agents — agents may create lessons, never edit or delete them.
Consolidation happens through proposals in
_consolidations/that a human approves, which keeps multi-agent writes conflict-free. - Plug-and-play via MCP — one server, every client: Claude Code, Codex CLI, OpenCode, Cursor, DSH, Open WebUI, ...
- Secrets never enter the vault — credentials live in env/keyring; lessons reference
${ENV:VAR_NAME}placeholders only, resolved at runtime via shell. Since 0.4.1 this is enforced, not just a rule:memory_ingestscans for credential-shaped content (sk-/ghp_/AKIA/xox-/AIza keys, bearer tokens, private-key blocks,password=assignments) and refuses the write, telling the agent to use a placeholder instead. Placeholders and teaching examples (sk-xxx,YOUR_KEY) ingest fine.lintalso scans existing lessons and reportsSECRETfindings — read-only, never rewrites files. Hand-written files are never touched.
Vault layout
agentbrain/ # vault root (git-friendly, Obsidian-friendly)
├─ AGENTS.md # rules every agent reads at session start
├─ ONBOARDING.md # one-shot access setup for new agents
├─ Case-Learnings/
│ ├─ Index.md # auto-generated lesson index (retrieval layer 1)
│ ├─ log.md # append-only audit log
│ ├─ Learnings/ # one lesson per file, YAML frontmatter
│ │ └─ case-001-lesson-01.md # 文件名 = {case_id}-lesson-{NN},自动生成
│ └─ _consolidations/ # merge/promotion proposals (human approval)
└─ Agent-Profile/
├─ Immutable/ # owner preferences & environment (agent read-only)
├─ Mutable-Hints/ # soft preferences (agent read-only)
└─ _suggestions/ # agent-suggested profile changes
中文快速上手
pip install mnemosyne-lite # Python >= 3.10
agentbrain init ~/agentbrain # 生成 vault 脚手架(幂等),自动开启 Git 快照
agentbrain doctor # 体检:vault/索引/锁/快照/log 一览
agentbrain ingest --case demo --lesson "部署前必须先跑迁移脚本" --tags 部署,运维
agentbrain query "部署 迁移"
agentbrain read demo-lesson-01 # 读取确认相关的记忆,并记录实际使用
agentbrain stats # 查看利用率统计
agentbrain profile # 查看个人偏好(Immutable + Mutable-Hints)
agentbrain suggest --title "回复用中文" --change "偏好简洁的中文回复" # 提交偏好建议
agentbrain lint # 体检:重复/过时/无标签/低置信度 → 生成整合提案
agentbrain apply lint-20260820-172206.md # 人工审核后执行提案(自动归档)
agentbrain verify my-case-lesson-01 # 重新确认某条经验仍然有效(消除 lint 的 STALE)
agentbrain distill # 分析 log 中重复出现的模式 → 生成提升提案
agentbrain snapshot -m "手动备份" # 手动提交快照(如用 Obsidian 手改文件后)
agentbrain rules --agent trae --write # 把记忆纪律写进客户端规则文件(项目根目录运行)
agentbrain rules --agent agentsmd --write # agents.md 开放标准,覆盖 OpenCode/Gemini CLI 等
agentbrain rules --agent claude --write --global # 写进用户级全局规则,所有项目生效
agentbrain install --agent codex --global # Codex:MCP + 全局纪律一键接入
升级到新版本后(pip install --upgrade mnemosyne-lite):
agentbrain upgrade # 刷新 vault 里的 AGENTS.md / ONBOARDING.md 模板
agentbrain rules --agent trae --write # 刷新各项目规则文件里的纪律块(旧版会原地更新)
# 然后重启你的 agent 客户端 —— MCP server 是进程启动时加载代码的
说明:PyPI 包名为
mnemosyne-lite(agentbrain在 PyPI 上与已有项目过于相似,无法注册)。 安装后的 CLI 命令与 Python 包名仍是agentbrain,GitHub 仓库地址不变。
日常你只需要做三件事(频率都很低):
| 事 | 命令 | 频率 |
|---|---|---|
| 想看库健不健康 | agentbrain doctor |
随意 |
| 记忆整理(清重复/过时) | agentbrain lint → 审核 → agentbrain apply <提案> |
约一周一次 |
| 手改文件后备份 | agentbrain snapshot |
改完就跑 |
其余全自动:Agent 会话开始读偏好、任务前查经验、学到东西写入(每次写入自动 git 快照,可回滚)。
在 MCP 客户端里接入(以 Claude Code 为例):
claude mcp add agentbrain -- agentbrain serve
通用 MCP JSON 配置(Cursor / Open WebUI 等):
{
"mcpServers": {
"agentbrain": {
"command": "agentbrain",
"args": ["serve"],
"env": { "AGENTBRAIN_VAULT": "~/agentbrain" }
}
}
}
AGENTBRAIN_VAULT 可省略(默认 ~/agentbrain);vault 在别处时才需要写。
Vault 路径解析顺序:--vault 参数 > AGENTBRAIN_VAULT 环境变量 > ~/agentbrain。
注册 MCP 只让 agent 能调记忆工具;要让它每次会话主动查库,再把纪律写进客户端的规则文件(在项目根目录运行,幂等可重复):
agentbrain rules --agent claude --write # 支持 claude / codex / trae / cursor / agentsmd(项目级)
agentbrain rules --agent agentsmd --write # agents.md 开放标准:OpenCode、Gemini CLI、Amp 等都遵守
agentbrain rules --agent claude --write --global # 用户级全局(~/.claude/CLAUDE.md),一次配置所有项目生效
一条命令把「任务开始查库、中途遇到新问题再查、学到就自主入库(无需确认)、密钥不入库」写进 CLAUDE.md / AGENTS.md / .trae/rules/ / .cursor/rules/。TRAE 和 Cursor 的全局规则在各自设置界面里,不走文件;claude / codex 支持 --global。
Onboarding a new agent later needs no instructions from you: just tell it
"read AGENTS.md" — the file routes first-timers to ONBOARDING.md, where they
detect their own access mode (MCP tools / shell / file-only) and wire themselves
up or fall back accordingly.
English quickstart
pip install mnemosyne-lite # Python >= 3.10
agentbrain init ~/agentbrain # scaffold the vault (idempotent), enables git snapshots
agentbrain doctor # health check: vault, index, lock, snapshots, log
agentbrain ingest --case demo --lesson "Always run migrations before deploy" --tags deploy,ops
agentbrain query "deploy migrations"
agentbrain profile # print the owner profile
agentbrain suggest --title "Short replies" --change "Keep answers under 3 sentences."
agentbrain lint # health check → consolidation proposals
agentbrain apply lint-20260820-172206.md # execute an approved proposal (archives it)
agentbrain verify my-case-lesson-01 # re-confirm a lesson is still valid (clears STALE)
agentbrain distill # recurring-pattern analysis → promotion proposals
agentbrain snapshot -m "manual backup" # commit a snapshot (e.g. after hand-edits)
agentbrain rules --agent claude --write # install memory discipline into the client's rule file
agentbrain serve # start the MCP server on stdio
After upgrading the package (pip install --upgrade mnemosyne-lite):
agentbrain upgrade # refresh AGENTS.md / ONBOARDING.md templates in the vault
agentbrain rules --agent claude --write # refresh the discipline block in project rule files
# then restart your agent clients — MCP servers load code at process start
Note: the PyPI distribution name is
mnemosyne-lite(agentbrainwas rejected as too similar to an existing PyPI project); the installed CLI command and the Python import name remainagentbrain.
Codex CLI (~/.codex/config.toml):
[mcp_servers.agentbrain]
command = "agentbrain"
args = ["serve"]
Registering MCP makes the tools available; making the client actually query at task start takes one more line — write the discipline block into the project's rule file (run in the project root, idempotent):
agentbrain rules --agent codex --write # per-project AGENTS.md
agentbrain rules --agent codex --write --global # user-level ~/.codex/AGENTS.md
Or configure both MCP and the discipline block in one step:
agentbrain install --agent codex --global
It installs a short "agentbrain memory discipline" section into CLAUDE.md,
AGENTS.md, .trae/rules/ or .cursor/rules/: query at task start, re-query
on new subtasks/errors, ingest autonomously when something is learned, no
secrets ever. The agentsmd target writes the agents.md open standard file,
followed by OpenCode, Gemini CLI, Amp and other standard-compliant tools.
TRAE and Cursor keep their global rules in their settings UIs;
claude and codex support --global.
MCP tools
| Tool | Purpose |
|---|---|
memory_query(query, top_k=5, mode="index", tag=None) |
Search lessons. mode='index' returns compact hits (id, summary, tags, path, gist); mode='full' adds full text; tag narrows results to one tag. |
memory_read(lesson_ids) |
Read selected lessons in full and increment actual-use counters. |
memory_stats() |
Show active, retired, read, unread and most-read lesson counts. |
memory_ingest(case_id, lesson, tags, confidence=0.8, source_summary=None) |
Save a new lesson (facts + scenario + fix, ≤ 30 lines). Creates a file, updates Index.md and log.md. |
memory_lint(scope="all") |
Health check: duplicates, stale, expired, untagged, low-confidence. Writes a merge proposal to _consolidations/. |
memory_distill(window_days=30, min_repeat=3) |
Finds cases/tags ingested ≥ N times in the window and writes a promotion proposal. |
memory_profile() |
Returns the owner profile (hard rules + soft preferences). Read-only; agents call it once per session to tailor behavior. |
memory_suggest(title, change) |
Proposes a profile change into Agent-Profile/_suggestions/ for the owner to review — agents never edit the profile itself. |
MCP resources
| URI | Content |
|---|---|
agentbrain://rules |
AGENTS.md — vault rules for every agent |
agentbrain://index |
Case-Learnings/Index.md — retrieval layer 1 |
agentbrain://profile |
merged owner profile (read-only) |
Agents are expected to follow AGENTS.md in the vault root: read the profile at
session start, query at task start, ingest on learnings, never edit existing
lessons, never write secrets into the vault. Consolidation proposals carry
machine-readable directive blocks (```agentbrain); only the owner
executes them via agentbrain apply.
Design notes
- Retrieval scoring: BM25 over summary (×3), tags (×2), case id and body, with a
CJK bigram tokenizer so Chinese queries work out of the box; results are boosted by
verified,use_countand recentlast_verified_at, demoted when stale (> 1 year). - Self-maintenance signals: every query hit increments
use_count;log.mdfeedsmemory_distillpattern analysis;lintrefreshes nothing silently — every mutation of history goes through human-approved proposals. - Single-user, local-first: no daemon, no ports; concurrent writes from several
agents are serialized by an OS-level byte-range lock (
.vault.lock, msvcrt/fcntl — released instantly if the holder crashes), and all file writes are atomic (temp + rename) so readers never see torn files. - Point-in-time recovery: every vault is its own git repo (created by
init, repo-local identity only). Each content write — ingest, apply, lint/distill proposal, suggestion, index rebuild — is auto-committed, so any bad edit can be rolled back with plain git. Query-drivenuse_countbumps ride along with the next content commit instead of polluting history. Works fully without git; if git is missing, snapshots are silently disabled.
Changelog
- 0.5.0 — Retrieval utilization + Codex onboarding round. Compact
memory_queryresults no longer incrementuse_count; the newmemory_readtool records actual full-text reads, preventing weak tail matches from reinforcing themselves in later ranking. Newmemory_statsreports active, retired, read, unread and most-read lessons. Newagentbrain install --agent codex --globalconfigures the MCP server, installs the memory discipline, runs a vault health check and prints the restart verification step. The shipped discipline now follows a two-stage query-then-read flow, with safe upgrade support for the 0.4.6 template. README Codex commands were corrected, and a mixed Chinese/English retrieval quality gate now enforces Recall@5 and MRR@5. 172 tests (+7). - 0.4.6 — Robustness + scriptability round. Hand-written summaries are now
normalized to one line and capped at ingest, and both the Index.md table and
query output render them one-lined, so a multiline summary can no longer
break the index. lint stops flagging retired lessons: ORPHAN/EXPIRED/
LOWCONF skip superseded entries (SECRET/DANGLING still apply), ending
recurring proposals that could never be acted on. The redaction scanner
exempts lesson-id-shaped words (
…-lesson-01, vault file names) so citingpypi-…-lesson-01no longer trips the PyPI-token pattern.agentbrain snapshotdistinguishes committed / clean / failed instead of reporting every git failure as "nothing to commit".lintanddoctorgained scripted exit codes (0 clean/healthy, 1 findings/issues, 2 bad scope / uninitialized vault). CLI output reconfigures to UTF-8 when piped, so emoji inside lesson text no longer crash redirects on Chinese-locale Windows. Query results are more token-frugal: three lines per hit (tags and path merged) and top_k clamped to 1–20; a newtagfilter (memory_query(tag=…)/agentbrain query --tag …) narrows search to one tag. Index.md dropped itsusedcolumn, so use-count bumps no longer rewrite the whole index.agentbrain doctornow reports broken lesson files (frontmatter present but unparseable) instead of letting them vanish silently, and lesson-id lookups reject path separators.python -m agentbrain serveworks as a PATH-free MCP fallback (the doctor snippet shows both forms), lint findings carry explicit remedies, empty queries and unknown lint scopes are rejected with clear messages, tags past 8 are reported as dropped, oversize lessons (> 4000 chars) get a split hint, and nested locks across two vaults in one thread no longer deadlock.agentbrain.__version__is now the single version source (pyproject reads it dynamically), and a GitHub Actions matrix (ubuntu/windows × 3.10–3.12) runs the suite. 165 tests (+34). - 0.4.5 — Signposting + standards round. Agents looking at the owner
profile no longer miss the write channel:
memory_profileoutput and theagentbrain://profileresource end with a note that the profile is read-only for agents and changes go throughmemory_suggest(_suggestions/, owner review), and thememory_suggesttool description states it is the only agent-writable path toward hard rules — closing the gap where an agent concluded "no interface exists" while the tool sat in its context. Newrules --agent agentsmdtarget writes the agents.md open-standard file, so OpenCode, Gemini CLI, Amp and other standard-compliant clients get the discipline block with one command instead of per-client wiring. README MCP examples now use the portable default (~/agentbrain) and note thatAGENTBRAIN_VAULTis optional. 131 tests (+4). - 0.4.4 — Autonomy + upgrade path + robustness round. Agents now ingest
lessons autonomously and recall them without being told: MCP tool
descriptions (always in the client's context once the server is registered)
directly instruct when to query — task start, new subtask/error mid-task,
before debugging — and to ingest the moment something is learned, with no
user approval needed; the installed rule block and
AGENTS.mdsay the same, and an emptymemory_queryresult now suggests retrying with broader keywords or the other language before concluding nothing is stored. Upgrades no longer strand old versions in existing installs: newagentbrain upgraderefreshes vault templates (AGENTS.md,ONBOARDING.md) — files that match a previously shipped template are updated in place, customized ones are kept and reported;agentbrain rules --writenow refreshes an outdated discipline block in place (marker-based, never touching surrounding user content), and--globalwrites the user-level rule file (~/.claude/CLAUDE.md,~/.codex/AGENTS.md) so the discipline applies to every project instead of one;doctorreports outdated templates. Newagentbrain verify <id>marks a lesson as re-verified today — the remedy for the STALE finding lint reports.memory_ingestwarns when a near-duplicate active lesson exists (summary Jaccard ≥ 0.6), so repeated ingests surface immediately instead of waiting for the weekly lint. Redaction false positives fixed: 40-char git SHA-1 digests and Bearer-shaped English prose no longer trip the AWS-secret/Bearer patterns (real secrets still do). Lesson files saved with a UTF-8 BOM by Windows editors (Notepad) are now read correctly instead of silently vanishing from the index; the same BOM tolerance applies to profiles, logs, proposals and MCP resources. Long case ids are truncated (48 chars) instead of crashing with a path-too-long error;verified: 'false'in quoted frontmatter parses as false; lint now also scans tags and case ids for secrets (same scope as ingest); rule-file writes and git snapshot output decoding are hardened. 127 tests. - 0.4.3 — New
agentbrain rulescommand: registers MCP and the tools become available, but clients only call them if a rule tells them to. One command now installs the memory discipline (query at task start, re-query on new subtasks/errors, ingest at wrap-up with confirmation, secrets never) into the client's own rule file —--agent claude|codex|trae|cursor --writewritesCLAUDE.md/AGENTS.md/.trae/rules//.cursor/rules/(Cursor gets analwaysApplyfrontmatter block). Existing rule files are never overwritten — the block is appended; re-runs are no-ops via a marker. 95 tests. - 0.4.2 — Self-service onboarding + hardening: new
ONBOARDING.mdin every vault routes first-time agents to the right access mode (MCP tools / shell / file-only) — onboarding a new agent is now just "readAGENTS.md";memory_ingestalso scanscase_idandtagsfor credentials (previously only lesson text and summary — a key smuggled into a filename or tag could slip past); hand-edited frontmatter with non-numericconfidence/use_countno longer breaks vault reads (per-field fallback to defaults). 87 tests. - 0.4.1 — Enforced secret redaction:
memory_ingestscans content and summaries for credential-shaped patterns (OpenAI/Anthropic/GitHub/AWS/Slack/Google tokens, Bearer headers, private-key blocks,password=/api_key=assignments) and refuses the write with a placeholder hint — the "secrets never enter the vault" rule is now a mechanism, not just AGENTS.md discipline.${ENV:VAR}references and teaching examples (sk-xxx) pass through.lintreportsSECRETfindings for pre-existing lessons (read-only). 84 tests. - 0.4.0 — Maturity pass: git snapshots (every vault is a self-contained git repo;
every content write is an auto-commit you can roll back — repo-local identity,
graceful without git),
agentbrain doctorone-shot health check (vault, index freshness, lock round-trip, snapshot status, log; prints a copy-paste MCP config with your vault path),agentbrain snapshotmanual commit, fool-proof 3-step quickstart, PyPI-ready packaging. 74 tests. - 0.3.2 — Locking rewrite + edge cases: the vault lock now uses OS-level
byte-range locks (msvcrt on Windows, fcntl on POSIX) instead of
create-file-and-reclaim — a crashed holder releases instantly (previously all
writes failed for up to 60 s) and the stale-reclaim race (two waiters both
unlinking and both acquiring) is gone.
agentbrain lint --scope tag:xno longer reports false DANGLING for supersede targets outside the scope;case_ids containing glob metacharacters ([,?,*) no longer collide lesson ids; suggestion files use real YAML frontmatter (titles with colons/newlines used to corrupt it) and atomic writes. 65 tests. - 0.3.1 — Data-integrity fixes: concurrent same-case ingests no longer overwrite
each other (lesson-id allocation moved inside the vault lock);
confidence: 0.0round-trips correctly (was silently coerced to 0.8); lint/distill proposals are written atomically under the lock with collision-free names; merge proposals now keep the more-used lesson as the keeper; duplicate detection pre-tokenizes (O(n²) without re-tokenizing per pair). Session wrap-up rule added to AGENTS.md. 59 tests. - 0.3.0 — Concurrency & robustness: cross-process/thread vault write lock
(
.vault.lock, re-entrant, stale-reclaim), atomic writes (temp + rename),applyis now a single transaction; query no longer rebuilds the index once per hit (one rebuild per query); stray non-lesson.mdfiles inLearnings/are ignored;confidenceclamped to [0,1]; unknownmodefalls back toindex; same-second suggestions no longer overwrite each other. 54 tests. - 0.2.0 — Owner profile layer (
memory_profile/memory_suggest+ MCP resources), lint/distill proposals with machine-readable directive blocks,agentbrain applywith cycle/self-supersede/dangling checks. - 0.1.0 — Initial MVP: vault + frontmatter + CJK-aware BM25 retrieval, MCP server (query/ingest/lint/distill) + CLI, scaffold templates.
Roadmap — maintenance mode
The core promise — a local, token-efficient, agent-shared long-term memory that you own as plain Markdown — is complete and battle-tested in daily use. The project is now in maintenance mode: bug fixes, compatibility with new MCP client versions, and small quality-of-life improvements. Big new subsystems are deliberately out of scope; if a vault ever grows past a few hundred lessons, these are the parked ideas:
- Hybrid fallback search (SQLite FTS5 + local embedding, RRF fusion)
- Keyring-backed
${ENV:...}resolution helper
Done along the way:
- Enforced secret redaction on ingest + SECRET findings in lint
- Git snapshot on every write
-
agentbrain apply <proposal>to execute approved consolidations - Owner profile layer:
memory_profile/memory_suggest+ MCP resources - OS-level cross-process vault lock + atomic writes
Development
pip install -e ".[dev]"
pytest
License
Apache-2.0 — see LICENSE.
Metadata
Release files for mnemosyne-lite 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mnemosyne_lite-0.5.0.tar.gz | 77.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mnemosyne_lite-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 137.1 kB
Release files / mnemosyne_lite-0.5.0.tar.gz
| Download URL | mnemosyne_lite-0.5.0.tar.gz |
|---|---|
| Size | 77.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5cb92b73b039f01661c1720627680bfdb11dafaaf0a73fc3ead537e3f72d0d50
|
|
BLAKE2b-256 checksum How to use checksums |
be106ac6093fba9daff3418089d7140e5d96ad51c87a40763bfbc6899d1ac0c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.11
|
Release files / mnemosyne_lite-0.5.0-py3-none-any.whl
| Download URL | mnemosyne_lite-0.5.0-py3-none-any.whl |
|---|---|
| Size | 59.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
71b1e534ade6b3c53dd67fb12e71da0d189b95ae984f00ff2648c1656c752a30
|
|
BLAKE2b-256 checksum How to use checksums |
3a2345ffb75d7c60d6996574c5d8ae98b4f23cbb067e90970fac9ba41e9f184f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.11
|