
Exomem
io.github.Artexis10由 GitHub 账号 Artexis10 发布v0.164.1更新于 Nov 8, 2026
Local Markdown/Obsidian knowledge substrate for MCP agents with governed memory and hybrid search.
概览
把本地 Markdown/Obsidian 笔记库变成受治理的知识库,让 MCP 智能体可以检索、写入并调用持久记忆。
- 可以做什么
- 检索与读取笔记库:按类型、项目、标签筛选查找笔记、来源、实体与证据,读取整页内容,并为当前对话编译召回上下文。
- 保存与更新知识:采集原始来源,创建分类型的编译笔记,修补页面,用新结论取代旧结论,并以追加方式保存证据。
- 审查与接管:检查语料健康度,列出过期或未处理条目,并在复制或编译前对既有笔记库做只读扫描。
- 跟踪状态:通过受治理的记录与计划集合登记观测数据和未来工作,并跨会话保存工作回顾。
- 管理文件:可选的二级工具可列目录、创建、移动、移入回收站及恢复文件。
- 适用场景
- 当你希望助手直接在你已有的 Markdown 或 Obsidian 笔记上工作、而不是把文件导入专有存储,并在不同会话和客户端之间保留有出处的持久记忆时使用。
- 运行要求
- 以本地 stdio 进程运行,从 PyPI 安装(uv 或 pip),需通过 EXOMEM_VAULT_PATH 指定笔记库路径。可选扩展提供向量检索、媒体提取与立场校验;首次启动会在后台下载检索模型。目前 macOS 无法托管笔记库;无 Python 的主机可用 Docker 镜像。
安装
在 SourceWeft 中
- 打开 控制台中的 Exomem,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
exomem
[PyPI] [Python] [CI] [License: AGPL-3.0]
Durable memory with sources, proof, history, and review for MCP-capable agents.
exomem turns an owned Markdown/Obsidian vault into a local knowledge substrate for Codex, Claude Code, Cursor, chatbots, CLI agents, and any client that can call MCP tools. Your files stay plain, local, portable, and editable outside the server.
Prove it in 30 seconds
One command, no install, no config, no vault of your own needed:
Runs fully local and read-only against a sample vault bundled in the package.
Add --keep to leave that copy on disk afterward and open it in Obsidian.
Install in one line
Mac / Linux — paste into Terminal:
Windows — paste into PowerShell:
Either one installs uv, installs exomem, and walks you through exomem setup,
which wires up every agent client on the machine — Claude Code and Codex both
get the MCP server, all ten skills, and the capture/retrieve hooks.
Safe to run again later — it skips whatever's already done. If it can't prompt you interactively (e.g. run from another script), it prints the exact command to run next instead of guessing. Prefer to run each step yourself? See below or the full manual walkthrough in QUICKSTART.md.
Claude Code: install as a plugin
The plugin carries the skills and hooks. Its MCP entry is an optional shared HTTP URL; it deliberately does not auto-start a full stdio server in every Claude Code session:
Then choose the route. If you already run Exomem as a service for phone or hosted access, reuse that one authenticated core:
For local-only use, run exomem setup --vault "/path/to/vault" --stdio.
Stdio is intentionally explicit because each client session owns its process
and can load its own embedding runtime. When updating from an older plugin,
run /plugin update exomem@exomem, then /reload-plugins or restart Claude
Code before rerunning setup.
claude.ai and ChatGPT
Neither platform can install skills programmatically — upload is manual. Build the archives, then upload them in the client's settings:
Point the client at your server as a connector (see docs/remote-quickstart.md). Neither platform has a hook system, so capture there is skill-driven rather than automatic.
Set it up in 5 minutes
Re-running the one-line installer upgrades an existing uv-tool install instead
of leaving an older exomem command on PATH. exomem --version --json is a
model-free provenance check, so it also works in the intentional lean CLI paired
with a fuller managed service.
One command does the whole local setup: the wizard scans your vault and shows
what's already there, initializes Knowledge Base/, runs the doctor
preflight, registers the server with every client it detects (Claude Code and
Codex), and installs the skills into each.
If cwd .env or the process contains EXOMEM_BASE_URL, setup registers its
canonical /mcp endpoint with Claude Code and Codex so they share the existing
service. Otherwise it uses the explicit local stdio fallback. Use --mcp-url
to choose a service directly, --stdio to force local stdio, and
--replace-client-registration when you deliberately want to replace an
existing manual route. Native clients handle OAuth; setup never stores bearer
tokens.
Config files it did not create are treated as yours: it merges rather than overwrites, backs the file up first, and prints the diff.
Already have a vault full of notes? That's the normal case: adopt gives a
scan-first, read-only report of what's there, suggested knowledge packs, and
safe copy/compile-planning next actions. Exomem only ever writes under Knowledge Base/ — your
existing files stay untouched unless you explicitly copy or compile selected material. See
QUICKSTART.md § Already have a vault full of notes?
for the full contract, including daily-notes vaults. Re-running setup is
safe; completed steps report [skipped]. Non-interactive:
exomem setup --yes --vault "/path" --lean.
The individual steps (exomem init / doctor / install-skill /
install-hook, plus claude mcp add) still exist as the manual path — see
QUICKSTART.md.
The skill installs under the Claude Code name exomem — the same name as the
connector, so skill, server, and tools all read as one product. The skill is
recommended for Claude Code —
the server gives Claude the tools, the skill is what makes it use them. Hooks
are local-client reliability helpers for Claude Code and Codex: a read-side
reminder before answers, a write-side reminder at natural stopping points, and
a shared local continuation checkpoint around compaction. The checkpoint stores
bounded structural evidence (repository state, artifact hashes/counts, and
transcript provenance hashes), never conversation, tool, summary, or artifact
content. It needs no MCP connection or Exomem credential.
The read-side hook suppresses obvious control/status prompts like continue,
merge it, and are you done?, and can optionally upgrade that reminder to real
retrieved KB content (EXOMEM_RETRIEVE_INJECT=1, opt-in; the legacy
KB_RETRIEVE_INJECT name still works) — or, with
EXOMEM_RETRIEVE_INJECT=working_set, to a compiled recall_context packet
under a data header, bounded by EXOMEM_RETRIEVE_INJECT_MAX_CHARS (default
4,000). For Codex, run
exomem install-hook --client codex; for Claude Code, exomem install-hook —
see
QUICKSTART.md § 7.
Both clients checkpoint on manual or automatic PreCompact and reinject on
SessionStart(compact|resume); Claude also checkpoints on SessionEnd. Pinned
Codex CLI 0.144.3 has no SessionEnd hook, so Exomem does not invent one.
Other MCP clients can still use the server. If they do not support Skills,
have them call bootstrap() once at the start of the session; it returns the
same compact operating contract through MCP, including when to search, when to
save, workflow-skill discovery, upload guidance, and performance profiles. It
also teaches the authoring loop: search first, draft the typed note, run
suggest_links, write with the right tool, inspect warnings/suggestions, then
report the path.
How eagerly it does that is tunable: four prominence levels (off / light /
balanced / maximal), set with exomem prominence <level> or pasted into a web
assistant's custom instructions. Clients with hooks default to balanced; web and
hosted default to maximal, because nothing there re-arms the check between turns.
See docs/prominence.md for the levels and the copy-paste
blocks.
For client-specific assistant instructions, see docs/ai-assistant-guide.md. For the boundary between Exomem and a chat product's built-in memory, see docs/vs-built-in-memory.md.
Full local setup is in QUICKSTART.md. Remote/mobile setup is in docs/remote-quickstart.md and docs/deployment.md.
Remote OAuth uses GitHub once to prove the configured login plus immutable user
ID, then issues an Exomem-owned durable session. Operators can inspect and revoke
those sessions with exomem auth sessions, exomem auth revoke <session-id>,
and exomem auth revoke --all; session administration is never an MCP tool.
The product model is intentionally simple: built-in AI memory remembers preferences and routing, while Exomem stores durable governed knowledge with sources, proof, history, decisions, records, and review. See docs/product-model.md for the full mental model, docs/records.md for human-owned longitudinal Records, docs/tui.md for the interactive terminal UI (exomem tui, optional tui extra), docs/review-studio.md for the packaged browser review loop, docs/epistemic-inbox.md for daily review and relation repair, docs/knowledge-packs.md for pack/admin details, and docs/workflow-skills.md for the named agent workflows.
For development, or to run the sample vault from a checkout instead of a package install:
Connect your agent
Codex CLI
Optional local hooks, using the same Exomem scripts as Claude Code:
Verify deployed Claude Code/Codex hooks without changing anything:
For the AGENTS.md instruction block and the "do not search every tiny prompt"
policy, see docs/ai-assistant-guide.md.
Or add it directly to ~/.codex/config.toml:
Any MCP client (generic stdio)
After connecting, ask the agent to call bootstrap() before using the KB. Claude
Skills are still the best UX where available, but bootstrap() lets generic MCP
clients learn Exomem's search/save/upload contract without a separate skill file,
including the write loop for compiled notes.
See docs/ai-assistant-guide.md for the copyable
standing instruction.
Docker (no Python on the host)
Use :latest for the lean keyword/BM25 image, :ml for CPU hybrid search, or
:cuda for NVIDIA/Linux CUDA capability. CUDA images still boot CPU-default at
idle; opt into GPU residency with EXOMEM_MODE=performance when you want it.
The image also runs as an always-on remote server via docker compose with a
tunnel sidecar — see docs/docker.md. Windows users with a live
vault should usually prefer the native install (WSL2 bind mounts miss live
file-watch events). macOS cannot serve a vault today: exomem's held-filesystem
substrate, which every governed write acquires a reserved-path root through, has
a Linux backend and a Windows backend and no darwin implementation, so exomem
refuses there and exomem doctor says why.
The first start downloads search models in the background — find works
immediately with keyword ranking and upgrades to semantic search automatically
once the models land. Run exomem warm to pre-download them ahead of time.
Resource modes
Exomem is CPU-first by default so an idle server does not quietly occupy GPU memory. Control the machine footprint without editing code:
Use quiet before gaming or other foreground workloads. Keyword/BM25 freshness,
file-change freshness, inbound links, and resolver state stay live; expensive
semantic/CLIP reindex work can be deferred and is reported in resource status.
Run exomem index or kb reconcile later to heal deferred semantic work.
Automatic quiet switching is optional. Its watcher skips GPU pressure queries
when you select quiet manually, pin a mode with EXOMEM_MODE, or disable
EXOMEM_AUTO_QUIET. Automatic quiet still monitors pressure so it can restore
the previous mode.
On affected WSL/NVIDIA systems, repeated Linux nvidia-smi processes can grow
the Windows driver's kernel memory and disrupt foreground work.
Microsoft WSL issue #12756
records a reproduction. For older Exomem versions, a service configured with
EXOMEM_AUTO_QUIET=0 stops its watcher after that service restarts.
An empty CUDA_VISIBLE_DEVICES also disables GPU work and GPU headroom queries.
These settings do not require a Windows reboot; existing driver state may remain.
What it does
- Searches the vault you already own. Markdown stays in place; exomem does not import copies into a proprietary note store.
- Adopts messy vaults safely.
adoptstarts with a read-only report and explicit copy and compile-planning options, so originals remain archival until you choose. - Retrieves across text and media. Markdown, PDFs, Office docs, images, screenshots, audio, and video can become searchable through local extraction.
- Keeps sources separate from conclusions. Raw captures, compiled notes, entities, evidence, and superseded conclusions live in typed folders.
- Surfaces review work. Audit and attention queues can show unprocessed sources, stale notes, broken links, and close-by claims worth reviewing.
- Measures, never judges. The server does deterministic work: search, extraction, ranking, embeddings, file writes, and graph checks. Reasoning stays in the client model.
Why use it
Most AI note tools make you move into their app or ingest your files into their store. exomem works the other way around: agents come to your vault.
For a deeper point-in-time comparison, see docs/comparison-engraph.md. The reproducible graph-only comparison with Basic Memory is in docs/comparison-basic-memory-graph.md. For the practical boundary with chat products' own memory features, see docs/vs-built-in-memory.md.
Measured retrieval quality — and speed. Retrieval is graded by a
reproducible golden-set eval harness, not asserted, and latency is measured
per lane at corpus scale: hybrid find() runs sub-second end-to-end at
50,000 notes (864 ms on the reference desktop, hot cache off), with the
keyword/BM25 lanes served from an FTS5 sidecar index in milliseconds —
built into stdlib SQLite, so it works on the lean install too. Methodology
and numbers in docs/benchmarks.md.
Simple front door
Agents should route normal user requests through simple actions first, then use the typed tools underneath.
Core tools
exomem exposes typed MCP tools for common knowledge-base work:
Tier-2 tools cover governance administration and filesystem escape hatches such
as listing directories, creating files, moving pages, trashing files, and
recovering from trash. Set
EXOMEM_DISABLE_TIER2=1 if you want a smaller tool surface.
Every write records durable history in Knowledge Base/log.md. Service calls
also go to logs/exomem.log.
One operation, three doors
Every operation is declared once and exposed through:
- MCP for agents.
- CLI for terminal and scripts.
- REST for personal HTTP integrations when
EXOMEM_REST_API_KEYis set.
Examples:
CLI and REST share the same JSON envelope:
Multimodal by default, resident only while working
The native release-service command installs the standard profile: local
embeddings, PDFs/Office documents, OCR bindings, ASR, and CLIP. Heavy models are
not loaded at service startup. Media jobs enter a durable queue, run serially in
one disposable child process, and the child exits after five idle minutes so its
RAM and MPS/MLX/CUDA state return to the host.
Manual/source installs can select the same capabilities directly:
embeddings: local text embeddings plus CLIP image search.media: OCR for images, PDF extraction, Office document extraction, and faster-whisper ASR for audio/video.
CSV, TSV and JSON evidence uploads get dataset source cards for discovery and exact queries. YAML, JSONL, XML and TOML exports get bounded text previews. These paths need no optional extras; see source formats for limits and governance behavior.
lean and hybrid remain available for constrained machines. Generated image
captioning and speaker diarization are advanced opt-ins, not requirements for
the standard multimodal path.
System tools: Tesseract is required for image OCR. On Windows:
GPU acceleration is useful but not required. Steady-state torch models default to
CPU in normal and quiet; performance is the explicit opt-in for capable
NVIDIA CUDA or Apple Silicon MPS/Metal paths. See
docs/deployment.md for CUDA, Blackwell, Apple Silicon,
diarization, and remote-service details.
Configuration
The server reads environment variables or a .env file. The main ones are:
EXOMEM_CLAIM_NLI_MODEL is retired. Model identity comes only from the
in-repo pin registry; a value left in it selects nothing and is reported as
ignored by exomem doctor.
The shipped pin is the multilingual
MoritzLaurer/mDeBERTa-v3-base-xnli-multilingual-nli-2mil7
checkpoint at one exact upstream revision. Its admission fixtures check English,
German, French, Estonian, and mixed English/Estonian examples. That is bounded
evidence for those examples, not a promise of equal quality across every language
in the model card. Its labels are NLI relations: contradict, duplicate,
refine, or neutral. neutral includes unrelated, compatible, and uncertain
pairs; it never means “proved unrelated.”
Degradation modes
Optional tiers are absent by default and degrade to silence, not to a substitute. What "absent" means, per tier:
Legacy EXOMEM_* names (from the project's former working name, exomem) remain
honored: each is promoted to its EXOMEM_* equivalent at startup, with an
explicitly set EXOMEM_* value winning on conflict. import exomem and
python -m exomem likewise keep working as deprecated aliases.
Remote-only variables and full deployment notes are in docs/deployment.md.
Project status
exomem is packaged on PyPI, uses Release Please for versioning, and follows the
lightweight SemVer policy in docs/release.md. The public CLI
entry point is exomem; kb is the short daily-driver alias for knowledge-base
operations.
License
AGPL-3.0-or-later. See LICENSE.
来源:README.md,提交 d77d31a
工具
0版本历史
88- v0.163.1Nov 7, 2026
- v0.161.1Nov 5, 2026
- v0.160.0Nov 4, 2026
- v0.158.1Nov 3, 2026
- v0.158.0Nov 3, 2026
- v0.157.1Nov 3, 2026
- v0.154.0Nov 1, 2026
- v0.153.1Oct 31, 2026
- v0.152.0Oct 31, 2026
- v0.151.1Oct 30, 2026
- v0.151.0Oct 30, 2026
- v0.150.0Oct 30, 2026
- v0.149.0Oct 29, 2026
- v0.146.1Oct 26, 2026
- v0.145.1Oct 26, 2026
- v0.145.0Oct 26, 2026
- v0.144.0Oct 25, 2026
- v0.143.1Oct 25, 2026
- v0.142.0Oct 25, 2026
- v0.141.0Oct 24, 2026
- v0.136.0Oct 24, 2026
- v0.135.0Oct 23, 2026
- v0.134.5Oct 23, 2026
- v0.134.2Oct 22, 2026
- v0.134.0Oct 22, 2026
- v0.133.0Oct 21, 2026
- v0.132.8Oct 21, 2026
- v0.132.6Oct 21, 2026
- v0.132.5Oct 20, 2026
- v0.132.3Oct 20, 2026
- v0.132.0Oct 20, 2026
- v0.130.0Oct 19, 2026
- v0.128.2Oct 19, 2026
- v0.128.1Oct 19, 2026
- v0.127.5Oct 18, 2026
- v0.127.3Oct 18, 2026
- v0.127.1Oct 18, 2026
- v0.127.0Oct 18, 2026
- v0.126.0Oct 18, 2026
- v0.124.0Oct 17, 2026
- v0.123.0Oct 17, 2026
- v0.121.0Oct 17, 2026
- v0.120.0Oct 16, 2026
- v0.119.0Oct 16, 2026
- v0.118.0Oct 16, 2026
- v0.117.3Oct 15, 2026
- v0.117.2Oct 14, 2026
- v0.117.1Oct 13, 2026
- v0.117.0Oct 13, 2026
- v0.116.0Oct 13, 2026
- v0.114.0Oct 9, 2026
- v0.113.0Oct 9, 2026
- v0.112.0Oct 9, 2026
- v0.111.1Oct 8, 2026
- v0.111.0Oct 8, 2026
- v0.110.0Oct 7, 2026
- v0.109.0Oct 6, 2026
- v0.108.0Oct 6, 2026
- v0.107.0Oct 5, 2026
- v0.106.0Oct 5, 2026
- v0.105.0Oct 4, 2026
- v0.104.0Oct 4, 2026
- v0.103.0Oct 4, 2026
- v0.102.6Oct 3, 2026
- v0.102.5Oct 2, 2026
- v0.102.4Oct 2, 2026
- v0.102.2Oct 2, 2026
- v0.102.0Oct 1, 2026
- v0.101.0Oct 1, 2026
- v0.100.0Oct 1, 2026
- v0.99.0Sep 30, 2026
- v0.98.0Sep 30, 2026
- v0.97.0Sep 29, 2026
- v0.96.0Sep 28, 2026
- v0.95.2Sep 27, 2026
- v0.94.0Sep 27, 2026
- v0.93.0Sep 25, 2026
- v0.92.0Sep 23, 2026
- v0.91.1Sep 23, 2026
- v0.91.0Sep 22, 2026
- v0.90.4Sep 21, 2026
- v0.90.2Sep 21, 2026
- v0.90.0Sep 20, 2026
- v0.89.0Sep 20, 2026
- v0.88.0Sep 19, 2026
- v0.87.1Sep 19, 2026
- v0.86.0Sep 18, 2026
- v0.85.5Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分