Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Diffusion-based molecular docking. Predict protein-ligand binding poses from PDB/SMILES, confidence scores, virtual screening, for structure-based drug design. Not for affinity prediction.
.claude/skills/mkurman-diffdock/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 43% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 59% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 57% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 197% | 0% |
------|------------------|----------------| | > 0 | High | Strong prediction, likely accurate | | -1.5 to 0 | Moderate | Reasonable prediction, validate carefully | | < -1.5 | Low | Uncertain prediction, requires validation |
Critical Notes:
For detailed guidance: Read references/confidence_and_limitations.md using the Read tool
Create custom configuration for specific use cases:
bash# Copy template cp assets/custom_inference_config.yaml my_config.yaml # Edit parameters (see template for presets) # Then run with custom config python -m inference \ --config my_config.yaml \ --protein_ligand_csv input.csv \ --out_dir results/
Sampling Density:
samples_per_complex: 10 → Increase to 20-40 for difficult casesInference Steps:
inference_steps: 20 → Increase to 25-30 for higher accuracyTemperature Parameters (control diversity):
temp_sampling_tor: 7.04 → Increase for flexible ligands (8-10)temp_sampling_tor: 7.04 → Decrease for rigid ligands (5-6)Presets Available in Template:
For complete parameter reference: Read references/parameters_reference.md using the Read tool
For proteins with known flexibility, dock to multiple conformations:
python# Create ensemble CSV import pandas as pd conformations = ["conf1.pdb", "conf2.pdb", "conf3.pdb"] ligand = "CC(=O)Oc1ccccc1C(=O)O" data = { "complex_name": [f"ensemble_{i}" for i in range(len(conformations))], "protein_path": conformations, "ligand_description": [ligand] * len(conformations), "protein_sequence": [""] * len(conformations) } pd.DataFrame(data).to_csv("ensemble_input.csv", index=False)
Run docking with increased sampling:
bashpython -m inference \ --config default_inference_args.yaml \ --protein_ligand_csv ensemble_input.csv \ --samples_per_complex 20 \ --out_dir results/ensemble/
DiffDock generates poses; combine with other tools for affinity:
GNINA (Fast neural network scoring):
bashfor pose in results/*.sdf; do gnina -r protein.pdb -l "$pose" --score_only done
MM/GBSA (More accurate, slower): Use AmberTools MMPBSA.py or gmx_MMPBSA after energy minimization
Free Energy Calculations (Most accurate): Use OpenMM + OpenFE or GROMACS for FEP/TI calculations
Recommended Workflow:
DiffDock IS Designed For:
DiffDock IS NOT Designed For:
For complete limitations: Read references/confidence_and_limitations.md using the Read tool
Issue: Low confidence scores across all predictions
samples_per_complex (20-40), try ensemble docking, validate protein structureIssue: Out of memory errors
--batch_size 2 or process fewer complexes at onceIssue: Slow performance
python -c "import torch; print(torch.cuda.is_available())", use GPUIssue: Unrealistic binding poses
Issue: "Module not found" errors
python scripts/setup_check.py to diagnoseFor Best Results:
For interactive use, launch the web interface:
bashpython app/main.py # Navigate to http://localhost:7860
Or use the online demo without installation:
scripts/)prepare_batch_csv.py: Create and validate batch input CSV files
analyze_results.py: Analyze confidence scores and rank predictions
setup_check.py: Verify DiffDock environment setup
references/)parameters_reference.md: Complete parameter documentation
Read this file when users need:
confidence_and_limitations.md: Confidence score interpretation and tool limitations
Read this file when users need:
workflows_examples.md: Comprehensive workflow examples
Read this file when users need:
assets/)batch_template.csv: Template for batch processing
custom_inference_config.yaml: Configuration template
setup_check.py before starting large jobsprepare_batch_csv.py to catch errors earlyWhen using DiffDock, cite the appropriate papers:
DiffDock-L (current default model):
Stärk et al. (2024) "DiffDock-L: Improving Molecular Docking with Diffusion Models"
arXiv:2402.18396Original DiffDock:
Corso et al. (2023) "DiffDock: Diffusion Steps, Twists, and Turns for Molecular Docking"
ICLR 2023, arXiv:2210.01776| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 16,364 | 7,497 | -54% | 1 | 1 | 0% | 2,658 | 3,810 | +43% | 0 | 0 | — |
case-07 | pass→pass | 11,776 | 4,989 | -58% | 1 | 1 | 0% | 2,024 | 3,034 | +50% | 0 | 0 | — |
case-08 | pass→pass | 14,623 | 14,706 | +1% | 1 | 1 | 0% | 2,348 | 4,337 | +85% | 0 | 0 | — |
case-02 | fail→pass | 13,404 | 5,928 | -56% | 1 | 1 | 0% | 2,546 | 3,459 | +36% | 0 | 0 | — |
case-03 | fail→fail | 20,691 | 15,004 | -27% | 1 | 1 | 0% | 3,872 | 5,047 | +30% | 0 | 0 | — |
case-04 | pass→pass | 16,898 | 8,010 | -53% | 1 | 1 | 0% | 2,571 | 3,649 | +42% | 0 | 0 | — |
case-05 | pass→pass | 18,810 | 9,550 | -49% | 1 | 1 | 0% | 2,890 | 3,969 | +37% | 0 | 0 | — |
case-06 | fail→pass | 16,848 | 12,703 | -25% | 1 | 1 | 0% | 2,783 | 4,425 | +59% | 0 | 0 | — |
case-09 | fail→pass | 12,872 | 4,694 | -64% | 1 | 1 | 0% | 1,939 | 3,049 | +57% | 0 | 0 | — |
case-10 | fail→pass | 26,789 | 8,899 | -67% | 1 | 1 | 0% | 1,339 | 3,977 | +197% | 0 | 0 | — |
case-11 | fail→pass | 9,313 | 3,395 | -64% | 1 | 1 | 0% | 1,839 | 2,765 | +50% | 0 | 0 | — |
case-12 | fail→pass | 13,778 | 4,122 | -70% | 1 | 1 | 0% | 2,742 | 2,978 | +9% | 0 | 0 | — |
case-21 | pass→pass | 13,480 | 11,282 | -16% | 1 | 1 | 0% | 2,159 | 4,093 | +90% | 0 | 0 | — |
case-13 | fail→pass | 9,578 | 4,437 | -54% | 1 | 1 | 0% | 1,479 | 3,081 | +108% | 0 | 0 | — |
case-14 | pass→pass | 13,381 | 6,890 | -49% | 1 | 1 | 0% | 2,075 | 3,295 | +59% | 0 | 0 | — |
case-15 | fail→pass | 11,072 | 1,813 | -84% | 1 | 1 | 0% | 2,068 | 2,555 | +24% | 0 | 0 | — |
case-16 | fail→pass | 10,721 | 7,285 | -32% | 1 | 1 | 0% | 1,934 | 3,636 | +88% | 0 | 0 | — |
case-17 | pass→pass | 14,109 | 7,582 | -46% | 1 | 1 | 0% | 2,231 | 3,546 | +59% | 0 | 0 | — |
case-18 | fail→pass | 8,157 | 2,780 | -66% | 1 | 1 | 0% | 1,401 | 2,721 | +94% | 0 | 0 | — |
case-19 | fail→pass | 10,686 | 4,091 | -62% | 1 | 1 | 0% | 1,746 | 3,105 | +78% | 0 | 0 | — |
case-20 | fail→pass | 13,616 | 8,966 | -34% | 1 | 1 | 0% | 2,016 | 3,720 | +85% | 0 | 0 | — |
case-22 | fail→pass | 7,298 | 3,107 | -57% | 1 | 1 | 0% | 1,315 | 2,806 | +113% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +64 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.