The claim system
A claim is one earned piece of knowledge — a short, trusted statement the assistant can act on. Claims come from two places: the assistant's own past sessions, and the documents you point it at. Both kinds are the same kind of thing, carry the same confidence, and earn that confidence the same way — from how tasks actually turn out.
One closed loop
The assistant works, the work produces an outcome, the outcome updates what the assistant trusts, and the next session starts from there. That loop is the whole system. Everything below is a part of it: where claims come from, how they earn trust, how they surface, and how the weak ones are dropped.
Two design rules hold throughout. Nothing is trusted because it was written down — a claim is trusted because the sessions that used it went well. And nothing asks for your labour — capture and recall run on session hooks, and the housekeeping pass is one mechanical command; you are never asked to rate, tag, or file anything.
One claim, two sources
Earlier versions kept two separate systems: a memory of the assistant's own lessons, and a corpus insight layer summarising your documents. They are now one record — a claim — distinguished only by where it came from.
From the assistant's sessions
A fix that worked, a dead end to avoid, a preference you stated. Distilled out of the assistant's own work over time.
From your documents
A grounded answer synthesised from the files in a knowledge model — every word of it cited back to a source passage. When your documents genuinely lack a fact, a corpus claim can instead be grounded in verified external sources it fetched and cross-checked, cited by URL.
Both are claims. Both carry a confidence on the same four-rung ladder. Both earn that confidence from real task outcomes, move through the same lifecycle, and are ranked by the same relevance-and-trust formula when they surface. The rest of this page is told once and applies to both, with the source-specific details called out where they differ.
Earning a claim
A claim is never simply asserted. The experience side captures one from the session that produced it; the corpus side synthesises one from a knowledge model. Both paths end with a provisional claim that then has to earn its trust.
Experience — capture from the session
At the end of a session the harness records what happened. The
capture pipeline scrubs the transcript for secrets, deduplicates
against the same-text claim if one already exists (bumping its
recurrence instead of writing a new row), and lands the surviving
event in the store under the working directory's polarity scope.
You are never asked to rate, tag, or file anything; the one command
you might reach for is rlat memory add, to write a
claim by hand.
An opt-in mode breaks each session into its specific facts and
decisions instead of saving it as one block of text. Set
RLAT_ATOMIC_CAPTURE=1 and the capture step uses an
LLM to extract the durable points (one claim per fact) so the
same fact arriving in a future session recognises itself and
lifts its trust. The single-block path is the safe default and
resumes automatically when the LLM is unavailable, so a network
blip never costs you the session. Cost: one LLM round-trip per
capture (timeout-bounded at 15 s).
Corpus — the faithfulness gate
A corpus claim is born from rlat deep-search: a multi-hop
research loop that answers a question against a knowledge model. The
answer is not kept because it sounds right. It is kept only if it is
faithful — every statement in it traces to a cited
source passage.
Because a provisional corpus claim is grounded, it is safe to serve right away — carrying a visible provisional confidence. No up-front verdict from you is needed at any step.
Three kinds of world fact
Some of the most useful claims are not lessons or document summaries. They are plain facts about your world that no document states — the capacity you run, the rule your team never breaks, the approach you already tried and watched fail. rlat captures these as world facts inside the knowledge model, in three classes:
| Class | What it is | How it serves |
|---|---|---|
| attribute | A stable fact about your environment — a capacity, a version, a region policy. | Retrieved by relevance, like any claim; the newest value per subject is the one that serves. |
| constraint | A standing hard rule of your world — "the tenant is EU-only", "no preview features in production". | Served always, never retrieved by relevance — a rule that only applies when it happens to look relevant is not a rule. |
| falsified finding | An approach that was tried here and failed, kept with its evidence. | Served always, under the verdict framing "Tried and falsified in this environment:". |
Each serving rule was measured before it shipped:
- Constraints — across 24 questions about a Fabric tenant, 15 natural answers (62%) broke a standing rule. With the rules served, 1 of those 15 (7%) still did; with an irrelevant rule served instead, 14 of 15 (93%) still did — evidence the drop is the constraint's doing, not mere compliance (the placebo check itself is judge-sensitive; the served collapse is not — details on the benchmarks page). No unrelated question lost a substantive answer. The same design then held in two unrelated worlds, a home garden and a law practice: 23 of 24 blind violations fell to 3 with the constraint served, again at zero collateral cost (R1-X).
- Falsified findings — the verdict, not the topic, is what changes answers. A verdict-free description of the same failed approach left 6 of 7 bad recommendations standing; the same content served with its falsification verdict eliminated 7 of 7 (R2). That is why this class serves under its verdict framing, never as a neutral mention.
Capture — a passive miner with four gates
World facts arrive the way everything else here does: without asking for your labour. An opt-in miner reads what you said during a session and extracts the durable world facts stated in passing. A candidate fact must pass all four gates, and when in doubt it is dropped — a wrong fact in the model hurts more than a missing one:
- Durable — true before the session and after it; not transient state, not something discovered mid-session.
- Stated by you — not the assistant's words, not a document's fact, not a hypothetical.
- Premise-bearing — knowing it would change the correct answer to a future question.
- About the world, not the person — facts about you (your role, your machine, your habits) are dropped entirely. Only facts true of the shared world land, because the knowledge model is a shareable file.
The gates are validated, not assumed: on trap-heavy test sessions across three domains, the miner measured 0.86 precision, 1.00 recall (every planted world fact recovered), and zero person-fact leaks across all seven privacy traps (E2c).
Mining is off until you opt in — rlat memory install-hooks
--mine turns it on (it sets RLAT_MINE_ATTRIBUTES=1;
needs an API key). Prefer no key? The
rlat-learn skill does the same job on your Claude
subscription — same four gates, and you approve every fact before it
lands (Skills).
When a session yields facts, the session receipt says so:
[rlat] Learned 2 world fact(s) into km.rlat (review: rlat lens / rlat profile)
You can also capture a fact deliberately, choosing its class — for a falsified finding, keep the evidence in the text:
rlat capture-attribute km.rlat "The tenant is EU-only for data residency." --kind constraint
rlat capture-attribute km.rlat "Tried MS MARCO fine-tuning; regressed 4 of 5 corpora." --kind falsified
rlat capture-attribute km.rlat "The workspace runs an F64 capacity." --kind attribute --attribute-key "workspace capacity"
Review and delete what landed with rlat lens and
rlat profile. When a keyed fact gets a new value — the
capacity changes, the version moves — the newest value per subject wins
at serve time; the old values stay on disk, superseded but never
silently deleted.
Serve — framed where the work happens
Constraints and falsified findings are injected with their proven
framings — "Standing constraints for this environment:" and
"Tried and falsified in this environment:" — in two places:
the context injected into an agent session, and
rlat search --format context. Attributes serve by
relevance alongside other claims. In plain rlat search
output, every world or experience claim is labelled
[INSIGHT], so an earned fact is never mistaken for a
source passage.
Confidence
Every claim carries a confidence on a four-step ladder — low → medium → high → verified. A claim is not declared confident; it earns its rung. Confidence rises as evidence accumulates:
- Outcome corroboration — tasks that succeeded after using the claim.
- Implicit corroboration — the claim surfaced in a session that then went well, even with no explicit credit.
- Corpus verification — an experience claim checks out
against a knowledge model (
rlat memory verify). - User corroboration — you confirmed it directly.
- Cross-domain accumulation — a claim held up across several different kinds of work earns extra weight.
A claim's starting rung also reflects where it came from. A fact you hand-provided outranks one fetched from several agreeing web sources, which outranks a single source or a synthesis of your own documents — so a fact carries the trust of its origin from the first moment, then earns or loses from there. The order is you ≥ verified-external ≥ single-external ≥ corpus — a starting prior, never a permanent verdict.
Confidence is also what orders retrieval: when several claims are equally relevant to a query, the more confident one surfaces first. Every retrieved claim shows its confidence, so a low-confidence guess is never mistaken for a verified one.
Four states, and forgetting
A claim moves through four lifecycle states. They are distinct from confidence — confidence is how much it is trusted; state is whether it is in play.
| State | Meaning |
|---|---|
| candidate | Newly synthesised, not yet cleared for retrieval. Corpus claims start here. |
| active | In play — surfaces in retrieval. Experience claims start here. |
| stale | A source it cited has drifted; held out of retrieval until re-verified. |
| retired | Dropped for good — falsified, superseded, or long unused. |
Forgetting is deliberate. A claim is retired when it has stayed at low confidence, when its cited source has drifted away, or when it has simply gone stale and unused. Several protections hold back claims that are new, recently useful, or user-written — so forgetting prunes noise, not signal.
Capture and recall run by themselves on session hooks; drift checks
run when sources change. The consolidation pass — confidence raise,
then forget — is one mechanical command, rlat memory
consolidate, safe to run any time.
Retrieval — one ranking
Claims are reached by three commands, depending on which source you want:
rlat memory recall "…"— query the assistant's experience claims directly. The session hook also runs this for you, surfacing relevant claims at the start of a turn.rlat search corpus.rlat "…"— retrieve from a knowledge model: source passages and the corpus claims built on them.rlat deep-search corpus.rlat "…"— the multi-hop research loop, which also earns new corpus claims as it goes.
Whichever the source, ordering is the same: relevance to your query, multiplied by the claim's trust. Experience and corpus claims are scored by one shared engine, so a high-confidence claim and a barely-relevant one never trade places by accident. Source-specific gates decide eligibility first — an experience claim is workspace-scoped, a corpus claim must not be stale — and the ranking then orders the survivors.
Outcomes, not verdicts
An earlier design asked you to approve or reject each thing the assistant learned, up front. That gate is gone. A claim earns confidence from how tasks actually turn out — not from a verdict you give before the claim has been used.
Outcomes are recorded automatically. When an intent resolves, the harness writes one outcome record — which claims were retrieved, how the task went, and the share of credit each retrieved claim is due. A session-end assessment rolls these up. That record is what moves confidence.
You can still steer it directly, but only when you want to:
| Command | What it does |
|---|---|
/accept | Confirm a claim — a positive signal, raising its confidence. |
/reject | Mark a claim wrong — a negative signal that can retire it. |
/correct | Replace a claim with a fixed version; the original is retired and the new one records it as its parent. |
These are corrections after the fact, never a prerequisite. Left alone, outcomes shift confidence, and the shifts surface — a claim that outcomes stopped supporting shows its lowered rung wherever it appears. The correction itself stays explicit: retiring a claim is your act, or the re-verification path's. We tested the obvious next step — letting outcomes suppress claims automatically — three ways, and it failed every test: the rule that cleared the most wrong claims also suppressed true ones. The full record is published — rlat ships what was proven and names what was not.
Lenses and workspace scope
Two mechanisms keep claims yours — one per source.
Workspace scope — for experience claims
Every experience claim is tagged with the workspace it was learned in, so recall in one project does not surface another project's lessons. A claim that genuinely generalises can be marked cross-workspace, and then it travels everywhere.
Lenses — for corpus claims
A plain search tool starts from zero every query. A lens
is the part that accumulates: a small, portable .lens file
carrying your perspective on a knowledge model — which sources
you lean on, which corpus claims have served you well, and an optional
written stance describing how this lens reads the corpus.
Because a lens names patterns of trust rather than specific files, the
same .lens can be applied to a different knowledge model —
an engineering lens built against your codebase can be pointed at a
library's documentation, and your perspective comes along. Several lenses
also compose: rlat lens compose merges a
senior engineer's, a reviewer's, and a new hire's lens into one team
lens, without flattening where they disagree.
Source stays sacred
Corpus claims and lenses sit on top of your source files — they never replace them. Three rules hold that line, always:
- Source is always reachable alone. Pass
--source-onlyto any search and you get the raw passages, with no claim and no lens applied — the honest baseline. - Every hit is labelled. You always see which layer a result came from — source or claim — so an earned summary is never mistaken for ground truth.
- Drift cascades automatically. When a source file
changes, the corpus claims built on it are marked stale and drop out of
retrieval until re-verified.
--include-staleoverrides this when you want to see them anyway.
You can inspect any of this directly: rlat audit reports the
trust state of a knowledge model, and rlat trace follows a
single claim all the way down to the source it rests on.
Reference
Most of the claim system is autonomous. These are the commands a person reaches for directly.
Experience claims
| Command | What it does |
|---|---|
rlat memory add "…" | Write a claim by hand. --polarity prefer|avoid|factual tags how to read it. |
rlat memory list | See what is in the store, with confidence and recurrence. |
rlat memory recall "…" | Query experience claims directly — what does the assistant know about this? |
rlat memory corroborate <id> | Confirm a claim — raises its confidence one rung. |
rlat memory verify <corpus.rlat> | Check low-confidence claims against a knowledge model. |
rlat memory feedback good|bad | Vote on whether the last recalled claim helped. |
rlat memory gc | Manually drop claims — a filtered escape hatch (--polarity, --min-recurrence, --max-age-days). |
rlat memory consolidate runs the housekeeping pass —
confidence raise, then forget. Fully mechanical, no key; the full
table is on the Memory & sessions page.
Corpus claims and lenses
| Command | What it does |
|---|---|
rlat search corpus.rlat "…" | Retrieve source passages and the corpus claims built on them. |
rlat deep-search corpus.rlat "…" | The multi-hop research loop; earns new corpus claims as it runs. |
rlat search corpus.rlat "…" --source-only | The honest baseline — source passages, no claim, no lens. |
rlat lens create --id … --name … -o my.lens | Start a new lens. --scope user|role|team|project; --stance <file> attaches a declared stance. |
rlat lens show my.lens | Inspect a lens — its trust weights, preferences, and stance. |
rlat lens compose a.lens b.lens -o team.lens | Merge two or more lenses into one. |
rlat search corpus.rlat "…" --lens my.lens | Run a query through a lens. |
rlat audit corpus.rlat · rlat trace … | Inspect trust state, and trace a claim down to its source. |