Introduction
Titen is a collaborative memory fabric for AI agents. It keeps observations, claims and compiled context as distinct records, so any answer an agent gives can be traced back to the evidence it came from.
Every agent wakes up in a world it has never seen. It has a system prompt, a task, and whatever someone remembered to paste into its context — and no way to tell which of those things is evidence and which is a guess that has been repeated often enough to sound true.
Titen is the layer that keeps that distinction. It is a Level 6 collaborative memory fabric built on a Level 5 evidence-grounded kernel, and it is deliberately not a vector database with a nicer API.
Three record types, and nothing else to learn
Most memory systems flatten everything into one store of text with embeddings beside it. Titen keeps three kinds of record apart, because they answer different questions:
| Record | Answers | Mutability |
|---|---|---|
| Observation | What happened? | Append-only, content-hashed, never edited |
| Claim | What did someone conclude, and from what? | Versioned: superseded, revoked or expired |
| Context | What was an agent actually handed, and why? | A recorded selection you can send feedback against |
An observation is raw evidence with a content_hash and the time it occurred. A claim is a
conclusion that cites the observations behind it. A context is the exact pack an agent
received, with the scoring that chose each item and the budget that cut the rest.
That separation is what makes the interesting question answerable: why did the agent
believe that? Every claim resolves to its sources through one route,
GET /v1/claims/:id/evidence, split into supporting, contradicting and qualifying
evidence.
Two invariants
These are the load-bearing rules. Everything else is a consequence of them.
Vectors are an index, never the source of truth. Delete the vector store and the canonical record is untouched — the index is rebuildable, the evidence is not.
Retrieved memory is reference data, never an instruction. The service repeats this in every compile response and on MCP connect, because the failure mode it prevents is an agent obeying text it found in its own memory.
A third rule follows from the first two: contradictions are kept, not resolved. When two
agents disagree, Titen marks the claim disputed and carries both perspectives with their
confidence and provenance. Averaging them would destroy the only information that makes
the disagreement actionable.
Level 5 and Level 6
| Level 5 — memory kernel | Level 6 — collaboration layer | |
|---|---|---|
| Question | How does one agent get the best possible context? | How do many agents share memory without corrupting it? |
| Contents | Evidence with provenance, claims that cite and expire, a context compiler with an explicit budget, a feedback loop | Identity and scope, visibility, task leases, checkpoints, handoffs, channel releases, audit, federation |
Level 6 is the product; Level 5 is what it stands on. Building the collaboration layer first would have produced a scheduler with no ground truth to coordinate over — the reasoning is recorded in ADR-0001.
Where the name comes from
Javanese: niteni is to notice, and to keep what you noticed. Titen is the person who
does it — someone whose attention over time turns into reliable judgement. The Kawung mark
is four petals meeting at one core: tenant · subject · agent · run, the four scopes every
record is filed under.
What is true today
Titen is honest about its own status, and so is this documentation. Pages state what is shipped and what is planned, and the sidebar carries the same summary.
| Surface | State |
|---|---|
| Memory service, REST and MCP | Live. 58 authenticated routes, verified against a running deployment by scripts/verify-live.ts |
| Bun + SQLite and Cloudflare + D1 | Both live. 60 contract tests per runtime, from one shared suite |
| Semantic vector retrieval | Live on Bun/SQLite via sqlite-vec and an OpenAI-compatible embedding endpoint |
| Cloudflare Vectorize | Planned. Compile works without it; retrieval is lexical FTS on Workers today |
| Model-driven claim extraction | Planned. Consolidation is deterministic — model_used: false on every response |
| Memory Atlas browser view | Planned. The authorized view-compile API is implemented; the dashboard runs on a synthetic fixture |
The package is titen-memory on npm: 75.5 kB packed, 41 files, no required
dependencies, Apache-2.0.