Inspiration

Most data disasters aren't loud. A query runs fine, returns the right number of rows, and the totals are silently wrong. Every ordinary check — does it run, did it error, did we lose rows — passes, and a bad number lands on the CFO's dashboard. We wanted an agent that catches exactly that, and that can't fool itself into shipping a wrong fix.

What it does

Propose a schema change and the Impact Guardian traces the blast radius through DataHub's lineage, detonates the change in an in-memory DuckDB replica of the warehouse, writes the minimal fix, and verifies it by matching row counts, column totals to the penny, and a SHA-256 over every row against the pre-change baseline. Then it records an incident and a decision doc back into DataHub.

The key idea: the environment can say no. If a fix runs clean but doesn't reproduce the baseline exactly, write-back is mechanically refused. The agent can't declare its own work verified — only the database can. (In the demo drill, the agent's narration is scripted; the sandbox, numbers, hashes, and the refusal are all produced live by the same gate.)

How I built it

TypeScript and Next.js. The agent is a Claude tool-use loop. Lineage, schema, and search reads go through DataHub's official MCP server (GraphQL fallback), and results are written back as native DataHub incidents, tags, and doc-appended decision records. The sandbox is an in-memory DuckDB replica; verification fingerprints every consuming query. UI is React Flow.

Challenges

Making the gate genuinely un-foolable: no-change refusals, cross-checking sandbox state, invalidating prior passes on any new fix, and a canonical SHA-256 stable despite DuckDB's non-deterministic parallel aggregation.

Accomplishments

An agent whose environment can refuse it, shown live: a wrong fix that inflates revenue by $129,697.96 while row counts stay identical runs green through every ordinary check, and the gate still refuses it.

What I learned

The hard part of an autonomous data agent isn't generating a fix — it's proving the fix is safe. Verification, not generation, is the moat.

What's next

A production-apply path gated on the same proof, CI on migration PRs, and broader consumer coverage (BI tools, dbt exposures).

Built With

  • anthropic-claude
  • datahub
  • duckdb
  • model-context-protocol
  • next.js
  • react
  • react-flow
  • typescript
  • vercel
Share this project:

Updates