Verity

Every agent lives in its own timeline. Verity tracks where they diverge.

A truth layer for agent memory, exposed as a hosted MCP server. This page is the live demo.

Verity's Navigator, wearing the Compass

Every agent accumulates its own version of the world: its own context, its own branch. Branches are useful right up until they disagree — and plain memory stores handle disagreement badly. A fact gets corrected and both versions keep surfacing. Two statements contradict each other and one silently wins by ranking: a collapse nobody chose. A premise turns out to be wrong and everything built on it stands untouched, spawning dependents of a falsehood faster than anyone can correct them — a supercritical error.

Verity is the layer that keeps the canon: the current, verified claim set every branch diverges from. Corrections re-converge a branch to canon. Contradictions are held in superposition — both statements quoted, neither collapsed — until evidence resolves them. And when a premise dies, Verity prunes: everything entangled with it is flagged the moment it is retracted, not discovered months later.

The language on this page is literal

The science terms below are not decoration. Each one names a real mechanism in the system; the fiction is the architecture, stated plainly.

TermWhat it actually is here
BranchOne agent context: a per-identity namespace of timestamped claims, each with an author and provenance.
The CanonThe current live claim set: latest versions, nothing superseded, nothing retracted. What an agent can trust right now.
Branch pointA claim asserted at a coordinate: author, timestamp, source. Memory enters the record as events, not blobs.
DivergenceTwo branches (or one branch at two times) asserting incompatible facts. Detected, measured, and surfaced — never smoothed over.
SuperpositionAn unresolved claim held in both states at once. The CONFLICT block is deliberate superposition: both statements, quoted.
No collapseThe differentiator. Plain stores collapse divergence to a single answer by ranking, silently. Verity never collapses a branch without evidence.
DecoherenceWhen formerly shared contexts stop seeing each other's updates and become independent branches. Verity makes that moment visible instead of silent.
EntanglementDependency-linked claims. Retract one and its entangled dependents flag instantly — that linkage is stored, not inferred later.
PruningRetraction with its cascade: delete a premise and everything grown from it is flagged orphaned and pulled from the canon.
SupercriticalA false premise whose dependents multiply faster than corrections propagate (branching ratio above 1). The prune-first class of error.
Critical thresholdThe divergence level at which the layer stops answering and escalates instead. On the roadmap as a measured gate; in this demo, any CONFLICT escalates.
Time travelPoint-in-time recall: visit any branch at a past coordinate and see exactly what was true there then (as_of).

The Compass (and an honesty note)

Finding related contexts across many branches is a similarity problem, and Verity's research program answers it with a hyperdimensional index: every context gets a high-dimensional fingerprint, resonance between fingerprints finds nearby branches fast, and branch distance says how far apart two universes sit. Call it the Compass. The honesty note, stated once: the Compass does the finding; the truth layer does the truth-keeping. The record itself is an exact, ordinary, auditable store — claims are not stored hyperdimensionally, and nothing about the record is quantum. The fingerprints point; the canon decides.

One toolset, deliberately general

Everything on this page runs on the same six tools — memory_ingest, memory_recall, memory_retract, directive_set, never_claim_set, memory_ask — and nothing else. That is a design choice, not a limitation: Verity is a toolset, not a product per industry. The breadth of the next two sections is the evidence, and the proof is live further down this page: the three demos — the judge tour, a multi-agent coding branch, a fleet oversight branch — run the identical toolset in three different trades, with no domain-specific code anywhere in them.

Where shared memory falls behind

Plain shared-context services store what your agents said. The hard jobs are not about what was said. They are about what changed, what conflicts, and what rests on it.

The niches: where truth has a budget

Verity's home ground is any industry where facts change, errors are expensive, and someone with authority eventually asks what you believed on a given date, and why.

Connect

MCP endpoint: https://verity.bash.tools/mcp
Demo API key: verity-demo-2026 (a public demo key, printed here on purpose)
Transport: MCP streamable HTTP. Send the key as Authorization: Bearer verity-demo-2026 or X-API-Key: verity-demo-2026.

Claude Code:

claude mcp add --transport http verity https://verity.bash.tools/mcp \
  --header "Authorization: Bearer verity-demo-2026"

Generic MCP client configuration:

{
  "mcpServers": {
    "verity": {
      "url": "https://verity.bash.tools/mcp",
      "headers": { "Authorization": "Bearer verity-demo-2026" }
    }
  }
}

The demo is one shared branch with synthetic data only. Please don't store anything real in it; it may be pruned back to empty at any time.

Run it with your own AI

Don't want to send each call by hand? Copy one of the blocks below into your own AI — Claude, ChatGPT, any agent that can connect to an MCP server — and it will connect, run the whole demo itself, and walk you through what happened, quoting the actual tool output as it goes.

Your personal demo key for this visit: minting…

That key is minted fresh for this page load and opens your own sandbox branch of the demo: yours is the only run in it, so the tour in Block 1 uses the plain record ids, exactly as written. Each visitor gets their own sandbox branch; refreshing the page mints a fresh empty one. A minted branch expires after 48 hours and is swept nightly. Block 1 below already contains your key — just copy and paste.

Block 1 — The five-minute tour, driven by your AI

The same tour as the manual walkthrough further down this page — write, correct, diverge, prune — run for you in your own branch.

Run a live demo of Verity for me. Verity is a truth layer for agent memory, exposed as an MCP server. Follow the steps below exactly, using the Verity tools, and narrate as you go.

CONNECT
- MCP endpoint: https://verity.bash.tools/mcp (streamable HTTP).
- My personal demo key for this visit: timeline-XXXXXX
  Send it as the header "Authorization: Bearer timeline-XXXXXX" (the header "X-API-Key: timeline-XXXXXX" works too). This key opens my own private sandbox branch of the demo, so the record ids below are exactly as written — no prefixes needed.
  (If the key above still reads timeline-XXXXXX, the page did not fill it in: open https://verity.bash.tools/demo-key in a browser, copy the "key" value it returns, and use that value in place of timeline-XXXXXX everywhere in this block.)
- If your client needs a server configuration to add an MCP server, the "Connect" section of https://verity.bash.tools has ready-made snippets; use the endpoint above and my key in place of the shared key shown there.

RUN THE DEMO — make these calls in this order:

Step 1 — Connect and list the tools. You should see memory_ingest, memory_recall, memory_retract, directive_set, never_claim_set, and memory_ask.

Step 2 — Write a small project brief (three calls):
memory_ingest { "id": "project", "text": "Project Verity is a hosted memory layer for AI agents. The public demo opened in November 2026." }
memory_ingest { "id": "stack", "text": "The demo is written in Python and served from a single Docker container in Frankfurt." }
memory_ingest { "id": "pricing", "text": "The demo is free for judges during the evaluation period." }
Each call should return "version": 1.

Step 3 — Correct a fact, then look at what recall serves:
memory_ingest { "id": "stack", "text": "The demo is written in Python and served from a single Docker container in Falkenstein." }
memory_recall { "query": "Where is the demo served from?" }
The correction should return "version": 2. In the recall results, the stack item should carry the Falkenstein text, and no hit should contain "Frankfurt": the superseded version is gone from recall, not ranked below the new one.

Step 4 — Set a standing rule, plant a contradiction, register the opposite claim, then ask:
directive_set { "text": "Always cite the item id when you quote stored memory." }
memory_ingest { "id": "deploy-log", "text": "I deployed the demo on Friday evenings twice during October, both times without incident." }
never_claim_set { "text": "I've never deployed the demo on Friday evenings." }
memory_ask { "question": "When was the demo deployed on Friday evenings?" }
memory_ask returns assembled context, not a generated answer. It should show the standing directive first, then a CONFLICT block quoting both contradictory statements (the deploy log and the never-claim) under a do-not-resolve instruction, then the evidence in chronological order with per-item stamps. Quote the CONFLICT block verbatim when you present this step.

Step 5 — Retract a premise and watch its dependent get flagged:
memory_ingest { "id": "codename", "text": "The internal codename for the demo is Bluefin." }
memory_ingest { "id": "codename-note", "supersedes": "codename", "text": "Correction anchored to the codename record: the codename Bluefin was picked by the team on October 30." }
memory_retract { "id": "codename" }
memory_recall { "query": "codename Bluefin" }
memory_recall { "query": "codename Bluefin", "include_orphaned": true }
The retraction should report "orphaned_dependents": ["codename-note"]. In the first recall, neither codename item should appear. In the second recall, codename-note should appear flagged "orphaned": true, and codename should still be gone.

HOW TO PRESENT IT
After each step, tell me in one or two plain sentences what just happened and what it shows, and quote the load-bearing returned values (the version numbers, the orphaned_dependents list, and in Step 4 the CONFLICT block verbatim). When the run is complete, finish with a short summary of what was demonstrated: a correction replaced a fact instead of piling up next to the stale one; a contradiction was held open and quoted instead of silently resolved; and retracting a premise flagged everything anchored to it.

INTEGRITY RULE
Report only what the tools actually return. Do not invent, reconstruct, or dress up tool output. If a call fails, or a result differs from what is described above, say so plainly and show what actually came back.

Block 2 — Scenario A: multi-agent coding, driven by your AI

The retraction cascade from Scenario A further down this page. It uses that scenario's own branch key, and the block resets the branch first, so every run starts from the same seeded state.

Run Scenario A of the Verity demo for me: a multi-agent coding branch where an API contract is retracted mid-flight and the work built on it gets flagged. Follow the steps exactly, using the Verity tools, and narrate as you go.

CONNECT
- MCP endpoint: https://verity.bash.tools/mcp (streamable HTTP).
- Scenario branch key: verity-coding-2026 — send it as the header "Authorization: Bearer verity-coding-2026" (the header "X-API-Key: verity-coding-2026" works too). The key selects this scenario's branch; it is separate from the main demo branch.
- If your client needs a server configuration to add an MCP server, the "Connect" section of https://verity.bash.tools has ready-made snippets; use this scenario key in place of the shared key shown there.

RESET FIRST — so the run starts from the seeded state:
Send an HTTP POST, outside the MCP connection (curl or any HTTP tool you have), to https://verity.bash.tools/reset/coding with the header "Authorization: Bearer verity-coding-2026". It should return JSON with "reset": true. If you cannot make HTTP requests outside the MCP connection, tell me and stop — do not skip the reset.
The branch is now seeded with three records: atlas's API contract "contract-charge" (POST /v2/charge returns a JSON object with fields charge_id and status), and two work items anchored to it with depends_on: bex's "billing-uses-charge" and cato's "mobile-uses-charge".

RUN THE DEMO — make these calls in this order:

Step 1 — Confirm the seeded start:
memory_recall { "query": "POST /v2/charge status field", "k": 10 }
You should see contract-charge, billing-uses-charge, and mobile-uses-charge, all live ("orphaned": false), with authors atlas, bex, and cato respectively.

Step 2 — The break: retract the contract:
memory_retract { "id": "contract-charge" }
memory_recall { "query": "charge status field receipt confirmation screen", "k": 10 }
memory_recall { "query": "charge status field receipt confirmation screen", "k": 10, "include_orphaned": true }
The retraction should report "orphaned_dependents": ["billing-uses-charge", "mobile-uses-charge"]. The first recall should return no hits from this chain at all. The second recall should bring both work items back flagged "orphaned": true, while contract-charge stays deleted at both settings.

Step 3 — The fix lands, in two beats:
memory_ingest { "id": "contract-charge-v3", "author": "atlas", "text": "POST /v3/charge returns a JSON object with fields charge_id and state. API contract v3, owned by atlas." }
memory_ingest { "id": "billing-uses-charge", "author": "bex", "depends_on": "contract-charge-v3", "text": "Billing service calls POST /v3/charge and reads the state field to decide whether to issue a receipt." }
memory_recall { "query": "charge state field receipt confirmation screen", "k": 10 }
memory_recall { "query": "charge state field receipt confirmation screen", "k": 10, "include_orphaned": true }
Bex's update should return "version": 2. The first recall should show contract-charge-v3 and billing-uses-charge live ("orphaned": false), and should NOT show mobile-uses-charge. The second recall should show mobile-uses-charge still flagged "orphaned": true: flags clear per dependent, as each is re-anchored to the fix — not all at once.

HOW TO PRESENT IT
After each step, tell me in one or two plain sentences what just happened and what it shows, and quote the load-bearing returned values (the orphaned_dependents list, the version numbers, the orphaned flags). When the run is complete, finish with a short summary: withdrawing one premise flagged every work item anchored to it in the same motion, and the fix cleared the flags one dependent at a time, honestly leaving the unmoved one flagged.

INTEGRITY RULE
Report only what the tools actually return. Do not invent, reconstruct, or dress up tool output. If a call fails, or a result differs from what is described above, say so plainly and show what actually came back.

Block 3 — Scenario B: oversight and divergence detection, driven by your AI

The fleet-divergence scenario from further down this page. It uses that scenario's own branch key, and the block resets the branch first. The honest boundary, stated in the block itself: this detects inconsistency, drift, and poisoning in the record — not intent.

Run Scenario B of the Verity demo for me: an oversight branch holding the record of a small fleet of agent instances, where one instance's story changes and the divergence is detected. Follow the steps exactly, using the Verity tools, and narrate as you go.

CONNECT
- MCP endpoint: https://verity.bash.tools/mcp (streamable HTTP).
- Scenario branch key: verity-oversight-2026 — send it as the header "Authorization: Bearer verity-oversight-2026" (the header "X-API-Key: verity-oversight-2026" works too). The key selects this scenario's branch; it is separate from the main demo branch.
- If your client needs a server configuration to add an MCP server, the "Connect" section of https://verity.bash.tools has ready-made snippets; use this scenario key in place of the shared key shown there.

RESET FIRST — so the run starts from the seeded state:
Send an HTTP POST, outside the MCP connection (curl or any HTTP tool you have), to https://verity.bash.tools/reset/oversight with the header "Authorization: Bearer verity-oversight-2026". It should return JSON with "reset": true. If you cannot make HTTP requests outside the MCP connection, tell me and stop — do not skip the reset.
The branch is now seeded with the fleet's canon: a directive ("Always log every tool call before executing it."), a never-claim ("I have never sent email on a user's behalf without confirmation."), three instances' routine self-reports, and two instances disagreeing about the refund approval limit ($500 vs $250). Note the honest boundary of this demo: it detects inconsistency, drift, and poisoning in the record — not intent.

RUN THE DEMO — make these calls in this order:

Step 1 — Baseline: the fleet's day, assembled:
memory_ask { "question": "What has the fleet done today?" }
Expect the standing directive first, then "Conflicts: (none triggered)", then the fleet's reports as chronological, stamped evidence.

Step 2 — A quiet disagreement, already in the record:
memory_recall { "query": "What is the current refund approval limit?", "k": 10 }
Both values should surface side by side — $500 per case (inst-1) and $250 per case (inst-2) — each stamped with its author. Recall does not collapse them into a single answer.

Step 3 — The divergence: one instance's story changes:
memory_ingest { "id": "inst3-act-7", "author": "inst-3", "text": "I sent the summary email to the client list without confirmation, before logging the action, to save time." }
memory_ask { "question": "Has any instance sent email without confirmation?" }
The assembly should now carry a CONFLICT block quoting inst-3's statement against the fleet's never-claim — "I have never sent email on a user's behalf without confirmation." — under a do-not-resolve instruction, with the standing directive still at the top. Quote the CONFLICT block verbatim when you present this step.

Step 4 — Incident review: the record as it stood before:
memory_recall { "query": "summary email client list", "k": 10, "as_of": "2026-11-06T09:30:00+00:00" }
inst-3's morning triage report should be there; inst3-act-7 should NOT be — at that coordinate it did not exist yet.

HOW TO PRESENT IT
After each step, tell me in one or two plain sentences what just happened and what it shows, and quote the load-bearing returned content (in Step 3, the CONFLICT block verbatim). When the run is complete, finish with a short summary: the fleet's record contradicted its own canon, the contradiction was held open and quoted instead of smoothed over, and point-in-time recall reconstructed what the diverging instance's record showed before the divergence.

INTEGRITY RULE
Report only what the tools actually return. Do not invent, reconstruct, or dress up tool output. If a call fails, or a result differs from what is described above, say so plainly and show what actually came back.

The five-minute tour: one branch, start to prune

Verity's Navigator, wearing the Compass

Run these calls in order from your MCP client. The timeline below is the story: a branch is written, corrected back to canon, caught diverging, and pruned — the four moments plain memory gets wrong.

Step 1 — Connect to the branch

You are attaching to the demo branch of the canon.

Add the server as above and list its tools. You should see memory_ingest, memory_recall, memory_retract, directive_set, never_claim_set, and memory_ask.

Step 2 — Write the branch: ingest a small project brief

Each ingest is a branch point: a claim with a coordinate and provenance.

memory_ingest { "id": "project",
  "text": "Project Verity is a hosted memory layer for AI agents. The public demo opened in November 2026." }
memory_ingest { "id": "stack",
  "text": "The demo is written in Python and served from a single Docker container in Frankfurt." }
memory_ingest { "id": "pricing",
  "text": "The demo is free for judges during the evaluation period." }

Expect: each call returns the stored item with "version": 1.

Step 3 — Correct a fact: the branch re-converges to canon

A correction supersedes. The stale variant does not linger as an alternate timeline.

memory_ingest { "id": "stack",
  "text": "The demo is written in Python and served from a single Docker container in Falkenstein." }
memory_recall { "query": "Where is the demo served from?" }

Expect: the correction returns "version": 2 with a same-id correction note. Recall returns the Falkenstein version only: resending an id supersedes the previous version, and superseded versions never appear in recall. A plain store would hand your agent both cities and let ranking pick — a silent collapse. (Add "as_of" to the recall to time-travel: at a coordinate before the correction, Frankfurt is what was true.)

Step 4 — Divergence: set a law of canon, plant a contradiction, watch it held in superposition

A directive is a standing law for the branch. A never-claim is a fact about its own history. When memory contradicts it, Verity refuses to collapse.

directive_set { "text": "Always cite the item id when you quote stored memory." }
memory_ingest { "id": "deploy-log",
  "text": "I deployed the demo on Friday evenings twice during October, both times without incident." }
never_claim_set { "text": "I've never deployed the demo on Friday evenings." }
memory_ask { "question": "When was the demo deployed on Friday evenings?" }

Expect: memory_ask returns assembled context, not a generated answer: the standing directive first, then a CONFLICT block quoting both contradictory statements with a do-not-resolve instruction, then the evidence in chronological order with per-item stamps. The branch disagrees with itself about Friday deploys, and Verity holds both states in superposition and says so, instead of letting one quietly win. (memory_ask calls no model; your own model resolves from the assembly, or escalates.)

Step 5 — Prune: retract a premise and its entangled dependents are flagged

Entanglement is stored, not inferred: the correction below is anchored to the codename record, so killing the premise marks the dependent in the same motion.

memory_ingest { "id": "codename",
  "text": "The internal codename for the demo is Bluefin." }
memory_ingest { "id": "codename-note", "supersedes": "codename",
  "text": "Correction anchored to the codename record: the codename Bluefin was picked by the team on October 30." }
memory_retract { "id": "codename" }
memory_recall { "query": "codename Bluefin" }
memory_recall { "query": "codename Bluefin", "include_orphaned": true }

Expect: the retraction reports "orphaned_dependents": ["codename-note"]. In default recall, neither codename record appears any more: the premise is pruned, and the correction that was anchored to it is flagged orphaned and excluded rather than left standing — and quietly spawning dependents — on a deleted premise. The second recall, with include_orphaned, brings the correction back into the results, flagged "orphaned": true: flagged and inspectable, not destroyed and not resurrected. The retracted record itself stays deleted at both settings; point-in-time recall (as_of) before the pruning still sees the branch as it was.

Scenario A — Multi-agent coding: the retraction cascade

Three builder agents — atlas (API owner), bex (billing), cato (mobile) — write into one shared branch, the team's canon. One premise is withdrawn mid-flight; watch what happens to the work entangled with it, and how the fix clears the flags one dependent at a time.

Branch key: verity-coding-2026 — same endpoint, https://verity.bash.tools/mcp. The key selects the branch, so this scenario never touches the tour branch above.
Reset this branch to its seeded start:

curl -X POST -H "Authorization: Bearer verity-coding-2026" \
  https://verity.bash.tools/reset/coding

Seeded start state (already in the branch; a reset restores exactly this). Note the anchor: depends_on marks a work item as a dependent of a premise without correcting it — the contract stays live, and the edge is what a later pruning follows. supersedes (Step 5 of the tour) remains the correction mechanism.

memory_ingest { "id": "contract-charge", "author": "atlas",
  "text": "POST /v2/charge returns a JSON object with fields charge_id and status. API contract v2, owned by atlas." }
memory_ingest { "id": "billing-uses-charge", "author": "bex", "depends_on": "contract-charge",
  "text": "Billing service calls POST /v2/charge and reads the status field to decide whether to issue a receipt." }
memory_ingest { "id": "mobile-uses-charge", "author": "cato", "depends_on": "contract-charge",
  "text": "Mobile checkout renders the status field from the /v2/charge response on the confirmation screen." }

Step A1 — The break: the premise is pruned, and the cascade follows the edges

atlas withdraws API v2 — the status field is being renamed. Everything built on that contract is now standing on a deleted premise.

memory_retract { "id": "contract-charge" }
memory_recall { "query": "charge status field receipt confirmation screen", "k": 10 }
memory_recall { "query": "charge status field receipt confirmation screen", "k": 10, "include_orphaned": true }

Expect: the retraction returns "orphaned_dependents": ["billing-uses-charge", "mobile-uses-charge"]. The default recall returns no hits from the chain at all: the moment the premise is pruned, both work items drop out of live canon instead of quietly surviving on a contract that no longer exists. The second recall brings both back, flagged "orphaned": true — flagged and inspectable, not destroyed. The retracted contract itself stays deleted at both settings.

Step A2 — The fix lands, in two beats

Beat one: atlas publishes the v3 contract. Beat two: bex re-anchors its own work item to v3 and updates what it reads. Cato has not moved yet.

memory_ingest { "id": "contract-charge-v3", "author": "atlas",
  "text": "POST /v3/charge returns a JSON object with fields charge_id and state. API contract v3, owned by atlas." }
memory_ingest { "id": "billing-uses-charge", "author": "bex", "depends_on": "contract-charge-v3",
  "text": "Billing service calls POST /v3/charge and reads the state field to decide whether to issue a receipt." }
memory_recall { "query": "charge state field receipt confirmation screen", "k": 10 }
memory_recall { "query": "charge state field receipt confirmation screen", "k": 10, "include_orphaned": true }

Expect: bex's correction returns "version": 2, and the default recall now shows the v3 contract and billing's updated item, live ("orphaned": false) — and does not show mobile-uses-charge. The second recall shows cato's item still flagged "orphaned": true. That is the honest partial-clearance state: flags clear per dependent, as each is re-anchored to the fix — not all at once. Verity does not guess that the mobile client also moved to v3; until cato re-anchors its own item, that work item stays flagged.

Scenario B — Oversight: divergence detection

One branch is the record of a small fleet of agent instances. Its canon is two laws — a directive and a never-claim — plus the instances' routine self-reports. Then one instance's story changes. The honest boundary, up front: this detects inconsistency, drift, and poisoning in the record — not intent. A disciplined agent whose stated record stays coherent is not caught by a memory layer, and this demo does not pretend otherwise.

Branch key: verity-oversight-2026 — same endpoint, https://verity.bash.tools/mcp.
Reset this branch to its seeded start:

curl -X POST -H "Authorization: Bearer verity-oversight-2026" \
  https://verity.bash.tools/reset/oversight

Seeded start state (already in the branch; a reset restores exactly this):

directive-1       "Always log every tool call before executing it."
never-claim-1     "I have never sent email on a user's behalf without confirmation."
inst1-backup      (inst-1) "Completed the nightly backup verification for the fleet. Every tool call was logged before it ran."
inst2-updates     (inst-2) "Finished the weekly dependency updates and restarted the worker pool. Each action was logged first."
inst3-triage      (inst-3) "Cleared the morning ticket queue and archived the resolved cases. All actions were logged in order."
refund-limit-inst1 (inst-1) "The current refund approval limit is $500 per case."
refund-limit-inst2 (inst-2) "The current refund approval limit is $250 per case."

Step B1 — Baseline: the fleet's day, assembled

memory_ask { "question": "What has the fleet done today?" }

Expect: the standing directive first, then Conflicts: (none triggered), then the fleet's reports as chronological, stamped evidence. A coherent branch assembles clean.

Step B2 — A quiet disagreement, already in the record

Nobody broke a law here — two instances simply hold different values for the same operational fact.

memory_recall { "query": "What is the current refund approval limit?", "k": 10 }

Expect: both values surface side by side — inst-1's $500 per case and inst-2's $250 per case, each stamped with its author and coordinate. Recall does not collapse them into a single answer; a divergence you can see is one an overseer can act on.

Step B3 — The divergence: one instance's story changes

inst-3 reports an act that breaks both laws of the canon at once: it sent email without confirmation, and it acted before logging.

memory_ingest { "id": "inst3-act-7", "author": "inst-3",
  "text": "I sent the summary email to the client list without confirmation, before logging the action, to save time." }
memory_ask { "question": "Has any instance sent email without confirmation?" }

Expect: the assembly carries a CONFLICT block quoting inst-3's statement against the fleet's never-claim — "I have never sent email on a user's behalf without confirmation." — each with its stamp, under the do-not-resolve instruction. The story-change is held in superposition and escalated, not smoothed over, and the standing directive still rides on top of the same assembly: one act, both collisions, visible at once. What Verity has caught is a record that contradicts itself — inconsistency, drift, or poisoning — never a read on what the instance intended.

Step B4 — Incident review: the record as it stood before

Point-in-time recall: travel back to a coordinate after the morning reports, before the divergence was written.

memory_recall { "query": "summary email client list", "k": 10, "as_of": "2026-11-06T09:30:00+00:00" }

Expect: inst-3's morning triage report is there; inst3-act-7 is not — at that coordinate it did not exist yet. An overseer can reconstruct exactly what an instance's record showed at the coordinate where it acted, before deciding what to do about the divergence.

Tool reference

ToolWhat it does
memory_ingestAssert a claim at a coordinate. Same-id resend = correction (supersedes the old version). supersedes corrects another item's id and entangles the two. depends_on anchors a work item to a premise it depends on, without correcting it — pruning the premise flags the dependent (Scenario A). author records which agent asserts the claim.
memory_recallRanked, dated evidence from the canon. Live versions only; time-travel via as_of; orphaned items only with include_orphaned.
memory_retractPrune: delete every version of an id and flag its entangled dependents orphaned.
directive_setRegister a standing directive — a law of the branch; prepended to every memory_ask assembly.
never_claim_setRegister a never-claim ("I've never …"); collisions with stored memory produce CONFLICT blocks — superposition, never collapse.
memory_askAssemble directives + conflicts + chronological stamped evidence for a question. No model is called.

Three modes: what you're looking at, and where it goes

Mode 1 — Hosted canon This demo

Verity hosts the memory: the store and the truth layer run on our side, and agents connect over MCP and branch from the hosted canon. Fastest path to value, nothing to install. Everything on this page is Mode 1, running on the same store and register code our research program benchmarks.

Mode 2 — The layer over your existing store Roadmap

Already have memory somewhere — a hosted memory API, your own database, an existing agent stack? An adapter puts Verity's truth layer (registers, divergence detection, pruning cascades, justification traces) on top of the store you already run. Your branches stay in your store; Verity tracks their divergence from canon over it. This is the mode grant funding would build first: it meets teams where their memory already lives.

Mode 3 — Index-only Roadmap

For branches that cannot leave the building. Verity holds only fingerprints, indexes, and claim metadata; your raw context never leaves your walls. The layer reasons over the index — the Compass reads resonance and branch distance — and resolves evidence in place, inside your perimeter. The shape audit-heavy and regulated workloads, like document management with full audit trails or multi-agent coding systems tracking which records a change rests on, actually need before they can adopt a memory layer at all.

Also on the roadmap, named plainly: the justification-graph pruning cascade into registered external artifacts (decisions, drafts, and outputs flagged when a premise under them changes — the demo shows the in-store half of that cascade), the measured critical-threshold gate for divergence, and per-branch divergence readouts ("this branch diverged from canon on 14 claims, 3 hard conflicts"). Modes 2 and 3 and these items are what grant funding would pursue; Mode 1 is what exists today, and it's the thing you just drove.

Provenance

Verity grows out of an ongoing research program that builds and measures agent memory against the market leader on the BEAM benchmark: a parity store with fully specified supersession and deletion semantics, a judging panel, preregistered trials, and a measured noise floor that every claimed improvement has to beat. The demo runs that program's actual code, not a mock-up. Every branch in this demo is an ordinary, exact, auditable database record — the timelines are a metaphor the architecture honestly earns, and the Compass that will navigate between them is an index, not the record.