At a Glance

We built Chronicle, a personal AI memory that knows what was true when. Every fact carries two clocks, nothing is ever deleted, and every answer cites quotes that our code checks against the source.

  • 0.957 on NVIDIA's own Agent Memory Benchmark (186 questions), using the same Nemotron 3 Ultra model as NVIDIA's reference runs, which score 0.828 and 0.909.
  • 0.946 with every name masked before it leaves the machine. Privacy costs 2 questions; before our full-name fix it cost 11.
  • 0.602 → 0.957 on the same model. Every point came from memory and pipeline design, not a bigger model.
  • Privacy is enforced, not promised. CI fails any code that reaches the network outside the privacy guard.
  • Measured honestly. Pinned benchmark commit, same model as the references, and we never read the answer key. Every gain had to survive a rerun.

Inspiration

You ask Alex about the payments service. "Blake has that now." Blake says, "I only took the API side, ask Priya." The handover happened three weeks ago, in an email you were never cc'd on. We all hit this on our internships.

The facts were never missing. They were scattered across emails, Slack and meeting notes, and nothing tracked when each one stopped being true. Most tools remember what was said. Almost none remember when it stopped being true. (Chronos is Greek for time. We are very subtle people.)

Results

Accuracy, privacy off 0.957 (178/186), on two separate runs
Accuracy, every name masked 0.946 (176/186)
NVIDIA references, same model and corpus A 0.828 (agentic RAG), 0.909 (self-model, no masking)
Same-model improvement 0.602 → 0.957
Answering tokens per question ~29k, vs 241k for NVIDIA's self-model

NVIDIA describes its reference runs as "not a ranking", so read this as a like-for-like comparison (same corpus, model and grader), not a leaderboard. Identical code varies by about ±2 points between runs, which is why we only kept gains that held up on a rerun.

How Chronicle works

Two clocks. Every fact records when it was true in the world and when Chronicle learned it. A handover closes Alex's fact instead of overwriting it, so "who owns payments?" (Blake) and "who owned it on 3 May?" (Alex) both have the right answer.

Time-routed evidence. An "as of 3 May" question only sees what was known on 3 May. Facts, topic timelines, person pages and raw documents are searched together, and the model can search again or open a document before it answers.

Checked, not trusted. The model doesn't get the final word on facts. Code checks every quote word for word, works out every relative date ("by Mon EOD" → 25 May), and sends back answers whose names or numbers no quote backs up.

Private by design. Names, emails and phone numbers are masked on your machine before any model call and restored in the reply. A live egress log shows exactly what left, and a hard spending cap stops runaway costs.

Built to plug in. A Memory Time Machine UI (drag a date slider and watch ownership change), a Hermes Agent memory plugin, and an OpenShell policy that limits the sandbox to the model provider and web search.

The rejection log is as informative as the acceptance log. We measured and removed:

  • a critic pass, where the same model checked its own answers: no gain, and it approved wrong ones;
  • timeline-first answering, which turned a correct answer into a refusal;
  • answering over the whole 1M-token corpus, which scored worse than retrieval (14/26 vs 17/26);
  • two "obviously good" prompt rules that lowered the score.

We also deliberately didn't build a "who should I ask?" ranking of coworkers: turning people's inboxes into a leaderboard needs consent and permissions first.

Challenges

Masked names became strangers. With privacy on, "Jin" and "Jin Oh" reached the model as two unrelated placeholders. Writing full names out before masking took the privacy-on score from 0.898 to 0.946.

Models are bad at calendar maths. One "by Monday EOD" question came back as three different dates in three runs. Now code computes the date.

The vote that didn't vote. Comparing samples by exact wording meant they almost never agreed. Comparing what they claim (names, numbers, yes/no) made the vote work.

Noise. A one-question gain is meaningless when identical runs swing ±2 points, so every change had to survive a rerun.

What's Next

Live sync. New emails and Slack messages become dated facts as they arrive.

New-joiner briefings. Who owns what, and since when, on day one.

Expert finder, opt-in. "Who should I ask?", built with consent and visibility controls.

Facts in a fast team go stale in weeks. A memory that tracks when things stopped being true is what a new intern, a busy lead, or an AI agent actually needs, and Chronicle is that memory.

Try it out

⭐ GitHub repo (MIT): 700+ tests, the full benchmark history in docs/benchmark-results.md, and the two-clock memory in chronicle/memory.

Live demo: browse the memory and time slider. Live chat is on as well, the first load can take about a minute to wake.

Built With

  • hermes-agent
  • nebius-token-factory
  • nemoclaw
  • nvidia-nemotron
  • openshell
  • presidio
  • python
  • react
  • render
  • spacy
  • sqlite
  • tavily
  • vite
Share this project:

Updates

Submission history