agentsclimarketplace

Mol qc

Skill Curtisflo/karyon/skills/mol-qc

Legible, deterministic QC/qualification for bio-AI tool outputs — named-reason contracts + agent skills that compose with NVIDIA BioNeMo.

Install
npx -y skills add Curtisflo/karyon --skill mol-qc

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Deterministic validity / synthesizability / drug-likeness gate over GENERATED molecules with karyon — reject invalid, unsynthesizable, or out-of-range candidates with named reasons before trusting or ordering them. Use for molecule validity, SMILES sanitization, Ertl synthetic-accessibility screening, extreme MW/cLogP rejection, PAINS/Brenk structural-alert and Lipinski/Veber drug-likeness disclosure, or qualifying the output of a generative-chemistry model (e.g. NVIDIA BioNeMo GenMol / MolMIM) before downstream use.

The file declares its own license as Apache-2.0 AND CC-BY-4.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.3 KB, as published. Nobody here has run it

mol-qc — validity / synthesizability gate for generated molecules

A deterministic, legible validity / synthesizability / drug-likeness DRC for molecules a generative-chemistry model proposes. It catches what such a model can get wrong — an invalid valence that won't parse, a structure no chemist could synthesize, properties so extreme it isn't a small molecule — and returns a named reason for every flag, not just a score. No GPU, no network.

This is the programmatic version of the "inspect the molecule" sanity check generative-chemistry tools tell you to do by eye. The verdict separates disclosure from condemnation: the gate fails only broken or unmakeable molecules; structural alerts and drug-likeness notes are advisory disclosures, because PAINS / Rule-of-5 have well-known false positives (many marketed drugs hit them). Thresholds are medicinal-chemistry conventions — zero parameters fitted to accuracy.

contracttiercatches
INVALID_MOLECULEfailsdoes not parse / sanitize (bad valence or syntax)
UNSYNTHESIZABLEfailsErtl synthetic-accessibility score above the cap (not reasonably makeable)
EXTREME_PROPERTYfailsegregiously out of small-molecule range (MW > 900 / cLogP > 7)
STRUCTURAL_ALERTdisclosesPAINS / Brenk hits (assay-interference / reactive — advisory)
LIPINSKI_RO5discloses≥2 Rule-of-5 violations (drug-likeness note)
VEBERdisclosesrotatable bonds > 10 / TPSA > 140 (oral-bioavailability note)

Install

pip install "karyon[chem]"      # pulls rdkit

Usage

Gate a single generated molecule (inline SMILES), or a batch in a .smi file (one SMILES per line, optional name):

karyon qualify "CC(=O)Oc1ccccc1C(=O)O" --modality mol    # one molecule (inline → modality required)
karyon qualify generated.smi --modality mol              # a batch (.smi)
karyon qualify generated.smi --modality mol --json       # machine-readable, for an agent to branch on

Output is a PASS / FAIL verdict plus, per molecule, one line per fired contract — · for a disclosed advisory, for a condemning one. The exit code is non-zero on FAIL, so it gates a pipeline directly. --json emits the stable spine schema ({modality, ok, items:[{name, ok, score, reasons}], batch}); a molecule passes iff score == 0 (the disclose-tier alerts carry weight 0).

From Python:

from karyon import qualify
r = qualify("generated.smi", modality="mol")             # or qualify("CC(=O)O...", modality="mol")
for name, v in r.items:                                   # e.g. GenMol / MolMIM output
    if v.score > 0:
        print(f"REJECT {name} — {v.messages}")

Composition with NVIDIA BioNeMo

Install alongside genmol-nim (or the MolMIM generator): the model proposes molecules, this skill qualifies the batch, so the agent only carries forward valid, makeable candidates and can explain every rejection. It complements the generator's advisory validation with a programmatic verdict — it qualifies the output, it does not generate molecules.

Validation

Three pre-registered predictions (PI-1 and PI-2 PASS; PI-3 descriptive):

predictionresult
PI-1 instrument — real drugs pass, planted/invalid decoys flaggedAUROC 1.000, flag-decoy 100%, real-drug pass 99% (92 approved drugs)
PI-2 faithful — the gate faithfully composes the canonical RDKit primitivescomposition correctness 100% (gate INVALID/ALERT == fresh canonical RDKit calls) + owned Rule-of-5 100% vs hand computation
PI-3 effect — defect rates per generator (descriptive)un-gated raw SMILES ~100% invalid (the validity gate's headline catch); a structure-aware generator (BRICS) is valid but carries structural alerts ~19% — a weak-condemn / high-disclose gate

Honest posture (disclosed): RDKit is the cheminformatics engine here — so mol-qc composes canonical primitives (sanitization, descriptors, the PAINS/Brenk FilterCatalog, the Ertl SA score) into a legible deterministic gate rather than reimplementing them. Its faithfulness is correct composition + correct owned rules (both 100%), not an independent reimplementation; an attempted independent complexity corroboration (SA vs RDKit BertzCT) is weak (ρ≈0.36 — the two measure complexity differently) and is reported, not claimed. Qualification, not accuracy.

Scope (honest)

A fast, legible validity / synthesizability / drug-likeness gate (the cheap, certain checks), not a binding-affinity, ADMET, or potency predictor. It owns the single-molecule axis; pair it with receptor-aware or property-prediction tooling for the quantitative axes.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.