Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Classify structural variants / copy-number variants (deletions and duplications) using the ClinGen / ACMG 2019 (Riggs et al. 2020) point framework and return a five-tier classification with a per-section evidence trail. Germline CNV interpretation, not SNV/indel.
.claude/skills/clawbio-cnv-acmg-classifier/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 94% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 132% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 141% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 47% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 200% | 0% |
You are CNV ACMG Classifier, a specialised ClawBio agent for clinical genomics. Your role is to classify copy-number variants (deletions and duplications) using the ClinGen/ACMG 2019 point framework and return a transparent, five-tier verdict.
Fire this skill when the user says any of:
Do NOT fire when:
clinical-variant-reporter.nfcore-sarek-wrapper.variant-annotation / vcf-annotator.Design notes: The disambiguator is "copy-number / structural" (whole-gene dosage) versus single-nucleotide ACMG. If the variant is a DEL/DUP spanning genes, it belongs here.
One skill, one task. This skill classifies germline CNV/SV dosage effects and nothing else. It does not call variants, annotate SNVs, or predict phenotypes.
| Format | Extension | Required Fields | Example | |--------|-----------|-----------------|---------| | Table | .csv / .tsv | cnv_id, chrom, start, end, type (+ optional inheritance, case_evidence_points) | demo_cnv_calls.csv | | VCF | .vcf / .vcf.gz | CHROM, POS, INFO SVTYPE + END | sarek/Manta/CNVnator output |
Optional reference files: --dosage-map columns chrom,start,end,name,hi_score,ts_score,benign,element_type (element_type is gene or region) plus, for gene entries, strand and cds_start,cds_end (used to derive the 2C/2D breakpoint geometry; if omitted the whole gene is treated as coding); --gene-model columns chrom,start,end,gene. Partial-overlap sub-calls are computed from coordinates — there is no free-text loss-of-function flag.
report.md, result.json, tables/cnv_classifications.csv, and a reproducibility bundle.Freedom level: Scoring is prescriptive — points and thresholds are fixed by the standard. The agent may compose the narrative summary but must never alter a score or tier.
bash# Standard usage (bring your own dosage map + gene model for real work) python skills/cnv-acmg-classifier/cnv_acmg_classifier.py \ --input cnvs.vcf --dosage-map clingen_dosage.csv --gene-model gencode_genes.csv \ --output cnv_report # Demo mode (synthetic data, no user files needed) python skills/cnv-acmg-classifier/cnv_acmg_classifier.py --demo --output /tmp/cnv_demo # Via ClawBio runner python clawbio.py run cnv-acmg --demo
bashpython clawbio.py run cnv-acmg --demo
Expected output: a report classifying 7 synthetic CNVs covering all five ACMG tiers (2 Pathogenic, 2 Likely pathogenic, 1 VUS, 1 Likely benign, 1 Benign).
ClinGen/ACMG copy-number point framework (Riggs et al. 2020):
The five sections are additive — every applicable section contributes points and the total is their sum (there is no early stop on 2A or 2F). Consequently a complete 2A deletion inherited from an unaffected parent scores 1.00 + (−0.30) = 0.70 = VUS, and a de novo 2A gain scores 1.00 + 0.45 = 1.45 = Pathogenic — matching the ClinGen worked examples.
Key thresholds (source: ClinGen/ACMG 2019, Riggs 2020) — symmetric about zero:
markdown| CNV | Region | Type | Genes | Score | Classification | Evidence | |---|---|---|---:|---:|---|---| | CNV_P_TP53del | chr17:7,660,000-7,695,000 | loss | 1 | 1.00 | Pathogenic | 1A, 2A | | CNV_LP_TP53partial | chr17:7,680,000-7,700,000 | loss | 1 | 0.90 | Likely pathogenic | 1A, 2C-1, 3A | | CNV_B_benign | chr1:152,030,000-152,070,000 | loss | 1 | -1.00 | Benign | 1A, 2F | | CNV_VUS_inh | chr2:50,120,000-50,180,000 | loss | 1 | -0.30 | Variant of uncertain significance | 1A, 3A, 5B | | CNV_LB_caseev | chr2:50,120,000-50,180,000 | loss | 1 | -0.95 | Likely benign | 1A, 3A, 4, 5B | | CNV_P_dup22q | chr22:18,800,000-21,600,000 | gain | 3 | 1.45 | Pathogenic | 1A, 2A, 5A | | CNV_LP_genedense | chr19:51,990,000-52,410,000 | loss | 40 | 0.90 | Likely pathogenic | 1A, 3C |
output_directory/
├── report.md # Primary markdown report
├── result.json # Machine-readable classifications + evidence
├── tables/
│ └── cnv_classifications.csv # One row per CNV with evidence codes
└── reproducibility/
├── commands.sh # Exact command to reproduce
├── environment.yml # Conda env snapshot (conda-forge, nodefaults)
└── checksums.sha256 # SHA-256 of every output artifactRequired: Python ≥ 3.10 standard library only (no third-party packages).
Optional: a real ClinGen dosage map and a Gencode/RefSeq gene model for production scoring (the bundled curated files are for demonstration).
--dosage-map (full ClinGen Dosage Sensitivity Map) and --gene-model (Gencode/RefSeq). Why: a missing dosage gene silently downgrades a true Pathogenic CNV.CN1 on chrX/chrY is the normal hemizygous male state, so the skill refuses to auto-call it a loss and asks for an explicit DEL/DUP. CN0→loss and CN3+→gain are unambiguous.The agent (LLM) dispatches the skill and explains the verdict. The skill (Python) executes the scoring. The agent must NOT override points, thresholds, or tiers, nor assert dosage sensitivity not present in the dosage map.
Trigger conditions: the orchestrator routes here when input is a CNV/SV call set (DEL/DUP) and the user asks for ACMG/ClinGen classification.
Chaining partners:
nfcore-sarek-wrapper: SV/CNV VCFs from Sarek feed directly into this skill.clinical-variant-reporter: SNV/indel sibling; pair the two for a complete germline report.profile-report: structured result.json can roll up into a unified profile.skills/_deprecated/ with a pointer.| Check | Status | |-------|--------| | YAML name present, matches folder | PASS | | YAML version semver | PASS | | YAML author present | PASS | | YAML description one line, specific | PASS | | YAML inputs with format and required flag | PASS | | YAML outputs with format | PASS | | YAML trigger_keywords ≥ 3 | PASS (5) | | Section ## Trigger fire / do-not-fire lists | PASS | | Section ## Scope one-skill-one-task | PASS | | Section ## Workflow numbered steps | PASS | | Section ## Example Output rendered sample | PASS | | Section ## Gotchas ≥ 3 entries | PASS (6) | | Section ## Safety disclaimer referenced | PASS | | Section ## Agent Boundary present | PASS | | Demo data file present | PASS | | tests/ directory with ≥ 1 test | PASS (24 tests) | | SKILL.md under 500 lines | PASS | | agentskills validate (strictyaml spec) | PASS |
Other measured skills in the registry, with their headline benchmark lift.