Self-Hosting Your Agent's Memory, Air-Gapped in Five Minutes
Most "self-hosted" memory setups quietly leak: the store runs on your box, but every embedding call ships your raw context to an external API. This walkthrough keeps everything — storage, embedding, retrieval — inside one container on your network. The exact commands, nothing made up.
1. Start the engine
docker run -d --name vecmindb \
-p 5520:5520 \
-v vecmindb-data:/home/vecminDB/data \
-e VECMIN__SECURITY__ADMIN_KEY=my-secret-key \
ghcr.io/lingxinmind/vecmindb:latest
One image, port 5520, data on a named volume. The image ships with the BGE-M3 embedding weights baked in — there is no model to download at runtime and no API key to configure, because there is no external embedding service.
Prefer a native binary? That works too, with the same data layout — useful on hosts where you do not want Docker at all.
2. Store a memory — plain text, no vectors
Write a memory as plain text. The embedded model handles the embedding locally; you never construct vectors yourself.
From here, your agent talks to the memory surface over MCP (Cursor, Claude and other MCP clients connect directly) or through the typed SDKs for Python, TypeScript and Rust. Correction, freeze and export are all first-class operations — see the MCP integration guide for per-tool setup.
3. Verify it is actually self-contained
This is the part worth proving, not claiming. Two checks:
- Pull the cable. Disconnect the host from the internet (or drop it in a DMZ segment) and keep writing and retrieving memories. Embedding happens on-device with the shipped BGE-M3 weights, so nothing degrades.
- Watch the traffic. The engine makes no calls to embedding or LLM APIs — there is no endpoint configured because none exists. If your compliance team wants to verify, the audit log records writes with an HMAC-SHA256 signature chain (
SovereigntyAuditor), so every memory operation is traceable and tamper-evident.
4. Licensing without phoning home
The free tier runs without payment. For production use, licenses are activated offline: an Ed25519-signed license bound to a hardware fingerprint (HAI) derived from the host itself — no license server in your data path at runtime. Trial extensions are handled through the license service when you are online; the engine keeps working offline regardless.
5. When one node is not enough
For teams running this across multiple agents, the same image clusters with Raft consensus — three nodes, one command each, and the memory survives a node loss:
command: ["--node-id", "1", "--raft-addr", "node1:6001",
"--peers", "1=node1:6001,2=node2:6002,3=node3:6003"]
Still zero external calls. The cluster replicates inside your own network.
The five-minute summary
- One container: storage + embedding + retrieval + lifecycle, all local.
- Plain text in — the embedded BGE-M3 model embeds on-device.
- Air-gap it and it keeps working; audit writes with the HMAC chain.
- Licenses activate offline via Ed25519 + hardware fingerprint.
Next steps: the full quickstart, the installation & ops guide (clustering, air-gapped hardening, trial mechanics), and how we handle security in the Trust Center.