The memory is the thing residency law is about
Everything else in an agent stack is transient. The memory is the part that persists, crosses borders, and has to be deletable on request — which makes it the part the law is actually addressing.
Derived memory is where erasure quietly fails
Deleting a row is easy. The difficulty is everything that was computed from it and no longer looks like it.
A deletion request meets an embedding
The source record is removed. The vector derived from it, the summary that quoted it and the belief inferred from it are all still there, still retrievable, and no longer recognisably that person's data.
Consolidation crosses the border before anyone asks
Storage is regional; the model call that summarises it frequently is not. The moment a memory is enriched by an endpoint in another jurisdiction, its residency is a property of the network path rather than of the database.
“Where is it stored” is the wrong question
Residency obligations attach to processing as much as to storage. A regional bucket read by a global inference endpoint satisfies the diagram and not the requirement.
Mostly persistent. 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.
Preferences and corrections survive the session and the handoff
The durable, person-level record is the object the obligations attach to. Because it is explicit rather than emergent, it is also the thing that can be located, scoped and removed on request.
- A person's memory is one addressable thing, not a residue.
- A correction replaces what it corrected.
- What was derived from a memory is traceable to it.
When consent applied
Permissions change. What was lawful to process is a question about a date, not about the current setting.
One record per region
Agents in a region read the same memory rather than each holding a copy that has to be deleted separately.
Only what this request needs
Assembling less means processing less, which is the disposition regulators reward.
That is four of the five. The fifth — episodic memory, where action, reasoning and outcome stay attached — leads for customer support, clinical operations and IT service management instead. Same engine, different mixture.
Regional deployment, regional connectors
Connectors are self-hostable, so a source in one region can be synced by a worker in that region rather than by a managed service elsewhere.
01 Wire the sources
Vendor connectors ship as extras on the connector package.
pip install 'cortexdb-connectors[slack,notion]'
02 Write into a scope that has a jurisdiction
The scope is what makes a person's memory addressable — which is what makes it locatable, and removable, later.
curl -X POST http://localhost:3141/v1/experience \
-H 'Content-Type: application/json' \
-d '{
"scope": "ws:eu/customer-5502",
"modality": "observation",
"content": {
"kind": "text",
"text": "Customer requested German-language correspondence and asked that call recordings not be retained beyond the statutory minimum."
},
"context": { "observed_at": "2026-08-27T09:14:00Z" },
"idempotency_key": "crm:customer-5502:pref-0021"
}'
03 Recall inside the region
The instance the client points at is the instance that holds the data. There is no second hop to a service that assembles the pack somewhere else.
from cortexdb.v1 import V1Client
client = V1Client(api_url="http://localhost:3141", actor="agent:eu-support")
pack = client.recall(
scope="ws:eu/customer-5502",
query=customer_message,
view="holistic",
include=["facts", "beliefs", "episodes"],
budgets={"max_tokens": 800},
)
reply = llm.respond(customer_message, context=pack["context_block"])
pip install cortexdbai
or npm i cortexdbai — both ship the same client.
Full endpoint reference in the
docs.
The container is the residency boundary
One container, deployed in the region, with embedding and generation pointed at an endpoint in the same region. Residency becomes a property of where you ran it rather than a claim about a vendor's architecture.
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. All of them, by job.
Bring the workflow that gets it wrong.
Not the demo. The one that answered from the wrong version, or asked a question it had already been told the answer to.