Two clocks, not one
Every memory carries two independent times. Almost every confusion about temporal search comes from conflating them.
For a memory written as the conversation happens they’re the same instant. They
diverge the moment you import history: a note about last June, uploaded today,
happened in June and was recorded today.
Dating a memory
Passtimestamp (ISO 8601) on record or on any item in record/batch:
Reproducing a past answer
as_of drops every memory recorded after an instant, so retrieval answers
from what the space knew at that moment:
Under
as_of, retrieval skips its graph-expansion pass and answers from
semantic, keyword and temporal retrieval only. Expansion follows entity links
without a time bound, so it could pull in a memory recorded after the cutoff:
a wrong answer for point-in-time recall, not a ranking artifact. An as_of
search is therefore slightly narrower than the same search without it.Moving “now”
query_timestamp changes the instant that recency scoring and relative dates in
the query are measured against. It re-ranks and never removes, which is the
whole difference from as_of:
as_of.
Reach for query_timestamp when the query text itself contains a relative date,
or when replaying a historical conversation and you want period-appropriate
memories to surface without hiding anything.
Which one
Both search fields take an ISO 8601 instant and are rejected as
422 before the
search runs if malformed, so a typo never costs a charged call. They compose
with each other and with scoping and tags.
The current limit
Until that filter exists, the workable approaches are:- Tag by period at write time.
tags: ["2026-Q2"]on import, thentags: ["2026-Q2"], tags_match: "all_strict"on retrieve. This is an exact filter and it works today. - Lean on
query_timestamp. It won’t exclude out-of-period memories, but it will float the in-period ones to the top, which is often enough when the result goes into a prompt rather than a report. - Put the period in the query text. Retrieval parses relative and absolute dates in the query and has a dedicated temporal retrieval arm, so “what happened in June 2026” is a meaningfully better query than “what happened”.
Related
- Record:
timestampon write - Retrieve:
as_ofandquery_timestamp - Bulk import: dating a backfill
- Tuning recall: the non-temporal knobs
