Skip to content

Pls let me win

What I built.

Core trick

Runs pseudobulk DE with donor-aware aggregation, then ranks perturbations by E-distance and labels runs exploratory when donor counts are too few.

Tags

Description

What I built. Perturb-seq Copilot — a no-code web app that takes a wet-lab immunologist from a processed single-cell CRISPR Perturb-seq count matrix to a ranked shortlist of high-impact gene perturbations and grounded, testable hypotheses in about two minutes. You upload a file (or click "Try the example") and it runs the full pipeline — quality control, donor-aware pseudobulk differential expression, pathway and transcription-factor activity, and an E-distance effect-size ranking — then produces a grounded Claude interpretation and a one-click, self-contained HTML report. It was built end to end with Claude Code: the scientific pipeline, the Streamlit interface, the Dockerized deployment, and an interpretation layer that sends Claude only computed facts and passes a grounding check. What I found. On real published T-cell CRISPR screens, the biology validates. In Shifrut 2018 (primary human T cells), CBLB — a known brake on T-cell activation — ranks #1 by effect size with a coherent chemokine/effector program; in Datlinger 2017 (Jurkat CROP-seq), the top hits are the core TCR-activation transcription factors: EGR1, ETS1, NFATC1, NR4A1, and ZAP70. But the most important result is methodological. When there are too few donors, gene-level significance cannot honestly be established — so the tool says so: it labels the run exploratory, refuses to promote any target to a "confirmed regulator," and in one case Claude flagged that its own #1-ranked hit was dominated by a guide-construct artifact rather than real biology. What I built. Perturb-seq Copilot — a no-code web app that takes a wet-lab immunologist from a raw single-cell CRISPR Perturb-seq count matrix to a ranked shortlist of high-impact perturbations and grounded, testable hypotheses in about two minutes. Built end to end with Claude Code: QC, donor-aware pseudobulk differential expression, E-distance ranking, a grounded Claude interpretation, and a self-contained report. What I found. The biology validates on real T-cell screens — CBLB tops Shifrut 2018, and the core TCR transcription factors (EGR1, ETS1, ZAP70) top Datlinger 2017. More importantly, when donors are too few the tool refuses to overclaim: it labels the run exploratory and even flags when a top hit is a technical artifact. Why it matters. It puts rigorous, honesty-first Perturb-seq analysis in the hands of the biologist who generated the data — every output a testable hypothesis, never a false discovery.
a1murt/perturb-seq-copilot★ 00 forksPythonCreated Jul 13, 2026 · last push Jul 13, 2026

README excerpt

# Perturb-seq Copilot

Raw single-cell counts from a T-cell Perturb-seq run → a downloadable, annotated
report with QC, per-perturbation differential expression, pathway/TF activity, a
ranked leaderboard of candidate regulators, and a grounded, testable follow-up
experiment for each top hit — no code required.

Built phase-by-phase per [`PLAN.md`](PLAN.md).

**Pipeline:** upload → `io` (load + schema detect) → `qc` → `preprocess` →
`de` (Wilcoxon vs control) → `enrich` (gseapy + decoupler TF/pathway activity) →
`rank` (pertpy E-distance + composite score) → `interpret` (grounded Claude) →
`report` (self-contained HTML) / `app.py` (Streamlit). See `src/pipeline.py`.

## Setup

```bash
python -m venv .venv                       # Python 3.11 recommended
./.venv/Scripts/python.exe -m pip install -r requirements.txt   # Windows
# source .venv/bin/activate && pip install -r requirements.txt  # macOS/Linux
cp .env.example .env                        # then add your ANTHROPIC_API_KEY
```

## Data (Phase 0)

Development uses **Shifrut et al. 2018** — genome-wide CRISPR knockouts in
primary human T cells (via `pertpy`, downloads in minutes). Same domain as the
plan's Marson T-cell screen, small enough to iterate on (52k cells), with real
T-cell regulators as perturbations (PDCD1, HAVCR2, BTLA, CBLB, DGKA, RASA2, …)
and non-targeting controls.

```bash
python scripts/prepare_dev_data.py          # -> data/shifrut_2018.h5ad + data/dev_subset.h5ad
python -m src.io data/dev_subset.h5ad --

Team