Write on any master
Every master takes writes and tells the others. There is no single leader to wait for or fail over to.
Today the masters share one process on a simulated network. Real machines come with milestone M1.
Documents, graph, vector search with rerank, memory and events in one open-source engine. Write on any master, retry safely, remember and forget, and run it on any cloud, on-prem or your laptop.
From the project's own runs, 23 October 2026. Early numbers from a small test machine, not a benchmark. The full story is under Roadmap.
Most agent stacks glue half a dozen systems together and hope the glue holds. AgentreksDB starts from the agent: how it retries, what it remembers, how its loops run and who it trusts. Here is what that changes, and what it doesn't.
Six sets of keys, backups and sync jobs. Every arrow is a place for data to go stale.
Documents, vectors, graph, memory, events and text in one engine. One set of keys, one backup, one place for an agent to look.
Every master takes writes and tells the others. There is no single leader to wait for or fail over to.
Today the masters share one process on a simulated network. Real machines come with milestone M1.
Two agents edit different fields of one document and both edits survive. Merge rules are set per collection.
Writes carry an idempotency key, so a retry stores once. Replies are receipts: how many copies, how many needed, what is waiting.
Remember, recall, forget, consolidate. Memories from sources you don't trust wait in quarantine until a reviewer releases them.
Agents talk through the graph: an inbox with ack and nack, timers, a causal trace and a loop governor that stops runaway loops.
Graph links have validity windows and memory recall can time-travel, so an agent can ask what was true then.
An agent can hand a narrower token to a sub-agent. Every admin action lands in a hash-chained audit log you can verify.
Eventual by default. Pick linearizable per collection for unique names or locks. On the cut-off side of a split, strong collections refuse.
| The job | The usual answer | In AgentreksDB |
|---|---|---|
| Take writes anywhere | One primary takes writes, the rest follow | Every master takes writes; documents merge field by field Built |
| Find by meaning | A separate vector database, plus a rerank call | Keyword, vector and hybrid search with rerank in the same store Built |
| Link facts | A graph database on the side | Edges with properties and validity windows, as-of queries, shortest path, PageRank Built |
| Remember | A memory library over several stores | Remember, recall, forget, consolidate and quarantine, replicated like any data Built |
| React to change | A broker plus glue code | Events in the graph: inbox, timers, causal trace, loop governor Built |
| Search text | A search cluster | Keyword search built in, blendable with vectors Built |
| Analyse history | A nightly export job into a lake | Move settled data to Iceberg on S3 from inside the database Optional build |
| Retry safely | Every client improvises its own retries | Idempotency keys, write receipts, Retry-After on every refusal Built |
| Trust an agent | Checks scattered through app code | Narrow tokens, quotas, source trust, quarantine, hash-chained audit Built |
Multi-master writes, hinted handoff, vector search, graphs and Iceberg all have precedent. We won't call this the first or the fastest. The difference is the combination: one engine whose interface, memory and events are made for agents, with the trade-offs written down. Speed claims wait for a benchmark anyone can rerun.
Documents, links, meaning, memory, events and history live in one open-source engine written in Rust, so you don't run six systems and keep them in sync. Each card says how real it is today.
Store anything an agent produces as JSON in a compact binary format, with a write-ahead log and crash recovery.
At least two copies, up to one per master. Pin data to the masters you name. Hinted handoff and repair catch up masters that were away.
Edges with properties and validity windows. Explore as of a date, find shortest paths, run PageRank.
Keyword, vector or hybrid, then rerank, with metadata filters and an explanation of each score.
Remember, recall with time travel, forget and consolidate. Review quarantined memories, then release them.
Publish and subscribe, an inbox with ack, nack and approve, timers, a causal trace and a loop governor.
Idempotency keys on writes, receipts that show copies stored and needed, and Retry-After on every refusal.
Tokens an agent can narrow for sub-agents, per-agent quotas, source trust and a hash-chained audit log.
Nine pages and three themes, every API reachable from the screen, served by the database binary itself.
Dockerfile, Helm chart, OpenTofu modules for four clouds and CI/CD. Machines of any size are weighted by what they can carry.
Move settled data to Apache Iceberg tables on S3 for analytics and archive, in an open table format.
Open source by design. The plan is a plugin API so the vector index, graph engine or merge rules can be your own.
The database serves its own console, and every page is a camp on the trek. Click a camp and the trek robot walks you there. The same screens work for people and for agents with a narrow token.
Every master takes writes and talks to the others. Keep at least two copies, add more up to one per master, or pin data to the masters you name. Click a camp to write a document there, then take camps offline to see what survives.
Two is the minimum. The most you can set is one copy per master.
Pin two or more masters to choose exactly where data lives. With none pinned, AgentreksDB picks the nearest ones.
Click any camp to write a document there.
This page simulates the idea in your browser. The real engine applies the same rules today with every master in one process; separate machines come with milestone M1 (see Roadmap).
The same JSON documents power graph links, search, memory and events. There is one copy of the data, and it is replicated like everything else. The snippets are sketches of the idea; the real API is JSON over HTTP.
// Two masters edit the same document at once
await usEast.put("task:42", { status: "done" });
await mumbai.put("task:42", { owner: "agent-7" });
// Both edits survive. Documents merge field by field.
const task = await db.get("task:42");task:42 sets status to "done"task:42 sets owner to "agent-7"// Field names come from the API. The path and body are a sketch.
POST /v1/…
Authorization: Bearer <agent token>
Idempotency-Key: 7f3a-21c9
{ "consistency": "quorum", … }
// reply
{ "acks": 2, "need": 2,
"hinted": 1, "replicas": […] }// Which sources did agent 7 rely on?
const sources = await db
.graph("work")
.from("agent:7")
.out("worked_on") // tasks
.out("cites") // sources
.limit(10);// Find by meaning, then rerank the best matches
const hits = await db.search("help_docs", {
text: "refund policy for annual plans",
topK: 50,
rerank: { keep: 5 },
});await agent.memory.remember("Customer prefers email over calls");
const notes = await agent.memory.recall(
"how should I contact them?"
);
await agent.memory.forget(notes[0].id);// Time series
// planned: nothing behind this in the API yet
await db.series("tool_calls").append({
agent: "agent-7",
ms: 412,
});
// Full-text
const logs = await db.text("run_logs").match("timeout");Masters can live in one region, many regions, several clouds, or on-prem and cloud together. The deploy kit checks your machines, plans the cluster and writes the files for each platform. Click a logo to see what is in the kit and how far along it is.
Each master carries a share of the data in proportion to its weight. A node's weight is the smallest of cores ÷ 4, memory ÷ 16 GiB, storage ÷ 256 GiB and durable writes per second ÷ 1,000, held between 0.125 and 16. A laptop and a big server can sit in the same cluster. Built Takes effect with M1
Example machines with made-up specs, to show the formula. Shares are proportional to weight.
Agents burst, loop and retry. AgentreksDB expects that. It answers "come back in a moment" instead of falling over, keeps every write it acknowledged, grows in place, and catches up a master that was away.
p50 337 ms, p99 2.0 s, p99.9 5.0 s while overloaded. Nothing was lost and nothing failed, but callers waited. Overload costs latency, never data.
Release binary on 2 cores: 100 requests a second, then 10×, then 30×, with the CPU limit changed mid-run. "No errors" means no lost acknowledged write, no crash and no failed operation for a caller that retries. It is a stress test, not a benchmark.
Writes meant for an offline master wait as hints and replay when it returns. Read repair and digest repair mop up the rest.
On shutdown the server stops taking new work, finishes what is in flight and reports not-ready so traffic moves away. Health, ready and metrics ports are built in.
The controller resizes CPU and memory without a restart, grows volumes at 70% full and waits ten minutes before shrinking. Not yet run on a real cluster.
If a nearby voter fails, strong writes will carry on at the far master's slower speed instead of stopping, and say so. Times are modelled, not measured.
Fresh data lives on your masters, where agents read and write it. When it settles, move it to Apache Iceberg tables on S3 for analytics and archive. The lakehouse export is an optional build of the engine, with its own page in the console.
Agent systems have been climbing for a while. AgentreksDB is built for the last step: long-running, asynchronous agents in loops that keep improving, working on a graph and talking to each other through it.
Agents don't need a broker to hear each other. A change in the graph is the message, and an agent's inbox is a page of the database. A bridge to Kafka for your other systems is an idea, not something built. Bridge: planned
Don't like the vector index? Replace it. The index, the graph engine, the rerank step and the rest can be swapped for your own code. Nothing is sealed.
// Bring your own vector index
struct MyIndex { /* your algorithm */ }
impl VectorIndex for MyIndex {
fn insert(&mut self, id: DocId, vector: &[f32]) { /* ... */ }
fn search(&self, query: &[f32], k: usize) -> Vec<Hit> { /* ... */ }
}
let db = Agentreks::open("./data")
.vector_index(MyIndex::new())
.build();The engine, the API, the agent features and the console exist. The next camp is the one that matters most: real masters on separate machines. Beyond it, everything is labelled for what it is.