Skip to content

Repository files navigation

Dry Lab

An agent-native computational-biology workspace — one honest, human-supervised turn of a lab-in-the-loop. Built for the Google Cloud Rapid Agent Hackathon (Fivetran track).

Live: https://dry-lab-124593837272.us-central1.run.app · open it, approve the plan, and watch a full supervised research turn run end to end (add ?live=1 to drive a fresh live run; the bare URL replays the last green run).

A plain-English research goal → a plan you approveFivetran lands & transforms data in BigQuery (operated by the agent, human-approved on every write) → a code-writing @Investigator runs a vetted skill in a persistent in-container sandbox → @Critic reviews it (incl. a figure-vision + gene-grounding check) → a cited report + figures + tamper-evident provenance → a structured next-experiment proposalyou approve → it's emitted.

The supervised loop

@Planner  →  (you approve the plan)  →  @Pipeline  →  @Investigator ⇄ @Critic  →  @Proposer  →  (you approve) → emit
            human gate                   Fivetran      analysis + cited report     next experiment   human gate
  • Generalize via skills, not schema. A new use case is one SKILL.md — no new tables/endpoints.
  • Artifacts are the provenance. Outputs are pinned to immutable GCS objects (generation + crc32c); BigQuery holds a thin runs/evidence index; Dataplex draws lineage.
  • Honesty is a hard constraint. Numbers come from a computed evidence row + the code cell that made them; gene symbols are a grounded lookup (GPL13158 probe_gene), never model-asserted; citations are scholarly only; thresholds are never tuned. On GSE206285 the honest result is 32 differentially expressed genes (CKB, SLC11A1, MMP1, PYY, …) between ustekinumab responders and non-responders in ulcerative colitis.
  • Human approval is real. Plan approval, Fivetran writes (schema change / transformation run), and the final experiment emit each pause for a human.

Stack

ADK 2.x (planner → SequentialAgent[pipeline, LoopAgent(investigator, critic), proposer]) · Vertex Gemini · BigQuery (read-only reductions + thin index) · GCS (immutable artifacts) · a persistent in-container Jupyter kernel for analysis · the Fivetran MCP (baked into the image) for ingest → transform → activate · a Vite/React audit- surface UI served same-origin. Deployed on Cloud Run.

Run it locally

# backend (needs gcloud ADC + a .env from .env.example)
cd backend && uv pip install -e . && uvicorn dry_lab.server:app --reload
# frontend
cd frontend && npm install && npm run dev        # ?live=1 drives a live run; default replays the fixture
# end-to-end gate (live):  python -m eval.run_case --case 0

Data spine: scripts/process_geo.py (GSE206285) → Fivetran GCS→BigQuery → dbt marts; scripts/build_probe_annotation.py builds the grounded probe_gene map. See docs/ for architecture, patterns, and the data spine.

Releases

Packages

Contributors

Languages