Skip to content

Rare Disease Agent

Rare disease patients wait 5 to 7 years for a diagnosis.

Core trick

Has Claude rewrite symptoms into HPO terms, then scores matched codes against rare disease profiles with deterministic lookups that never name a disease.

Tags

Description

Rare disease patients wait 5 to 7 years for a diagnosis. Usually not because the answer is unknowable, but because the clues are scattered. The cardiologist sees a thick heart wall. The nephrologist sees protein in the urine. A rheumatologist sees joint pain and writes down fibromyalgia. Nobody puts them on the same page. Rare Agents reads a clinical note and does four things. Claude rewrites the symptoms in medical vocabulary, so "burning pain in his hands" becomes "acroparesthesia," because that's the word the databases actually know. Each term gets matched to an official HPO code. Those codes get scored against rare disease profiles. Then it says what to do: order this gene panel, watch for this, here are the trials recruiting now. The rule I built everything around is that Claude reads, but it never decides. Only the first step uses a model, and it's forbidden from naming a disease. The rest is lookups and arithmetic, so it can't invent a symptom, a disease, or a gene. I benchmarked it on 669 real published patients. Right answer first 72% of the time, top three 91%. A dumb baseline gets 44%. I also ran Abridge's 25 routine encounters through it, obesity and prediabetes and physicals, and got zero false alarms. That matters more, because a tool that cries wolf gets switched off in a week. Tools like Mendelian's MendelScan already scan health records for rare disease, but they read structured fields. "He's never really sweated" never becomes a billing code. It only exists in the note. So I read the conversation instead. It doesn't replace a geneticist. It gets the patient to one years earlier.
EstherKim97/Rare-agent★ 00 forksPythonCreated Jul 18, 2026 · last push Jul 18, 2026

README excerpt

# Rare Disease Phenotype Agent

Rare disease patients wait five to seven years for a diagnosis. The striking part
of that number is that it rarely reflects an unknowable answer. It reflects clues
spread across four different clinicians' notes over a decade. The cardiologist
saw a thick heart wall. The nephrologist saw protein in the urine. A
rheumatologist saw joint pain and recorded fibromyalgia. Each reading was
reasonable in isolation. Nothing ever placed the three findings on the same page.

Rare Disease Phenotype Agent puts them on the same page. Given a clinical note, it returns
standardized phenotypes, a ranked differential, and the specific diagnostic test
to order next.

Built in one day for the Abridge × Anthropic × Lightspeed hackathon, July 2026.

---

## The decision the system rests on

Stage 1 is the only place a language model touches the problem, and its role is
narrower than it first appears: read messy prose and re-express each finding in
standard clinical terminology. "Burning pain in his hands since he was a kid"
becomes `Acroparesthesia`. The prompt explicitly forbids naming a disease.

Everything after that is a lookup:

```
clinical note
  → Stage 1  extract.py       Claude → findings, in clinical terms      [LLM]
  → Stage 2  ground.py        findings → HPO codes                      [no LLM]
  → Stage 3  differential.py  codes → ranked diseases                   [no LLM]
  → Stage 4  actions.py       diseases → tests, red flags, trials       [no LLM]

Team