技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
nutrigx【数据与研究】Personalised nutrition report from consumer genetic data (23andMe, AncestryDNA, VCF) — interrogates nutritionally-relevant SNPs and generates actionable dietary guidance, all computed locally.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
name: nutrigx description: Personalised nutrition report from consumer genetic data (23andMe, AncestryDNA, VCF) — interrogates nutritionally-relevant SNPs and generates actionable dietary guidance, all computed locally. license: MIT metadata: version: 0.2.0 author: David de Lorenzo tags:
Author: David de Lorenzo (ClawBio Community) Requires: Python 3.11+, pandas, numpy, matplotlib, seaborn, reportlab (optional)
The NutriGx Advisor generates a personalised nutrition report from consumer genetic data (23andMe, AncestryDNA raw files or VCF). It interrogates a curated set of nutritionally-relevant SNPs drawn from GWAS Catalog, ClinVar, and peer-reviewed nutrigenomics literature, then translates genotype calls into actionable dietary and supplementation guidance — all computed locally.
Key outputs
commands.sh, environment.yml, SHA-256 checksums)The Bio Orchestrator should route to this skill when the user says anything like:
.txt or .csv (23andMe), .csv (AncestryDNA), .vcf| Gene | SNP | Nutrient Impact | Evidence |
|---|---|---|---|
| FTO | rs9939609 | Energy balance, fat mass, carb sensitivity | Strong (GWAS) |
| PPARG | rs1801282 | Fat metabolism, insulin sensitivity | Moderate |
| APOA5 | rs662799 | Triglyceride response to dietary fat | Strong |
| TCF7L2 | rs7903146 | Carbohydrate metabolism, T2D risk | Strong |
| ADRB2 | rs1042713 | Fat oxidation, exercise × diet interaction | Moderate |
| Gene | SNP | Nutrient | Effect of risk allele |
|---|---|---|---|
| MTHFR | rs1801133 | Folate / B12 | ↓ 5-MTHF conversion (~70%) |
| MTHFR | rs1801131 | Folate / B12 | ↓ enzyme activity (~30%) |
| MTR | rs1805087 | B12 / homocysteine | ↑ homocysteine risk |
| BCMO1 | rs7501331 | Beta-carotene → Vitamin A | ↓ conversion (~50%) |
| BCMO1 | rs12934922 | Beta-carotene → Vitamin A | ↓ conversion (compound het) |
| VDR | rs2228570 | Vitamin D absorption | ↓ VDR function |
| VDR | rs731236 | Vitamin D | ↓ bone mineral density response |
| GC | rs4588 | Vitamin D binding | ↑ deficiency risk |
| SLC23A1 | rs33972313 | Vitamin C transport | ↓ renal reabsorption |
| ALPL | rs1256335 | Vitamin B6 | ↓ alkaline phosphatase activity |
| Gene | SNP | Nutrient | Effect |
|---|---|---|---|
| FADS1 | rs174546 | LC-PUFA synthesis | ↑/↓ EPA/DHA from ALA |
| FADS2 | rs1535 | LC-PUFA synthesis | Modulates omega-6:omega-3 ratio |
| ELOVL2 | rs953413 | DHA synthesis | A allele: lower EPA→DHA conversion (association, not a requirement) |
| APOE | rs429358 | Saturated fat response | ε4 → ↑ LDL-C on high SFA diet |
| APOE | rs7412 | Saturated fat response | Combined with rs429358 for ε typing |
| Gene | SNP | Compound | Effect |
|---|---|---|---|
| CYP1A2 | rs762551 | Caffeine | Slow/Fast metaboliser |
| AHR | rs4410790 | Caffeine | Modulates CYP1A2 induction |
| ADH1B | rs1229984 | Alcohol | Acetaldehyde accumulation risk |
| ALDH2 | rs671 | Alcohol | Asian flush / toxicity risk |
| Gene | SNP | Sensitivity | Effect |
|---|---|---|---|
| MCM6 | rs4988235 | Lactose intolerance | Risk allele G (GRCh38 plus / -13910C) is non-persistence; persistence allele A (-13910T) is dominant |
| HLA-DQ2 | Proxy SNPs | Coeliac / gluten | HLA-DQA1/DQB1 risk haplotypes |
| Gene | SNP | Pathway | Effect |
|---|---|---|---|
| SOD2 | rs4880 | Manganese SOD | ↓ mitochondrial antioxidant |
| GPX1 | rs1050450 | Selenium / GSH-Px | ↓ glutathione peroxidase |
| GSTT1 | Deletion | Glutathione-S-trans | Null genotype → ↑ oxidative risk |
| NQO1 | rs1800566 | Coenzyme Q10 | ↓ CoQ10 regeneration |
| COMT | rs4680 | Catechol / B vitamins | Met/Val → methylation load |
parse_input.py)Accepts:
.txt or .csv (tab-separated: rsid, chromosome, position, genotype).csvAuto-detects format from header lines. Normalises alleles to forward strand using a hard-coded reference table (avoids requiring external databases).
extract_genotypes.py)For each SNP in the panel:
"AT", "TT", "AA")"NOT_TESTED" if absent (common for chip-to-chip variation)Palindromic SNPs. Three panel SNPs are palindromic, so strand cannot be told from the genotype: rs9939609 (FTO, T/A), rs12934922 (BCMO1, A/T) and rs1801282 (PPARG, C/G). Their calls are read as reported on the plus strand, which is how 23andMe and AncestryDNA export them. A file on the minus strand would score these three the wrong way round without warning.
score_variants.py)Each SNP is scored on a 0 / 0.5 / 1.0 scale by default:
0.0 — homozygous reference (lowest risk)0.5 — heterozygous1.0 — homozygous risk alleleLactose (rs4988235) uses inheritance: dominant_protective. One copy of the
persistence allele is enough, so AA and AG score as persistent (0.0) and only
GG scores as non-persistence (1.0).
Composite Nutrient Risk Scores (0–10) are computed per nutrient domain by summing weighted SNP scores. Weights are derived from reported effect sizes (beta coefficients or OR) in the primary literature.
Risk categories:
Important caveat: These are polygenic risk indicators based on common variants. They are not diagnostic. Rare pathogenic variants (e.g. MTHFR compound heterozygosity with high homocysteine) require clinical confirmation.
generate_report.py)Outputs a structured Markdown report with:
nutrigx_repro_bundle.py)Delegates to the shared clawbio.common.reproducibility layer and exports to
<output_dir>/reproducibility/ (not committed to the repo):
commands.sh — full CLI to reproduce analysisenvironment.yml — pinned conda environmentchecksums.sha256 — SHA-256 checksums of output files, labelled relative to
the output directory (verify with cd <output_dir> && sha256sum -c reproducibility/checksums.sha256); files that fail to generate abort the
bundle rather than being silently omittedprovenance.json — timestamp, ClawBio version tag, and SHA-256 checksums of
the input file and SNP panel# From 23andMe raw data
openclaw "Generate my personalised nutrition report from genome.csv"
# From VCF
openclaw "Run NutriGx analysis on variants.vcf and flag any folate pathway risks"
# Targeted query
openclaw "What does my APOE status mean for my saturated fat intake?"
# Generate a random demo patient and run the report
python examples/generate_patient.py --run
skills/nutrigx/
├── SKILL.md ← this file (agent instructions)
├── nutrigx.py ← main entry point
├── parse_input.py ← multi-format parser
├── extract_genotypes.py ← SNP lookup engine
├── score_variants.py ← risk scoring algorithm
├── generate_report.py ← Markdown + figures
├── nutrigx_repro_bundle.py ← reproducibility export
├── .gitignore
├── data/
│ └── snp_panel.json ← curated SNP definitions
├── tests/
│ ├── synthetic_patient.csv ← fixed 23andMe-format test data (for pytest)
│ ├── test_nutrigx.py ← pytest suite
│ └── test_repro_bundle.py ← reproducibility bundle tests
└── examples/
├── generate_patient.py ← random patient generator (demo use)
├── data/ ← generated patient files land here (gitignored)
└── output/
├── nutrigx_report.md ← pre-rendered demo report
├── nutrigx_radar.png ← demo radar chart (nutrient risk profile)
└── nutrigx_heatmap.png ← demo gene × nutrient heatmap
Note: Runtime output directories and randomly generated patient files are excluded from version control via
.gitignore. Only the pre-rendered demo report inexamples/output/is committed.
All computation runs locally. No genetic data is transmitted. Input files are read-only; no raw genotype data appears in any output file (reports contain only gene names, SNP IDs, and risk categories).
Symbolic links in the output path are refused. Report, figure and reproducibility files will not be written through a symlink, including a deliberately symlinked output directory; point --output at a real directory. On platforms without O_NOFOLLOW and dir_fd support (such as Windows) the same refusal is made with a less race-proof check.
Key literature underpinning the SNP panel and scoring algorithm:
rs953413, minor A allele with lower DHA). PMID 19148276.The SNP panel (data/snp_panel.json) is maintained by the skill author.
To suggest additions or corrections, contact David de Lorenzo directly via
GitHub (@drdaviddelorenzo) or open
an issue tagging him in the main ClawBio repository.