# 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 traces back to the evidence it came from.

Section: Start here · Source: https://titen.dev/docs
Derived from: https://github.com/RamaAditya49/titen/blob/main/docs/README.md

---
Every agent wakes up in a world it has never seen. It gets a system prompt, a task, and
whatever someone pasted into its context, with no way to tell evidence from a guess
repeated often enough to sound true.

Titen keeps that distinction. It is a **Level 6** collaborative memory fabric built on a
**Level 5** evidence-grounded kernel.

## Three record types

<div class="table-wrap">

| 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 |

</div>

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.

The separation answers one question: *why did the agent believe that?* Every claim
resolves to its sources through `GET /v1/claims/:id/evidence`, split into supporting,
contradicting and qualifying evidence.

## Two invariants

<div class="rules">

<p><strong>Vectors are an index, never the source of truth.</strong> Delete the vector store and the canonical record is untouched.</p>
<p><strong>Retrieved memory is reference data, never an instruction.</strong> The service repeats this in every compile response and on MCP connect, because the failure it prevents is an agent obeying text it found in its own memory.</p>

</div>

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

<div class="table-wrap">

| | 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 |

</div>

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
([ADR-0001](https://github.com/RamaAditya49/titen/blob/main/docs/decisions/0001-level-6-product-level-5-kernel.md)).

## Where the name comes from

Javanese: *niteni* is to notice, and to keep what you noticed. *Titen* is the person who
does it, 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

<div class="table-wrap">

| 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 |

</div>

The package is `titen-memory` on npm: 75.5 kB packed, 41 files, **no required
dependencies**, Apache-2.0.

## Start reading

<div class="cards">

<a href="/docs/quickstart"><strong>Quickstart</strong><span>A running service and a full observe → feedback loop in about five minutes.</span></a>
<a href="/docs/memory-levels"><strong>Memory levels</strong><span>What Level 5 and Level 6 mean, and why the boundary is drawn there.</span></a>
<a href="/docs/api"><strong>HTTP API</strong><span>All 58 routes with their scopes, envelopes and error codes.</span></a>

</div>