Evaluate Semurg in an afternoon. Everything here runs on your own machines.
- Semurg is the memory layer for AI agents: a knowledge graph, vectors and graph RAG on one engine, and the same engine stores graph, vector, document, object, key-value, time-series and relational data.
- Data lives on disk. Memory is a working area, not where the data has to fit, so a dataset many times larger than the machine's memory is served from local NVMe disks instead of a memory cluster.
- Nothing to sign up for. One node is free, with every feature, and needs no licence key. Nothing leaves your network.
1. What you need
- To try it (steps 2 to 4): any x86-64 Linux machine or VM with Docker, 2 cores and 4 GB of memory, a few GB of free disk. Every release is installed and tested on Ubuntu 24.04. Processors with and without AVX-512 both work.
- To reproduce the benchmarks (step 5): a machine you dedicate to it, Ubuntu 24.04 on x86-64, root, and a
data disk separate from the OS disk (a second NVMe, or an attached volume), mounted, with the free space the
runner asks for (it adds up what the domains you name need and tells you before it downloads anything). A box with one
disk can still run with
BENCH_ALLOW_OS_DISK=1, and its results then say the data shared the OS disk. The published runs use 8 cores / 16 threads and 64 GB of memory; 32 GB or more is recommended. - Apple Silicon Macs and Windows: native releases are planned, built from the same Ubuntu release. Today, run the node on a Linux machine or VM you can reach and point your agents at it; the Docker image in Docker Desktop on Mac and Windows is being tested now.
2. Run a node (two minutes)
Docker. The image comes from Semurg's own read-only registry at one.semurg.io. The token is printed
in the log at first start and kept on the node.
docker run -d --name semurg -p 127.0.0.1:4000:4000 \ --ulimit memlock=-1 --ulimit nofile=1048576:1048576 --security-opt seccomp=unconfined \ -v semurg-data:/var/lib/semurg one.semurg.io/semurg until docker logs semurg 2>&1 | grep -q 'Your API token'; do sleep 1; done TOKEN=$(docker exec semurg cat /var/lib/semurg/.api_token)
--security-opt seccomp=unconfined is required: Docker's default profile blocks the system calls
the engine reads and writes with, and without it the container stops at start with a message naming the flag.
--ulimit memlock=-1 lets it register its I/O buffers. Binding to 127.0.0.1 keeps the node on
the host until you decide otherwise.
Or install on the machine (a systemd service; the data directory must be on ext4 or xfs):
curl -fsSL https://one.semurg.io/install | sudo bash TOKEN=$(sudo grep '^SEMURG_API_TOKEN=' /etc/semurg/semurg.env | cut -d= -f2-)
Check it. Without the token the API answers 401; with it, 200.
curl -s http://127.0.0.1:4000/api/health curl -si -H "Authorization: Bearer $TOKEN" http://127.0.0.1:4000/v1/whoami | head -1
3. Connect your agents
Seven memory tools over MCP: remember, recall, relate, forget, context, document and status. Every fact keeps the passage it came from.
Claude Code
export SEMURG_API_TOKEN="$TOKEN"
claude mcp add-json --scope user semurg '{"type":"http","url":"http://127.0.0.1:4000/v1/mcp","headers":{"Authorization":"Bearer ${SEMURG_API_TOKEN}","X-Semurg-Scope":"default"}}'
claude mcp list
Cursor, Codex and Gemini CLI connect to the same URL; the agents page has each one's configuration.
Python
pip install semurg
The five-line remember / recall / context example is on the PyPI page. Eleven agent frameworks run end to end over MCP, each with a complete program on the agents page: LangChain (Python and Elixir), CrewAI, OpenAI Agents SDK, Microsoft Agent Framework, LlamaIndex, Mastra, Google ADK, Pydantic AI, Vercel AI SDK and Jido.
4. Load your own data
Text and documents, kept whole and searchable:
curl -s -H "Authorization: Bearer $TOKEN" -H 'content-type: application/json' \
-d '{"passages":[{"text":"Acme Ltd acquired Widget Co in 2024."}]}' \
http://127.0.0.1:4000/v1/ingest
Agent memory with a knowledge graph: send text through the MCP memory_remember tool, with the
entities and relations your agent found in it as facts; memory_context then answers a question
from the graph and cites each fact.
Records with a vector, attributes, text and links (graph edges), queried by similarity plus graph hops:
curl -s -H "Authorization: Bearer $TOKEN" -H 'content-type: application/json' \
-d '{"op":"hybrid_ingest","d":4,"records":[
{"id":1001,"vector":[0.1,0.2,0.3,0.4],"text":"graph databases","links":[{"dst":1002,"rel":1}]},
{"id":1002,"vector":[0.1,0.2,0.3,0.5],"text":"vector search"}]}' \
http://127.0.0.1:4000/v1/query
curl -s -H "Authorization: Bearer $TOKEN" -H 'content-type: application/json' \
-d '{"op":"hybrid_query","vector":[0.1,0.2,0.3,0.4],"k":2,"hops":1}' \
http://127.0.0.1:4000/v1/query
A bulk loader for plain edge lists (millions of edges from a CSV in one call) is in build; until it ships, load edges as record links as above, or ask us and we will load a sample of your data with you.
5. Reproduce the benchmarks on your own server
The same runner that produces one.semurg.io/benchmark, checked against a published checksum before it runs. It starts every engine in Docker on the same machine, gives each one every core, checks that every engine returns the same answer before any time counts, and prints the table. A full domain takes hours, most of it downloading and loading the datasets.
Graph, in memory (SNAP com-Orkut, 117 million relationships, every engine):
curl -fsSL https://one.semurg.io/bench | sudo bash -s -- --graph
Vector (SIFT1M):
curl -fsSL https://one.semurg.io/bench | sudo bash -s -- --vector
Graph, bigger than memory (SNAP com-Friendster, 1.8 billion relationships, every engine held to the same 12 GB of memory; it needs about 300 GB free on the data disk and most of a day):
curl -fsSL https://one.semurg.io/bench | sudo env BENCH_BAND=exceeds_cap ARENA_MEM_CAP_GB=12 \ BENCH_DATASET_GRAPH=friendster_cap bash -s -- --graph
The runner checks the machine first and refuses, saying what to do, if a requirement is missing; it never formats or mounts a disk. Its source and method are in the runner itself.
6. What the tests show today
- Benchmarks: /benchmark names the release and the machine behind every figure. Graph is published in memory and bigger than memory; the other domains are being re-measured on the current release and appear there domain by domain. Losses are published with the wins.
- The whole cluster: /performance shows write, read, traverse and scan at every release.
- Durability: /durability. On one node, a process killed with kill -9 under load, a full disk, a slow disk and a frozen process lost no acknowledged write. A sudden power cut can lose the last seconds of acknowledged writes on ext4; the measured window and its release are on that page, and closing it is in progress.
- More than one node: replication and disaster recovery are being tested and are not claimed until those tests pass on a published release.
7. Talk to us
We would rather hear about a problem on day one than read about it later. Tell us what you are evaluating, on what hardware, and what you saw; we will reproduce it and answer, and load a sample of your own data with you if that helps. Contact.