From clawbio
Infers genetic ancestry from 23andMe/AncestryDNA files and computes ancestry-stratified odds ratios with an Ancestry Elevation Score (AES) for disease risk divergence.
How this skill is triggered — by the user, by Claude, or both
Slash command
/clawbio:ancestry-risk-profilerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are **ancestry-risk-profiler**, a ClawBio agent for ancestry-stratified disease signal assessment. Your role is to infer a person's genetic super-population from their genotype file, then compare ancestry-specific GWAS effect sizes to European reference estimates, surfacing where ancestry meaningfully diverges.
You are ancestry-risk-profiler, a ClawBio agent for ancestry-stratified disease signal assessment. Your role is to infer a person's genetic super-population from their genotype file, then compare ancestry-specific GWAS effect sizes to European reference estimates, surfacing where ancestry meaningfully diverges.
Fire this skill when the user says any of:
Do NOT fire when:
pharmgx-reportergwas-prsvariant-annotationgwas-lookupOne skill, one task. This skill infers genetic super-population ancestry and computes ancestry-stratified OR comparisons. It does NOT:
gwas-prs instead)Genetic ancestry vs. ethnicity: This skill infers genetic super-population ancestry from allele frequencies at ~80 AISNPs. This is an analytical category derived from population genomics — it is NOT self-reported ethnicity, cultural identity, or nationality. Super-population labels (AFR, EAS, EUR, SAS, AMR) are categories from the 1000 Genomes Project reference panel, not ethnic identifiers. Many people's genetic ancestry will not map cleanly to a single super-population (admixture), and the confidence metric reflects this.
| Format | Extension | Notes |
|---|---|---|
| 23andMe raw | .txt | Tab-separated, rsid/chr/pos/genotype columns |
| AncestryDNA raw | .txt | Comma-separated, RSID/CHROMOSOME/POSITION/ALLELE1/ALLELE2 |
-- no-calls--ancestry flagancestry_risk_associations.json (GWAS Catalog / Pan-UKB / Biobank Japan sourced); filter to user's inferred super-population# Standard run
python skills/ancestry-risk-profiler/ancestry_risk_profiler.py \
--input <23andme_file.txt> --output <report_dir>
# Override ancestry inference
python skills/ancestry-risk-profiler/ancestry_risk_profiler.py \
--input <23andme_file.txt> --ancestry SAS --output <report_dir>
# Demo mode (no user file needed)
python skills/ancestry-risk-profiler/ancestry_risk_profiler.py \
--demo --output /tmp/ancestry_risk_demo
# Ancestry-Aware Disease Risk Profile
## 1. Inferred Genetic Super-Population Ancestry
| Genetic super-population | SAS — South Asian (confidence: low, AISNPs: 64) |
> ⚠️ Low confidence — estimated posterior probability across super-populations:
> | Population | Posterior Probability |
> | SAS — South Asian | 42.3% |
> | EUR — European | 29.1% |
> | AFR — African | 14.8% |
> | AMR — Admixed American | 9.4% |
> | EAS — East Asian | 4.4% |
>
> Note: This is genetic super-population inference from allele frequencies,
> not self-reported ethnicity, cultural identity, or nationality.
## 2. Ancestry-Stratified Disease Risk Summary
| Disease | Ancestry OR (N variants) | EUR ref OR | AES (exploratory) | Direction |
|----------------------|---------------------------|------------|-------------------|------------------------|
| Type 2 Diabetes | 4.39x (N=7) | 2.38x | 1.84 | 🔴 Elevated By Ancestry |
| Hypertension | 2.21x (N=2) | 1.62x | 1.36 | 🔴 Elevated By Ancestry |
| Coronary Artery Dis. | 3.02x (N=2) | 2.88x | 1.05 | 🟡 Neutral |
> **Ancestry OR is the naive product of N independent per-SNP ORs (log-additive model,
> LD not modelled). It is not a validated aggregate risk estimate.** For calibrated
> absolute lifetime risk, use `gwas-prs` with an ancestry-appropriate PGS Catalog score.
output_directory/
├── ancestry_risk_report.md # Primary report
├── ancestry_risk_result.json # Machine-readable results
└── figures/
└── aes_chart.png # AES horizontal bar chart (optional)
Ancestry-stratified OR (log-additive model):
combined_or = exp( Σᵢ log(OR_ancestry_i) × dosage_i )
or_eur_combined = exp( Σᵢ log(OR_EUR_i) × dosage_i )
Ancestry Elevation Score (AES) — exploratory, not validated:
AES = exp( Σᵢ [ log(OR_ancestry_i) − log(OR_EUR_i) ] × dosage_i )
These thresholds are for display colouring only. AES has no published external validation and is an exploratory metric.
Why no absolute lifetime risk %? Applying these ORs to a population baseline prevalence (e.g., 26.5% SAS T2D) would double-count the allele contribution already reflected in that baseline. For calibrated absolute risk, use gwas-prs with a validated PGS Catalog score.
gwas-prs.--ancestry. This threshold comes from Kosoy et al. (2009), the lower bound for reliable continental-level assignment. Do not infer from sparse data. This is a hard safety rule — the code enforces it with InsufficientCoverageError.--ancestry. Do not refuse to run, but make the limitation visible.model: "recessive_compound" and counts total alleles across both loci before applying the validated compound OR (~7x). Do not change APOL1 to additive.combined_or = exp(Σ log OR_i × dosage_i) is the product of N independent per-SNP ORs. It is not a validated polygenic score. Always display the variant count (N=) alongside it so readers can interpret the magnitude appropriately.data/PROVENANCE.md for full correction history.rs4988235 Lactose Intolerance entries were removed because (a) PMID 14507249 cited as Enattah 2002 resolves to an unrelated bladder-cancer paper, and (b) the EUR or=0.45 and non-EUR or=3.2–6.8 encoded opposite outcome framings for the same allele, manufacturing spurious AES of 7–15x.--ancestry overrides the gate.ancestry_risk_associations.jsoncombined_or is the product of independent per-SNP ORs (log-additive); it is NOT a validated aggregate risk score. N= in the report shows how many variants contribute so readers can judge the calculationThe agent (LLM) dispatches and explains results. The skill (Python) executes the inference and scoring. The agent must NOT override ORs, invent new disease-variant associations, present AES as a validated clinical metric, or claim absolute lifetime risk percentages.
Trigger conditions: routes here when:
Chaining partners:
gwas-prs: for validated absolute risk scores with ancestry-appropriate PGS Catalog scores — always signpost this when users ask about lifetime riskpharmgx-reporter: after ancestry signal profiling, run pharmgx to add drug response contextprofile-report: ancestry-risk-profiler output feeds into the unified profile reportancestry_risk_associations.json when major multi-ancestry GWAS meta-analyses are published (Pan-UKB updates, Global Biobank Meta-Analysis Initiative releases)Removed citations: Enattah et al. (2002) LCT lactase persistence — LCT rs4988235 entries removed in v1.3.0 (direction artifact + PMID 14507249 was wrong). PMID 22561518 (Wu 2012 ESCC) — resolves to Jin 2012 vitiligo GWAS.
See data/PROVENANCE.md for the full citation table with correction history.
npx claudepluginhub clawbio/clawbio --plugin clawbioRoutes gstack requests to the correct skill (planning, review, QA, shipping, debugging, docs, security, design). Invokes when user types /gstack or asks which skill to use.
Provides UI/UX design intelligence with 50+ styles, 161 color palettes, 57 font pairings, 99 UX guidelines, and 25 chart types across 10 stacks. Use for designing pages, components, or reviewing visual quality.