--- 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: - nutrigenomics - nutrition - diet - genetics - 23andme - ancestrydna - vcf openclaw: requires: bins: - python3 always: false emoji: πŸ₯¦ homepage: https://github.com/ClawBio/ClawBio os: - darwin - linux install: - kind: pip package: pandas numpy matplotlib seaborn - kind: pip package: reportlab trigger_keywords: - personalised nutrition - nutrigenomics - diet genetics - MTHFR - APOE - FTO - vitamin D - caffeine metabolism - lactose - omega-3 - folate - what should I eat based on my DNA - vitamin absorption genetics - gluten --- # NutriGx Advisor β€” Personalised Nutrition from Genetic Data **Author**: David de Lorenzo (ClawBio Community) **Requires**: Python 3.11+, pandas, numpy, matplotlib, seaborn, reportlab (optional) --- ## What This Skill Does 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** - Markdown nutrition report with risk scores and recommendations - Radar chart of nutrient risk profile - Gene Γ— nutrient heatmap - Reproducibility bundle (`commands.sh`, `environment.yml`, SHA-256 checksums) --- ## Trigger Phrases The Bio Orchestrator should route to this skill when the user says anything like: - "personalised nutrition", "nutrigenomics", "diet genetics" - "what should I eat based on my DNA" - "nutrient metabolism", "vitamin absorption genetics" - "MTHFR", "APOE", "FTO", "BCMO1", "VDR", "FADS1/2" - "folate", "omega-3", "vitamin D", "caffeine metabolism", "lactose", "gluten" - Input files: `.txt` or `.csv` (23andMe), `.csv` (AncestryDNA), `.vcf` --- ## Curated SNP Panel ### Macronutrient Metabolism | 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 | ### Micronutrient Metabolism | 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 | ### Omega-3 / Fatty Acid Metabolism | 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 | ### Caffeine & Alcohol | 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 | ### Food Sensitivities | 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 | ### Antioxidant & Detoxification | 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 | --- ## Algorithm ### 1. Input Parsing (`parse_input.py`) Accepts: - 23andMe `.txt` or `.csv` (tab-separated: rsid, chromosome, position, genotype) - AncestryDNA `.csv` - Standard VCF (extracts GT field) Auto-detects format from header lines. Normalises alleles to forward strand using a hard-coded reference table (avoids requiring external databases). ### 2. Genotype Extraction (`extract_genotypes.py`) For each SNP in the panel: 1. Look up rsid in parsed data 2. Return genotype string (e.g. `"AT"`, `"TT"`, `"AA"`) 3. Flag as `"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. ### 3. Risk Scoring (`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` β€” heterozygous - `1.0` β€” homozygous risk allele Lactose (`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: - **0–3**: Low risk β€” standard dietary advice applies - **3–6**: Moderate risk β€” dietary optimisation recommended - **6–10**: Elevated risk β€” consider testing and targeted supplementation > **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. ### 4. Report Generation (`generate_report.py`) Outputs a structured Markdown report with: - Executive summary (top 3 personalised findings) - Per-nutrient sections: genotype table β†’ interpretation β†’ recommendation - Radar chart (matplotlib) of nutrient risk scores - Gene Γ— nutrient heatmap (seaborn) - Supplement interactions table - Disclaimer section - Reproducibility block ### 5. Reproducibility Bundle (`nutrigx_repro_bundle.py`) Delegates to the shared `clawbio.common.reproducibility` layer and exports to `/reproducibility/` (not committed to the repo): - `commands.sh` β€” full CLI to reproduce analysis - `environment.yml` β€” pinned conda environment - `checksums.sha256` β€” SHA-256 checksums of output files, labelled relative to the output directory (verify with `cd && sha256sum -c reproducibility/checksums.sha256`); files that fail to generate abort the bundle rather than being silently omitted - `provenance.json` β€” timestamp, ClawBio version tag, and SHA-256 checksums of the input file and SNP panel --- ## Usage ```bash # 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 ``` --- ## File Structure ``` 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 in `examples/output/` is committed. --- ## Privacy 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). --- ## Limitations & Disclaimer **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. 1. **Not a medical device.** This skill provides educational, research-oriented nutrigenomics analysis. It does not constitute medical advice. 2. **Common variants only.** The panel covers SNPs with MAF > 1% in at least one major population. Rare pathogenic variants are out of scope. 3. **Population context.** Effect sizes are predominantly derived from European GWAS cohorts. Risk estimates may not generalise equally across all ancestries. 4. **Gene–environment interaction.** Genetic risk scores interact with baseline diet, lifestyle, microbiome, and epigenetic state. A "high risk" score does not mean a nutrient deficiency is present β€” it means the individual may benefit from monitoring. 5. **Simpson's Paradox note.** Population-level associations used to derive weights may not reflect individual trajectories (see Corpas 2025, *Nutrigenomics and the Ecological Fallacy*). --- ## Roadmap - [ ] **v0.2**: Microbiome Γ— genotype interaction module (16S rRNA input) - [ ] **v0.3**: Longitudinal tracking β€” compare reports across time - [ ] **v0.4**: HLA typing for immune-mediated food reactions (coeliac, gluten sensitivity) - [ ] **v0.5**: Integration with NeoTree neonatal data for maternal nutrition risk scoring - [ ] **v1.0**: Multi-omics integration (metabolomics + genomics + dietary recall) --- ## References Key literature underpinning the SNP panel and scoring algorithm: - Corbin JM & Ruczinski I (2023). Nutrigenomics: current state and future directions. *Annu Rev Nutr*. - Fenech M et al. (2011). Nutrigenetics and nutrigenomics: viewpoints on the current status. *J Nutrigenet Nutrigenomics*. - Stover PJ (2006). Influence of human genetic variation on nutritional requirements. *Am J Clin Nutr*. - Phillips CM (2013). Nutrigenetics and metabolic disease: current status and implications for personalised nutrition. *Nutrients*. - Minihane AM et al. (2015). APOE genotype, cardiovascular risk and responsiveness to dietary fat manipulation. *Proc Nutr Soc*. - Frayling TM et al. (2007). A common variant in the FTO gene is associated with body mass index. *Science*. - Pare G et al. (2010). MTHFR variants and cardiovascular risk. *Hum Genet*. - Lecerf JM & de Lorgeril M (2011). Dietary cholesterol: from physiology to cardiovascular risk. *Br J Nutr*. - Tanaka T et al. (2009). Genome-wide association study of plasma polyunsaturated fatty acids in the InCHIANTI Study. *PLoS Genet* (FADS1/2; ELOVL2 `rs953413`, minor A allele with lower DHA). PMID 19148276. - rs953413 regulates polyunsaturated fatty acid metabolism by modulating ELOVL2 expression (2020). *iScience* (G allele gives higher ELOVL2 enhancer activity than A). PMID 31928966. - Cornelis MC et al. (2006). Coffee, CYP1A2 genotype, and risk of myocardial infarction. *JAMA*. - Enattah NS et al. (2002). Identification of a variant associated with adult-type hypolactasia. *Nat Genet* 30:233–237. PMID 11788828. --- ## Contributing 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](https://github.com/drdaviddelorenzo)) or open an issue tagging him in the main ClawBio repository.