Skip to content

Product

A record of where every AI memory came from.

Lineleaf sits beside your AI application and records how each artifact was derived. When a source changes, it tells you exactly what else must change — and proves what did.

01

Source lineage

Source lineage

Every time your application turns one thing into another — a message into a memory, a memory into an embedding — it tells Lineleaf with one call. That call becomes an edge: parent, child, operation, model and time.

Lineleaf keeps identifiers and fingerprints. The content stays in your stores.

“I live in Vancouver.”
SOURCE · chat:turn_331 · 18:04:12sha256:9f2c…a1

Memory · mem0:mem_7f2a

location = Vancouver

extract · 18:04:15

Embedding · pgvector:emb_3310

[0.12, −0.48, …] 1536-d

embed · 18:04:16

Summary · postgres:sum_0912

Lives in Vancouver · vegetarian

summarize · 18:05:40

02

Blast-radius preview

See everything a change will touch — before it touches anything.

A change starts as a dry run. Lineleaf walks the descendants across every store and proposes an action for each one. Nothing executes until you approve the plan.

lineleaf · lineageProduct concept · demo data

Source · chat:turn_331

A person told the assistant “I live in Vancouver.” Five records were derived from it.

Descendants · 5

Also feeds the summary: mem0:mem_51d0 · diet = vegetarian

03

Invalidation plans

Invalidation plans

An erasure is not one delete. The plan lists every descendant and what should happen to it: delete what was derived only from the source, rebuild what still has other valid parents, purge caches, warn agents.

When a store can’t guarantee deletion, the plan says so instead of pretending. Scope is fixed when you approve — if it grows, execution stops and asks again.

Plan · gmail:msg_8812 · user erasure · dry run

  1. 01Revisedgmail:msg_8812
  2. 02Removedmem0:mem_19c4
  3. 03Removedpgvector:emb_5521
  4. 04Stalesearch:idx_ab12 — store cannot confirm deletes; flagged for review
  5. 05Rebuildpostgres:usr_42
  6. 06Rebuildpostgres:sum_0912
  7. 07Removedredis:ans_88
  8. 08Stalelanggraph:plan_17
  9. 09Stalecalendar-agent:out_204
Generated by the same planner the demo uses. Demo data.
04

Rebuilding partial artifacts

Rebuilding partial artifacts

A summary built from several sources isn’t wrong when one of them changes — it’s partially stale. Deleting it would throw away what’s still true.

Lineleaf marks it for rebuild and records the new parents on the receipt, so you can show the old fact no longer contributes.

MEMORY · mem0:mem_7f2alocation = TorontorevisedMEMORY · mem0:mem_51d0diet = vegetarianuntouchedSUMMARY · postgres:sum_0912Lives in Toronto · vegetarian↻ rebuilt from 2 parents
Rebuild, don’t delete: the summary keeps what is still true.
05

Cleanup receipts

Cleanup receipts

When a plan runs, each adapter reports what it did. Lineleaf writes those results into a receipt where every line commits to the one before it — so the record can’t be quietly edited.

Partial outcomes stay visible: a store that couldn’t confirm a delete appears as “needs review”, not “done”.

Six completed actions fold into a compact cleanup receipt with a digest and a signature stamp.
Fig. — Actions become a hash-linked receipt. Demo signature.
06

Explainability

Explainability

“Why did the agent say that?” should be a lookup, not an investigation. why() returns the path from any artifact back to its sources: each operation, model, time and how much each parent contributed.

It also reports freshness — whether anything on that path has since changed.

An agent’s answer about Kitsilano is traced backward through the cached answer, embedding and memory to its origin: “I live in Vancouver.”
Fig. — why() walks parents back to the origin.

Early development

Help us decide what ships first.