Source profileQuality 81/100Review permissions

xuzhougeng/wisp-science/skills/diffdock/SKILL.md

diffdock

Predict small-molecule binding poses with DiffDock-L (Corso et al. 2023/2024, github.com/gcorso/DiffDock) — blind diffusion docking that places a ligand into a protein pocket without a predefined search box and ranks the samples with a learned confidence model. Reach for this skill to dock a SMILES or SDF against a PDB, to generate ranked 3D poses for a small fragment library, or to get a starting pose for downstream rescoring. DiffDock predicts geometry, not affinity.

Source repository stars
560
Declared platforms
0
Static risk flags
1
Last source update
2026-07-28
Source checked
2026-07-28

Decision brief

What it does—and where it fits

DiffDock-L is a blind pose predictor: given a protein structure and a ligand, it samples ligand placements over the whole surface with a diffusion model and ranks them with a separately trained confidence head. The confidence score correlates with pose correctness, not with bind…

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/xuzhougeng/wisp-science --skill "skills/diffdock"
    Safe inspection promptEditorial

    Inspect the Agent Skill "diffdock" from https://github.com/xuzhougeng/wisp-science/blob/95d2c13d1665d46a388b5bdc998dcce0d5ec2eee/skills/diffdock/SKILL.md at commit 95d2c13d1665d46a388b5bdc998dcce0d5ec2eee. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Running it

      For more than one complex, give --proteinligandcsv batch.csv instead of the two single-complex flags; the CSV has four columns — complexname, proteinpath, liganddescription (SMILES or an .sdf/.mol2 path), and proteinsequence. Leave proteinpath empty and fill proteinsequence to h…

      For more than one complex, give --proteinligandcsv batch.csv instead of the two single-complex flags; the CSV has four columns — complexname, proteinpath, liganddescription (SMILES or an .sdf/.mol2 path), and proteinseq…Under --outdir// each sample is written as rank{N}confidence{score}.sdf, plus a copy of rank1.sdf for convenience. The confidence value in the filename is a logit, so it is unbounded and can be negative; among samples f…
    2. 02

      The YAML config overwrites your CLI flags

      inference.py loads --config defaultinferenceargs.yaml after argparse and replaces every key it finds, so passing --samplespercomplex 40 or --modeldir ... on the command line is silently ignored if the same key sits in the YAML. To change sampling depth or any other key the YAML…

      inference.py loads --config defaultinferenceargs.yaml after argparse and replaces every key it finds, so passing --samplespercomplex 40 or --modeldir ... on the command line is silently ignored if the same key sits in t…
    3. 03

      The first run is silent for 11 minutes and needs ≥32 GB host RAM

      Before the first complex, DiffDock precomputes SO(3) and torus lookup tables. That step is silent on stderr, takes 11 minutes, and may exhaust a small machine. Use a probed SSH context with at least 64 GiB RAM and precompute the tables while building the environment; do not assu…

      Before the first complex, DiffDock precomputes SO(3) and torus lookup tables. That step is silent on stderr, takes 11 minutes, and may exhaust a small machine. Use a probed SSH context with at least 64 GiB RAM and preco…
    4. 04

      The README's --ligand works on the CLI by accident — use --liganddescription

      The upstream README shows --ligand, which only works because argparse prefix-matches it to the real flag --liganddescription. That shortcut is CLI-only: as a CSV column header or YAML key, ligand matches nothing and the row is silently treated as having no ligand. Spell the flag…

      The upstream README shows --ligand, which only works because argparse prefix-matches it to the real flag --liganddescription. That shortcut is CLI-only: as a CSV column header or YAML key, ligand matches nothing and the…
    5. 05

      Wisp execution

      Use python only for bounded interactive checks. For a long or GPU-backed workload, require a selected and probed ssh: context and load remote-compute-ssh. Put the documented invocation in a self-contained project script, activate the remote environment explicitly, stage only sma…

      Use python only for bounded interactive checks. For a long or GPU-backed workload, require a selected and probed ssh: context and load remote-compute-ssh. Put the documented invocation in a self-contained project script…

    Permission review

    Static risk signals and limitations

    Runs scripts

    medium · line 16

    The documentation asks the agent to run terminal commands or scripts.

    python3 -m inference \

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score81/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars560SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    xuzhougeng/wisp-science
    Skill path
    skills/diffdock/SKILL.md
    Commit
    95d2c13d1665d46a388b5bdc998dcce0d5ec2eee
    License
    AGPL-3.0
    Collected
    2026-07-28
    Default branch
    main
    View the original SKILL.md

    DiffDock-L

    DiffDock-L is a blind pose predictor: given a protein structure and a ligand, it samples ligand placements over the whole surface with a diffusion model and ranks them with a separately trained confidence head. The confidence score correlates with pose correctness, not with binding free energy — DiffDock does not predict whether or how tightly the ligand binds, so for hit triage you still pair it with a scorer (GNINA, MM-GBSA) or with boltz's affinity head. For protein–protein and nucleic-acid co-folding, route to boltz or chai1. Code and weights are MIT (github.com/gcorso/DiffDock).

    Running it

    cd $DIFFDOCK_REPO   # a clone of github.com/gcorso/DiffDock
    python3 -m inference \
      --config default_inference_args.yaml \
      --protein_path target.pdb \
      --ligand_description "COc1ccc(C#N)cc1" \
      --out_dir out
    

    For more than one complex, give --protein_ligand_csv batch.csv instead of the two single-complex flags; the CSV has four columns — complex_name, protein_path, ligand_description (SMILES or an .sdf/.mol2 path), and protein_sequence. Leave protein_path empty and fill protein_sequence to have DiffDock fold the receptor with ESMFold first; that path and a larger-library screening recipe are in references/workflows.md.

    Under --out_dir/<complex_name>/ each sample is written as rank{N}_confidence{score}.sdf, plus a copy of rank1.sdf for convenience. The confidence value in the filename is a logit, so it is unbounded and can be negative; among samples for the same complex higher is better, but values are not comparable across different complexes or ligands.

    The YAML config overwrites your CLI flags

    inference.py loads --config default_inference_args.yaml after argparse and replaces every key it finds, so passing --samples_per_complex 40 or --model_dir ... on the command line is silently ignored if the same key sits in the YAML. To change sampling depth or any other key the YAML defines, copy the YAML, edit the copy, and point --config at it.

    The first run is silent for ~11 minutes and needs ≥32 GB host RAM

    Before the first complex, DiffDock precomputes SO(3) and torus lookup tables. That step is silent on stderr, takes ~11 minutes, and may exhaust a small machine. Use a probed SSH context with at least 64 GiB RAM and precompute the tables while building the environment; do not assume a quiet Run has crashed.

    The README's --ligand works on the CLI by accident — use --ligand_description

    The upstream README shows --ligand, which only works because argparse prefix-matches it to the real flag --ligand_description. That shortcut is CLI-only: as a CSV column header or YAML key, ligand matches nothing and the row is silently treated as having no ligand. Spell the flag and the column header out in full.

    Wisp execution

    Use python only for bounded interactive checks. For a long or GPU-backed workload, require a selected and probed ssh:<alias> context and load remote-compute-ssh. Put the documented invocation in a self-contained project script, activate the remote environment explicitly, stage only small files with input_paths, and make the command write to a known absolute remote result path. Submit it with run_in_context and register that exact ssh:// path in output_specs. Call monitor_run once when waiting is needed, get_run once for a snapshot, or cancel_run to stop. Do not send a scheduler submission through the SSH-direct runner.

    Errors worth recognizing

    You seeIt means / do this
    ValueError: not allowed to raise maximum limit at startupsetrlimit(NOFILE, 64000) exceeds the sandbox hard limit — sed the constant in inference.py to min(64000, rlimit[1]).
    Silent SIGKILL a few minutes into the SO(3) precomputeHost RAM exhausted — see the gotcha above.
    python3: not foundYou are on the upstream rbgcsail/diffdock image — that one runs from /home/appuser/DiffDock under micromamba.

    Next: rescore the rank1.sdf poses before ranking ligands against each other — boltz's affinity head is the in-tree option — since the DiffDock confidence head alone is not an affinity predictor.

    Alternatives

    Compare before choosing