Introducing Temporal Reasoning in Suprflo
Temporal reasoning in Suprflo teaches an agent's memory to track not only what is true but when it was true. Every fact carries a validity window - a valid_from and a valid_to - so when reality changes, the new fact is written with a fresh start date and the old one is closed rather than deleted. That lets an agent answer 'where does the user work now?' with the current answer while still being able to reconstruct what it believed six months ago. The result is memory that stays coherent over long, multi-session histories instead of holding two contradictory facts at once, which is exactly the failure that shows up in production as an assistant that forgets a change or repeats stale information.
Long-running agents rarely fail because they forget. They fail because they remember everything in the same tense. A user's old job, their current role, and a trip they are only planning all sit in memory as if they were equally true right now, so when the agent is asked a simple question it retrieves the wrong version of reality. Fixing that needs more than better search - it needs memory that understands time. Today we are turning on temporal reasoning across Suprflo, our memory layer for AI agents. Instead of storing a flat pile of facts, Suprflo now records when each fact became true and when it stopped being true, and uses that to keep an agent's beliefs current without throwing away its history. This post explains the problem, how Suprflo models time under the hood, and what it changes for anyone building agents that have to remember correctly over months.
Why Memory Without Time Breaks
Most memory systems store facts as if they were permanent. "User prefers almond milk" goes in once and stays retrievable forever, ranked by how semantically similar it is to whatever the user asks next. That works right up until the fact changes.
The moment a user says "I switched to oat milk after an allergy," a timeless store has a problem. It now holds two facts - almond and oat - that are both plausible, both relevant, and directly contradictory. Pure semantic retrieval has no principled way to pick, so it surfaces whichever embedding happens to score higher. The agent recommends the thing the user is now allergic to, and the failure looks like carelessness rather than a missing model of time.
This is not an edge case. Jobs change, addresses change, medications change, project status changes, preferences change. Any agent meant to remember a person or a process across months will accumulate facts that were true once and are not true now. Without a notion of when each fact held, the system cannot tell a current belief from a historical one - and that is the single most common way long-term memory goes wrong.
What Temporal Reasoning Adds
Temporal reasoning gives every memory a place on a timeline instead of a single flat existence. A fact is no longer just "true" - it is true over an interval, with a beginning and, when reality moves on, an end.
Concretely, Suprflo attaches a validity window to each fact: a valid_from marking when it became true and a valid_to marking when it stopped. A current fact has an open valid_to. A superseded fact gets its valid_to closed at the moment the new fact begins. Nothing is destroyed - the old belief is retired, not erased - so the agent can answer "what is true now?" and "what did we believe in April?" from the same record.
- When a fact became true - the valid_from timestamp, drawn from the conversation rather than the write time.
- When a fact stopped being true - the valid_to, left open while the fact still holds and closed the instant it is superseded.
- Whether a fact is current or historical - derived directly from the window, so retrieval can prefer what holds now without discarding the past.
- How a fact evolved - the closed windows form an audit trail, letting the agent reconstruct the state of the world at any earlier point.
The distinction that makes this bi-temporal rather than merely timestamped is that Suprflo separates when something was true in the world from when Suprflo learned it. A user can mention in August that they changed jobs back in April - the fact is valid from April even though it was ingested in August. Keeping those two clocks apart is what lets the memory stay honest about history.
How Suprflo Models Time Under the Hood
Suprflo processes every incoming turn through a deterministic pipeline rather than dumping raw text into a vector store. Temporal reasoning lives inside that pipeline, so time is handled at write time, when the system has the most context, instead of being guessed at read time.
- Ingest - the raw turn is vaulted verbatim, so the original source is always recoverable no matter what is extracted from it.
- Extract facts - the system pulls discrete, checkable facts out of the turn, each with the time information stated or implied in the conversation.
- Entity linking - facts are attached to the entities they describe, so "her employer" and "the company she joined" resolve to the same thing.
- Semantic deduplication - near-identical facts are collapsed so the store does not fill with restatements of the same thing.
- Bi-temporal write - each fact is written with its validity window, and any prior fact it supersedes has its valid_to closed rather than being overwritten.
- Reflection queue - higher-order consolidation runs asynchronously, keeping the write path fast while longer-running reasoning happens in the background.
The subtle step is the bi-temporal write. When a new fact arrives that conflicts with an existing one, Suprflo does not blindly replace it and does not blindly keep both. Near-duplicate or competing facts go through LLM adjudication, which decides whether the new fact is an update to the old one - in which case the old window is closed and the new one opened - or genuinely independent information that should coexist. That judgment is the difference between a memory that evolves cleanly and one that either loses history or contradicts itself.
A Concrete Walkthrough
Take the milk example end to end. In February the user says they prefer almond milk. Suprflo writes a fact with valid_from set to February and valid_to left open - it is currently true.
In April the user mentions an allergy and a switch to oat milk. The new fact conflicts with the old one, so adjudication recognizes it as an update rather than a separate preference. Suprflo opens a new fact - oat milk, valid_from April - and closes the almond fact by setting its valid_to to April. The almond preference is not deleted, it is marked as having ended.
Now the queries resolve the way a person would expect. "What milk does the user prefer?" returns oat, because that is the fact whose window is still open. "Has the user ever preferred almond milk?" returns yes, correctly dated to February through April, because the closed window is still there to read. One store answers both the present-tense and the historical question without contradiction - which a flat, timeless store simply cannot do.
Why This Matters for Benchmarks and Production
Temporal reasoning is not a cosmetic feature - it is the mechanism behind the memory behaviors that hard benchmarks actually test. Update consistency, temporal recall, and event ordering all reduce to the same question: does the system know when each fact was true? A memory that models validity windows can answer those, and one that stores flat facts cannot.
That is why we treat time as a first-class part of the architecture rather than a post-hoc filter. Suprflo currently scores 75.8% on BEAM 100K - the deliberately unsaturated benchmark whose hardest categories are temporal reasoning and event ordering - alongside 92.1% on LoCoMo and 93.1% on LongMemEval. BEAM stays the sternest test precisely because it stresses the time dimension the most, which is exactly where a bi-temporal model earns its keep.
In production the payoff is simpler to state. An agent backed by temporal memory stops recommending the thing a user dropped, stops citing a role they left, and stops treating a planned trip as one already taken. It can also explain itself - because the history is intact, you can ask not just what the agent believes but when it started believing it, which matters enormously for debugging and trust.
Sources & further reading
Where Temporal Reasoning Still Has Limits
Modeling time helps enormously, but it is not magic, and it is worth being honest about the edges:
- Ambiguous dates - when a user says "a while ago" or "last summer," the valid_from is only as precise as the language allows, so some windows are approximate rather than exact.
- Adjudication is a judgment call - deciding whether a new fact updates an old one or stands alongside it is inherently a reasoning task, and hard cases can be gotten wrong in either direction.
- Implicit endings - facts often stop being true without anyone announcing it, so a window may stay open longer than reality warrants until something newer supersedes it.
- Cost and latency - maintaining windows, running adjudication, and keeping history all add work, so temporal reasoning is a trade you make deliberately for correctness, not a free upgrade.
None of these undo the value - an approximate window that knows a fact ended still beats a flat store that thinks it is permanently current. But they are the reasons temporal memory is a system to tune against real traces, not a switch you flip once and forget.
Related guides, services & programmes
Frequently Asked Questions
Temporal reasoning is the ability of a memory system to track when each fact was true, not just what the fact says. In Suprflo, every fact carries a validity window - a valid_from and a valid_to - so the system can distinguish a current belief from a historical one and answer time-sensitive questions correctly.
Bi-temporal means Suprflo tracks two separate clocks: when a fact was true in the real world, and when Suprflo learned it. That separation lets the memory record that a user changed jobs in April even if they only mentioned it in August, so history stays accurate regardless of when information arrives.
Old facts are retired, not deleted. When a new fact supersedes an existing one, Suprflo opens the new fact with a fresh valid_from and closes the old fact by setting its valid_to. The history remains fully readable, so the agent can reconstruct what it believed at any earlier point in time.
Near-duplicate or conflicting facts go through LLM adjudication during the bi-temporal write step. It decides whether the new fact is an update to the old one - in which case the old window is closed - or independent information that should coexist. This is what keeps memory from either losing history or holding two contradictory facts.
It targets exactly the behaviors hard benchmarks stress - update consistency, temporal recall, and event ordering. Suprflo scores 75.8% on BEAM 100K, whose hardest categories are temporal, alongside 92.1% on LoCoMo and 93.1% on LongMemEval. Modeling validity windows is the mechanism behind those temporal results rather than a separate add-on.
Want this distilled for your roadmap? Brief the Baaz squad or scan ship evidence in case studies.