Persistent memory for AI agents. Fully offline: 0 LLM tokens per query, ~45 ms recall, MCP ready.
4.7K
One memory. Every agent. Zero cloud. Uteke gives your AI agents persistent memory that never leaves your machine: local embeddings, 0 LLM tokens per query, ~45 ms warm recall, CPU-only.
| Recall quality | 98.4% recall@5 on LongMemEval-S (ICLR 2025) — full harness & raw results in the repo |
| Speed | ~45 ms warm query, flat with store size (31 ms avg @10K memories) |
| Privacy | 0 LLM tokens per query · no telemetry · zero network calls after first run |
| Search | Fusion — vector similarity + FTS5 keyword, merged by weighted Reciprocal Rank Fusion |
| Integration | MCP server (Streamable HTTP + stdio) · REST API · multi-agent Rooms |
docker run -d --name uteke \
-p 127.0.0.1:8767:8767 \
-v uteke-data:/data \
codecoradev/uteke:latest
# Verify it's running
curl http://localhost:8767/health
# Store a memory
curl -X POST http://localhost:8767/remember \
-H "Content-Type: application/json" \
-d '{"content": "Deployed v2.0 to production"}'
# Recall it back — by meaning AND by keyword
curl -X POST http://localhost:8767/recall \
-H "Content-Type: application/json" \
-d '{"query": "deployment"}'
The embedding model (EmbeddingGemma, 768-dim, ~200 MB) downloads once on first run and is cached in the /data volume. After that, everything runs fully offline.
services:
uteke:
image: codecoradev/uteke:latest
ports:
- "127.0.0.1:8767:8767"
volumes:
- uteke-data:/data
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8767/health"]
interval: 30s
timeout: 5s
retries: 3
volumes:
uteke-data:
The default config binds to localhost only. To expose the API to your network, set a bearer token:
docker run -d --name uteke \
-p 8767:8767 \
-v uteke-data:/data \
-e UTEKE_AUTH_TOKEN=change-me \
codecoradev/uteke:latest
# All requests now require:
curl -H "Authorization: Bearer change-me" http://localhost:8767/health
The image ships uteke-mcp (stdio) and exposes Streamable HTTP at /mcp:
// Claude Code / Cursor / any MCP client — HTTP transport
{ "mcpServers": { "uteke": { "url": "http://localhost:8767/mcp" } } }
// stdio transport
{
"mcpServers": {
"uteke": {
"command": "docker",
"args": ["run", "--rm", "-i", "-v", "uteke-data:/data",
"--entrypoint", "uteke-mcp", "codecoradev/uteke:latest"]
}
}
}
MCP tools include uteke_remember, uteke_recall, uteke_room_recall, uteke_doc_*, uteke_graph, and more — full list in docs/docker.md.
Every AI tool forgets. Context windows fill up, sessions end, and your agent starts over each time. Uteke gives it persistent memory — searchable by meaning, with author attribution, across multiple agents (Rooms) — while the data stays on your machine. Healthcare, finance, legal, internal tooling: nothing is sent anywhere.
Also built in: time-travel recall (recall --at 2025-01-15), typed memory categories, tags & entities, a document engine, and uteke_dream (one-command maintenance: lint → backlinks → dedup → orphans).
| Variable | Default | Description |
|---|---|---|
UTEKE_AUTH_TOKEN | — | Bearer token for API authentication |
UTEKE_VECTOR_BACKEND | usearch | Vector engine: usearch (HNSW, best latency) or vecq (4-bit, ~16× faster builds, ~3× smaller files) |
UTEKE_NAMESPACE | default | Default namespace |
UTEKE_HOME | /data | Data directory (set by the Dockerfile) |
Switching engines never touches your data — the new index rebuilds from SQLite on next start.
| Tag | Meaning |
|---|---|
latest | Latest stable release |
0.19 | Latest patch of a minor line |
0.19.0 | Exact version — pin these for stable deployments |
Multi-arch: linux/amd64 + linux/arm64 (Apple Silicon, Ampere, Graviton).
curl -sSL codecora.dev/uteke/install | shApache-2.0. Use it, fork it, ship it.
Content type
Image
Digest
sha256:c51ab3e56…
Size
76.9 MB
Last updated
1 day ago
docker pull codecoradev/uteke