How it works
One database holds the money and the memory.
Most agents bolt a vector store onto a transactional database and hope the two agree. Knot keeps a serializable double-entry ledger and four memory stores in a single CockroachDB cluster, so a fact can be recalled and money can be moved inside the same transaction. Everything below is read from the running cluster when this page loads — it cannot drift from what is actually deployed.
cluster
…
region
…
round trip
…
40001 handled
…
The invariant
Four kinds of memory, not one
A single embedding table would answer “what did we talk about” and nothing else. These four are separated because they are written at different times, read by different queries, and forgotten on different schedules.
Working
… rowsThe current conversation, turn by turn.
- written
- Every message, with the memories that were injected into it.
- read
- Replayed as context on the next turn.
Deliberately disposable — it expires on its own.
Episodic
… rowsThings that happened, as events.
- written
- After a transaction, and whenever the agent observes something.
- read
- By vector similarity to what you just said.
Insights the agent generated are stored here too, so it can recall its own past observations.
Semantic
… rowsDurable facts about people, merchants, habits and commitments.
- written
- Distilled from conversation by a background pass.
- read
- By vector similarity, filtered by confidence.
Near-duplicates reinforce an existing fact rather than piling up copies; contradictions supersede rather than delete.
Procedural
… rowsRules you taught it — how you want things done.
- written
- When you say something like "always split rent three ways".
- read
- By similarity between the rule's trigger and your message.
The instruction is embedded alongside the trigger, because trigger phrases alone match too little.
Vector search is a SQL operation here
Embeddings are a VECTOR(512) column with a native index, so similarity search participates in transactions like any other query. That is what lets a new fact be compared against existing ones and merged inside the write — a bolt-on vector database cannot offer that, because the comparison and the write would be in different systems.
Every index is prefixed by user_id. One person's vectors are their own partition, so a similarity search never scans another account's memories — the multi-tenant version of the problem, solved by the index rather than by a filter applied afterwards.
Forgetting is a feature, and the database does it
Raw conversation is disposable; what survives is what was distilled from it. Row-Level TTL expires it without a cron job, a worker, or a cleanup script anyone has to remember to run.
Serializable, and it matters
Settling a debt reads the outstanding balance and writes the settling entry in onetransaction. Under a weaker isolation level two concurrent settlements would both read the same balance and both commit — the classic write skew, and it would silently pay someone twice. CockroachDB's SERIALIZABLE default makes one of them fail with a retry error instead.
Watch ten concurrent settlements fight it outWhat runs where
- database
- CockroachDB Cloud,
aws-ap-south-1 - aws
- Containerised on App Runner from ECR, CSV exports to S3, structured JSON logs to CloudWatch.
- models
- Provider is swappable: OpenAI or Amazon Bedrock behind one protocol, both emitting 512-dimension embeddings so the vector columns never need migrating. Bedrock's generative models are gated on this account, so inference runs on OpenAI today and the Bedrock path stays one environment variable away.
- voice
- Two engines. On-device speech is free and turn-based; OpenAI Realtime over WebRTC is sub-second and interruptible, and bills per minute — so it is opt-in rather than default.
The rule the whole thing rests on
SQL and Python compute every number. The model only chooses which already-true fact to say, and how to phrase it. A model that is never asked to do arithmetic cannot get arithmetic wrong — so no figure on any dashboard was generated by a language model, including the ones written in sentences.