projects / alpha

Hypha

Person OS for your static exports.

What it does

Hypha ingests static data exports — Gmail mbox archives, Google Drive folders, and soon Slack, Notion, Microsoft 365 exports — into a typed temporal graph with full provenance. AI agents navigate inside it over MCP, like a private website only they can see.

Hypha gives an agent a browser on your private archive — local-first, with typed nodes, edges, and provenance on every record.

The bet: the archive is the source of truth because logins rot. Kids leave school districts. Employees leave M365 tenants. Founders wind down SaaS. Companies get acquired. The exports outlive the accounts. Hypha makes them useful afterward — Dogsheep for AI agents.

How it works

Two primitives. Every fact is a Node or Edge with an open kind string"gmail.message", "identity.email", "person". Adapters declare their kinds in a YAML manifest; the core never hardcodes a type. New data shapes do not require a schema migration.

Bitemporal from day one. Four timestamps on every record: tx_created, tx_invalidated, valid_from, valid_to. “Show me what I believed on date X about facts true on date Y” is a first-class query — required, not clever, when you’re ingesting 2019 archives in 2026.

Provenance is an indexed column, not a side table. Every record carries kind: "ingested" | "inferred", adapter or inferrer name, confidence, and inputs. Every query takes include_inferred and min_confidence. The why tool walks the derivation tree back to ingested leaves.

Inference is peer to ingestion. The identity-resolver inferrer runs a three-stage cascade: multi-key union blocking (domain, local-part, name-tokens), Fellegi-Sunter-inspired additive scoring with Jaro-Winkler on display names, then weakly-connected-components clustering at ≥0.80. dlp-scanner applies SSN / email / phone / Luhn-validated credit card / IBAN patterns with an allowlist. Both write into the same tables as adapters, marked inferred.

MCP-native surface. Seven intent-shaped tools plus hypha://node/{id} resource templates. Works with Claude Desktop today.

What’s shipped

v0.1.0-alpha, Apache-2.0, publicly released 2026-04-22:

  • @hypha/core — two-primitive model, bitemporal quartet, Store interface, adapter + inferrer contracts.
  • @hypha/store-sqlite — SQLite + FTS5 + sqlite-vec.
  • @hypha/adapter-sdk + @hypha/inferrer-sdk — plugin contracts with contract tests.
  • Adapters: gmail-mbox, google-drive-folder.
  • Inferrers: identity-resolver, dlp-scanner.
  • @hypha/mcp — stdio MCP server with search, neighborhood, timeline, why, fetch, record, ask. Haiku compiles NL to StoreQuery when ANTHROPIC_API_KEY is set; FTS fallback otherwise.
  • @hypha/publish — read-only HTTP surface and Graphiti-compatible export/import.
  • @hypha/governance — Cedar policy engine + append-only audit log, scaffolded.
  • @hypha/clihypha ingest | infer | search | serve | publish | export | import | build-adapter.

27 passing tests. 1 skip (sqlite-vec). 0 fail.

Explicit deferrals

Honest scope. These are not in alpha and I’m not pretending they are:

  • More adapters: google-takeout, slack-export, microsoft-365-export, notion-export.
  • More inferrers: community-summarizer (GraphRAG-style), memify (usage salience).
  • Constellation UI (Next.js 16 port of my-ai-browser).
  • Streamable HTTP + OAuth 2.1 + PKCE.
  • Biometric DEK unlock; SQLCipher envelope mode.
  • @hypha/store-postgres for the enterprise path.

Credits

Stands on shoulders: Dogsheep (philosophical north star, Simon Willison), Graphiti / Zep (bitemporal KG architecture), Splink (Fellegi-Sunter entity resolution), Presidio (DLP patterns), sqlite-vec, and the MCP spec.