Get started
Set it up once. Every session after remembers.
A SurrealDB store and the Antumbra MCP server run in Docker, embeddings come from a local ollama, and three hooks connect Claude Code. It runs on macOS, Windows and Linux, bound to localhost.
Private preview. No version has been tagged yet, and the repository is private while Antumbra is in preview. These are the documented steps for anyone with access; the one-line installers below go live with the first release.
Just looking
See the console first.
The operator console renders against a seeded, throwaway in-memory store, with nothing else to set up: the population, memory, the loop, evals and the sovereign-mode page.
cargo run -p antumbra-tui -- --demo
The full setup
Seven steps from a clone to a first session.
You need git, Rust through rustup (the repository pins its toolchain), Docker, and ollama. The first builds compile the whole dependency graph once.
-
Clone it and pull the embedding model
all-minilmis a 384-dimension model that matches the store's vectors. On Linux, start ollama withOLLAMA_HOST=0.0.0.0so the Dockerized server can reach it.Shellgit clone https://github.com/Oneiriq/antumbra.git cd antumbra ollama pull all-minilm -
Install the console and the CLI
Both land in
~/.cargo/bin. Withjustinstalled,just installbuilds all three binaries instead.Shellcargo install --path crates/antumbra-cli --locked cargo install --path crates/antumbra-tui --locked -
Configure the secrets
Copy the example and set three values:
SURREAL_PASS, a strong database password;ANTUMBRA_JWT_SECRET, 32 random bytes in base64; andANTUMBRA_SURREAL_DATA, an absolute directory for the database files, outside the repository. On Linux, make it writable by uid 65532.macOS and Linuxcp docker/.env.example docker/.env openssl rand -base64 32 mkdir -p ~/.antumbra/surrealdbWindows, PowerShellCopy-Item docker/.env.example docker/.env [Convert]::ToBase64String((1..32 | % { Get-Random -Max 256 })) -
Start the stack
The first run builds the server image once. When it is up,
antumbra-surrealdbreports healthy, the database listens onws://127.0.0.1:8000and the MCP server onhttp://127.0.0.1:8081, both bound to localhost.Shelldocker compose -f docker/docker-compose.yml up -d docker compose -f docker/docker-compose.yml ps -
Mint an access token
The server verifies a signed token on every call; the token is the identity. This one is long-lived and still expires. Keep it in
~/.antumbra/token.txt, where the hooks look for it.Shelldocker compose -f docker/docker-compose.yml run --rm antumbra-mcp \ --mint-token --tenant ws:default --user user:default --token-ttl-days 365 -
Connect Claude Code
Point Claude Code at the server, with a headers helper that reads the token from its file, so the token never sits in a settings file. Set
ANTUMBRA_URL,ANTUMBRA_WORKSPACE_IDandANTUMBRA_HOST_IDin the agent's environment, then add the hooks fromscripts/hooks/README.md: a bash set for macOS and Linux and a PowerShell set for Windows.macOS and Linuxclaude mcp add-json antumbra --scope user '{"type":"http","url":"http://127.0.0.1:8081/mcp","headersHelper":"bash ~/.claude/antumbra-mcp-headers.sh"}'Windows, PowerShellclaude mcp add-json antumbra --scope user '{"type":"http","url":"http://127.0.0.1:8081/mcp","headersHelper":"powershell -NoProfile -NonInteractive -File C:\Users\<you>\.claude\antumbra-mcp-headers.ps1"}'.claude/settings.json, excerpt, macOS and Linux{ "autoMemoryEnabled": false, "hooks": { "SessionStart": [{ "hooks": [{ "type": "command", "command": "bash ./scripts/hooks/antumbra-session-start.sh", "timeout": 10 }]}], "UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "bash ./scripts/hooks/antumbra-prompt-recall.sh", "timeout": 20 }]}], "Stop": [{ "hooks": [{ "type": "command", "command": "bash ./scripts/hooks/antumbra-capture.sh", "timeout": 5 }]}], "PreCompact": [{ "hooks": [{ "type": "command", "command": "bash ./scripts/hooks/antumbra-capture.sh", "timeout": 5 }]}] } }Turning off Claude Code's own file memory makes Antumbra the one store: one set of permissions, one thing to back up.
-
Add a GPU, when you have one
Everything above runs without a GPU. With an NVIDIA card on Linux, or Windows through WSL2, the GPU build also serves answers from trained experts and consolidates memory into experts on its own.
Shelldocker compose -f docker/docker-compose.yml -f docker/docker-compose.gpu.yml up -d
The hooks
What each one does.
Each ships as a bash script and a PowerShell script with the same behavior, about twenty lines apiece.
| Script | Event | What it does |
|---|---|---|
| antumbra-session-start | SessionStart | Recalls standing conventions and the memories for this repository and branch, tags each git anchor live, not on HEAD or orphaned, and stays under Claude Code's 10,000-character limit. |
| antumbra-prompt-recall | UserPromptSubmit | Recalls the three memories most relevant to each message, scoped to the repository and branch. |
| antumbra-capture | Stop, PreCompact | Asks the agent to store what it learned, with provenance, before the turn ends or the context is compacted. |
| strip-attribution | PreToolUse | Stops commits and pull requests that carry model-vendor attribution, so the work is credited to you. |
With the first release
Prebuilt installers.
Release builds cover macOS on Apple silicon and Intel, Linux on x86-64 and ARM, and Windows on x86-64, with shell, PowerShell and MSI installers. Swap antumbra-tui for antumbra-cli or antumbra-mcp. They resolve once the first version is tagged.
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/Oneiriq/antumbra/releases/latest/download/antumbra-tui-installer.sh | sh
irm https://github.com/Oneiriq/antumbra/releases/latest/download/antumbra-tui-installer.ps1 | iex
Questions
Before you start.
Does my code or memory leave my machine?
Not unless you send it somewhere. The store, the embedder and the reranker run where you run them, and the containers bind to localhost. Antumbra has no service of its own that your memories pass through.
Which agents does it work with?
Claude Code is the agent the hooks are written and tested for. Any MCP client can use the tools over stdio or HTTP; hooks for other agents are planned.
Do I need a GPU?
No. Memory, recall and routing run without one. Training experts and answering from them need an NVIDIA GPU; without one, the answer tool escalates cleanly and everything else works.
How is this different from a memory layer?
A memory layer helps a fixed model remember. Antumbra also checks each memory against your repository before it is used, and trains what keeps proving true into small experts you own.
Can a teammate see my memories?
Only what you share. Memories live in compartments you own; sharing one is explicit, and revoking it takes effect at once, enforced in the database engine.
Why build it this way?
The case for memory you own, and for small experts over renting your competence, in the author's words.