Skip to content

Rajiv-Sangle/channelscope

Repository files navigation

ChannelScope

ChannelScope builds standardized, provenance-tracked context-graph objects for multi-omic biology — the groundwork that purpose-specific "omic" models need. A validated proof of concept, it provides variant-to-structure-and-function interpretation for RYR1, the calcium-release channel behind malignant hyperthermia.

License: MIT Python Tests Built with

The RyR1 tetramer with the R614C malignant-hyperthermia variant (orange) mapped against its grounded functional elements — the Ca²⁺ activation site, ATP/caffeine and dantrolene pockets, the gate, and the inter-protomer interfaces — on the open-state cryo-EM template, assembled from cross-species experimental evidence and not de-novo predicted.

R614C (orange) placed on the assembled RyR1 tetramer, with every grounded functional element painted — each coordinate traced to a flagged cross-species template (assembled, not folded). · More renders & animations · Interactive R614C report — download & open in a browser.

Thesis. Using context graphs to build standardized, multi-modal / multi-omic data objects for purpose-specific "omic" foundation models — demonstrated on RYR1.

The method. Multi-omic biology is hard to learn from because the data arrives unstandardized, unlinked, and unprovenanced. ChannelScope assembles it into a standardized, gene-agnostic, provenance-tracked context-graph object: one portable schema in which every modality — structure, sequence, population genetics, energetics, function, clinical evidence — attaches to shared, typed entities (a variant, a residue, a conformational state), and every claim carries a citation and a confidence flag. Standardization is what makes these objects compose — across omic layers, across data sources, and across proteins.

flowchart LR
    subgraph IN [Disparate multi-omic data]
        direction TB
        S1["Structure<br/>cryo-EM · PDB"]
        S2["Sequence<br/>UniProt · transcript"]
        S3["Population genetics<br/>ClinVar · gnomAD"]
        S4["Energetics<br/>ΔΔG ensemble"]
        S5["Function &amp; clinical<br/>literature · phenotype"]
    end

    OBJ{{"Standardized context-graph object<br/>typed entities linked · provenance +<br/>confidence on every node and edge"}}

    S1 --> OBJ
    S2 --> OBJ
    S3 --> OBJ
    S4 --> OBJ
    S5 --> OBJ

    subgraph OUT [Composes and ports into]
        direction TB
        U1["Report + interactive 3D viewer"]
        U2["New proteins = config nodes<br/>not a rewrite"]
        U3["Cross-protein / -omic transfer"]
        U4["Purpose-specific 'omic' models"]
    end

    OBJ --> U1
    OBJ --> U2
    OBJ -.-> U3
    OBJ -.-> U4

    classDef hero stroke-width:3px,font-weight:bold
    classDef road stroke-dasharray:5 5
    class OBJ hero
    class U3,U4 road
Loading

Many disparate inputs converge into one standardized object; that standardization is what lets it fan back out — to a report and interactive 3D viewer, and, by the gene-agnostic design, to new proteins as config nodes rather than rewrites (solid). Dashed = roadmap: cross-protein / -omic transfer and purpose-specific "omic" models. A citation and a confidence flag ride every node and edge.

The proof of concept. We demonstrate it on a problem that is both important and unforgiving: variant-to-structure-and-function interpretation for RYR1, the ~2.2 MDa skeletal-muscle calcium-release channel behind malignant hyperthermia and the congenital myopathies. Give ChannelScope a gene and a variant and it assembles the best-available experimental and cross-species structural evidence — per domain and per conformational state — maps the variant onto it, and emits the object + a human-readable briefing + a self-contained interactive 3D report. It assembles evidence; it does not fold de novo.

What this is, stated plainly. A validated proof of concept of a generalizable method — not a finished product, and not a sketch. The RYR1 tool works and is validated (92 tests; an 18-variant retrospective benchmark, independently re-derived through a second code path). What is "proof of concept" is the generalization: that the same object and the same discipline extend to other channels and, in time, feed purpose-specific "omic" models. The same rigor that makes the tool refuse to invent a structural contact is what lets us claim the method generalizes — and mean it.

Status: research proof of concept, built during Built with Claude: Life Sciences (Jul 2026). APIs and outputs may change. Not a diagnostic device.

Jump to: The problem · How it works · The object · See it · Validation · Using it · Quick start · Roadmap · How it was built


The problem

RYR1 is a ~2.2 MDa homotetramer of ~5,000-residue protomers that gates between closed, primed, and open states. That puts it beyond de-novo folding servers (AlphaFold3's server caps a job around a single ~5,000-residue protomer — far short of the four-protomer tetramer — and returns one state-agnostic model), and — because there is no full-length human structure — its 3D shape is known only through cross-species cryo-EM (rabbit / pig), captured in specific states with specific ligands bound.

RYR1 tetramer with hundreds of disease-associated variants mapped across it; slide titled 'Every variant has its own story' from Prof. Filip Van Petegem's talk
"Every variant has its own story" — hundreds of the 700+ disease-associated RYR1 variants mapped onto the channel. Figure from Prof. Filip Van Petegem's talk (~26:10).

And every one of those variants is different — each sits in its own place in the channel, with its own mechanism for pushing it open or holding it shut. So when a novel missense variant appears, whether it matters can only be read from the structure itself; for Van Petegem's lab and the RYR-1 Foundation's growing patient registry, that is the interpretation every new variant demands:

Which experimental structure and state is the right template? Where does the residue sit? What does it touch — a Ca²⁺ site, a subunit interface, a drug pocket? Is the effect state-dependent? Does it destabilize the fold? What does ClinVar/gnomAD already say — and how confident are we in each answer?

That structural picture is the point — because it is therapeutic. Dantrolene, the drug that halts a malignant-hyperthermia crisis, works by lodging in one small pocket to hold the channel shut; seeing exactly where a patient's variant sits and what it perturbs is what lets a clinician reason about whether a known modulator — dantrolene, or a rycal — should still fit, or whether the variant points to a new, patient-specific site worth targeting.

This is the tool we set out to build — from our hackathon application ("be specific about the problem"): one that tells a scientist, residue by residue, what a patient's RYR1 mutation actually does to the channel. ChannelScope automates that variant-to-structure interpretation, turning the questions above into a reproducible pipeline that captures every answer, with its provenance, in one standardized object.


How it works

Every run flows through the same seven stages:

gene + variant  →  normalize → assemble → map → energetics → annotate → brief → render

Each stage is a pure function of public data, so the whole pipeline is reproducible and produces a portable context-graph object + a self-contained interactive 3D report.

Each stage answers one of the questions mentioned above in the problem:

# Stage What it does → the object it builds Honesty guard
1 normalize reconcile isoform / transcript / species numbering Residue + derived numbering_map the non-constant cross-species offset per residue — never one global constant
2 assemble retrieve + rank experimental structures per state StructureTemplate (one per state) experimental > cross-species homolog > fragment, each confidence-flagged
3 map place the variant per state; measure proximity in the assembled tetramer StatePlacement + Proximity the honest distance — never invents a site contact
4 energetics a ΔΔG ensemble (ThermoMPNN + RaSP; DDGun3D cross-check) a DDG on each placement one noisy, class-dependent signal (weakest for gain-of-function) — spread shown, never ground truth
5 annotate project ClinVar / gnomAD / literature onto the variant the five Omic layers + Evidence surfaces literature call ≠ current ClinVar label
6 brief compose stages 1–5 the populated ContextGraphObject coordinates stay fetch-pointers — regenerable, not a frozen snapshot
7 render compile the object → self-contained interactive 3D report (consumes the object) gaps render as gaps; cross-species flagged; provenance caption on every view

Read the "→ the object it builds" column top to bottom and you've watched the context-graph object get assembled, stage by stage.

Scope note — what it takes as input. ChannelScope runs on one canonical protein frame — UniProt P21817 (sequence version 3) / RefSeq NM_000540.3 — and takes the variant as protein HGVS (p.Arg614Cys). The pipeline and the 18-variant benchmark live entirely on that frame, so the validation depends on nothing outside it. Normalizing an arbitrary clinical input — a genomic coordinate on any build (GRCh38 / GRCh37), or cDNA on another transcript — onto that frame is today an agent-assisted, provenance-verified step, not yet a package feature; automating it (a VariantValidator / Ensembl-VEP-style front-end) is a scoped roadmap item. Flagged deliberately: the tool that won't invent a structural contact also won't imply an input it can't yet normalize.


The object

One standardized, composable context-graph object — the actual product.

The seven stages above all deposit into one shared object — this section is that object.

The pipeline's product is a standardized, gene-agnostic, provenance-tracked context-graph object (schema: what/ontology.md). It is a graph because the biology is a graph: a variant maps to a residue, which sits in a region, placed in each conformational state via a specific experimental template, near specific functional elements, implicated in a mechanism, grounded in evidence.

What's in it. Typed entities — Gene · Variant · Residue · StructuralRegion · ConformationalState · StructureTemplate · StatePlacement · FunctionalElement · Mechanism · Evidence — plus five omic layers hung on the variant/residue (structural · genetic-population · functional · clinical · pharmacological), and a Provenance record on every node and edge (source · identifier · re-runnable API call · confidence · verified flag). The renderer is a pure function of this object, so the same object drives the report prose and every figure.

flowchart LR
    V(["Variant"]) --> R["Residue<br/>+ derived numbering"]
    R --> SP["State placement<br/>closed · primed · open · drug-bound"]
    SP --> T["Structure template<br/>PDB · species · resolution"]
    SP --> P["Proximity to<br/>functional elements"]
    V --> M["Mechanism"]
    V --> O["Omic layers<br/>structural · genetic · functional · clinical · pharmacological"]
    M --> EV[("Evidence —<br/>a citation per claim")]
    P --> EV
    SP --> EV
    O --> EV
Loading

Why standardize — so objects compose. A shared, versioned schema is the precondition for composition: different omic layers attach to the same typed entities instead of living in silos; different data sources emit into the same shape with their provenance intact; and a new protein is just a new node.yaml (identifiers, states, templates, regions, functional elements) — config, not a rewrite. That is also what makes cross-system transfer thinkable: the same object shape that serves RYR1 today extends to RYR2, CACNA1S, and beyond, and related channels can eventually cross-inform one another.

FAIR by design. The three properties that paragraph just described — a shared versioned schema, open re-runnable access, and provenance on every edge — make the object Interoperable, Accessible, and Reusable: three of the four FAIR principles (Findable · Accessible · Interoperable · Reusable; Wilkinson et al., Sci. Data 2016). We hold the object to them — and name the one, Findability, where it falls short:

FAIR How the context-graph object embodies it Honest status
Findable a persistent identifier on every source (UniProt P21817 · RefSeq NM_000540.3 · PDB · ClinVar · gnomAD); rich typed metadata Partial — the emitted object has no minted PID / registry index yet
Accessible every field's provenance resolves to a public, logged, re-runnable API call over an open protocol Strong
Interoperable a versioned ontology + machine-readable JSON Schema; shared typed entities; qualified cross-references Strong (roadmap: bind terms to community ontologies)
Reusable MIT-licensed; a Provenance record on every node and edge; domain conventions (HGVS · ClinVar · ACMG) Strong

An honest self-assessment, in the same spirit as the input-normalization scope note above: the one partial — a registered persistent identifier for the emitted object (a DOI + repository deposit) — is a deliberate near-term gap, not a silent one.


See it in action

Every figure here and the interactive report are renders of the same standardized object (via its backend-neutral scene spec) — publication-style stills and the engine's own live 3D report — so they agree by construction, and every one carries the same honesty flag (assembled from cross-species templates, never folded).

R614C's engine-measured distance to every functional element in the open state; nearest is the N-terminal interface at 41.0 A.
The allosteric fingerprint. R614C's engine-measured distance to every functional element — nearest is 41 Å (it lines none of them). A pathogenic variant that acts at a distance, reported honestly rather than pinned to an invented contact.
The same functional elements on the closed apo state; the Ca2+ site is empty, the gate is shut, and unresolved density is ghosted.
State-dependence. The same sites on the closed apo state — the Ca²⁺ site empty, the gate shut — with unresolved (backbone-only) density shown honestly as ghosts, not silently closed.

The headline deliverable is the interactive R614C report (download & open in any browser): a confidence-encoded 3D viewer, the ΔΔG spread, and a re-runnable provenance trail — every fact linked to the exact public API call that produced it, plus a built-in key to the identifiers (PDB, UniProt, ClinVar…) so it reads on its own.

Three more cases that show the differentiators (the same report, other variants) — I4898T (lines the pore + the ClinVar-vs-literature flag) · T4826I (pathogenic yet ΔΔG-stabilizing) · G2060C (benign control — honest gap + honest ΔΔG skip).


What we found

Retrospective benchmark on 18 literature-documented RYR1 variants (malignant-hyperthermia / congenital-myopathy pathogenic variants vs. benign controls; ClinVar + gnomAD + literature), independently re-derived through a second code path (Biopython alignment + Biotite distances) that does not trust the engine.

Read it as two tiers. For all 18 we reproduced the basic facts — the right wild-type residue and the right cross-species residue number. For the 14 pathogenic variants (setting the 4 benign controls aside) we checked the interpretation: did the variant land in the right structural bucket (lines a site → abuts → domain-body → far-allosteric), and did the mechanism direction (gain- vs. loss-of-function) match the literature. The benign controls correctly draw no mechanism call.

Check Result
Wild-type residue identity 18 / 18
Numbering across the non-constant human↔rabbit/pig offset 18 / 18
Pathogenic variants in the correct structural bucket 14 / 14
Mechanism direction vs. the literature 14 / 14
Independent proximity re-measure vs. the engine matches ≤ 0.1 Å

Why this beats a single score:

  • T4826I is pathogenic for MH, yet the ΔΔG ensemble calls it mildly stabilizing — a stability-only or scalar tool miscalls it. ChannelScope surfaces the contradiction and points to gating / gain-of-function.
  • Interface hotspots resolve into a measured proximity spectrumlines the contact (I4898T 0.0 Å, R163C 3.4 Å) → abuts (G2434R 9.2 Å) → domain body (Y522S 33 Å) → far-allosteric (R614C 41 Å) — a graded structural reading no pathogenicity scalar (AlphaMissense) or regulatory model (AlphaGenome) expresses.

Curated, provenance-linked findings: how/deliverables/headline_findings.md.


Using it

  • Just use Claude Code! Point it at the repo and the agent orients itself automatically — the built-in context layer (CLAUDE.md operating guide → STATE.md live state → per-directory AGENTS.md routing) lets it read the project, absorb the standards, and start contributing with no hand-holding. It is how this was built (see How it was built) — and the fastest way to explore, run, extend, or interrogate it.
  • Run it (install) — pip install -e ., then the Quick start below to brief any variant on the canonical frame.
  • Extend it (new protein) — copy how/templates/node_protein/ and fill a node.yaml (identifiers · states · templates · regions · functional elements); the engine is gene-agnostic.
  • Look (no install) — browse the already-generated example outputs in how/deliverables/briefings/ (the interactive report, the text briefing, the standardized object). This door is for viewing pre-computed worked examples, not running your own.

Quick start

pip install -e .          # small, MIT, cloud/API-only stack (Python ≥ 3.10)

# regenerate the headline interactive report (fetches public data, ~30 s)
python -m channelscope.render RYR1 p.Arg614Cys r614c.html

# or drive the whole pipeline from Python
python -c "import channelscope; print(channelscope.briefing_summary(channelscope.build_briefing('RYR1','p.Arg614Cys')))"

Full setup, regeneration, and how to re-run the validation: REPRODUCE.md.


Proven today, and the roadmap

What we shipped this week is a validated proof of concept of a generalizable method. Here is the honest split between what that proves and what it points to — the right column is spoken as roadmap, never as a shipped capability:

Proven today · checkable in this repo Roadmap · the aim
The object a schema-validated context-graph object — five omic layers on shared entities, for RYR1 variants more layers (transcriptomic / proteomic); AlphaMissense / AlphaGenome consumed as layers, not competed with
Generalization gene-agnostic engine — a new protein is a node.yaml, not a rewrite (schema + template shipped) a second protein (RYR2) instantiated end-to-end
Trust every claim cited + confidence-flagged; independent second-code-path validation — 18/18 numbering, 14/14 mechanism already mature — nothing pending
Input one canonical frame (P21817 SV3), protein-HGVS in — the whole benchmark lives on it auto-normalize arbitrary clinical input (genomic / cDNA, any build) — a scoped front-end
Purpose-specific "omic" models not built yet — the object is the groundwork such a model would build on train purpose-specific models on these objects; cross-protein / cross-omic transfer (RYR2 informing RYR1)

Maturity: ● delivered & validated today · ◑ core shipped, a named extension still on the roadmap · ○ not built yet.

The immediate expansion is more proteins of the same class — large, multi-domain / multi-conformation proteins with rich experimental + cross-species structural data and clinically actionable variants, exactly where single-shot folding fails and per-state experimental templating adds unique value:

Tier Targets Disease context
0 · now RYR1 malignant hyperthermia, congenital myopathies
1 · immediate RYR2, CACNA1S, ITPR1 CPVT / arrhythmia · periodic paralysis · cerebellar ataxia
2 · channelopathies SCN1A/4A/5A, CACNA1A/1C, KCNQ1 / KCNH2 epilepsy, arrhythmia, migraine
3 · large muscle proteins TTN (titin), DMD, NEB, DYSF cardiomyopathies, muscular dystrophies

The conformational-state axis is the moat; the structure-to-therapy link (dantrolene / RyR1) is general.

What it complements. The best-known variant-effect models answer different questions, and ChannelScope is built to consume them, not compete. AlphaMissense returns one pathogenicity score — no where, no what it touches, no state — and on the gain-of-function channel variants behind MH, a scalar shares the same blind spot as a folding ΔΔG: both track fold stability, which gating variants barely change (evidence + citations). AlphaGenome reads regulation — expression, splicing — not protein structure. And folding the mutant is no answer either: RYR1 is too large for a single-shot server, and a lone substitution barely moves a predicted backbone, so the wild-type and variant models come back near-identical (Buel & Walters 2022). ChannelScope supplies the missing axis — the 3D, conformational-state-aware, provenance-tracked structural mechanism — then ingests the others as omic layers on the same object.

Why it generalizes — and can transfer. A new protein is a node.yaml, not a rewrite; the deeper claim is that related channels can cross-inform one another, because the biology is already coupled. RYR1's closest sibling RYR2 (cardiac) shares its architecture and gain-of-function logic, so a variant characterized in one is real evidence about the other; RYR1 is itself physically coupled to the dihydropyridine receptor (CaV1.1 / CACNA1S — a Tier-1 target above), whose conformational change gates it; and RyR channels gate in unison with their neighbours (the "coupled gating" Van Petegem 2012 describes). A standardized object spanning these coupled channels mirrors real biology rather than merely reusing code — and, in time, becomes the groundwork purpose-specific "omic" models are built on. (Roadmap, stated as vision.)


How it was built

Two Claude surfaces with a deliberate division of labour — build (Claude Code) and ground-and-verify (Claude Science) — sharing one repository so every grounding result and figure is a reproducible, provenance-tracked artifact. That division is the concrete embodiment of the "coding vs. function-exploration" duality, and it is how this project actually got built — which is also the product's thesis.

flowchart LR
    subgraph CC["Claude Code (Lumen)"]
        A["builds the engine, object model,<br/>92 tests, git, packaging"]
    end
    subgraph CS["Claude Science"]
        B["grounds the biology, runs the ΔΔG<br/>ensemble, renders, validates"]
    end
    A <-->|"one shared repo — async file handoff"| B
Loading

Claude Science's single most valuable contribution was adversarial: it re-derived the numbering and proximity through its own, independent code path (Biopython + Biotite) and confirmed a match to ≤ 0.1 Å — turning a demo into a benchmark.

The same discipline, turned inward. An early standing rule over-broadly dismissed the ΔΔG signal as "just noise"; gathering the evidence (five sources, each verified against the primary literature) refined it to class-dependent — a genuine signal for loss-of-function destabilization, weak and misleading for the gain-of-function / gating class — which is exactly why the tool reads T4826I (pathogenic yet stabilizing) correctly. The method caught, and corrected, its own over-claim; that self-correction is the point of a provenance-and-verification discipline, not an embarrassment to it.

Context-engineered for agents. The repo follows a documented knowledge-vault methodology (aDNA) — a what/ how/ who/ triad with an operating guide, a live-state file, and per-directory AGENTS.md routing: a built-in, agent-navigable context layer. An agent can be dropped in and onboard itself before writing a line — the product is a context graph, and the repo that builds it is organized the same way. That is why Claude Code could build this, and how you can pick it up.


Disclaimer

Research and interpretation-support tool. Not a diagnostic device.

License

MIT. Data are retrieved live from public sources under their own terms; the one redistributed source snapshot (Van Petegem 2012) is CC-BY.

Acknowledgements

  • Built with Claude Code and Claude Science during Built with Claude: Life Sciences (Anthropic × Cerebral Valley, with Gladstone Institutes).
  • Motivated by the residue-by-residue structural variant-curation work in structural-biology labs studying RYR1 — exemplified by Prof. Filip Van Petegem's public talk on RyR1 structure, gating, and disease.
  • Built with the inspiration from the patients and researchers served by The RYR-1 Foundation (RYR-1-related diseases; its patient registry is a standing pipeline of variants to interpret) and the Wilhelm Foundation (global undiagnosed-disease advocacy).
  • Where we're taking it next: we intend to build on ChannelScope and put it to use at the 5th Undiagnosed Hackathon (Wilhelm Foundation · Singapore · Sep 17–20, 2026) — bringing structural variant interpretation to real undiagnosed rare-disease cases from the Asia-Pacific.
  • Organized on the aDNA (Agentic DNA) knowledge-vault methodology — the agent-navigable context layer that let Claude Code build this.

About

Standardized, provenance-tracked context-graph objects for multi-omic biology - the substrate purpose-specific 'omic' models need. Validated on RYR1 variant-to-structure-and-function interpretation (malignant hyperthermia). Built with Claude Code + Claude Science.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors