Agent skill

Bio Virtual Screening

by GPTomics in GPTomics/bioSkills

Performs structure-based virtual screening using AutoDock Vina, SMINA, GNINA (CNN scoring), and DiffDock-L hybrid workflows with explicit choice rules across rigid vs flexible docking, cross-docking…

MITAuto-check passedResearch & Science

Install Bio Virtual Screening

skills CLI
$ npx skills add GPTomics/bioSkills --skill bio-virtual-screening -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install GPTomics/bioSkills bio-virtual-screening --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/GPTomics/bioSkills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/chemoinformatics/virtual-screening .claude/skills/bio-virtual-screening && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
bio-virtual-screening
GitHub stars
1.2k
Used in
2 other repos
Token cost
~6.1k tokens
SKILL.md length
2,237 words
Files
3
Skills in repo
552
Repo updated
First seen
Licence
MIT

At a glance

Performs structure-based virtual screening using AutoDock Vina, SMINA, GNINA (CNN scoring), and DiffDock-L hybrid workflows with explicit choice rules across rigid vs flexible docking, cross-docking…

  • Works in 5 steps: Apply a documented property/alert policy… → If known actives exist, test a… → Vina dock the filtered subset → …
  • Screening chemical libraries against a protein target to find candidate binders
  • SKILL.md covers Version Compatibility, Docking Tool Taxonomy, Decision Tree by Scenario and Receptor Preparation, plus 11 more sections
  • Runs Python scripts from its folder; calls pip

What it does

Bio Virtual Screening is an agent skill from GPTomics/bioSkills. Performs structure-based virtual screening using AutoDock Vina, SMINA, GNINA (CNN scoring), and DiffDock-L hybrid workflows with explicit choice rules across rigid vs flexible docking, cross-docking vs self-docking, binding-site detection (P2Rank, fpocket), receptor preparation (PDB2PQR, PROPKA), ligand preparation (meeko, OpenBabel), and ultralarge-library screening (ZINC22, Enamine REAL). Use when screening chemical libraries against a protein target to find candidate binders, ranking docking poses, or…

Its SKILL.md is about 6.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `examples/virtual_screen.py` and `usage-guide.md`).

It sits in Research & Science, covering Drug discovery and cheminformatics. The repository describes itself as: a set of SKILLS.md for doing bioinformatics with agents like claude code. The licence is MIT.

When your agent uses it

  • Screening chemical libraries against a protein target to find candidate binders
  • Ranking docking poses
  • Selecting a docking workflow for a specific scenario

Example prompts

  • “Use the bio-virtual-screening skill to perform structure-based virtual screening using AutoDock Vina, SMINA, GNINA (CNN scoring), and DiffDock-L…”
  • “/bio-virtual-screening”

Requirements

  • Python 3

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Apply a documented property/alert policy while retaining flagged and rejected counts
  2. If known actives exist, test a permissive 2D-similarity prefilter such as ECFP4 Tanimoto >=0.4 and measure active/chemotype retention
  3. Vina dock the filtered subset
  4. Rescore top 1% with GNINA
  5. Rescore top 0.1% with MM/GBSA or FEP

What it can do on your machine

Read from SKILL.md and the folder at commit d91ed3d. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships script files (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • pip

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • doi.org
    • github.com
    • vina.scripps.edu
    • autodock-vina.readthedocs.io
    • meeko.readthedocs.io
    • proceedings.iclr.cc
    • proceedings.mlr.press
    • zinc22.docking.org
    • enamine.net
    • ebi.ac.uk

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Bio Virtual Screening loads about 6.1k tokens when it runs. Until then it costs about 146 tokens; SKILL.md has 2,237 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~146
When it runs · the whole SKILL.md, loaded when a task matches
~6.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from GPTomics/bioSkills at commit d91ed3d, republished under its MIT licence (© GPTomics). 2,237 words, ~6,066 tokens.

Download SKILL.mdSave it as .claude/skills/bio-virtual-screening/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
bio-virtual-screening
description
Performs structure-based virtual screening using AutoDock Vina, SMINA, GNINA (CNN scoring), and DiffDock-L hybrid workflows with explicit choice rules across rigid vs flexible docking, cross-docking vs self-docking, binding-site detection (P2Rank, fpocket), receptor preparation (PDB2PQR, PROPKA), ligand preparation (meeko, OpenBabel), and ultralarge-library screening (ZINC22, Enamine REAL). Use when screening chemical libraries against a protein target to find candidate binders, ranking docking poses, or selecting a docking workflow for a specific scenario.
tool_type
python
primary_tool
AutoDock Vina

Version Compatibility

Reference examples tested with: AutoDock Vina 1.2.5+, SMINA 2020-12+, GNINA 1.1+ for rescore (GNINA 1.3+ for the six-mode interface documented below), RDKit 2024.09+, meeko 0.5+, P2Rank 2.4+, ProDy 2.4+, pdb2pqr 3.6+.

Before using code patterns, verify installed versions match. If versions differ:

  • Python: pip show <package> then help(module.function) to check signatures
  • CLI: vina --version; gnina --version; smina --version

If code throws ImportError, AttributeError, or TypeError, introspect the installed package and adapt the example to match the actual API rather than retrying.

Virtual Screening

Screen chemical libraries against protein targets via molecular docking. Vina is the de-facto default, SMINA adds flexibility (Vinardo scoring, custom scoring), and GNINA adds CNN-based pose scoring (Top-1 redock 58%->73% over Vina, cross-dock 27%->37%). Deep-learning docking (DiffDock-L, EquiBind, NeuralPLexer) competes in pose accuracy, but physical validity is method- and dataset-dependent; the workflow therefore combines ML pose sampling with classical scoring and explicit geometry checks. For ultralarge libraries (>1M), library preparation, hierarchical filtering, and HPC orchestration become the limiting steps.

For pose physical-validity QC, see chemoinformatics/pose-validation. For ML-driven docking + rescoring, see chemoinformatics/ml-docking-rescoring. For covalent docking, see chemoinformatics/covalent-design. For affinity calculations (FEP), see chemoinformatics/free-energy-calculations.

Docking Tool Taxonomy

ToolScoringSpeed (sec/lig)Best atFails when
AutoDock Vina 1.2Vina (empirical)Hardware- and settings-dependentOpen, well-characterized baselineCross-dock; cryptic pockets; metal centers
SMINAVina + flexible + customHardware- and settings-dependentCustom scoring; flexible side chainsSame Vina-scoring caveats
VinardoModified Vina scoringHardware- and settings-dependentAlternative empirical scoreValidate on target-relevant controls
GNINA 1.1CNN or Vina scoringGPU- and settings-dependentCNN-assisted pose rankingValidate transfer to the target and chemotype
AutoDock 4AD4 + grid mapsHardware- and settings-dependentLegacy referenceMore setup than Vina
DOCK 6/7DOCK + AmberHardware- and settings-dependentUCSF DOCK ecosystemSteep learning curve
Glide (Schrodinger)GlideScoreLicense and hardware-dependentCommercial docking workflowLicense cost
GOLD (CCDC)GOLDScore / ChemScoreLicense and hardware-dependentCommercial workflow; metal optionsLicense cost
FlexX (BioSolveIT)FlexXLicense and hardware-dependentFragment-based placementLicense cost
rDockrDockHardware- and settings-dependentOpen-source alternativeValidate maintenance and target fit
DiffDock-LDiffusion-generativeGPU- and settings-dependentPose sampling for cross-dockingValidate geometry with PoseBusters; see ml-docking-rescoring
EquiBindEquivariant NNGPU- and settings-dependentSingle-shot pose generationRequires independent geometry and ranking checks
Boltz-2 + GNINA rescoreFoundation model + CNNGPU- and settings-dependentExperimental multi-model workflowBenchmark each evidence stream independently

Decision: Use Vina as an open baseline and consider GNINA CNN rescoring when target-relevant redocking or cross-docking controls support it. For large libraries, calibrate a hierarchical Vina -> GNINA -> higher-cost follow-up workflow on measured enrichment, throughput, and retained chemotype diversity.

Decision Tree by Scenario

ScenarioRecommended workflow
Self-dock against known ligand pocketGNINA gnina --cnn_scoring rescore
Cross-dock to apo or related-target structureDiffDock-L pose + GNINA rescore + PoseBusters
Ultralarge library (10M+)Calibrated hierarchical screen: property/alert triage -> Vina -> measured top fraction to GNINA -> higher-cost follow-up
Cryptic pocket / induced fitReceptor-ensemble docking and, where appropriate, a separately validated complex-prediction model
Allosteric / undefined siteP2Rank for pocket detection -> ensemble dock all pockets
Metal-coordinated ligandGOLD (commercial) or manually parameterize Vina metal scoring
Covalent inhibitorSee chemoinformatics/covalent-design: DOCKovalent, HCovDock
Fragment screen (<300 Da)rDock or constrained Vina with seed atoms
Hit-to-lead refinementUse co-crystal structure if available; MD-relaxed receptor; FEP for affinity

Receptor Preparation

Goal: Convert a protein PDB into a docking-ready format with correct protonation, missing atoms, and removed waters.

Approach: Decide which ligands, cofactors, metals, and structural waters to retain -> fill missing heavy atoms with a structure-repair tool such as PDBFixer -> use PROPKA/PDB2PQR plus manual review to assign pH-dependent protonation -> assign the charge model required by the docking workflow -> prepare receptor PDBQT with a documented AutoDock-compatible tool.

python
import subprocess
from pathlib import Path

def prepare_receptor(repaired_pdb, pdbqt_out, pH=7.4):
    # Decide which waters/cofactors/metals to retain before this function.
    base = str(Path(repaired_pdb).with_suffix(''))
    pqr_file = f'{base}_pH{pH}.pqr'
    subprocess.run(['pdb2pqr', '--ff=AMBER', f'--with-ph={pH}',
                    repaired_pdb, pqr_file], check=True)
    output_basename = str(Path(pdbqt_out).with_suffix(''))
    subprocess.run(['mk_prepare_receptor.py', '--read_pqr', pqr_file,
                    '-o', output_basename, '-p'], check=True)
    return pdbqt_out

Common pitfall: Forgetting to add hydrogens at protein pH (7.4) but using pH 7.0 ligand charges. Hist mistakenly protonated. Use PROPKA + manual review of catalytic residues.

Ligand Preparation

Goal: Generate a 3D, docking-ready ligand file from SMILES with appropriate protonation and conformation.

Approach: Supply a documented protomer/tautomer state generated by an appropriate pKa/protomer workflow -> parse it with RDKit -> embed 3D with ETKDGv3 -> minimize with MMFF94 -> write PDBQT with Meeko. MolFromSmiles parses the supplied state and Uncharger neutralizes formal charges; neither predicts protonation at pH 7.4.

python
from rdkit import Chem
from rdkit.Chem import AllChem
from meeko import MoleculePreparation, PDBQTWriterLegacy

def prepare_ligand(smiles, pdbqt_out):
    mol = Chem.MolFromSmiles(smiles)
    if mol is None:
        raise ValueError(f'invalid SMILES: {smiles}')
    mol = Chem.AddHs(mol)
    embed_status = AllChem.EmbedMolecule(mol, AllChem.ETKDGv3())
    if embed_status != 0:
        raise RuntimeError('ETKDGv3 failed to generate a ligand conformer')
    if not AllChem.MMFFHasAllMoleculeParams(mol):
        raise ValueError('MMFF94 parameters are unavailable for this ligand')
    optimization_status = AllChem.MMFFOptimizeMolecule(mol)
    if optimization_status != 0:
        raise RuntimeError('MMFF94 ligand optimization did not converge')

    # meeko 0.5+ API: prepare() returns a list of MoleculeSetup objects;
    # use PDBQTWriterLegacy.write_string() to materialize the PDBQT block.
    mk_prep = MoleculePreparation()
    setups = mk_prep.prepare(mol)
    pdbqt_text, is_ok, err = PDBQTWriterLegacy.write_string(setups[0])
    if not is_ok:
        raise RuntimeError(f'meeko PDBQT export failed: {err}')
    with open(pdbqt_out, 'w') as f:
        f.write(pdbqt_text)
    return pdbqt_out

meeko (AutoDock developers' tool) handles torsion tree creation, rotamer flagging, and PDBQT writing -- preferred over Open Babel's PDBQT writer. Note: meeko 0.5+ separated the writer (PDBQTWriterLegacy) from MoleculePreparation; older code using prep.write_pdbqt_file() is deprecated.

Binding Site Detection

When the binding pocket is not known (apo target, novel allosteric site):

ToolApproachOutput
P2Rank (Krivak 2018)ML on protein surface descriptorsRanked pocket list with center coords
fpocket (Le Guilloux 2009)Voronoi tessellationPocket descriptor list
DoGSiteScorerGeometric + drugabilityPocket list with score
AutoSite (Vina)Affinity map clusteringPocket centers
AlphaFillTransplant ligands/cofactors from homologous experimental structures into AlphaFold modelsPlausible binding-site components for review
bash
prank predict -f receptor.pdb -o pockets/

P2Rank output <receptor>_predictions.csv lists pocket centers with scores. The highest model score does not identify a pocket as orthosteric or biologically relevant; verify ranked pockets against co-crystal, mutagenesis, SAR, or other structural evidence.

Vina Docking (Single Ligand)

python
# AutoDock Vina Python API requires Vina 1.2+; for Vina 1.1 use subprocess CLI:
# subprocess.run(['vina', '--receptor', ..., '--ligand', ..., '--center_x', ...], check=True)
from vina import Vina

def dock_single(receptor_pdbqt, ligand_pdbqt, center, box_size,
                exhaustiveness=8, n_poses=10):
    v = Vina(sf_name='vina')
    v.set_receptor(receptor_pdbqt)
    v.set_ligand_from_file(ligand_pdbqt)
    v.compute_vina_maps(center=center, box_size=box_size)
    v.dock(exhaustiveness=exhaustiveness, n_poses=n_poses)
    return v.energies(), v.poses()

Exhaustiveness: 8 is the Vina default. Increasing it increases search effort, but runtime and pose recovery depend on hardware, ligand flexibility, box size, and software version. Benchmark settings such as 8, 16, 32, and 64 on target-relevant controls instead of assigning universal timing or quality labels.

Vina's rmsd_lb and rmsd_ub are lower and upper heavy-atom RMSD bounds between a reported mode and the best-scoring mode; the bounds differ in how symmetry-equivalent atoms are handled. They are not pose-versus-experimental-reference RMSDs. Use an external symmetry-aware RMSD to a reference pose for accuracy QC.

GNINA with CNN Scoring (modern default)

bash
gnina -r receptor.pdb -l ligand.sdf \
      --autobox_ligand reference_ligand.sdf \
      --cnn_scoring rescore \
      -o poses.sdf.gz \
      --num_modes 9 --exhaustiveness 8

--cnn_scoring:

  • none: no CNN; use the selected empirical scoring function throughout
  • rescore (default): use empirical scoring during the search, then CNN-rerank the final poses; least computationally expensive CNN option
  • refinement: use the CNN to refine poses after Monte Carlo chains and to rank the final poses; approximately 10 times slower than rescore on a GPU in the official documentation
  • metrorescore: use CNN scoring in the Metropolis search and rescore the resulting poses
  • metrorefine: use CNN scoring in the Metropolis search and refine the resulting poses
  • all: use the CNN scoring function throughout; the official documentation describes this as extremely computationally intensive and not recommended

The six choices above are from GNINA 1.3. Earlier releases expose a smaller set; check gnina --help for the installed executable rather than assuming every mode is available.

--autobox_ligand: define box from reference ligand SDF/PDB. Otherwise specify --center_x/y/z + --size_x/y/z.

Critical: GNINA distributions include multiple named CNN models/ensembles rather than one universally described "PDBbind 2019" model. Record the selected model or ensemble and validate it with known co-crystal redocking and, when relevant, cross-docking controls.

Virtual Screening Pipeline (Hierarchical)

Goal: Screen 10M-compound library down to top-1k candidates for follow-up.

Approach: Three-stage filter. The 1% and top-1000 selections below are repository starting heuristics; choose production cutoffs from target-relevant enrichment, diversity, and throughput measurements.

Pseudo-code skeleton (orchestrator). Each helper function delegates to a dedicated skill: drug-likeness filter to chemoinformatics/admet-prediction, single-ligand Vina/GNINA to dock_single defined earlier in this skill, PoseBusters QC to chemoinformatics/pose-validation.

python
import pandas as pd
from concurrent.futures import ProcessPoolExecutor
from functools import partial

# Stub helpers to be implemented per project; see the cross-referenced skills.
def drug_like_filter(df):
    raise NotImplementedError('Implement via chemoinformatics/admet-prediction (Lipinski+Veber+PAINS)')
def vina_dock(smi, receptor_pdbqt, center, box):
    raise NotImplementedError('Wrap dock_single() above; return best affinity')
def gnina_rescore(smi, receptor_pdbqt, center, box):
    raise NotImplementedError('Wrap gnina --cnn_scoring rescore subprocess call')
def pose_validate(df):
    raise NotImplementedError('Implement via chemoinformatics/pose-validation (PoseBusters)')

def vs_pipeline(library_smi, receptor_pdbqt, center, box, output_dir, n_workers=16):
    df = pd.read_csv(library_smi)
    df_stage1 = drug_like_filter(df)

    worker = partial(vina_dock, receptor_pdbqt=receptor_pdbqt,
                     center=center, box=box)
    with ProcessPoolExecutor(max_workers=n_workers) as ex:
        affinities = list(ex.map(worker, df_stage1['smiles']))
    df_stage1['vina_affinity'] = affinities
    df_stage2 = df_stage1.nsmallest(int(len(df_stage1) * 0.01), 'vina_affinity')

    df_stage2['gnina_affinity'] = df_stage2['smiles'].apply(
        lambda smi: gnina_rescore(smi, receptor_pdbqt, center, box))
    df_stage3 = df_stage2.nsmallest(1000, 'gnina_affinity')

    return pose_validate(df_stage3)

For very large libraries, use a restartable scheduler-backed workflow and measure throughput on a representative tranche. Record hardware, software version, box dimensions, ligand flexibility, and failure rate with every throughput estimate.

Ultralarge Library Screening (ZINC22, Enamine REAL)

LibraryScopeTypical accessVerification requirement
ZINC22Purchasable and make-on-demand compoundsTranche/download interfacesRecord the tranche query and retrieval date
Enamine REALMake-on-demand compoundsProvider files or search interfaceRecord product-space release and retrieval date
Enamine HTSScreening collectionProvider filesConfirm current stock/version with the provider
MculeAggregated purchasable compoundsProvider search/exportRecord filters and retrieval date
ChEMBLCurated compounds and bioactivitiesVersioned database releaseRecord ChEMBL release and extraction query

Library sizes and availability change frequently. Obtain counts from the provider or versioned database at execution time rather than copying a static total into a workflow.

For ultralarge VS, the following percentages and thresholds are repository starting heuristics that must be calibrated for the target and library:

  1. Apply a documented property/alert policy while retaining flagged and rejected counts
  2. If known actives exist, test a permissive 2D-similarity prefilter such as ECFP4 Tanimoto >=0.4 and measure active/chemotype retention
  3. Vina dock the filtered subset
  4. Rescore top 1% with GNINA
  5. Rescore top 0.1% with MM/GBSA or FEP

Lyu et al. (2019) screened 170 million make-on-demand compounds against AmpC and the D4 dopamine receptor. Of 549 D4 candidates synthesized and tested, 81 were new active chemotypes and 30 had submicromolar activity.

Show full SKILL.md (837 more words)Show less

Per-Tool Failure Modes

Vina -- cross-dock failure

Trigger: Receptor structure not the holo (co-crystal with ligand from another binder).

Mechanism: Cross-docking introduces receptor-conformation mismatch, so pose recovery can be substantially worse than self-docking; the size of the decrease is benchmark- and target-dependent.

Symptom: Top-ranked pose makes no geometric sense; key contacts missing.

Fix: GNINA CNN scoring or ensemble docking. For genuine apo, predict holo with AlphaFold3 / Boltz-1 then dock.

GNINA CNN -- novel chemotype out-of-distribution

Trigger: Ligand chemotype not in PDBbind training.

Mechanism: CNN scoring overfits to PDBbind chemotypes; novel macrocycle / peptide / PROTAC scores poorly.

Symptom: Affinity prediction far worse than Vina alone.

Fix: Use --cnn_scoring rescore (sampling still by Vina) rather than CNN sampling. Validate against co-crystal of close analog.

Box too small

Trigger: Binding box defined tightly around small ligand reference.

Mechanism: Vina explores only within the box; large analogs cannot fit.

Symptom: Many ligands report "no valid pose"; chemotype-biased hits.

Fix: Derive the box from the reference ligand or known pocket and add enough explicit padding for the largest intended ligands to translate and rotate. Then verify containment and redocking/search convergence on controls. There is no universal padding value or 25 A cube that fits every ligand series.

Multi-pocket protein -- wrong site

Trigger: Protein has multiple binding sites (orthosteric + allosteric).

Mechanism: P2Rank or AutoBox picks the most "drugable" pocket; not always the desired one.

Symptom: Hits dock in wrong pocket; SAR confusing.

Fix: Verify pocket from co-crystal data; explicitly set center_x/y/z from known ligand centroid.

DiffDock-L -- PoseBusters invalid

Trigger: Default DiffDock-L output for any receptor.

Mechanism: Diffusion-generated poses are not guaranteed to satisfy every bond-geometry, stereochemistry, and intermolecular-clash check; failure rates vary by method and benchmark.

Symptom: Poses look reasonable but fail PoseBusters checks.

Fix: Filter to PB-valid (PoseBusters); rescore with GNINA. See chemoinformatics/pose-validation.

Wrong ionization state

Trigger: Ligand or receptor residues protonated incorrectly at pH 7.4.

Mechanism: Aspartate/glutamate/histidine protonation depends on local environment; default protonation may be wrong.

Symptom: Salt bridges missing; poses misranked.

Fix: Run PROPKA on the receptor to estimate residue pKas; for catalytic histidines, manually inspect protonation and tautomer state in the local environment.

Reconciliation: Vina vs GNINA Disagreement

Vina top poseGNINA top poseAction
Same pose, similar scoreSame pose, similar scoreTreat agreement as supporting evidence; still run physical-validity checks
Vina top pose ≠ GNINA top poseSame pocket, different orientationRetain both and compare against target-relevant controls or interaction evidence
Vina excellent, GNINA mediocreDifferent pose, very different scoreInspect both poses; do not infer which method is correct from score disagreement alone
Both poor scoresMany ligands score similarly poorWrong pocket / protein conformation; reconsider receptor

Common Errors

SymptomCauseFix
Vina segfaultPDBQT corrupted (atom names)Re-prep with meeko
GNINA hangsGPU OOMReduce concurrent work and, if fewer output poses are acceptable, use --num_modes 5
All affinities very poor (-3 to -5)Wrong protonation; ligand too large for boxRe-check pKa; expand box
Identical affinity across ligandsReceptor grid not computedCall v.compute_vina_maps() before dock
Pose poses make no senseReceptor and ligand in different framesEnsure same coordinate origin
Metal-coordination pose is wrongThe selected scoring/preparation protocol lacks a validated model for that metal geometryUse a metal-specific validated workflow; the Vina executable can use AutoDock4Zn maps with --scoring ad4 for zinc, while other metals require separately supported parameters/protocols
GPU mode slowVina is CPU-only; only GNINA is GPUUse GNINA for GPU; Vina is multi-core CPU

References

  • chemoinformatics/molecular-io - Parse ligands
  • chemoinformatics/conformer-generation - Generate 3D for ligand prep
  • chemoinformatics/molecular-standardization - Canonicalize before docking
  • chemoinformatics/pose-validation - PoseBusters physical-validity QC
  • chemoinformatics/ml-docking-rescoring - DiffDock-L + GNINA hybrid
  • chemoinformatics/covalent-design - Covalent docking
  • chemoinformatics/free-energy-calculations - FEP for refined affinity
  • chemoinformatics/admet-prediction - Filter library before docking
  • structural-biology/structure-io - PDB / mmCIF handling
  • structural-biology/modern-structure-prediction - AlphaFold3 / Boltz-1 for apo receptors

© GPTomics, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files in chemoinformatics/virtual-screening of GPTomics/bioSkills.

  • SKILL.md
  • examples/virtual_screen.py
  • usage-guide.md

Open the folder on GitHubat commit d91ed3d

Used in 2 other repositories

We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 2 other GitHub owners. This page covers the copy in GPTomics/bioSkills, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Bio Virtual Screening next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Bio Virtual Screening compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Bio Virtual Screening this skillGPTomics/bioSkills1.2k2 repos~6.1kAutomated safety check: PassMIT
MolecodeAtomFlow-AI/MoleCode305—~1.9kAutomated safety check: PassMIT
Drug DiscoveryTommy-yw/RunbookHermes5461 repos~2.3kAutomated safety check: PassMIT
DiffDock Molecular DockingK-Dense-AI/scientific-agent-skills48k1 repos~3kAutomated safety check: NotesMIT
Biomedical Analysis Dispatchxjtulyc/MedgeClaw6171 repos~2kAutomated safety check: PassNone
Edu Chem Reactionwy51ai/edulab1.4k—~1.2kAutomated safety check: PassApache-2.0

Similar skills

  • Molecode

    AtomFlow-AI/MoleCode

    A skill your agent uses for deterministic molecule understanding, graph-level editing, generation, and validation with MoleCode — an explicit Mermaid graph in which every atom and bond is a typed…

    305 GitHub stars~1.9k tokensUpdated 4 mo ago
    Research & ScienceAuto-check passed
  • Drug Discovery

    Tommy-yw/RunbookHermes

    Pharmaceutical research assistant for drug discovery workflows.

    546 GitHub starsUsed in 1 repo~2.3k tokens
    Research & ScienceAuto-check passed
  • DiffDock Molecular Docking

    K-Dense-AI/scientific-agent-skills

    Predicts how small molecules bind to a protein with DiffDock, covering batch docking, pose ranking by confidence and checks on the results; not for binding affinity.

    48k GitHub starsUsed in 1 repo~3k tokens
    Research & ScienceAuto-check: notes
  • Routes bioinformatics, drug discovery, clinical and multi-omics tasks from a chat interface to Claude Code sessions running K-Dense scientific skills, with a live dashboard per task.

    617 GitHub starsUsed in 1 repo~2k tokens
    Research & ScienceAuto-check passed
  • Edu Chem Reaction

    wy51ai/edulab

    把一个化学反应做成自包含的微观 3D 交互演示网页:左/上为 Three.js 可交互分子动画 (拖滑块看断键·成键·原子重组,分步高亮),右为 KaTeX 反应方程 + 分步讲解 + 原子守恒计数 + 可选能量-反应进程曲线。支持三入口——给定文字反应/方程、随机出题、上传图片识别后演示。

    1.4k GitHub stars~1.2k tokensUpdated 10 days ago
    Research & ScienceAuto-check passed
  • Biopipelines

    locbp-uzh/biopipelines

    Design and run computational protein and ligand workflows on a GPU: binder and enzyme design, de novo backbone generation, inverse folding and sequence redesign, structure prediction, protein-ligand…

    109 GitHub stars~2.4k tokensUpdated 8 days ago
    Research & ScienceAuto-check passed

More from GPTomics/bioSkills

All 552 skills in this repo
  • Bio Alignment Io

    GPTomics/bioSkills

    Read, write, and convert multiple sequence alignment files using Biopython Bio.AlignIO.

    1.2k GitHub starsUsed in 3 repos~4.9k tokens
    Auto-check passed
  • bioSkills Installer

    GPTomics/bioSkills

    Installs the bioSkills collection of 425 bioinformatics skills in one step, or only chosen categories, so sequencing, RNA-seq, single-cell and variant tasks get specialized help.

    1.2k GitHub starsUsed in 1 repo~789 tokens
    Auto-check passed
  • Bio Write Sequences

    GPTomics/bioSkills

    Write biological sequences to files (FASTA, FASTQ, GenBank, EMBL) using Biopython Bio.SeqIO.

    1.2k GitHub starsUsed in 3 repos~2.1k tokens
    Auto-check passed
  • Amplicon Primer Clipping

    GPTomics/bioSkills

    Soft- or hard-clips PCR primer footprints from aligned amplicon BAMs so primer bases stop masquerading as confirmed reference sequence.

    1.2k GitHub starsUsed in 2 repos~2.2k tokens
    Auto-check passed
  • Bio Alignment Indexing

    GPTomics/bioSkills

    Create and use BAI/CSI indices for BAM/CRAM files using samtools and pysam.

    1.2k GitHub starsUsed in 2 repos~2.4k tokens
    Auto-check passed
  • Bio Alignment Sorting

    GPTomics/bioSkills

    Sort alignment files by coordinate or read name using samtools and pysam.

    1.2k GitHub starsUsed in 2 repos~2.6k tokens
    Auto-check passed

Questions about Bio Virtual Screening

What does Bio Virtual Screening do?

Performs structure-based virtual screening using AutoDock Vina, SMINA, GNINA (CNN scoring), and DiffDock-L hybrid workflows with explicit choice rules across rigid vs flexible docking, cross-docking…. Bio Virtual Screening is an agent skill from GPTomics/bioSkills. Performs structure-based virtual screening using AutoDock Vina, SMINA, GNINA (CNN scoring), and DiffDock-L hybrid workflows with explicit choice rules across rigid vs flexible docking, cross-docking vs self-docking, binding-site detection (P2Rank, fpocket), receptor preparation (PDB2PQR, PROPKA), ligand preparation (meeko, OpenBabel), and ultralarge-library screening (ZINC22, Enamine REAL).

When should I use Bio Virtual Screening?

Bio Virtual Screening fits situations like: screening chemical libraries against a protein target to find candidate binders; ranking docking poses; selecting a docking workflow for a specific scenario.

How do I install Bio Virtual Screening in Claude Code?

Run `npx skills add GPTomics/bioSkills --skill bio-virtual-screening -a claude-code`. Or copy the skill folder (chemoinformatics/virtual-screening in GPTomics/bioSkills) into .claude/skills/bio-virtual-screening in your project. Claude Code loads it when a task matches its description.

How do I install Bio Virtual Screening in Codex?

Run `npx skills add GPTomics/bioSkills --skill bio-virtual-screening -a codex`. Or copy the skill folder (chemoinformatics/virtual-screening in GPTomics/bioSkills) into .agents/skills/bio-virtual-screening in your project. Codex loads it when a task matches its description.

Can I use Bio Virtual Screening in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add GPTomics/bioSkills --skill bio-virtual-screening -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/bio-virtual-screening, .gemini/skills/bio-virtual-screening, .github/skills/bio-virtual-screening and .opencode/skills/bio-virtual-screening in your project.

What does Bio Virtual Screening need to run?

Going by SKILL.md and its folder, Bio Virtual Screening needs Python for the scripts in its folder and the command-line tools its instructions call (pip). Our summary lists: Python 3.

Does Bio Virtual Screening access the network?

SKILL.md names 10 domains. As links in the text: doi.org, github.com, vina.scripps.edu, autodock-vina.readthedocs.io, meeko.readthedocs.io, proceedings.iclr.cc, proceedings.mlr.press, zinc22.docking.org, enamine.net and ebi.ac.uk. This is read from the text; nothing was executed.

Is Bio Virtual Screening safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Bio Virtual Screening use?

Bio Virtual Screening is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Bio Virtual Screening use?

About 6.1k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Bio Virtual Screening?

Skills that share tags, products or a category with Bio Virtual Screening: Molecode (AtomFlow-AI/MoleCode, 305 stars), Drug Discovery (Tommy-yw/RunbookHermes, 546 stars), DiffDock Molecular Docking (K-Dense-AI/scientific-agent-skills, 48k stars) and Biomedical Analysis Dispatch (xjtulyc/MedgeClaw, 617 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Bio Virtual Screening?

GPTomics (a GitHub organization) maintains it in GPTomics/bioSkills, which has 1,215 GitHub stars. The repository holds 552 skills in this directory. The repository was last updated on August 15, 2026.

Source: GPTomics/bioSkills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.