Install and run. Bun 1.1 or newer is required; the CLI runs on Bun, not Node.
npm install -g aletheia-mem
aletheia-server
# open http://127.0.0.1:37790
Status: alpha. The memory engine and the installers work in tests. The real Claude Code, Command Code, Codex CLI and OpenCode listed the generated MCP config, but no hook or session has run inside any tool yet, and answer accuracy is not measured. CI runs on Linux and macOS; Windows is not supported yet and not tested.
1,414 tests — 0 failures (run bun test).
English · 中文 · Español · Português (Brasil) · 日本語 · Deutsch · Français · 한국어 · हिन्दी · العربية · Русский.
Machine translations live in docs/i18n/; English is canonical. No translation has had native review.
What it is
Aletheia is a free, local memory and rules hub for AI coding tools. One SQLite store is read by any tool over MCP, REST or the CLI, and your rules are written into each tool's own instruction file.
Every coding agent forgets between sessions, and each one remembers differently. Aletheia keeps the memory and the rules once, on your machine, and lets each tool read them in the format it already understands. There is no account, no telemetry and no network call unless you configure a model provider. It listens on loopback only.
Install in three commands
git clone https://github.com/mohamed-ashraf-elsaed/aletheia-mem
cd aletheia-mem
bun bin/aletheia-server.mjs
Open http://127.0.0.1:37790. Needs Bun 1.1 or newer. To install the published package instead,
run npm install -g aletheia-mem, then start it with aletheia-server. There are no runtime dependencies to
install.
The first screen has four tabs: Work (Aletheia's own view of captured sessions, facts and goals), Memory (search, edit, pin, delete, export), Rules (write once and sync) and Tools (installer status and audit).
How capture works
aletheia install claude-code --write
aletheia install cursor --write
aletheia install --list # capability level and verification per tool
Without --write the command is a dry run. It prints every file it would change and writes nothing. Each changed
file gets a timestamped backup. Hooks call the installed aletheia command, redact secrets and <private> blocks
before storing, spool to disk if the database is unavailable, and always exit 0 so they never block the host.
Compression is queued, not run inside the hook. Details and the exact hook list per host: docs/25.
Which tools it connects to
Aletheia does not depend on any one tool. It speaks MCP (stdio and HTTP), a plain REST API and a CLI, and it writes the instruction file each tool already reads. What has and has not been checked:
Generated from src/hub/install.mjs via aletheia install --list. A row says MCP connection only when the real CLI listed the server; hooks have not been run inside any tool.
Measured numbers
On LoCoMo, claude-mem 15.2.0 as shipped vs this project. These are retrieval numbers, not answer accuracy.
Retrieval only: Recall@5 asks whether the gold evidence is in the top five results. It is not answer accuracy. Every row is measured-by-us on the same LoCoMo questions; no vendor-claimed benchmark number is in this table. Generated from bench/results/2026-10-26/ (bench/claude-mem-baseline.mjs, raw-turns.json (hybrid), dataset-facts.json (hybrid+facts), dataset-facts-3-rerank.json (hybrid+facts), dataset-facts-3-rerank.json (hybrid+facts+rerank), dataset-facts-rerank.json (hybrid+facts+rerank), our-facts-rules.json (hybrid+facts)); re-run with bun scripts/compare-bench.mjs.
Read the table this way:
- Recall@5 is retrieval. It asks whether the gold evidence is in the top five results. It is not a judgment of whether an answer was right.
- Answer accuracy is not measured. There is no reader or judge harness yet.
- The gap is not 2× when both systems receive the same extracted facts. The speed difference is larger than the quality difference.
- The first local extraction run failed. Ollama
llama3.2:1banswered a trivial call, but thefacts-v1prompt over a two-turn window returned HTTP 500 after 4 min 41 s. No fact was extracted from that run. - Our rule extractor does not reproduce the fact gain. It added 1,672 facts and moved Recall@5 from 57.3% to 57.7%; the dataset's own facts added 7.3 points. Method, raw files and the negative result: bench/results.
How it compares
Competitor cells are copied from each project's own public documentation, fetched 2026-10-26. Aletheia cells were updated 2026-10-26 from tested features; installer sources are in docs/25-installers.md. Cells the source did not state read UNVERIFIED.
Sync and remote MCP
Both are self-hosted and free; neither is tested across two real machines.
- Aletheia Sync is an append-only operation log with one result per operation, device pairing, tombstones, compaction, purge and scoped tokens. Optional end-to-end encryption encrypts payloads on the device before they are sent; it does not hide metadata such as device id, operation kind, entity id, timing or ciphertext size. Unencrypted accounts keep plaintext payloads on the hub. Tested on loopback only. docs/29
- Remote MCP serves the read tools (and, with a
syncoradmintoken, the write tools) over the MCP Streamable HTTP transport. Each call needs a bearer token, is rate-limited and is written to an append-only audit row. TLS is delegated to a reverse proxy or tunnel; OAuth is not built. docs/30
Interfaces
MCP tools
Configuration
All settings are environment variables. The defaults are safe for a single-user machine.
Limits and unverified claims
This list is the honest half of the README.
- MCP config was listed by the real CLI for Claude Code, Command Code, Codex CLI and OpenCode on 2026-10-27; no hook or session ran inside a host. Cursor, Gemini CLI and Windsurf remain "config written from docs, not tested on a real install."
- CI runs on Linux and macOS. The benchmark runs on Linux only. Windows is not supported yet and not tested.
- Answer accuracy is not measured. Recall@5 is retrieval, not whether an answer was correct.
- The 1B-model extraction run failed; facts from our own extractor were measured with the rule extractor only.
- Sync and E2EE are tested with temp data dirs and a loopback hub. No real tunnel or second host was used.
- E2EE covers payloads, not metadata.
- At 50,000 synthetic rows, keyword search p95 is 32.7 ms project-scoped and 58.6 ms across all projects (measured-by-us,
bun bench/scale.mjs 50000 20000 --index tuned --queries 200 --seed 1, Linux). The 50 ms target is met for project-scoped search. - The 10 README translations are machine-translated. No native speaker has reviewed them.
- "Works with " is not claimed for any tool. Only a real install test would justify it.
Layout
bin/ server, CLI, MCP server, sync hub, legacy Work ledger CLI
src/
server.mjs app.mjs source.mjs config.mjs humancopy.mjs server and the legacy Work API
readmodel/ ledger/ refresh/ store/ http/ legacy Work internals
hub/ store (memories, FTS5, rules, bundles) rules-sync tools importers capture compress mcp routes sync
public/ the one UI (index.html, one-ui.*, tabs/, work-view.js);
work.html and assets/ are the optional legacy viewer
public-hub/ the old Memory Hub assets, still served at /hub/app.js
prompts/ vendor/ the original's skill prompts and Python scripts
test/ the test suite and a synthetic fixture database
docs/ the documents
Documents
- Architecture · Data model · HTTP API · Frontend · Operations
- Installers · Sync · Remote MCP · Team mode · Requests and goals
- Dependencies and licences · Claude Desktop · Rules targets
Contributing
The most useful contribution is a report from a real install: open an issue with the tool, its version, the command
you ran and what the tool did. See CONTRIBUTING.md. Run bun test and
bun scripts/gen-tables.mjs --check before a pull request. A new runtime dependency needs a reason.
Licence
Apache-2.0. See NOTICE.md for what comes from claude-mem. Not affiliated with or endorsed by the claude-mem authors or Anthropic.