Install
$ agentstack add skill-learningmatter-mit-atomisticskills-drug-pose-validation ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
drug-pose-validation
Goal
To filter docked or generated ligand poses through physical plausibility checks (bond lengths, angles, planarity, internal clashes, protein-ligand clashes, stereochemistry) using PoseBusters, producing a validated subset of poses plus a machine-readable report.
This skill sits between docking ([drug-docking-vina](../drug-docking-vina/SKILL.md)) and downstream refinement ([drug-complex-system-builder](../drug-complex-system-builder/SKILL.md), [drug-protein-ligand-md](../drug-protein-ligand-md/SKILL.md)), ensuring that only physically reasonable poses enter expensive simulation stages.
Instructions
1. Prepare inputs
You need:
- Docked poses: an SDF file containing one or more ligand poses (e.g., output from Vina converted to SDF, or from any pose-generation tool).
- Receptor structure (optional but recommended): PDB file of the protein. When provided, PoseBusters also checks for protein-ligand steric clashes.
If your docked poses are in PDBQT format, convert them to SDF first:
# Env: drugdisc-agent
obabel docking/results/ligand_docked.pdbqt -O docking/results/ligand_docked.sdf -m
2. Run pose validation
# Env: drugdisc-agent
python .agents/skills/drug-pose-validation/scripts/validate_poses.py \
--poses docking/results/ligand_docked.sdf \
--receptor docking/inputs/protein_prepared.pdb \
--output_dir docking/validation/
This produces:
docking/validation/validation_report.json: per-pose pass/fail results for each checkdocking/validation/valid_poses.sdf: SDF containing only poses that pass all checksdocking/validation/summary.txt: human-readable summary
3. Run without receptor (ligand-only checks)
When no receptor is available, run ligand-only validation (checks bond geometry, planarity, stereochemistry, internal clashes):
# Env: drugdisc-agent
python .agents/skills/drug-pose-validation/scripts/validate_poses.py \
--poses generated/conformers.sdf \
--output_dir generated/validation/
4. Interpret results
The validation report JSON contains per-pose results:
{
"n_poses_input": 10,
"n_poses_valid": 7,
"pass_rate": 0.7,
"per_pose": [
{
"pose_index": 0,
"valid": true,
"tests": {
"mol_pred_loaded": true,
"sanitization": true,
"bond_lengths": true,
"bond_angles": true,
"internal_steric_clash": true,
"aromatic_ring_flatness": true,
"internal_energy": true,
"minimum_distance_to_protein": true,
"volume_overlap_with_protein": true
},
"diagnostics": { "...": "..." }
}
]
}
The tests dict contains the PoseBusters pass/fail columns that determine validity. The diagnostics dict includes all boolean columns from the full report (loading status, extra sanitization checks, etc.) for debugging. Column names come directly from PoseBusters and vary by mode.
Key tests (ligand-only, mol mode):
- bondlengths / bondangles: flags chemically unreasonable geometry
- aromaticringflatness: aromatic rings should be planar
- internalstericclash: atoms within the ligand should not overlap
- internal_energy: conformer energy should be reasonable relative to an ensemble average
Additional tests with receptor (dock mode):
- minimumdistanceto_protein: ligand atoms should not penetrate protein atoms
- volumeoverlapwith_protein: ligand should not occupy protein-filled space
Poses failing any test are excluded from valid_poses.sdf. If all poses fail, revisit docking parameters or ligand preparation.
Examples
Example: validate Vina docking output for HIV-1 protease
# Env: drugdisc-agent
obabel hiv_docking/results/indinavir_docked.pdbqt -O hiv_docking/results/indinavir_docked.sdf -m
# Env: drugdisc-agent
python .agents/skills/drug-pose-validation/scripts/validate_poses.py \
--poses hiv_docking/results/indinavir_docked.sdf \
--receptor hiv_docking/inputs/1HSG_prepared.pdb \
--output_dir hiv_docking/validation/
Constraints
- Environment: Requires
drugdisc-agentwithposebustersinstalled. - Input format: Poses must be SDF. Convert PDBQT to SDF with Open Babel before running.
- Receptor: Optional but strongly recommended. Without it, protein-ligand clash checks are skipped.
- Hydrogen handling: PoseBusters expects explicit hydrogens on the ligand. Ensure hydrogens are present in the input SDF (they should be if you used [drug-ligand-prep](../drug-ligand-prep/SKILL.md)).
References
- Buttenschoen, M.; Morris, G. M.; Deane, C. M. PoseBusters: AI-Based Docking Methods Fail to Generate Physically Valid Poses or Generalise to Novel Sequences. Chem. Sci. 2024, 15, 3130-3139. https://doi.org/10.1039/D3SC04185A
Author: Matthew Cox Contact: GitHub @mcox3406
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: learningmatter-mit
- Source: learningmatter-mit/AtomisticSkills
- License: MIT
- Homepage: https://arxiv.org/abs/2605.24002
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.