| FMRS | 60 / 100 · C | 75 / 100 · B |
| Reliability | 12 / 20 | 12 / 20 |
|---|
| Security and permissions | 11 / 20 | 16 / 20 |
|---|
| Maintenance | 11 / 20 | 14 / 20 |
|---|
| Documentation | 14 / 20 | 18 / 20 |
|---|
| Setup experience | 12 / 20 | 15 / 20 |
| Best for | - Development teams using Claude Code, Codex CLI, or other MCP clients that need cross-session memory
- Users who want to self-host SQLite or sync to Cloudflare D1/R2
- Long-term memory use cases that need supersession lineage and deduplication rather than append-only text
- Advanced users willing to configure embedding and LLM providers themselves (OpenAI, OpenRouter, Cloudflare Workers AI, etc.)
| - Individuals or teams who prioritise privacy and offline operation and do not want data leaving the machine
- Users who share memory across multiple MCP clients such as Claude Code, Claude Desktop, Hermes Agent, OpenClaw, Cursor, Codex and Gemini CLI
- Scenarios that need encrypted storage, a hash-chained audit log and verifiable vault migration
- Users who want low-latency recall, a bundled embedding model and no extra LLM calls inside the memory layer
|
| Not for | - Users who want a zero-configuration setup — embeddings and the LLM require your own keys and endpoints
- One-off question-answering tasks that do not need persistent memory
- Environments that cannot absorb the operational cost of a long-running container or a LaunchAgent-managed proxy
- Users expecting vendor support or an SLA — the project is community-maintained
| - Users who need cloud multi-device sync or a hosted team memory service; moving between machines means locking the vault and copying the file
- Users who expect the server itself to run an LLM that extracts facts and decides what to remember; Compartment explicitly keeps no LLM inside and leaves that to the host model
- Users who cannot keep a passphrase safe or who need a recovery path if it is lost, since Compartment never generates a password, seed or recovery phrase
- Deployments that require network transports such as SSE or streamable-http; this server is stdio only and opens no ports
|
| Required permissions | - Local file access: creates and reads/writes a SQLite database file (default ~/.local/share/memora/memories.db) and a cache directory
- Network access: calls the configured embedding endpoint and LLM endpoint (OpenAI, OpenRouter, Cloudflare Workers AI, etc.)
- Cloud storage credentials: AWS_PROFILE and AWS_ENDPOINT_URL for S3/R2 sync, or CLOUDFLARE_API_TOKEN for D1
- Local port binding: the graph server listens on 127.0.0.1:8765 by default; HTTP transport defaults to 127.0.0.1:8000
- Container deployment requires running Apple's container CLI and installing a LaunchAgent-managed local proxy process
| - Read and write the vault file under the user's home directory, by default ~/.compartment/memory.vault, and its sibling settings file
- Access the session directory holding the unlock credential (configurable with COMPARTMENT_SESSION_DIR), which also carries the shared embedding process's Unix socket
- Optionally use the macOS keychain (compartment unlock --keychain is an explicit opt-in, and it survives reboots)
- Write or merge an mcpServers entry into each MCP client's own configuration file, taking a byte-exact backup first
- Install a PostToolUse hook for Claude Code that captures memory files the agent writes
- Serve a read-only dashboard on 127.0.0.1 behind a one-time random URL token
|
| Risks and side effects | - If the embedding endpoint is misconfigured (for example pointed at OpenRouter), Memora silently falls back to TF-IDF keyword bags unless MEMORA_EMBEDDING_STRICT=1 is set, degrading vector quality while looking healthy
- A wrong store name in MEMORA_DATABASES is undetectable by errors: reads succeed but writes land in another project's store; verify with the database field from memory_stats
- Credentials are injected into the process via environment variables; an over-permissive credential file may be readable by other local accounts (the docs recommend chmod 600)
- Memory content is sent to the configured embedding and LLM providers, which matters for sensitive data
- The container runtime reassigns the container's IP on every start; connecting directly instead of through the proxy produces a permanent silent hang
- LLM deduplication and absorb can merge or supersede memories; lineage is preserved, but wrong judgments still affect retrieval results
- Document fragments are protected by integrity guards, but deleting the whole document deletes every fragment with it
| - A leaked passphrase means the encrypted content can be decrypted; Compartment generates no recovery phrase and cannot recover a lost passphrase
- Enabling the memory_unlock tool places the passphrase in the model's context, which is why it is off by default
- If a 2FA keyfile is lost, for example a USB stick, the vault cannot be opened even with the passphrase
- `export --plaintext` writes the vault as unencrypted JSONL, so that file must be handled carefully
- Memory content can come from untrusted sources; recall wraps memories with a notice that they are stored data and content can be marked quarantined, but the host agent must still treat memory as data to limit prompt-injection risk
- The capture hook and client integration write into the user's own settings files, although the implementation backs up and merges rather than replacing
|
| Supported clients | Claude Code, Codex, Neovim | Claude Desktop, Claude Code, Hermes Agent, OpenClaw, Cursor, VS Code, Codex, Gemini CLI, Cline, Roo Code, Zed, OpenCode, LM Studio, AnythingLLM, BoltAI, Goose, Kiro |
| Tools | 31 | 14 |