Binder Design Tool Selection

SkillMedia

A skill for media by lamm-mit.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Binder Design Tool Selection skill

What this skill tells your AI

The instructions your AI receives, as published by lamm-mit/scienceclaw in skills/binder-design/SKILL.md and read by ahel’s review.

Decision framework for choosing between BoltzGen, RFdiffusion, BindCraft, and other tools for protein binder design campaigns.

Decision Tree

What do you need?
│
├── All-atom output with side-chain awareness?
│   └── YES → BoltzGen (recommended default)
│
├── Backbone-only + sequence design separately?
│   └── YES → RFdiffusion → ProteinMPNN/LigandMPNN
│
├── End-to-end with built-in AF2 validation per design?
│   └── YES → BindCraft (slower but higher hit rate)
│
├── Ligand/small molecule in binding site?
│   └── YES → BoltzGen or RFdiffusion + LigandMPNN
│
├── Peptide binder (< 30 residues)?
│   └── YES → BoltzGen (peptide-anything protocol)
│
├── Symmetric oligomer scaffold?
│   └── YES → RFdiffusion (symmetry support)
│
└── Very large target (> 500 residues)?
    └── YES → RFdiffusion (better memory efficiency)

Tool Comparison

FeatureBoltzGenRFdiffusionBindCraft
Side chainsJoint designBackbone onlyJoint (via AF2 hallucination)
Speed (50 designs)~2h A100~30 min~8h A100
Hit rate (exp. binding)~15–25%~10–20%~25–40%
Built-in validationipTM from diffusionNoneAF2 ipTM per design
Ligand-awareLimited
Symmetric designs
Ease of useYAML configCLI flagsConfig JSON
GPU VRAM24 GB16 GB32 GB

Campaign Scale Guide

GoalRecommended ToolDesigns to GenerateExpected Binders to Order
Proof of conceptBoltzGen50–1005–10
Standard campaignRFdiffusion + MPNN200–50010–20
High-quality hitsBindCraft100–2005–15
Ligand-binding enzymeRFdiffusion + LigandMPNN200–100010–20
Rapid screenBoltzGen10010

Pipeline Templates

Standard Binder Campaign

# 1. Generate backbones
python3 RFdiffusion/scripts/run_inference.py \
    inference.output_prefix=designs/binder \
    inference.input_pdb=target.pdb \
    'ppi.hotspot_res=[A45,A67,A102]' \
    'contigmap.contigs=[A1-200/0 60-100]' \
    inference.num_designs=200

# 2. Design sequences
python3 LigandMPNN/run.py \
    --model_type proteinmpnn \
    --pdb_path designs/ \
    --out_folder seqs/ \
    --number_of_batches 8

# 3. Predict structures (ColabFold batch)
colabfold_batch seqs/all_sequences.fasta predictions/ \
    --model-type alphafold2_multimer_v3 \
    --num-recycles 3 \
    --num-models 1

# 4. Rank by ipSAE
ipsae rank predictions/ --chain-lengths 200 80 --output rankings.csv

BoltzGen All-in-One

# binder.yaml
version: 1
sequences:
  - protein:
      id: A
      sequence: MTEYKLVVVGAGGVGKS...  # target
  - protein:
      id: B
      length: 80
      design: true
constraints:
  hotspots:
    - chain: A
      residue: [45, 67, 102]
boltzgen design binder.yaml --out_dir designs/ --num_designs 100

BindCraft High-Quality

{
  "target_pdb": "target.pdb",
  "hotspot_residues": "A45,A67,A102",
  "binder_length": [60, 100],
  "num_designs": 100,
  "protocol": "default",
  "af2_validation": true,
  "output_dir": "bindcraft_out/"
}
python3 bindcraft.py --config binder_config.json

Hotspot Identification

from Bio.PDB import PDBParser
import numpy as np

def identify_hotspots(pdb_path: str, chain: str = "A",
                      binding_site_center: tuple = None,
                      radius: float = 10.0) -> list:
    """Find surface residues near a binding site for hotspot specification."""
    parser = PDBParser(QUIET=True)
    structure = parser.get_structure("target", pdb_path)
    model = structure[0]

    hotspots = []
    for residue in model[chain]:
        if residue.id[0] != " ":  # Skip HET
            continue
        # Use CA atom as representative
        if "CA" not in residue:
            continue
        ca = residue["CA"].get_vector()

        if binding_site_center:
            center = np.array(binding_site_center)
            dist = np.linalg.norm(ca.get_array() - center)
            if dist < radius:
                hotspots.append(f"{chain}{residue.id[1]}")

    return hotspots

Avoiding Common Failures

ProblemPrevention
Designs don't contact hotspotsVerify hotspot accessibility; reduce binder length range
All designs converge to same solutionUse partial diffusion for diversity; vary hotspot sets
Poor AF2 validation scoresUse BindCraft (built-in AF2 during design)
Low expression yieldSwitch to SolubleMPNN; check GRAVY/instability
Target flexibility issuesUse ensemble of target conformations

Signals

GitHub stars
242
Forks
42
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
binder-design-lamm-mit
Source
github.com/lamm-mit/scienceclaw