Private AI memory
that thinks in contexthistory

Bi-temporal graph storage that runs in your process — no cloud, no server, no data leaves your device.

the DuckDB of graph databases
Get started Browse GitHub
No cloud No server No data leaves the device HIPAA / GDPR architecture

Rust · crates.io Python · PyPI iOS · Swift Package Android · Kotlin JNI WebAssembly · in-browser MCP stdio server Claude Desktop Cursor zero C dependencies AGPL-3.0 + commercial Rust · crates.io Python · PyPI iOS · Swift Package Android · Kotlin JNI WebAssembly · in-browser MCP stdio server Claude Desktop Cursor zero C dependencies AGPL-3.0 + commercial
The Memory Problem

Facts change. Databases should know that.

Your agent says "Alice works at Stripe" — but she left six months ago. The old value was overwritten. There's no history, no correction trail, no way to ask "what did we believe, and when?"

History disappears

UPDATE overwrites the previous value. The moment you correct a fact, the old one is gone forever.

Time is an afterthought

A created_at column tells you when a row was inserted — not when the fact was true in the world.

Data leaves the device

Most graph memory tools need a cloud server or external database. Your private knowledge gets sent over the wire.

Kronroe solves all three at the engine level.

four timestamps per fact — not an app-layer patch

1
Assert
Store a fact — the engine adds four timestamps automatically
2
Detect
Contradictions caught at write time, not discovered later
3
Recall
Search what's true now — or what was true last Tuesday
4
Evolve
Old facts don't vanish — they decay, correct, build history
See how it works in code →
Show the Code

Install to temporal query in 30 seconds

$ pip install kronroe
Python · AgentMemory
from kronroe import AgentMemory memory = AgentMemory.open("./agent.kronroe") # Store facts — four timestamps added automatically memory.assert_fact("alice", "works_at", "Acme") memory.assert_fact("alice", "lives_in", "London") # Ask a question — full-text search with ranked results results = memory.recall("where does Alice work?", limit=5) for fact in results: print(fact["subject"], fact["predicate"], fact["value"])
Full Python guide →
Built for Two Worlds

One engine. Two markets.

Kronroe doesn't pick a lane. The same bi-temporal core runs inside an AI agent on your laptop and inside an iOS app on a plane.

AI Agent Memory

A memory that understands time

Give Claude, Cursor, or any MCP client a memory that understands time. Eleven native MCP tools cover the full lifecycle: store facts, recall with ranked scoring, correct history without losing it, and detect contradictions at write time. Three tools go further than any vector store: assemble_context builds token-budgeted LLM context in one call, what_changed surfaces exactly what shifted about an entity since any timestamp, and recall_for_task returns decision-ready facts scoped to a specific task.

MCP-native scored recall context assembly what_changed confidence decay
MCP getting started →
11
MCP tools
0
Network calls
4
Timestamps per fact
Audit trail
~2MB
Binary size
4
Android ABI targets
0
C dependencies
2
Native SDKs
Mobile & Edge

A relationship graph that works on a plane

A pure Rust binary — no C dependencies, no SQLite, no libgraph — that passes App Store review with no surprises. iOS ships as an XCFramework staticlib via Swift Package. Android covers all four real-device ABI targets in one integration. Assert facts, query current state, search, correct, invalidate. No server to fall back to because there was never one to begin with — offline by design, not as a fallback mode.

iOS Swift Package Android Kotlin JNI 4 ABI targets offline by design zero C deps
Rust quick-start →

Give your agents a real memory

One install. Four timestamps on every fact. History that never disappears.

$ pip install kronroe
Get started Read the docs View on GitHub

Kronroe powers Kindly Roe — we built the engine because we needed it.