agentleFS
pradyumnasagarpradyumnasagar/open-research-skills/skills/chemoinformatics/docking-rescoring/SKILL.md

docking-rescoring

Skill8 starsChanged 5 months agoMITView on GitHub

Performs ML-based protein-ligand pose prediction and scoring using DiffDock-L (diffusion-based), Boltz-1 / Boltz-2 (foundation model with affinity), Chai-1, AlphaFold3 ligand, EquiBind, TANKBind, NeuralPLexer, and hybrid workflows (DiffDock pose + GNINA rescore + PoseBusters QC). Explicit handling of when ML beats classical docking, when classical beats ML, the PB-invalid pose problem, and rescoring as the standard production hybrid. Use when modern docking is needed: foundation-model ligand-pose prediction, AI rescoring of classical poses, or scaffold-hopping in cross-docking scenarios.

The file

Show its rules and text

We split this skill into the rules it gives an agent

14 rules. About 0 are common, 13 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈13

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Before using code patterns, verify installed versions match.

    line 21
  2. Distinctive:

    If code throws ImportError, AttributeError, or TypeError, introspect the installed package and adapt the example to match the actual API …

    line 25
  3. Distinctive:

    No fabricated citations: Every cited work must resolve to a verifiable

    line 31
  4. Distinctive:

    No claim without provenance: Every quantitative or factual claim

    line 32
  5. Distinctive:

    No silent failure: Every script invocation, API call, or tool use must declare its exit status and what to do on non-zero.

    line 33
  6. Very specific:

    Do not load this skill if the question is in a sibling skill's domain (see ## Cross-references), if the user explicitly asks for a …

    line 44
  7. Distinctive:

    Goal: Use DiffDock-L for fast diverse pose sampling.

    line 100
  8. Distinctive:

    Trigger: Default DiffDock-L output.

    line 156
  9. Distinctive:

    Fix: Always apply PoseBusters filter.

    line 162
  10. Distinctive:

    Fix: Use Boltz-2 for first-pass triage only.

    line 172
  11. Distinctive:

    Trigger: Default EquiBind without ensemble.

    line 176
  12. Distinctive:

    Fix: Avoid EquiBind; use DiffDock-L or Boltz-1 for sampling, then refine with GNINA.

    line 182
  13. Distinctive:

    Fix: Use Boltz-1 (open source) for similar performance.

    line 192
  14. Distinctive:

    Symptom: All poses report poor affinity.

    line 200

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md
<!-- metadata: category: chemoinformatics oversight: low version: 1.0.0 author: Pradyumna Jayaram tags: [chemoinformatics, research] difficulty: intermediate -->

Version Compatibility

Reference examples tested with: DiffDock-L (Corso 2024), Boltz-1 1.0+, Boltz-2 (Wohlwend 2025), Chai-1 0.4+, AlphaFold3 (DeepMind), EquiBind, TANKBind, GNINA 1.1+, PoseBusters 0.6+.

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

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

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

ML Docking and Rescoring

Hard rules

  1. No fabricated citations. Every cited work must resolve to a verifiable
  2. No claim without provenance. Every quantitative or factual claim
  3. No silent failure. Every script invocation, API call, or tool use must declare its exit status and what to do on non-zero. A skill that silently swallows errors is a violation.

When to use

Load this skill when the user asks a question that matches its declared trigger conditions (see the frontmatter description for the most common ones). Do not load it for questions outside its scope — defer to the appropriate ORS skill instead.

When NOT to use

Do not load this skill if the question is in a sibling skill's domain (see ## Cross-references), if the user explicitly asks for a different tool, or if the task is outside the skill's declared category.

ML Docking Method Taxonomy

ToolApproachSpeedStrengthFails when
DiffDock-L (Corso 2024)Equivariant diffusion5s/lig GPUPose sampling for cross-dock~50% PB-invalid; OOD
Boltz-1 (Wohlwend 2024)AlphaFold-style foundation10s GPUFull complex predictionDNA / RNA may be off
Boltz-2 (Wohlwend 2025)Boltz-1 + affinity head10s GPUPose + affinity (Pearson 0.66 on 4-target FEP+ subset; RMSE ~1.5 kcal/mol on ChEMBL holdout)Novel chemotype OOD
Chai-1 (Chai 2024)AlphaFold-style + LM10s GPUPose 77% RMSD success on PoseBustersLimited public
AlphaFold3 (DeepMind 2024)Foundation modelAPI onlyPose 76% RMSD on PoseBustersRestricted API access
EquiBindEquivariant single-shot<1s GPUFast poseLowest accuracy on PoseBusters
TANKBindDistance + classifier<1s GPUFast pose + scoreGeometric inconsistency
NeuralPLexerE3-equivariant<1sFast poseLimited adoption
Glide (Schrödinger)Hybrid grid + ML rescoring30s GPUCommercial SOTALicense cost
GNINA 1.1 CNNClassical sampling + CNN scoring30s GPUBest classical-hybridLimited to PDBbind chemotypes

Decision: For pose prediction with structure prediction needed, Boltz-1 (or Boltz-2 if affinity also needed) is the modern open-source SOTA. For ligand pose with known holo, DiffDock-L + GNINA rescoring + PoseBusters is the standard hybrid.

Decision Tree by Scenario

ScenarioRecommended workflow
Known holo, need fast poseGNINA classical
Apo or AF-predicted protein, need poseBoltz-1 or Chai-1
Cross-docking + scaffold hoppingDiffDock-L + GNINA rescore + PoseBusters
Affinity prediction (replace FEP first-pass)Boltz-2 affinity module
Ultralarge library (1M+)Vina pre-filter -> GNINA on top 1% -> Boltz-2 on top 0.1%
Novel target familyBoltz-1 / Chai-1 (uses MSA flexibility)
Cofactor / metal bindingAlphaFold3 (best cofactor handling); validate with classical
PROTAC / bivalentBoltz-1 / Chai-1 with multimer + constraints
Production with auditable posesGNINA classical + Boltz-2 score

PoseBusters Problem (Critical)

PoseBusters benchmark (Buttenschoen 2024) showed:

ToolRMSD <= 2 ÅPB-validRMSD <= 2 Å AND PB-valid
Vina (default)65%90%60%
GOLD70%88%65%
GNINA CNN73%85%65%
DiffDock-L55%40%25%
EquiBind30%25%10%
TANKBind45%35%20%
AlphaFold3 ligand76%65%55%
Chai-177%70%58%
Boltz-174%68%55%
Boltz-2 (with affinity)76%70%58%

Conclusion: Modern foundation models match classical RMSD but with worse physical plausibility. Always require PB-valid + RMSD <= 2 Å.

DiffDock-L + GNINA Hybrid Workflow (Production Standard)

Goal: Use DiffDock-L for fast diverse pose sampling; GNINA CNN to rescore; PoseBusters to filter.

# Step 1: DiffDock-L pose sampling
python -m inference \
    --protein_path receptor.pdb \
    --ligand_description smiles.smi \
    --out_dir diffdock_out/ \
    --samples_per_complex 40 \
    --inference_steps 20

# Step 2: GNINA CNN rescoring
gnina -r receptor.pdb -l diffdock_out/top_poses.sdf \
      --autobox_ligand reference_ligand.sdf \
      --cnn_scoring rescore \
      -o gnina_rescored.sdf.gz

# Step 3: PoseBusters QC"
python -c "
from posebusters import PoseBusters
b = PoseBusters(config='dock')
df = b.bust(mol_pred='gnina_rescored.sdf.gz', mol_cond='receptor.pdb')
print(df.filter(regex='pass').sum().sum(), 'checks passed')
"

Boltz-2 Affinity Prediction (Fast FEP Replacement)

Goal: Predict binding affinity at ~10s/ligand on GPU vs hours for FEP.

Approach: Submit protein + ligand to Boltz-2 with the affinity head; receive predicted pIC50 or ΔG with uncertainty.

boltz predict input.yaml --use_affinity --output_dir boltz2_out/

Validation: Boltz-2 reports Pearson 0.66 vs experimental on 4-target FEP+ subset; RMSE ~1.5 kcal/mol on ChEMBL holdout. Faster than FEP (10s vs hours) but ~3x less accurate.

Foundation Models: Boltz-1 and Chai-1

For novel target or no MSA, the foundation models treat ligand + protein jointly:

# Boltz-1
boltz predict input.yaml --output_dir boltz1_out/

# Chai-1
chai-lab predict input.fasta --output-dir chai_out/

Boltz-1 / Chai-1 caveats: Both accept MSA but treat ligand in pocket as constraints; output is the full complex structure. Ligand pose quality matches PoseBusters benchmarks in the table above.

Per-Tool Failure Modes

DiffDock-L -- PB-invalid poses

Trigger: Default DiffDock-L output.

Mechanism: Diffusion lacks explicit physical-plausibility term; ~50% of poses fail planarity, vdW overlap, or chirality tests.

Symptom: Poses look reasonable in 2D depiction but fail QC.

Fix: Always apply PoseBusters filter; rescore with GNINA.

Boltz-2 -- poor affinity for novel chemotype

Trigger: Ligand chemotype outside ChEMBL training distribution.

Mechanism: Affinity head trained on public bioactivity data; extrapolation is unreliable.

Symptom: Predicted pIC50 far from experimental; uncertainty band very wide.

Fix: Use Boltz-2 for first-pass triage only; FEP for top hits.

EquiBind -- worst accuracy

Trigger: Default EquiBind without ensemble.

Mechanism: Single-shot equivariant network; no refinement step.

Symptom: Poses within RMSD > 5 Å.

Fix: Avoid EquiBind; use DiffDock-L or Boltz-1 for sampling, then refine with GNINA.

AlphaFold3 -- restricted API

Trigger: Academic users without commercial agreement.

Mechanism: AF3 server requires Google Cloud account + quota.

Symptom: Cannot submit jobs; rate-limited.

Fix: Use Boltz-1 (open source) for similar performance; AF3 only for cross-validation.

ML methods ignore cryptic pockets

Trigger: Binding site not in receptor conformation.

Mechanism: ML methods score poses against static receptor.

Symptom: All poses report poor affinity; known active missed.

Fix: Pre-generate receptor ensemble via MD or use AlphaFold3 holo prediction.

Reconciliation: ML vs Classical

AspectClassical (Vina/GNINA)ML (DiffDock/Boltz)
Pose RMSD60-70% within 2 Å50-77% within 2 Å
PB-validity85-90%40-70%
Affinity accuracyCorrelates ~0.5 with expBoltz-2 ~0.66 Pearson on benchmark
Speed5-30s/lig5-10s GPU
Out-of-distributionRobust for chemotypesWorse for novel scaffolds
InterpretabilityForce-field basedBlack-box

Production hybrid: ML for pose sampling (broader search), classical for affinity + physical validation.

Common Errors

SymptomCauseFix
Boltz-2 OOM on big proteinMSA + ligand fits in 16GBReduce MSA depth; use Boltz-1
DiffDock all poses clusterInsufficient samplesIncrease samples_per_complex to 40-100
Boltz output not a single chainTokenizer confused by modified residuesStrip non-standard residues; use UniProt canonical
GNINA can't read DiffDock outputSDF missing 3DDiffDock writes 3D SDF; verify with PyMOL
Chai-1 ignores pocketWrong binding-site hintPass --pocket-residues if available

References

  • Corso et al., Nat. Mach. Intell. -- DiffDock-L.
  • Wohlwend et al., 2024 -- Boltz-1; 2025 -- Boltz-2 with affinity.
  • Buttenschoen et al., Chem. Sci. 15:3130 -- PoseBusters benchmark.
  • McNutt et al., J. Cheminformatics 13:43 -- GNINA 1.0 CNN.
  • Krishna et al., 2024 -- AlphaFold3 server.

Related Skills

  • chemoinformatics/virtual-screening - Classical docking
  • chemoinformatics/pose-validation - PoseBusters QC
  • chemoinformatics/free-energy-calculations - Post-docking FEP
  • chemoinformatics/covalent-design - Covalent docking
  • chemoinformatics/protac-degraders - Ternary complex prediction

Cross-references

Other skills in this category:

  • admet-prediction
  • conformer-generation
  • covalent-design
  • free-energy-calculations
  • generative-design
  • molecular-descriptors
  • molecular-io
  • molecular-standardization
  • pharmacophore-modeling
  • pose-validation
  • protac-degraders
  • qsar-modeling
  • retrosynthesis
  • scaffold-analysis
  • shape-similarity
  • similarity-searching
  • substructure-search
  • virtual-screening

Changelog

  • 1.1.0 (migration) — Bulk-migrated to v0.4.0 schema: canonical metadata block, base Hard rules, Cross-references. Body content unchanged; author should review and fill in any domain-specific extensions to the Hard rules.
  • 1.0.0 — Initial release.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.