TL;DR
- 01KAIROS is the Rust crate that does temporal vision: every node and edge in the kernel carries valid-time and transaction-time intervals, and KAIROS reasons over them.
- 02It implements Allen-13 interval logic, status-transition tracking for Commitments, as-of-system-time + as-of-valid-time + drift queries, and bi-temporal invalidation (no destructive deletes).
- 03KAIROS is what makes the LLM-side claim "this happened on Thursday" survive contact with reality: it cross-checks against the graph's temporal record before the claim is committed.
- 04Stack: Rust + Cypher-style query layer over a property-graph store; ships with adapters for Neo4j 5.x and a custom embedded backend for small-tenant deployments.
KAIROS implements Allen-13 interval logic, bi-temporal commitment status, and as-of / drift / retrospective queries. It is what makes the LLM-side claim that something happened on Thursday survive contact with reality.
Allen-13, briefly
James Allen's 1983 paper defined 13 mutually exclusive relations between time intervals: before, after, meets, met-by, overlaps, overlapped-by, starts, started-by, during, contains, finishes, finished-by, equal. Every pair of temporal intervals KAIROS sees is classified by exactly one of these. This is the substrate that makes "Monday's commitment vs Thursday's denial" not a paragraph but a typed structural relation.
Bi-temporality, in practice
- ▸Every event carries two intervals: when it was true in the world (valid-time) and when the system learned of it (transaction-time). Both are first-class.
- ▸A contradicting claim does not delete the prior edge. It sets the prior edge's
t_tx_endto now and inserts a new edge with its ownt_tx_start. Both remain queryable. - ▸As-of queries reconstruct what the system *knew at time T1 about the world at time T2*. This is the retrospective-analysis substrate; it is what a reviewer asks of a desk officer's reasoning.
- ▸Status transitions for Commitments are typed records: from_status, to_status, valid_time, transaction_time, triggering_claim_id|event_id, source_span. The invariant
Active → Fulfilledrequires intervening evidence is enforced here.
Query examples
query @ t_tx = "2026-03-14T17:00" — what did the system know at that timestamp.
query @ t_valid = "2026-02-01" — what was true on that date, using current knowledge.
query @ (t_tx = T1, t_valid = T2) — the retrospective form.
query drift(commitment_id) — the ordered sequence of valid-time windows the commitment occupied.
Why this is hard
Most graph stores collapse time. Most LLM stacks ignore it. The Zep / Graphiti work in 2025 (Rasmussen et al.) is the closest adjacent design; KAIROS extends the pattern across all eight ACO primitives rather than only the entities, and enforces the bi-temporal contract at compile time on the Rust side.
SOURCES
- [1]Allen, J. F. (1983). Maintaining knowledge about temporal intervals. CACM 26(11).
- [2]Rasmussen et al. (2025). Zep: Temporal KG for Agent Memory.
- [3]Chen et al. (2023). Benchmarking LLMs on Temporal Reasoning.
- [4]Neo4j 5.x: temporal types & functions.
- [5]Zhang et al. (2025). MedKGent: temporally evolving medical KG.