Agents that reconcile against the number that was true then
Close gets restated. Forecasts get revised. An agent that reads only the current figure will answer last quarter's question with this quarter's number, confidently.
Restatement erases the question
Finance systems are designed to hold the correct number. The work is mostly about the difference between two numbers, one of which no longer exists.
The ledger is corrected in place
An adjustment lands and the prior figure is gone. Asked why the forecast moved, the agent can see where it is and not where it was — which is the only part of the question that mattered.
Two systems, one metric, different answers
Billing and the warehouse disagree by a rounding rule nobody wrote down. Both are cited as the source of truth, in different threads, by different agents.
The reason for an adjustment lives in a thread
The number is in the system. Why it was adjusted was explained once, in a message, and was never attached to the figure it explains.
Mostly valid time. Then three others.
Every application built on CortexDB is a different mixture of the same five memory jobs. That mixture is what makes this a different piece of software from the one next to it, even though the infrastructure underneath is identical.
Every memory carries when it was true and when you learned it
A revision is recorded as a revision — the prior value, the new one, and the moment the change became effective. Variance analysis stops being archaeology and becomes a query.
- Ask what the figure was on a date.
- Revisions keep their provenance instead of replacing it.
- A restated period stays answerable in both versions.
The last three times this variance appeared
What was investigated, what it turned out to be, and what was changed as a result.
A similarly named metric is not this metric
Selection weighs which definition and which system, not which label is closest.
One set of numbers across the fleet
The FP&A agent and the collections agent reconcile against the same record rather than two.
That is four of the five. The fifth — persistent memory, where an individual's preferences and corrections survive — leads for assistant and commerce agents instead. Same engine, different mixture.
The explanation is never in the same place as the number
The figure is in a system of record. The reason it moved is in a thread, a doc, or a comment on a ticket.
01 Wire the sources
Vendor connectors ship as extras on the connector package.
pip install 'cortexdb-connectors[slack,notion]'
02 Write the adjustment with the reason attached
The number already exists in the ledger. What is being stored is the thing the ledger has no field for.
curl -X POST http://localhost:3141/v1/experience \
-H 'Content-Type: application/json' \
-d '{
"scope": "ws:finance/close",
"modality": "observation",
"content": {
"kind": "text",
"text": "Q2 services revenue restated down 412k: two enterprise contracts recognised on signature rather than on delivery milestones. Prior figure stands for the originally published cut."
},
"context": { "observed_at": "2026-08-27T09:14:00Z" },
"idempotency_key": "close:2026-q2:restatement-02"
}'
03 Recall the version the question is about
The pack carries both the current figure and the record of what it replaced, so a variance answer can cite the change rather than assert it.
from cortexdb.v1 import V1Client
client = V1Client(api_url="http://localhost:3141", actor="agent:fpa")
pack = client.recall(
scope="ws:finance/close",
query=variance_question,
view="holistic",
include=["facts", "beliefs", "events"],
budgets={"max_tokens": 1000},
)
reply = llm.respond(variance_question, context=pack["context_block"])
pip install cortexdbai
or npm i cortexdbai — both ship the same client.
Full endpoint reference in the
docs.
Unreleased financials are material non-public information
Pre-close figures, restatements in progress and the reasoning behind them. For a public company, this is the corpus where an accidental disclosure is a regulatory event rather than an embarrassment.
CortexDB is a single container. It runs on your own hardware, inside your VPC, or air-gapped — with the embedding and generation calls pointed at a local model if nothing may leave at all.
docker run -d --name cortexdb -p 3141:3141 -v cortexdb-data:/data cortexdb/cortexdb:latest
Deployment options, model routing and the enterprise notes are on the download page.
The same infrastructure, a different mixture
Each of these leads with a different memory job, pulls from a different set of sources, and needs a different call. <a class="ul" href="../index.html">All of them, by job</a>.
Bring the workflow that gets it wrong.
One command starts a local instance with its own volume. The changelog carries every release behind it.