Spectron - Agent memory you can trust
byโข
Spectron is agent memory built on one ACID substrate. Graph, vectors, documents, and structured rows commit in one transaction. Every fact carries provenance. Corrections supersede, never overwrite. Hybrid retrieval fuses vectors, graph, BM25, and keywords. Traces feed back into ranking. Tri-temporal facts, multi-tenant scopes, and MCP support. No stitched stores. No sync pipelines.


Replies
SurrealDB
Hi Product Hunt ๐
I am Tobie, co-founder of SurrealDB. We are launching Spectron - the memory layer for AI agents, built on SurrealDB (open source; graph, vector, document, and structured records in one ACID transaction).
Why we built it
Agents kept looking great in demos and failing in week three: colliding embeddings with the same label, corrections losing to the next high-scoring vector, cross-tenant bleed, confident answers with no lineage. Those are data-layer problems, not โretrieval only.โ Spectron is the data-layer answer on the engine we already had.
What it is
One substrate holding two kinds of memory, told apart by provenance rather than by separate stores:
Authoritative knowledge - org documents, policies, and product data, with ingestion for PDFs, code, images, audio, and video.
Conversational memory - the transcript itself, plus identity, knowledge, context, instructions, and unknowns the agent flags but cannot answer yet.
How it behaves
Provenance on every fact, down to the byte span in the originating turn or document chunk.
Corrections kept across three clocks tracked separately: when the database wrote a fact, when we first believed it, and when it was true in the world - plus where it was captured, when location matters.
Multi-tenancy and territory scoped in the engine, not patched on at the API.
When sources disagree, the more authoritative one is favoured and the conflict is recorded as an explicit uncertainty, never silently overwritten.
Memory evolves between interactions: background passes link previously-unrelated facts and crystallise beliefs from what the substrate has accumulated.
What early access includes
REST API, SDKs for Python, TypeScript, Kotlin, and Swift, MCP server (remember, recall, context, reflect, forget, upload, inspect).
We are opening access in waves. We will email you the moment your invite is ready, with everything you need to start building.
For this community: what is the worst memory failure you have seen ship to production, and what did the team do about it? The answers I trust are usually the unglamorous ones.
@tobiemhย Interesting positioning, especially with vectors, graphs, documents, and relations all living in the same engine. For teams building AI agents today, what's been the most common reason they've chosen SurrealDB over combining multiple specialized databases?
SurrealDB
Great question, @nicole_hynek; it's one we get a lot. ๐
There are two reasons, and the second is the one that matters more.
The glue between specialised databases is where agent systems actually break. When your vectors live in one store, your graph in another, and your documents in a third, you become responsible for keeping them consistent: dual writes, sync jobs, reconciliation, "the embedding exists but the source row was deleted" bugs. That's not the interesting part of building an agent, but it's where most of the late-night incidents come from.
When vectors, full-text, graph, and time all live in one engine, you can query across all of them in a single question - and that's exactly what better memory requires. "Find chunks semantically close to X, that mention Y, that belong to entities related to Z, that were valid as of last March." You can't fake that by stitching four databases together after the fact; the moment you split it across systems you lose the ability to reason over all four dimensions at once.
That unified query surface is what platforms like Spectron are built on. Memory that understands meaning, relationships, language, and time together isn't a feature you bolt on; it falls out of having one substrate that can answer all four in the same breath.
@tobiemhย That makes a lot of sense. The operational complexity of keeping multiple databases synchronized is easy to underestimate until you're dealing with consistency issues in production.
The ability to query meaning, relationships, documents, and time together from a single system feels especially valuable for agent memory and retrieval workflows. Really interesting approach and awesome work on this!
SurrealDB
@nicole_hynekย "easy to underestimate until production" is the painful version. The sync tax never shows up in the demo; it shows up in production, six months in, when two stores disagree and something downstream trusted the wrong one. One system just never creates that failure mode. Thank you @nicole_hynek, really appreciate the thoughtful engagement ๐ !
the multi-model in one ACID transaction is the architectural claim worth pressure testing. most databases that support multiple data models achieve it through separate storage engines with a unified query layer, which means cross-model transactions have hidden consistency tradeoffs. curious whether the graph, vector, and document operations are truly atomic in a single engine or whether there's an abstraction layer underneath that introduces edge cases under concurrent writes
SurrealDB
Good question, @ansari_adin, and you've described the common pattern accurately; a lot of "multi-model" systems are separate engines behind a shared query planner, where cross-model atomicity is exactly where the bodies are buried.
SurrealDB is the inverse of that. There aren't separate storage engines per model; there's a single transactional key-value core, and documents, graph edges, and index entries are all just different key encodings over the same keyspace. A graph relation is a record, a vector or full-text index entry is a key maintained in the same write path, and so on. Because of that, a transaction spanning a document write, the edges it touches, and the index updates is one transaction over one keyspace under MVCC, not a coordinated commit across independent stores. There's no second consistency boundary hiding underneath to leak edge cases under concurrent writes. And every transaction has snapshot isolation consistency.
The interesting concurrency questions move to the layer you'd expect, which is the isolation and conflict-resolution semantics of that transactional core (and how that behaves on the distributed backend), not to "did the graph and the vector index disagree because they're really two databases." Happy to go deeper on the isolation model if you want to keep digging; the transactional core underneath is the part that makes all of it possible.
@ansari_adinย The difference with SurrealDB is that all the data models, documents, graphs, vectors, time-series, run as native primitives inside a single Rust-based engine, not separate storage engines bolted together with a query layer on top. So when you're doing a cross-model operation, you're working within one transactional snapshot, not coordinating across subsystems. That's what makes the ACID guarantee real rather than approximate. 3.0 also overhauled concurrent writes on vector indexes specifically, and 3.1 added DiskANN as a second index type for larger-than-memory vector workloads if you want to dig into the details on either.
agents confidently answering with outdated info because a correction got lost somewhere in the memory layer is one of those problems you don't notice until it costs you. provenance on every fact so you can trace where an answer came from should be standard
SurrealDB
@tina_chhabraย Exactly, memory without provenance is risky because the agent can be wrong with confidence. Thatโs why provenance is such a big part of Spectron. You need to know where a fact came from, when it changed, and whether it has been replaced. That is what makes agent memory usable in production.
SurrealDB
This is exactly the failure mode we built around, @tina_chhabra ๐ !
The subtle part is that a correction getting "lost" is usually a deletion in disguise; most systems overwrite the old fact and hope the new one propagates everywhere it needs to. Spectron never deletes a superseded fact; it bounds when the old one was valid and makes the new one current, so the agent answers with today's truth but can still tell you what it believed last quarter and why it changed. Provenance on every fact, down to the source it came from, is what makes that traceable rather than a leap of faith.
Honestly, the whole design goal was to get as close to human memory as we could: memory that revises itself, holds onto its own history, and knows how it came to believe something. The twist is making that a collective memory, so a whole organisation or team shares one trusted recollection instead of every agent and person carrying their own slightly-wrong copy. That is when it stops being a database and starts feeling like the team actually remembers.
Haven't actually gotten to try it yet since it's still early preview, but I already know the use case I want to throw at it. I run long Opus sessions, usually right up against the 1M context, and I almost always forget to compact them, so I either hit the wall or lose a pile of good context when the session ends. A memory layer that consolidates and carries the important stuff between conversations on its own is exactly the thing I keep wishing I had, because then forgetting to compact stops being a problem. The memory just persists.
The reflection and consolidation between conversations is what sells it for me. And as someone who already lives in SurrealDB, having it all on one substrate in a single transaction is a big bonus. Can't wait to get off the waitlist.
SurrealDB
Long-running agent sessions shouldn't depend on remembering to compact at the right moment. The important context should persist, consolidate, and carry forward naturally between conversations.
Really excited for you to try it Lay and looking forward to your feedback, especially since you're already using SurrealDB and a part of our Ambassador Programme.
SurrealDB
This use case is right in the bullseye, @cloaky233. The thing worth calling out: compaction on its own is lossy by nature; you're squashing a session into a summary and quietly throwing away the detail you didn't know you'd need later. Spectron does compact, summarise, and "dream" too, but the difference is we never discard the original; the important facts get promoted into durable, queryable memory, and the full data and context stay in the knowledge graph underneath. So nothing has to be "remembered to be saved," and three sessions later you can still pull the specific thing instead of whatever survived the summary.
And because you already live in SurrealDB, that memory is sitting right next to the rest of your data on one substrate. Genuinely can't wait to hear how it holds up against your Opus sessions; that's exactly the kind of workload we want pushing on it.
SurrealDB
Spectron is our memory and knowledge layer for AI agents, built on top of SurrealDB. The idea is to give agents reliable, shared memory that can work across your stack, tools, and applications, rather than having context scattered across separate systems.
It comes with integrations and SDKs for TypeScript, JavaScript, Python, Swift, Kotlin, LangChain, LangGraph, n8n, and a growing set of MCP server integrations that work with tools like Claude, Codex, Cursor, and more out of the box.
What makes Spectron especially powerful is its focus on authoritative knowledge. It is designed to help agents understand what they know, where that knowledge came from, how it has changed over time, and whether an answer is grounded in the underlying data.
So whether you are building internal agents, customer-facing AI apps, or developer tooling, Spectron gives you a trusted memory layer that can grow with your ecosystem.
SurrealDB
Well put, @at_chiru ๐
The line I'd underline for anyone skimming is "whether an answer is grounded in the underlying data". That's the part most memory layers quietly skip; they'll happily hand an agent a fact with no notion of where it came from or how confident to be in it.
Spectron treats provenance and grounding as first-class: every fact carries its source down to the byte span it came from, knows when it was true and when we learned it, and is honest when the answer is uncertain rather than confidently wrong. For anything customer-facing or high-stakes, that difference between "the model said so" and "here is the data this is grounded in, and here is how sure we are" is the whole ballgame.
A trusted memory layer that grows with your ecosystem is exactly the right way to put it; trust is the feature, and everything else is in service of it ๐.
I've been watching and documenting Spectron for a good length of time now, and here are some of the most interesting parts I recommend keeping an eye on when first experimenting with it:
Tri-temporal model (i.e. three types of time): there is time in the sense of when something was valid in the real world (Austria-Hungary was valid from 1867 to 1918), there's time in the sense of when you learned something ("We learned about Austria-Hungary in 1994 in school"), and there's system time (when facts were registered)
Different types of knowledge: ranges from authoritative knowledge (facts you know are true and add as such) going down to more experiential and reflective knowledge, and finally to uncertainty so that an agent can actually say "I don't know" instead of trying its best to hack something together
Supersession: this is where something that used to be true no longer is, but it doesn't mean that the old fact gets deleted. (e.g. you get a new job and are now a pilot instead of a fire fighter) The old info is just valid until a certain date, and the new info becomes the new state.
And so on...it basically emulates memory the way we use it as humans.
SurrealDB
Spot on @mithridates, you've put your finger on exactly the part we obsessed over most. ๐
The tri-temporal model is the thing people underestimate until they hit it in the wild: "when it was true," "when we found out," and "when the system recorded it" are three genuinely different questions, and almost every memory system collapses them into one timestamp and quietly loses information. Keeping them separate is what lets an agent reason about what it knew and when - not just what's true now.
And yeah, the supersession point is the heart of it: we never destroy the past, we just bound its validity. Your firefighterโpilot example is perfect; ask "what do they do?" and you get pilot; ask "what did they do in 2019?" and the old fact is still right there, intact.
The "I don't know" piece is the one I'd love more people to push on. Confidently-wrong agents are the real failure mode, so modelling uncertainty as a first-class citizen mattered more to us than squeezing out another point of benchmark accuracy.
The fun part is what these three unlock together: querying memory as of any point in the past, watching beliefs get revised over time, replaying how the agent's understanding evolved. That's where it starts feeling like actual memory.
"Corrections supersede, never overwrite" and tri-temporal facts, this is the part agent memory systems usually
get badly wrong. Most just rewrite the latest version and lose the trail of why the change happened.
In Priowise I keep wanting a memory layer that lets me ask "why did the score for this decision change between
v1 and v2 of the analysis", and getting nothing useful from the storage layer. Spectron's provenance + supersession model looks like the missing piece.
Going to look at this more carefully. Congrats on the launch.
SurrealDB
Yep, exactly. Rewriting the latest value loses the useful part.
For this to work properly, corrections need to be stored as new facts that supersede earlier ones, not overwrite them. Then you can query the chain and see what changed, when it changed, and which source or event caused the change.
This is a great example of the kind of thing Spectron should make much easier to model.
SurrealDB
This is the exact shape of problem we built for, @erginmurat , and your v1-vs-v2 score example is the perfect test of it.
The reason most storage layers can't answer "why did the score change" is that the v1 score and the v2 score are the same field overwritten, so the v1 state and the reason it moved are both already gone by the time you ask. In Spectron the v1 belief is still there with its validity bounded in time, the v2 belief supersedes it, and the two are linked in a chain you can walk. So "what was the score at v1, what is it at v2" is a temporal query, not an archaeological search.
The part I think you're really reaching for is the "why," and that's where the trace graph comes in: the decision that produced the new score is itself a stored node, linked to the facts it superseded and the source or event that triggered it. So you don't just see that the score changed between v1 and v2; you can walk from the new value back to the prior one, to the decision that changed it, to the input that caused the decision, and perhaps to previous responses given to a similar question asked previously. That is the bit that's usually missing.
Would genuinely love to hear how it maps onto Priowise in due course. That decision-provenance use case is right in the centre of what we care about.
@tobiemhย This is exactly the architecture I've been hand-rolling in Priowise. The pipeline produces strategic analysis through several stages, and downstream stages depend on outputs of upstream ones. When a single stage produces revised output (different framing, different scoring rationale, different competitor analysis), I lose the trail of WHY the revision happened, was it new input,
a different prompt, a re-ranking, or just stochastic variance? Right now I store the latest version and let
the prior one disappear.
The chain-walk you're describing โ value โ decision โ input โ prior responses, is what I keep trying to reconstruct from logs after the fact, I believe. The tri-temporal piece especially: founders using Priowise will eventually need to ask "the system recommended X direction last quarter, what changed in the inputs that made it recommend Y now?" That's a temporal provenance query, not an archaeological one. Pretending otherwise has been my main source of weekend rebuilds.
Would love to talk about how Spectron handles the case where the upstream input itself was an AI output (so the "event that caused the decision" is itself a probabilistic node, not a deterministic one). That's the part of agent memory I haven't found a clean answer for.
Will DM you when launch dust settles.
SurrealDB
@erginmurat this is the most interesting part because it's where "memory" stops being storage and starts being epistemics.
The short version: an AI output as an upstream input isn't an edge case in Spectron, it's a first-class source kind. Facts minted by a model (reflection, elaboration, consolidation) are stored with their own provenance, a derived_from link to the inputs they were synthesised from, and a deliberately lower trust prior than a human turn or an authoritative document. So a probabilistic node is recorded as probabilistic; it never gets laundered into looking like ground truth just because it became an input downstream.
Two things follow from that. First, the chain-walk is recursive, not flat: derived_from is a graph edge, so when you walk back to "the event that caused this decision" and that event is itself a model output, you keep walking, into the inputs and the model call that produced it, each node carrying its own trust and confidence. The probabilistic origin is visible at every hop rather than collapsing into a single deterministic "an input happened".
Second, this is exactly what lets you answer your earlier new-input vs re-ranking vs stochastic-variance question. Every trace records both the model (and provider, version) and the retrieval candidate set it was given. So to diff two revisions you compare the inputs each decision actually saw: if the considered facts changed, the inputs moved; if the inputs are identical and only the generation differs, that's the model wandering, not the data. "Did the recommendation change because the inputs changed or because the model rolled differently" becomes a query over two trace nodes, not a guess.
And confidence is tracked separately from trust, so a low-confidence model output doesn't get to silently supersede a higher-confidence belief; below the floor it surfaces as explicit uncertainty instead. That keeps a probabilistic upstream from quietly corrupting the chain it feeds.
Please do DM when the dust settles. The "input is itself a probabilistic node" problem is right at the centre of what we think agent memory has to get right, and I'd love to go deeper on how it maps onto the Priowise pipeline.
How does provenance work in practice? If a fact originates from multiple sources and is later corrected, what does the audit trail and retrieval experience look like?
SurrealDB
Good question @jn263, this is one of the parts spent a considerable amount of time designing.
Provenance is a stored field, not a best-effort annotation. Every fact-bearing row carries where it came from, pinned down to the byte span in the originating turn or document chunk, plus a trust prior for that source. When multiple sources independently support the same fact, that isn't flattened into one record; each assertion stays its own row with its own provenance, and corroboration is tracked explicitly (proof counts, and promotion that points back at the originals). So "three sources said this" is something you can actually see and walk, not a single averaged-out fact.
When sources disagree, we deliberately don't silently pick a winner. A cross-provenance contradiction (say a conversation says one thing and a document says another) emits an explicit uncertainty row, and both facts stay valid until it's resolved, rather than one quietly overwriting the other. Same-source updates supersede normally, and even then nothing is deleted: the prior belief stays with its validity bounded in time, so the correction is a chain you can replay.
Underneath that, sit three clocks: when a fact was true in the world, when we first learned it, and when the system recorded it. So the audit trail answers "what did we believe, on what basis, and when did that change".
On retrieval: by default you get the current view with sources attached, traceable back to the bytes. But you can also ask "as of" a past point in time and get what the system would have answered then, with the provenance that applied at that moment. A correction shows up as a transition in the history, not a gap.
The tri-temporal model stands out. Most systems use a single timestamp and silently lose information they didn't know they'd need later. We've seen agents produce stale answers because correction propagation was eventually consistent rather than atomic. When two agents simultaneously try to supersede the same fact with conflicting data, does Spectron record that as an explicit conflict or does last write win?
SurrealDB
Really great question @anand_thakkar1! The short answer: explicit conflict, not last-write-wins.
When a new fact contradicts an existing one across provenance (say two agents writing from different source types), the reconciler doesn't pick a winner. It emits an explicit uncertainty record and keeps both facts valid until the conflict is resolved, rather than letting one quietly overwrite the other. Even in the simpler same-source case, a correction supersedes by bounding the old fact's validity in time rather than deleting it, and a low-confidence write is refused rather than allowed to clobber a high-confidence one. Nothing is lost, and the contradiction is visible instead of silent.
On the truly-simultaneous case specifically: every write is one ACID transaction on a single substrate, so there's no cross-store propagation lag of the kind that produces the stale answers you're describing. The conflict is recorded in the same place the facts live, not reconciled after the fact by a background job. Happy to go deeper on the isolation semantics if you want to get into the concurrent-writer edge cases!
AISA AI Skills Test
the provenance piece is what makes this interesting to me. most agent memory solutions treat it like a cache โ store the output, retrieve it later. but if corrections supersede instead of overwriting, you actually get an audit trail of what the agent "believed" at each point. thats a much harder problem than just fast retrieval, and its the part most teams skip until something breaks in production.
SurrealDB
@ozandagย Fast retrieval is only useful if you can trust what comes back.
That's one of Spectron's core advantages. Memory should not just persist outputs, it should preserve what changed, what was superseded, and why, so you can inspect the state of knowledge at any point instead of only seeing the latest version.
That audit trail becomes pretty important once agents move beyond demos and into production, all thanks to Surreal's temporal capabilities.
SurrealDB
Absolutely @ozandag ! The "what did the agent believe at each point" framing is exactly it. A cache can only ever tell you what it answered; it can't tell you what it knew at the time or why. Once corrections supersede instead of overwrite, "what did it believe on the 3rd, and what changed by the 10th" becomes a query rather than a forensic reconstruction from logs. And you're right that it's the unglamorous part teams skip, precisely because it costs nothing until the day it costs everything. Thanks @ozandag , this is a great take on it.