← Chitragupta The brain

It remembers,
and it can show its work.

Most tools call a pile of embeddings a memory. This one keeps when you learned something, when it was true, where it came from and how sure it is — and it keeps the old answer when the new one arrives.

The thesis

The model is not the memory.

The language model is rented compute. It interprets, summarises, reasons and writes — and it forgets the moment the tab closes. Swapping it should cost you nothing, which is only true if it was never the thing holding your world.

So the brain owns the parts that have to survive: persistent memory with real timestamps, a graph of the people and projects you deal with, confidence and importance scores, contradiction detection, the loops you left open, and the retrieval that assembles all of it before the model sees a single word.

USER ──► WORKSPACE ──► AGENTS ──► BRAIN
                                   ├── Temporal memory      episodic · semantic · preference …
                                   ├── Knowledge graph      canonical entities, validated relations
                                   ├── Open loops           commitments, pending decisions
                                   ├── Hybrid retrieval     semantic + lexical + graph + metadata
                                   └── Provenance engine    contradiction, evidence, confidence
Where the brain sits. Agents ask it; it never asks them.
The Brain screenGraph view over the entity list, with live memory / entity / fact counts
The record

Nine questions every memory answers

A row is not just text and a vector. Each one carries the answers to the questions you would ask a colleague who told you something six months ago.

What is this?
text, title, tags, metadata
When did we learn it?
created_at, updated_at
When was it true?
event_time, valid_from, valid_until — a different question, and the one that makes history readable
Where did it come from?
source, source_id, extraction_method, evidence
How confident are we?
confidence, 0.0 – 1.0
How important is it?
importance, 0.0 – 1.0
Has it been reinforced?
reinforcement_count, last_reinforced_at
Is it still valid?
status — active, superseded, uncertain, disputed, expired, retracted
How live is it?
access_count, last_accessed_at, and a computed activation
Taxonomy

Seven kinds of knowing

typewhat it holdsexample
episodicPoint-in-time interactionsa meeting note, a conversation log
semanticDurable world knowledgehow your billing actually works
preferenceHabits and workflow stylesyou write in British English
proceduralOperational instructionsthe release runbook
contextualEphemeral project statewhich branch is current
commitmentPromises made to people“I'll send it Thursday”
observationPatterns the agent noticedyou never reply before 10am
Classification without brittle constraints — a memory that fits none of them is still a memory.
Time

Nothing is overwritten. Ever.

A vector database blurs history: the new value lands on top and the old one is gone. That is fine for a search index and wrong for a record of a person. Here, a change supersedes.

2025  "I build in React"
      status = superseded · valid_until = 2026-01-01

2026  "I build in vanilla JS"
      status = active · valid_from = 2026-01-01 · supersedes_id = <the 2025 row>
Ask what you use today and you get vanilla. Ask what you used to use and the 2025 row answers, with its own validity window.
Retrieval

Recall is three nets, not one

Semantic similarity is excellent at paraphrase and worst at exact tokens — which happens to be the thing you are most certain about when you search. So the lexical match and the date filter are unioned on top of it, and eight signals decide the order.

signalwhat it adds
Semanticcosine similarity against the embedding
Lexicaltoken match density, weighted 0.3
Importanceup to +0.15
Confidenceup to +0.15
Recencyexponential decay on creation or event date
Temporal fit+0.25 when validity matches the question's target; +0.20 for a deliberate historical lookup
Reinforcement+0.05 × ln(1 + times reconfirmed)
Sourcemanual +0.10 · chat +0.08 · connectors +0.05 · inference +0.02
Status penaltysuperseded −0.40 · disputed or uncertain −0.20 · retracted excluded
A recall traceThe question, the memories and facts it pulled, each with its source chip, then the answer
Open loops

The things you left open

A commitment is not a note. Send Priya the pricing one-pager before Thursday has a due date, a person, a project and a state — and it should still be true tomorrow without you re-reading the thread.

open ──► waiting ──► blocked ──► completed
  │                                cancelled
  └──────────────────────────────► stale
The lifecycle. Loops are folded into recall automatically, so an agent planning your day already knows what is outstanding.
Redaction

What never gets written down

Redaction runs on every ingestion stream, before anything is stored. API keys for OpenAI, Anthropic, AWS and GitHub, bearer headers and connection strings are replaced with deterministic masks. A credential that reaches the brain is a credential that reaches a prompt, so it never reaches the brain.

Authorization: Bearer sk-ant-…      ──►  [REDACTED_KEY]
postgres://user:hunter2@host/db     ──►  postgres://user:[REDACTED_PASSWORD]@host/db
Numbers

Measured, on a real machine

Want it on your Mac?

Free while it is in beta. Bring your own model — or run a local one and never leave the machine.

Join the waitlist→