Provenance Baseline for Hippo Expansion — Research & Decisions

Date: 2026-07-21. Method: internal evidence (live DB queries, source audit) + external landscape scan (all external claims carry URLs; star counts verified 2026-07-21). Purpose: fix the provenance baseline — what must be true about lineage, capture integrity, and trust in Hippo’s data — before expanding capability (consolidation layer, more sources, proactive agents) and before any userbase beyond the author. Related: docs/superpowers/specs/2026-07-21-brain-consolidation-layer-design.md, docs/superpowers/plans/2026-07-21-brain-consolidation-phases.md.

1. Internal evidence: four months of real operation

Live DB (~/.local/share/hippo/hippo.db, schema v23), queried 2026-07-21:

MeasureValue
Capture span2026-03-20 → 2026-07-21 (~4 months continuous)
events53,654 (shell 35,830 · claude-tool 17,824)
browser_events11,579
agentic_sessions11,193
sessions27,840
knowledge_nodes19,187 (observation 16.6k · change_outcome 2.5k)
entities39,833 · relationships 0
lessons18 · capture_alarms 3,898
Node growth (last 14d)2–432 nodes/day, bursty

Interpretation: capture is high-volume and durable; the derived layer is flat (see consolidation spec). 3,898 capture alarms against 18 lessons shows the graduation path works but is narrowly fed.

2. Provenance mechanisms Hippo already has (the baseline)

Audited against source; each is load-bearing today:

MechanismWhereStrength
Idempotent ingest via envelope_idcrates/hippo-daemon/src/daemon.rs (“duplicate envelope_id, already stored”)Re-processing is safe; at-least-once producers can’t double-write
Redaction before persistcrates/hippo-core redaction engine; daemon redacts before insertRaw secrets never reach disk — the core privacy guarantee
Source→node link tablesknowledge_node_events, knowledge_node_agentic_sessions, browser/workflow variantsEvery knowledge node traces to source rows (doc-level)
Evidence packetsbrain/src/hippo_brain/evidence_packets.pyQuery results carry {ref, table, row_id, timestamp_ms, excerpt≤500c} — inspectable citations
Capture integrity stacksource_health, capture_alarms, watchdog invariants I-1..I-10, synthetic probes (docs/capture/)Capture paths are monitored and alarmed independently of the daemon
Versioned derivationenrichment_version, enrichment_model on knowledge_nodes; re-enrich-knowledge-nodes.pyDerived rows know which pipeline vintage made them; re-derivation is rehearsed
Immutable revisions + last-known-good projectionauto-memory subsystem (memory_documents/revisions/tombstones)The strongest provenance pattern in the codebase — but only applied to auto-memory

3. External evidence: landscape scan

3.1 Agent-memory frameworks (capability comparables)

Field convergence: fact extraction + temporal validity + hybrid retrieval + MCP, all Apache/MIT, benchmark-driven (LoCoMo, LongMemEval, MemoryBench). Competing head-on here is a losing game. None of them capture raw shell/session/browser activity — they all start from chat transcripts. Capture is Hippo’s uncontested ground.

3.2 Personal activity capture (userbase comparables)

Screenpipe is nearly isomorphic to Hippo (local SQLite+FTS5+MCP+localhost API) minus shell/AI-session capture — architecture validated; its pipe-level permission model is the reference design for scoped agent access to captured data.

3.3 Provenance standards & practice

3.4 Local-first & privacy positioning

4. Gap analysis: baseline vs. what expansion needs

#GapWhy it blocks expansionEvidence
G1No temporal validity on factsConsolidation (Phase 3 supersession) and any “current state of X” answer needs valid-from/invalidated-at semanticsGraphiti, Mem0, Supermemory all converged on this; consolidation spec §supersession
G2Evidence packets are doc-level, no char offsets/ask answers can cite a row but not the span that supports a claim; hallucination auditing stays coarseAnthropic citations pattern (§3.3); Hippo owns the raw text, so offsets are cheap
G3No derivation-run identityA node records enrichment_model+enrichment_version but not which run, prompt hash, or input batch — can’t audit or reproduce a specific derivationPROV Activity type (§3.3); needed for consolidation provenance (synthesis_sources covers inputs, not the run)
G4No tamper evidence on raw eventsFor a second user, “the daemon wrote this and it wasn’t altered” is asserted, not verifiabletransparency.dev (§3.3); single-user can defer, multi-user cannot
G5No scoped access model for agentsMCP consumers currently see everything redaction lets through; userbase expansion needs per-consumer scopingscreenpipe pipes (§3.2)
G6Privacy posture undocumented as a guaranteeDifferentiator (“no telemetry, not even opt-out”) exists in fact but not as a stated, tested contract§3.4 telemetry postures
G7relationships emptyEntity graph is prerequisite for salience + graph-expanded retrievalConsolidation plan Phase 0

5. Decisions

Each decision is scoped to be evidence-backed and reversible; none blocks the consolidation plan’s Phase 0.

D1 — Adopt PROV’s Entity/Activity/Agent as Hippo’s provenance vocabulary. Events/browser rows/agentic segments are Entities; enrichment and consolidation runs are Activities; capture producers and the local LLM are Agents. Schema columns and doc language use these terms. Evidence: W3C PROV-DM (§3.3); zero-cost conceptual alignment before the derived layer grows.

D2 — Episode→fact with validity windows; supersede-never-delete, store-wide. The auto-memory subsystem’s immutable-revision pattern generalizes to all derived rows: valid_from/invalidated_at semantics via superseded_by (consolidation schema v24), raw events remain the episodes/ground truth. Evidence: independent convergence of Graphiti (validity windows), Mem0 (ADD-only), Supermemory (auto-expiry), plus Hippo’s own auto-memory design — four independent implementations of the same idea.

D3 — Upgrade evidence packets to claim-level citations. Add optional char_start/char_end (+ quoted cited_text for verification) into the source row’s text, validated on read. Doc-level packets remain the fallback. Evidence: Anthropic Citations API is the reference pattern (§3.3); cost is low because Hippo owns raw event text; directly raises the auditability of every /ask answer and every future synthesis node.

D4 — Record derivation-run identity on every derived row. New derivation_runs table (run_id, activity type, model, prompt version/hash, started/finished ts, input watermark range); knowledge_nodes.derivation_run_id FK going forward. Evidence: PROV Activity (§3.3); re-enrich script already demonstrated re-derivation pain without run identity; consolidation Phase 1 needs this for synthesis_sources to be auditable.

D5 — Defer tamper-evident hash chaining; note it as the multi-user gate. A per-source hash chain over events (row hash includes predecessor) with a hippo verify command is the designed-but-deferred answer. Single-user scale doesn’t need it; the day a second user captures, it becomes mandatory. Evidence: transparency.dev model (§3.3); deferral keeps Phase 0–1 scope intact.

D6 — State the privacy contract explicitly and test it. “No telemetry, not even opt-out; redaction before persist; on-device inference only; your data is one SQLite file you can delete” becomes a documented guarantee with a doctor/CI check that fails if any network egress beyond configured inference appears. Evidence: Graphiti and screenpipe both ship opt-out telemetry (§3.4) — the strict position is unoccupied; Rewind’s Meta acquisition (§3.2) makes vendor-independence a live concern for this user category.

D7 — Do not enter the memory-framework benchmark race; compete on capture + provenance. No LoCoMo/LongMemEval chase. Hippo’s wedge: raw activity capture (shell/agentic/browser/workflow) + verifiable lineage + local-first. Bench investment stays on faithfulness-of-derivation gates (synthesis Q/A answerable only from evidence) rather than public memory benchmarks. Evidence: §3.1 convergence table — five well-funded Apache/MIT frameworks already fight that war; capture has exactly one high-traction survivor (screenpipe) and it just went source-available with subscriptions.

D8 — Scoped agent access is a prerequisite for userbase expansion, modeled on pipes. Before any second user: per-MCP-consumer permission scopes (source kinds, time ranges, projects) enforced at query time, not in prompts. Evidence: screenpipe’s deterministic per-pipe permissions (§3.2) are the validated reference design.

6. Impact on the consolidation plan

The phased plan (2026-07-21-brain-consolidation-phases.md) absorbs D2–D4 with minimal scope change:

7. Open questions

  1. Should derivation_runs also cover the embedding step (embed model identity) or is enrichment_model+vec reaper coverage enough? Lean: include — embeddings are derivations too.
  2. Claim-level offsets for agentic sessions: offsets into the segment summary or the raw JSONL line? Raw is truer; summary is what’s embedded. Start with summary spans.
  3. When D5 lands, per-source chains or one global chain? Per-source (matches source_health keying).
  4. D6’s egress check: static (config audit) or runtime (socket counter)? Start static; runtime is a watchdog invariant later.

Appendix: adoption signals (verified 2026-07-21)

ProjectStarsLicenseCloud/LocalTelemetry
mem061.4kApache-2.0Bothcloud product
graphiti (Zep OSS)29kApache-2.0Local core; Zep=SaaSopt-out PostHog
cognee28.9kApache-2.0Both
supermemory28.5kMITBoth (one-binary local)
letta23.9kApache-2.0Both (dev→letta-code)
screenpipe20.4kSource-availableLocal-first, $25/mo tieropt-out PostHog+Sentry
getzep/zep4.8kApache-2.0Examples only (CE deprecated)
Windrecorder3.9kGPL-2.0Fully localnone
OpenRecall2.9kAGPL-3.0Fully localnone
Rewind/Limitlessn/aProprietaryCloud; Meta-acquired, capture sunset 2025-12-19n/a