{
  "markdown": "# exomem\n\n<!-- mcp-name: io.github.Artexis10/exomem -->\n\n[![PyPI](https://img.shields.io/pypi/v/exomem.svg)](https://pypi.org/project/exomem/)\n[![Python](https://img.shields.io/badge/python-%3E%3D3.11-3776ab.svg)](https://pypi.org/project/exomem/)\n[![CI](https://github.com/Artexis10/exomem/actions/workflows/ci.yml/badge.svg)](https://github.com/Artexis10/exomem/actions/workflows/ci.yml)\n[![License: AGPL-3.0](https://img.shields.io/badge/license-AGPL--3.0-blue.svg)](LICENSE)\n\nDurable memory with sources, proof, history, and review for MCP-capable agents.\n\nexomem turns an owned Markdown/Obsidian vault into a local knowledge substrate\nfor Codex, Claude Code, Cursor, chatbots, CLI agents, and any client that can\ncall MCP tools. Your files stay plain, local, portable, and editable outside the\nserver.\n\n```text\nagent -> MCP tools -> exomem -> your Markdown / Obsidian vault\n```\n\n## Prove it in 30 seconds\n\n```bash\nuvx exomem demo\n```\n\nOne command, no install, no config, no vault of your own needed:\n\n```text\nexomem demo — bundled sample vault, keyword mode, fully local\nvault: /tmp/exomem-demo-XXXXXX\n\n1. doctor: PASS (0.8s)\n2. find \"retrieval\": PASS (0.1s)\n   - Knowledge Base/Sources/Sessions/2026-06-30-sample-session.md\n   - Knowledge Base/Notes/Insights/retrieval-needs-owned-files.md\n3. get retrieval insight: PASS (0.0s)\n   - title: Retrieval needs owned files\n   - type: insight\n   - excerpt: Local-first knowledge tools should retrieve from files the user already owns.\n4. audit: PASS (0.0s)\n\ndemo PASS — total 1.0s. This is your proof: agents search files you own.\nNext: connect your own vault with `exomem setup`\n```\n\nRuns fully local and read-only against a sample vault bundled in the package.\nAdd `--keep` to leave that copy on disk afterward and open it in Obsidian.\n\n## Install in one line\n\n**Mac / Linux** — paste into Terminal:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/Artexis10/exomem/main/scripts/install.sh | sh\n```\n\n**Windows** — paste into PowerShell:\n\n```powershell\nirm https://raw.githubusercontent.com/Artexis10/exomem/main/scripts/install.ps1 | iex\n```\n\nEither one installs `uv`, installs exomem, and walks you through `exomem setup`,\nwhich wires up **every agent client on the machine** — Claude Code and Codex both\nget the MCP server, all ten skills, and the capture/retrieve hooks.\n\nSafe to run again later — it skips whatever's already done. If it can't prompt\nyou interactively (e.g. run from another script), it prints the exact command to\nrun next instead of guessing. Prefer to run each step yourself? See below or the\nfull manual walkthrough in\n[QUICKSTART.md](https://github.com/Artexis10/exomem/blob/main/QUICKSTART.md).\n\n### Claude Code: install as a plugin\n\nThe plugin carries the skills and hooks. Its MCP entry is an optional shared\nHTTP URL; it deliberately does **not** auto-start a full stdio server in every\nClaude Code session:\n\n```\n/plugin marketplace add Artexis10/exomem\n/plugin install exomem@exomem\n```\n\nThen choose the route. If you already run Exomem as a service for phone or\nhosted access, reuse that one authenticated core:\n\n```bash\nexomem setup --vault \"/path/to/vault\" --mcp-url https://<host>/mcp\n```\n\nFor local-only use, run `exomem setup --vault \"/path/to/vault\" --stdio`.\nStdio is intentionally explicit because each client session owns its process\nand can load its own embedding runtime. When updating from an older plugin,\nrun `/plugin update exomem@exomem`, then `/reload-plugins` or restart Claude\nCode before rerunning setup.\n\n### claude.ai and ChatGPT\n\nNeither platform can install skills programmatically — upload is manual. Build\nthe archives, then upload them in the client's settings:\n\n```bash\nexomem package-skills          # writes dist/skills/*.zip (all ten)\n```\n\nPoint the client at your server as a connector (see\n[docs/remote-quickstart.md](docs/remote-quickstart.md)). Neither platform has a\nhook system, so capture there is skill-driven rather than automatic.\n\n## Set it up in 5 minutes\n\n```bash\nuv tool install exomem   # or: pip install exomem\nexomem setup --vault \"/path/to/your/Obsidian\"\n```\n\nRe-running the one-line installer upgrades an existing uv-tool install instead\nof leaving an older `exomem` command on PATH. `exomem --version --json` is a\nmodel-free provenance check, so it also works in the intentional lean CLI paired\nwith a fuller managed service.\n\nOne command does the whole local setup: the wizard scans your vault and shows\nwhat's already there, initializes `Knowledge Base/`, runs the `doctor`\npreflight, registers the server with every client it detects (Claude Code and\nCodex), and installs the skills into each.\n\nIf cwd `.env` or the process contains `EXOMEM_BASE_URL`, setup registers its\ncanonical `/mcp` endpoint with Claude Code and Codex so they share the existing\nservice. Otherwise it uses the explicit local stdio fallback. Use `--mcp-url`\nto choose a service directly, `--stdio` to force local stdio, and\n`--replace-client-registration` when you deliberately want to replace an\nexisting manual route. Native clients handle OAuth; setup never stores bearer\ntokens.\n\nConfig files it did not create are treated as yours: it merges rather than\noverwrites, backs the file up first, and prints the diff.\n\nAlready have a vault full of notes? That's the normal case: `adopt` gives a\nscan-first, read-only report of what's there, suggested knowledge packs, and\nsafe copy/compile-planning next actions. Exomem only ever writes under `Knowledge Base/` — your\nexisting files stay untouched unless you explicitly copy or compile selected material. See\n[QUICKSTART.md § Already have a vault full of notes?](QUICKSTART.md#already-have-a-vault-full-of-notes)\nfor the full contract, including daily-notes vaults. Re-running `setup` is\nsafe; completed steps report `[skipped]`. Non-interactive:\n`exomem setup --yes --vault \"/path\" --lean`.\n\nThe individual steps (`exomem init` / `doctor` / `install-skill` /\n`install-hook`, plus `claude mcp add`) still exist as the manual path — see\n[QUICKSTART.md](QUICKSTART.md).\n\nThe skill installs under the Claude Code name `exomem` — the same name as the\nconnector, so skill, server, and tools all read as one product. The skill is\nrecommended for Claude Code —\nthe server gives Claude the tools, the skill is what makes it use them. Hooks\nare local-client reliability helpers for Claude Code and Codex: a read-side\nreminder before answers, a write-side reminder at natural stopping points, and\na shared local continuation checkpoint around compaction. The checkpoint stores\nbounded structural evidence (repository state, artifact hashes/counts, and\ntranscript provenance hashes), never conversation, tool, summary, or artifact\ncontent. It needs no MCP connection or Exomem credential.\nThe read-side hook suppresses obvious control/status prompts like `continue`,\n`merge it`, and `are you done?`, and can optionally upgrade that reminder to real\nretrieved KB content (`EXOMEM_RETRIEVE_INJECT=1`, opt-in; the legacy\n`KB_RETRIEVE_INJECT` name still works). For Codex, run\n`exomem install-hook --client codex`; for Claude Code, `exomem install-hook` —\nsee\n[QUICKSTART.md § 7](QUICKSTART.md#7-recommended-make-the-kb-automatic-both-directions).\nBoth clients checkpoint on manual or automatic `PreCompact` and reinject on\n`SessionStart(compact|resume)`; Claude also checkpoints on `SessionEnd`. Pinned\nCodex CLI 0.144.3 has no `SessionEnd` hook, so Exomem does not invent one.\nOther MCP clients can still use the server. If they do not support Skills,\nhave them call `bootstrap()` once at the start of the session; it returns the\nsame compact operating contract through MCP, including when to search, when to\nsave, workflow-skill discovery, upload guidance, and performance profiles. It\nalso teaches the authoring loop: search first, draft the typed note, run\n`suggest_links`, write with the right tool, inspect warnings/suggestions, then\nreport the path.\n\nHow eagerly it does that is tunable: four prominence levels (`off` / `light` /\n`balanced` / `maximal`), set with `exomem prominence <level>` or pasted into a web\nassistant's custom instructions. Clients with hooks default to `balanced`; web and\nhosted default to `maximal`, because nothing there re-arms the check between turns.\nSee [docs/prominence.md](docs/prominence.md) for the levels and the copy-paste\nblocks.\n\nFor client-specific assistant instructions, see\n[docs/ai-assistant-guide.md](docs/ai-assistant-guide.md). For the boundary\nbetween Exomem and a chat product's built-in memory, see\n[docs/vs-built-in-memory.md](docs/vs-built-in-memory.md).\n\nFull local setup is in [QUICKSTART.md](QUICKSTART.md). Remote/mobile setup is\nin [docs/remote-quickstart.md](docs/remote-quickstart.md) and\n[docs/deployment.md](docs/deployment.md).\n\nRemote OAuth uses GitHub once to prove the configured login plus immutable user\nID, then issues an Exomem-owned durable session. Operators can inspect and revoke\nthose sessions with `exomem auth sessions`, `exomem auth revoke <session-id>`,\nand `exomem auth revoke --all`; session administration is never an MCP tool.\n\nThe 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](docs/product-model.md) for the full mental model, [docs/records.md](docs/records.md) for human-owned longitudinal Records, [docs/tui.md](docs/tui.md) for the interactive terminal UI (`exomem tui`, optional `tui` extra), [docs/review-studio.md](docs/review-studio.md) for the packaged browser review loop, [docs/epistemic-inbox.md](docs/epistemic-inbox.md) for daily review and relation repair, [docs/knowledge-packs.md](docs/knowledge-packs.md) for pack/admin details, and [docs/workflow-skills.md](docs/workflow-skills.md) for the named agent workflows.\n\nFor development, or to run the sample vault from a checkout instead of a\npackage install:\n\n```bash\ngit clone https://github.com/Artexis10/exomem.git\ncd exomem\nuv sync\nuv run exomem demo\n```\n\n## Connect your agent\n\n| Client | How |\n| --- | --- |\n| Claude Code | `exomem setup` registers it for you (see above) |\n| Codex CLI | `codex mcp add` plus optional `exomem install-hook --client codex` - see [docs/ai-assistant-guide.md#codex-cli](docs/ai-assistant-guide.md#codex-cli) |\n| claude.ai or hosted chat | Remote MCP/connector - see [docs/remote-quickstart.md](docs/remote-quickstart.md) and [docs/ai-assistant-guide.md#hosted-chat-clients](docs/ai-assistant-guide.md#hosted-chat-clients) |\n| Any MCP client | Generic stdio config - see below and [docs/ai-assistant-guide.md#generic-stdio-mcp-clients](docs/ai-assistant-guide.md#generic-stdio-mcp-clients); call `bootstrap()` first |\n| Docker (no Python) | One `docker run` line — see below and [docs/docker.md](docs/docker.md) |\n\n<details>\n<summary>Codex CLI</summary>\n\n```bash\ncodex mcp add exomem --env EXOMEM_VAULT_PATH=\"/path/to/vault\" -- exomem --transport stdio\n```\n\nOptional local hooks, using the same Exomem scripts as Claude Code:\n\n```bash\nexomem install-hook --client codex\n```\n\nVerify deployed Claude Code/Codex hooks without changing anything:\n\n```bash\nexomem install-hook --check\n```\n\nFor the `AGENTS.md` instruction block and the \"do not search every tiny prompt\"\npolicy, see [docs/ai-assistant-guide.md](docs/ai-assistant-guide.md).\n\nOr add it directly to `~/.codex/config.toml`:\n\n```toml\n[mcp_servers.exomem]\ncommand = \"exomem\"\nargs = [\"--transport\", \"stdio\"]\nenv = { EXOMEM_VAULT_PATH = \"/path/to/vault\" }\n```\n\n</details>\n\n<details>\n<summary>Any MCP client (generic stdio)</summary>\n\n```json\n{\"mcpServers\": {\"exomem\": {\"command\": \"exomem\", \"args\": [\"--transport\", \"stdio\"], \"env\": {\"EXOMEM_VAULT_PATH\": \"/path/to/vault\"}}}}\n```\n\nAfter connecting, ask the agent to call `bootstrap()` before using the KB. Claude\nSkills are still the best UX where available, but `bootstrap()` lets generic MCP\nclients learn Exomem's search/save/upload contract without a separate skill file,\nincluding the write loop for compiled notes.\nSee [docs/ai-assistant-guide.md](docs/ai-assistant-guide.md) for the copyable\nstanding instruction.\n\n</details>\n\n<details>\n<summary>Docker (no Python on the host)</summary>\n\n```bash\nclaude mcp add exomem -- docker run -i --rm -v \"/path/to/vault:/vault\" -e EXOMEM_VAULT_PATH=/vault ghcr.io/artexis10/exomem:latest --transport stdio\n```\n\nUse `:latest` for the lean keyword/BM25 image, `:ml` for CPU hybrid search, or\n`:cuda` for NVIDIA/Linux CUDA capability. CUDA images still boot CPU-default at\nidle; opt into GPU residency with `EXOMEM_MODE=performance` when you want it.\nThe image also runs as an always-on remote server via `docker compose` with a\ntunnel sidecar — see [docs/docker.md](docs/docker.md). Windows users with a live\nvault should usually prefer the native install (WSL2 bind mounts miss live\nfile-watch events). macOS cannot serve a vault today: exomem's held-filesystem\nsubstrate, which every governed write acquires a reserved-path root through, has\na Linux backend and a Windows backend and no darwin implementation, so `exomem`\nrefuses there and `exomem doctor` says why.\n\n</details>\n\nThe first start downloads search models in the background — `find` works\nimmediately with keyword ranking and upgrades to semantic search automatically\nonce the models land. Run `exomem warm` to pre-download them ahead of time.\n\n## Resource modes\n\nExomem is CPU-first by default so an idle server does not quietly occupy GPU\nmemory. Control the machine footprint without editing code:\n\n```bash\nexomem mode quiet          # low-resource: no heavy warm-up, evict caches, defer semantic reindex\nexomem mode normal         # default: CPU steady-state, warm CPU caches allowed\nexomem mode performance    # explicit opt-in for GPU-capable bulk/model work\nexomem status --resources --json\n```\n\nUse `quiet` before gaming or other foreground workloads. Keyword/BM25 freshness,\nfile-change freshness, inbound links, and resolver state stay live; expensive\nsemantic/CLIP reindex work can be deferred and is reported in resource status.\nRun `exomem index` or `kb reconcile` later to heal deferred semantic work.\n\n## What it does\n\n- **Searches the vault you already own.** Markdown stays in place; exomem does\n  not import copies into a proprietary note store.\n- **Adopts messy vaults safely.** `adopt` starts with a read-only report and\n  explicit copy and compile-planning options, so originals remain archival until you choose.\n- **Retrieves across text and media.** Markdown, PDFs, Office docs, images,\n  screenshots, audio, and video can become searchable through local extraction.\n- **Keeps sources separate from conclusions.** Raw captures, compiled notes,\n  entities, evidence, and superseded conclusions live in typed folders.\n- **Surfaces review work.** Audit and attention queues can show unprocessed\n  sources, stale notes, broken links, and close-by claims worth reviewing.\n- **Measures, never judges.** The server does deterministic work: search,\n  extraction, ranking, embeddings, file writes, and graph checks. Reasoning stays\n  in the client model.\n\n## Why use it\n\nMost AI note tools make you move into their app or ingest your files into their\nstore. exomem works the other way around: agents come to your vault.\n\n| Compared with | Difference |\n| --- | --- |\n| Doc-chat / RAG apps | exomem works over live files instead of imported copies. |\n| Basic MCP note servers | exomem adds typed knowledge operations, multimodal extraction, audit queues, and CLI/REST parity. |\n| Memory hidden inside one assistant | exomem is client-agnostic: use the same vault from Claude Code, Codex, Cursor, scripts, or a custom chatbot. |\n\nFor a deeper point-in-time comparison, see\n[docs/comparison-engraph.md](docs/comparison-engraph.md). The reproducible\ngraph-only comparison with Basic Memory is in\n[docs/comparison-basic-memory-graph.md](docs/comparison-basic-memory-graph.md).\nFor the practical boundary with chat products' own memory features, see\n[docs/vs-built-in-memory.md](docs/vs-built-in-memory.md).\n\n**Measured retrieval quality — and speed.** Retrieval is graded by a\nreproducible golden-set eval harness, not asserted, and latency is measured\nper lane at corpus scale: hybrid `find()` runs sub-second end-to-end at\n50,000 notes (864 ms on the reference desktop, hot cache off), with the\nkeyword/BM25 lanes served from an FTS5 sidecar index in milliseconds —\nbuilt into stdlib SQLite, so it works on the lean install too. Methodology\nand numbers in [docs/benchmarks.md](docs/benchmarks.md).\n\n## Simple front door\n\nAgents should route normal user requests through simple actions first, then use the typed tools underneath.\n\n| Action | Use when the user says | Backed by |\n| --- | --- | --- |\n| Save | \"remember this\", \"log this\", \"this is a decision\" | `add`, `note`, `link`, `preserve` |\n| Adopt/import | \"make this old vault usable\", \"import my notes safely\" | `adopt`, `overview` |\n| Ask | \"what do we know about X?\", \"show the sources\" | `find`, `get` |\n| Prove | \"save this for the warranty case\", \"show the evidence\" | `preserve`, upload/download, `find` |\n| Review | \"what needs cleanup?\", \"what is stale?\" | `attention`, `audit`, `propose_compilation` |\n| Update | \"this replaced the old conclusion\", \"fix that note\" | `edit`, `replace`, `reconcile` |\n| Connect | \"link this to X\", \"what should this cite?\" | `link`, `suggest_links` |\n| Plan | \"save this feature idea\", \"file this bug for later\", \"what matters this week\" | `plan_memory` with `inspect`, `create`, `query`, `add`, `update`, or `triage` |\n| Record | \"log this session\", \"record this measurement\", \"update the mileage\" | `record_memory` with `inspect`, `create`, `query`, `append`, or `update` |\n\n## Core tools\n\nexomem exposes typed MCP tools for common knowledge-base work:\n\n| Tool | Purpose |\n| --- | --- |\n| `find` | Search notes, sources, entities, and evidence with type/project/tag filters. |\n| `get` | Read a full page or frontmatter. |\n| `add` | Capture a raw source page. |\n| `note` | Create compiled notes: research note, insight, failure, pattern, experiment, or production log. |\n| `edit` | Patch an existing compiled page. |\n| `replace` | Supersede an old conclusion with a new one and preserve the link between them. |\n| `preserve` | Store binary or text evidence append-only. |\n| `audit` | Check graph and corpus health. |\n| `attention` | Surface review queues such as stale notes, close-by claims, and unprocessed sources. |\n| `overview` | Bounded, read-only structure report of the vault or a subtree — works outside `Knowledge Base/` and before `init`. |\n| `adopt` | Existing-vault adoption: scan-only by default; can save a manifest, copy selected legacy text files as Sources, or return a compile plan while preserving originals. |\n| `record_memory` | One front door for human-owned observed state: inspect, create, query, append, or targeted update a governed Record collection. |\n| `plan_memory` | One front door for human-owned intended future state: inspect, create, query, add, update, or triage a Planning collection. |\n\nTier-2 tools cover governance administration and filesystem escape hatches such\nas listing directories, creating files, moving pages, trashing files, and\nrecovering from trash. Set\n`EXOMEM_DISABLE_TIER2=1` if you want a smaller tool surface.\n\nEvery write records durable history in `Knowledge Base/log.md`. Service calls\nalso go to `logs/exomem.log`.\n\n## One operation, three doors\n\nEvery operation is declared once and exposed through:\n\n- **MCP** for agents.\n- **CLI** for terminal and scripts.\n- **REST** for personal HTTP integrations when `EXOMEM_REST_API_KEY` is set.\n\nExamples:\n\n```bash\nkb find \"project handoff\" --mode keyword\nkb find \"stale decision\" --json\nkb get \"Notes/Insights/retrieval-needs-owned-files\" --json\nkb note --note-type insight --title \"Agents need durable context\" \\\n  --content \"# Agents need durable context\"\n```\n\n```bash\ncurl -s -X POST http://127.0.0.1:8765/api/find \\\n  -H \"Authorization: Bearer $EXOMEM_REST_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\": \"project handoff\", \"mode\": \"keyword\"}'\n```\n\nCLI and REST share the same JSON envelope:\n\n```json\n{\"success\": true, \"data\": []}\n```\n\n## Multimodal by default, resident only while working\n\nThe native release-service command installs the `standard` profile: local\nembeddings, PDFs/Office documents, OCR bindings, ASR, and CLIP. Heavy models are\nnot loaded at service startup. Media jobs enter a durable queue, run serially in\none disposable child process, and the child exits after five idle minutes so its\nRAM and MPS/MLX/CUDA state return to the host.\n\nManual/source installs can select the same capabilities directly:\n\n```bash\nuv sync --extra embeddings\nuv sync --extra media\n```\n\n- `embeddings`: local text embeddings plus CLIP image search.\n- `media`: OCR for images, PDF extraction, Office document extraction, and\n  faster-whisper ASR for audio/video.\n\n`lean` and `hybrid` remain available for constrained machines. Generated image\ncaptioning and speaker diarization are advanced opt-ins, not requirements for\nthe standard multimodal path.\n\nSystem tools: Tesseract is required for image OCR. On Windows:\n\n```powershell\nwinget install --id UB-Mannheim.TesseractOCR -e\n```\n\nGPU acceleration is useful but not required. Steady-state torch models default to\nCPU in `normal` and `quiet`; `performance` is the explicit opt-in for capable\nNVIDIA CUDA or Apple Silicon MPS/Metal paths. See\n[docs/deployment.md](docs/deployment.md) for CUDA, Blackwell, Apple Silicon,\ndiarization, and remote-service details.\n\n## Configuration\n\nThe server reads environment variables or a `.env` file. The main ones are:\n\n| Variable | Purpose |\n| --- | --- |\n| `EXOMEM_VAULT_PATH` | Vault root containing the governed folder (default `Knowledge Base/`). |\n| `EXOMEM_KB_DIRNAME` | Name of the governed folder inside the vault (default `Knowledge Base`). |\n| `EXOMEM_DISABLE_EMBEDDINGS` | `1` forces keyword/BM25-only search. |\n| `EXOMEM_DISABLE_TIER2` | `1` hides Tier-2 filesystem tools. |\n| `EXOMEM_REST_API_KEY` | Enables authenticated REST routes. |\n| `EXOMEM_DISABLE_MEDIA_EXTRACTION` | `1` skips server-side OCR/ASR/PDF/Office extraction. |\n| `EXOMEM_DISABLE_CLIP` | `1` disables CLIP image search. |\n| `EXOMEM_MODE` | Hard-pin resource mode: `quiet`, `normal`, or `performance`. Env wins over config. |\n| `EXOMEM_QUIET_MODE` | Legacy truthy alias for `quiet` when `EXOMEM_MODE` is unset. |\n| `EXOMEM_AUTO_QUIET` | `1` enables optional non-torch GPU-pressure auto-quiet switching (default off). |\n| `EXOMEM_DEVICE` / `EXOMEM_TORCH_DEVICE` | Force all torch models to `cuda`, `mps`, or `cpu`. Normally leave unset and use `exomem mode`. |\n| `EXOMEM_MPS_FP16` | On Apple Silicon, run bge/CLIP in fp16 on the Metal GPU — ~half the memory, faster encodes (default on; set `0` to keep fp32). |\n| `EXOMEM_VIDEO_SCENE_FRAMES` | Set to enable video scene detection + persisted, OCR'd scene-frame JPEGs (default off). |\n| `EXOMEM_VIDEO_SCENE_THRESHOLD` | Scene-boundary hash threshold in bits of 64 (default 10). |\n| `EXOMEM_VIDEO_SCENE_MIN_SECS` | Minimum scene duration in seconds; closer boundaries merge (default 4). |\n| `EXOMEM_SEMANTIC_SEGMENTS` | Set to enable timed transcripts + semantic segment retrieval for audio/video (default off). |\n| `EXOMEM_WHISPER_MODEL` | faster-whisper model size for ASR, such as `base` or `small`. |\n| `EXOMEM_ASR_BACKEND` | ASR engine: `mlx` (Apple Silicon Metal GPU, needs the `media-mlx` extra) or `faster-whisper` (CUDA/CPU). Default auto-selects MLX on Apple Silicon, else faster-whisper. |\n| `EXOMEM_MLX_WHISPER_MODEL` | HF repo for the MLX ASR model (default `mlx-community/whisper-large-v3-mlx`; use `mlx-community/whisper-large-v3-turbo` for speed). |\n| `EXOMEM_TESSERACT_CMD` | Path to the `tesseract` binary if not auto-discovered. |\n| `EXOMEM_CLAIM_LEVEL` | `1` enables the claim-level subsystem (default off). |\n| `EXOMEM_CLAIM_POLARITY_NLI` | `1` opts into the frozen stance verifier (default off). It still runs only if the exact repository-pinned revision and declared artifact manifest are resident and verified. |\n| `EXOMEM_CONTRADICTION_TOP_N` | Caps the surfaced contradiction queue and therefore verifier enrichment (default `40`; `0` is uncapped). This is the sole polarity-work bound. |\n\n`EXOMEM_CLAIM_NLI_MODEL` is **retired**. Model identity comes only from the\nin-repo pin registry; a value left in it selects nothing and is reported as\nignored by `exomem doctor`.\n\nThe shipped pin is the multilingual\n[`MoritzLaurer/mDeBERTa-v3-base-xnli-multilingual-nli-2mil7`](https://huggingface.co/MoritzLaurer/mDeBERTa-v3-base-xnli-multilingual-nli-2mil7)\ncheckpoint at one exact upstream revision. Its admission fixtures check English,\nGerman, French, Estonian, and mixed English/Estonian examples. That is bounded\nevidence for those examples, not a promise of equal quality across every language\nin the model card. Its labels are NLI relations: `contradict`, `duplicate`,\n`refine`, or `neutral`. `neutral` includes unrelated, compatible, and uncertain\npairs; it never means “proved unrelated.”\n\n### Degradation modes\n\nOptional tiers are absent by default and degrade to silence, not to a\nsubstitute. What \"absent\" means, per tier:\n\n| Tier | Install | When absent |\n| --- | --- | --- |\n| Semantic search | `--extra embeddings` | Keyword/BM25 retrieval; every surface still answers. |\n| Media extraction | `--extra media` | Server-side OCR/ASR/PDF extraction is skipped; the model-driven upload `text` path still works. |\n| Vector KNN (`sqlite-vec`) | with `embeddings` | Exact in-memory scan over the same vectors; identical results, more work. |\n| Frozen stance verifier | `--extra nli` | Review-queue entries carry **no** model polarity label — never a differently-produced label under the verifier's name. Write responses, rankings, and every other surface are byte-identical to a build with no verifier tier at all; only `exomem doctor` names the absence. The verifier runs only under an exact pinned revision and artifact-manifest digest, a versioned label map, and a green bounded multilingual fixture set, and it labels review-queue entries only. Hosted cells do not install or enable it. |\n\nLegacy `EXOMEM_*` names (from the project's former working name, exomem) remain\nhonored: each is promoted to its `EXOMEM_*` equivalent at startup, with an\nexplicitly set `EXOMEM_*` value winning on conflict. `import exomem` and\n`python -m exomem` likewise keep working as deprecated aliases.\n\nRemote-only variables and full deployment notes are in\n[docs/deployment.md](docs/deployment.md).\n\n## Project status\n\nexomem is packaged on PyPI, uses Release Please for versioning, and follows the\nlightweight SemVer policy in [docs/release.md](docs/release.md). The public CLI\nentry point is `exomem`; `kb` is the short daily-driver alias for knowledge-base\noperations.\n\n## License\n\nAGPL-3.0-or-later. See [LICENSE](LICENSE).\n",
  "bytes": 26920,
  "sha": "557cd358d0dd8301350f6e66d87f9a950830542d0fa14f5acbe3b485c3f0b1e8",
  "repo_slug": "artexis10/exomem",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_artexis10_exomem_749e404f/readme"
}