Cnv Acmg Classifier logo

Cnv Acmg Classifier

OrganizationPopular
ClawBio
cnv-acmg-classifier

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.

Overview

PublisherClawBio
RepositoryClawBio
Skill namecnv-acmg-classifier
Stars
1.2K
Forks
280
Bundled files
8
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 8 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by ClawBio on GitHub. Read the source before you install it.

Installation

Install the Cnv Acmg Classifier AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/ClawBio/ClawBio/tree/main/skills/cnv-acmg-classifier
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/ClawBio/ClawBio.git /tmp/ClawBio
mkdir -p .claude/skills
cp -r /tmp/ClawBio/skills/cnv-acmg-classifier .claude/skills/cnv-acmg-classifier
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Cnv Acmg Classifier in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Cnv Acmg Classifier on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Cnv Acmg Classifier is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

🦖 CNV ACMG Classifier

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.

Trigger

Fire this skill when the user says any of:

  • "classify this CNV" / "classify this copy-number variant"
  • "is this deletion / duplication pathogenic?"
  • "ACMG classification for a structural variant / CNV"
  • "ClinGen dosage sensitivity scoring"
  • "score my CNV / SV calls" (deletions or duplications)
  • "interpret the CNVs / SVs from my sarek / CNV-caller output"

Do NOT fire when:

  • The user wants SNV/indel ACMG classification → route to clinical-variant-reporter.
  • The user wants to call CNVs/SVs from reads → route to nfcore-sarek-wrapper.
  • The user wants generic VCF annotation of small variants → route to 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.

Why This Exists

  • Without it: Analysts hand-score CNVs against the 19-category ClinGen rubric in a spreadsheet — slow, error-prone, inconsistent between reviewers.
  • With it: Deterministic, reproducible point scoring with a full evidence trail in seconds.
  • Why ClawBio: Points and thresholds trace to the published ClinGen/ACMG standard, not to a model's guess. The agent never invents dosage sensitivity.

Core Capabilities

  1. Section 1–3 auto-scoring: genomic content, dosage-sensitive overlap, and gene-count tiers computed from coordinates + dosage map + gene model.
  2. Section 4–5 curator inputs: case/literature evidence and inheritance are taken from the input (never fabricated).
  3. Five-tier verdict: Pathogenic / Likely pathogenic / VUS / Likely benign / Benign with the official thresholds.

Scope

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.

Input Formats

FormatExtensionRequired FieldsExample
Table.csv / .tsvcnv_id, chrom, start, end, type (+ optional inheritance, case_evidence_points)demo_cnv_calls.csv
VCF.vcf / .vcf.gzCHROM, POS, INFO SVTYPE + ENDsarek/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.

Workflow

  1. Validate: Check input columns (or VCF SVTYPE/END); normalise type to loss/gain.
  2. Process: For each CNV apply Section 1 (content), Section 2 (dosage/benign overlap), Section 3 (gene count), Section 4 (case evidence), Section 5 (inheritance).
  3. Generate: Sum points, round to 2 dp, map to the five-tier classification.
  4. Report: Write 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.

CLI Reference

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

Demo

bash
python 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).

Algorithm / Methodology

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.

  1. Section 1 — content: 1A (contains protein-coding/functional element) = 0.00; 1B (no functional content) = −0.60 (nothing further to score).
  2. Section 2 — dosage: 2A complete overlap of an established (score 3) HI region/gene (loss) or TS region/gene (gain) = +1.00; 2F complete containment in an established benign region = −1.00. Partial overlaps of an established HI gene are derived from breakpoint geometry (gene strand + coding boundaries), not a free-text flag: 2C-1 (+0.90) 5′ end deleted with coding sequence involved; 2C-2 (0.00) 5′ end, 5′UTR only; 2D-4 (+0.90) 3′ end deleted with coding exon(s) involved; 2D-1 (0.00) 3′ end, 3′UTR only; 2E intragenic (+0.90 if coding involved, else 0.00). Region-level partial overlaps and all gain partials = 2B (0.00, uncertain).
  3. Section 3 — gene number (per the ClinGen note, omitted only when a complete established call — 2A or 2F — is made; a 0-scoring partial such as 2B/2C-2/2D-1 still earns it, so a deletion that merely clips an established region but spans many genes is scored on size): loss → 0–24 (0.00) / 25–34 (+0.45) / ≥35 (+0.90); gain → 0–34 (0.00) / 35–49 (+0.45) / ≥50 (+0.90).
  4. Section 4 — case/literature: analyst-supplied aggregate points, clamped to ±0.90, always summed.
  5. Section 5 — inheritance: de novo (both parents tested) = +0.45; inherited from an unaffected parent = −0.30; always summed.

Key thresholds (source: ClinGen/ACMG 2019, Riggs 2020) — symmetric about zero:

  • Pathogenic ≥ +0.99; Likely pathogenic +0.90 to +0.98; VUS −0.89 to +0.89; Likely benign −0.90 to −0.98; Benign ≤ −0.99.
  • "Established" dosage sensitivity = ClinGen score 3 (sufficient evidence).

Example Queries

  • "Classify the deletions in this VCF with ACMG."
  • "Is a duplication spanning the 22q11.2 region pathogenic?"
  • "Score these CNV calls against ClinGen dosage sensitivity."

Example Output

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 Structure

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 artifact

Dependencies

Required: 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).

Gotchas

  • The model will want to treat the bundled dosage/gene files as authoritative for real cases. Do not. They are a small curated demonstration subset. For clinical work, pass --dosage-map (full ClinGen Dosage Sensitivity Map) and --gene-model (Gencode/RefSeq). Why: a missing dosage gene silently downgrades a true Pathogenic CNV.
  • The model will want to auto-mine Section 4/5 evidence. Do not. Case-level and inheritance evidence cannot be derived from coordinates; they must come from the input columns. The skill leaves them at 0 / unknown when absent and says so.
  • 2C-1 (+0.90) is derived from breakpoint geometry, not a flag. A partial deletion earns +0.90 only when geometry shows the 5′ end of an established HI gene is removed with coding sequence involved (or 3′ coding exons, or an intragenic coding deletion). A 5′UTR-only clip is 2C-2 (0.00) and a region-level partial is 2B (0.00). This avoids the over-call of crediting any coordinate overlap.
  • Scoring is additive — there is no terminal section. All applicable sections sum (Riggs 2020). A complete 2A deletion inherited from an unaffected parent is 1.00 + (−0.30) = 0.70 = VUS; a de novo 2A gain is 1.45 = Pathogenic. The model must not "lock in" a Pathogenic call at 2A and drop Sections 4/5.
  • Section 3 gene-count is omitted only on a complete established call (2A / 2F). A 0-scoring partial (2B / 2C-2 / 2D-1) still earns gene-count, so a deletion that merely clips an established region but spans ≥35 genes is scored Likely pathogenic rather than forced to VUS.
  • Coordinates must share a genome build with the dosage map and gene model (GRCh38 by default). Mixing GRCh37 calls with GRCh38 references produces silently wrong overlaps. Lift over first.
  • CN-notation on sex chromosomes is ambiguous. 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.
  • Gains are scored conservatively: a partial overlap of a triplosensitive element is not given positive points without breakpoint evidence, by design.

Safety

  • Local-first: No data upload; all processing is on-machine, stdlib-only, no network.
  • Disclaimer: Every report includes the ClawBio medical disclaimer.
  • Audit trail: A reproducibility bundle records the exact command.
  • No hallucinated science: All points and thresholds trace to the ClinGen/ACMG 2019 standard; the agent must not invent dosage sensitivity.

Agent Boundary

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.

Integration with Bio Orchestrator

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.

Maintenance

  • Review cadence: Re-evaluate when ClinGen releases a new Dosage Sensitivity Map or when ACMG updates the CNV standard.
  • Staleness signals: ClinGen score reassignments; a new build of the gene model; ACMG threshold revisions.
  • Deprecation: If superseded by an official ClinGen API wrapper, archive to skills/_deprecated/ with a pointer.

Citations

Self-Audit (SKILL.md Conformance Checklist)

CheckStatus
YAML name present, matches folderPASS
YAML version semverPASS
YAML author presentPASS
YAML description one line, specificPASS
YAML inputs with format and required flagPASS
YAML outputs with formatPASS
YAML trigger_keywords ≥ 3PASS (5)
Section ## Trigger fire / do-not-fire listsPASS
Section ## Scope one-skill-one-taskPASS
Section ## Workflow numbered stepsPASS
Section ## Example Output rendered samplePASS
Section ## Gotchas ≥ 3 entriesPASS (6)
Section ## Safety disclaimer referencedPASS
Section ## Agent Boundary presentPASS
Demo data file presentPASS
tests/ directory with ≥ 1 testPASS (24 tests)
SKILL.md under 500 linesPASS
agentskills validate (strictyaml spec)PASS

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Cnv Acmg Classifier AI skill do?

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.

Why use Cnv Acmg Classifier on TypingMind?

Because you install it once and use it with any model. Cnv Acmg Classifier is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Cnv Acmg Classifier in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/ClawBio/ClawBio/tree/main/skills/cnv-acmg-classifier. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Cnv Acmg Classifier?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Cnv Acmg Classifier?

As many as you like. As long as a model supports skills, you can use Cnv Acmg Classifier with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Cnv Acmg Classifier AI skill free?

Yes. It is published on GitHub by ClawBio under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇