agentsclimarketplace

Boltz

Skill naity/FM4Life/skills/boltz

Skills for life science foundation models — structured knowledge bundles that let AI coding agents work with ESM, AlphaFold, RFdiffusion, DiffDock, scGPT, and more out of the box.

Install
npx -y skills add naity/FM4Life --skill boltz

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Skill for biomolecular structure and binding affinity prediction with Boltz-2. Use this skill when a user wants to predict protein-ligand complex structures, estimate binding affinities (IC50/ΔG), screen compound libraries, optimize lead compounds, model protein-DNA or protein-RNA interactions, specify binding pockets as constraints, or work with cyclic peptides. Boltz-2 is MIT-licensed (commercial use allowed), supports affinity prediction alongside structure prediction, and uses YAML-based input. Also trigger when the user mentions Boltz, Boltz-1, Boltz-2, binding affinity prediction, FEP alternatives, or hit discovery screening.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

8.3 KB, as published. Nobody here has run it

Boltz-2: Biomolecular Structure and Binding Affinity Prediction

Overview

Boltz-2 is a biomolecular foundation model that jointly predicts complex 3D structure and binding affinity in a single inference pass. It is the first fully open-source model to approach AlphaFold 3-level structural accuracy while also providing quantitative affinity predictions 1000× faster than physics-based FEP methods.

CapabilityBoltz-2AlphaFold 3
Proteins, RNA, DNA, ligands
Binding affinity prediction
Pocket/contact constraints
Cyclic peptides
LicenseMIT (commercial OK)CC-BY-NC-SA 4.0
Model weightsFreely availableMust apply to Google
Input formatYAMLJSON
Output formatmmCIF or PDBmmCIF only

Installation

pip install boltz[cuda] -U

For CPU-only (slow, for testing):

pip install boltz -U

Requirements: Python ≥ 3.10, < 3.13; NVIDIA GPU recommended.

Quick Start

# Predict structure (auto-generate MSA via server)
boltz predict input.yaml --use_msa_server

# Predict structure + binding affinity
boltz predict complex.yaml --use_msa_server --diffusion_samples 5

# Multiple samples for ensemble
boltz predict input.yaml --use_msa_server --diffusion_samples 5

Input Format (YAML)

Boltz-2 uses YAML input files. See references/input-format.md for the full schema.

Single protein

version: 1
sequences:
  - protein:
      id: A
      sequence: MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGD

Protein–ligand complex

version: 1
sequences:
  - protein:
      id: A
      sequence: MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGD
      msa: ./msas/protein_a.a3m
  - ligand:
      id: B
      ccd: ATP
  - ligand:
      id: C
      ccd: MG

With binding affinity prediction

Add a properties block with one small molecule as the binder:

version: 1
sequences:
  - protein:
      id: A
      sequence: MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGD
      msa: ./msas/protein_a.a3m
  - ligand:
      id: B
      smiles: "CC(=O)Nc1ccc(O)cc1"
properties:
  - affinity:
      binder: B

With pocket constraint

Guide the ligand to a known binding site:

version: 1
sequences:
  - protein:
      id: A
      sequence: MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGD
  - ligand:
      id: B
      smiles: "CC(=O)Nc1ccc(O)cc1"
constraints:
  - pocket:
      binder: B
      contacts:
        - [A, 45]
        - [A, 67]
        - [A, 89]
      max_distance: 6.0

Homomeric complex

version: 1
sequences:
  - protein:
      id: [A, B, C]
      sequence: MKTAYIAKQRQISFVK

Protein–DNA complex

version: 1
sequences:
  - protein:
      id: A
      sequence: MKTAYIAKQRQISFVK
  - dna:
      id: B
      sequence: GACCTCTGAGGT

Running Predictions

# Basic: provide your own MSA files in the YAML
boltz predict input.yaml

# Auto-generate MSA (no local databases needed)
boltz predict input.yaml --use_msa_server

# More samples for better coverage
boltz predict input.yaml --use_msa_server --diffusion_samples 5

# Use inference-time potentials (improves physical quality)
boltz predict input.yaml --use_msa_server --use_potentials

# Batch: predict all YAMLs in a directory
boltz predict ./jobs/ --use_msa_server

# Output PDB instead of mmCIF
boltz predict input.yaml --use_msa_server --output_format pdb

# Rerun from scratch (override cache)
boltz predict input.yaml --use_msa_server --override

Key CLI flags

FlagDefaultDescription
--use_msa_serverfalseAuto-generate MSA via mmseqs2 API
--use_potentialsfalseApply inference-time potentials
--diffusion_samples1Number of structure samples per input
--recycling_steps3Structure recycling iterations
--sampling_steps200Diffusion sampling steps
--output_formatmmcifmmcif or pdb
--overridefalseRerun ignoring cached results

Output Format

out_dir/predictions/<job_name>/
├── <job_name>_model_0.cif              ← predicted structure (best sample)
├── confidence_<job_name>_model_0.json  ← confidence metrics
├── affinity_<job_name>.json            ← binding affinity (if requested)
├── pae_<job_name>_model_0.npz          ← PAE matrix
├── pde_<job_name>_model_0.npz          ← predicted distance error
└── plddt_<job_name>_model_0.npz        ← per-residue pLDDT

With --diffusion_samples 5: output files for _model_0 through _model_4.

Confidence metrics

From confidence_<job_name>_model_0.json:

MetricRangeInterpretation
confidence_score0–1Primary: 0.8 × complex_plddt/100 + 0.2 × iptm
iptm0–1Interface confidence (>0.6 = acceptable, >0.8 = high)
ptm0–1Global fold confidence
complex_plddt0–100Mean per-residue local confidence
complex_iplddt0–100pLDDT at protein-ligand interface
complex_pdeÅPredicted Distance Error (lower = better)

Affinity output

From affinity_<job_name>.json:

{
  "affinity_probability_binary": 0.85,
  "affinity_pred_value": -2.1
}
FieldUse forInterpretation
affinity_probability_binaryHit screening (binder vs. non-binder)0–1; >0.5 = predicted binder
affinity_pred_valueLead optimization (ranking actives)log₁₀(IC₅₀ in μM); lower = stronger

affinity_pred_value scale:

  • −3 → IC₅₀ = 1 nM (very potent)
  • 0 → IC₅₀ = 1 μM
  • 3 → IC₅₀ = 1 mM (very weak)

Convert to kcal/mol: ΔG ≈ (6 − y) × 1.364

Important: Use affinity_probability_binary for screening (distinguish binders from non-binders). Use affinity_pred_value only when comparing active compounds — do not use it to compare actives against inactives.

When to Use Boltz-2 vs AlphaFold 3

Use Boltz-2 when:

  • You need binding affinity estimates alongside structure
  • Commercial use is required (MIT license vs AF3's non-commercial restriction)
  • You want pocket constraints to guide ligand placement
  • You are working with cyclic peptides
  • You need fast iterative screening

Use AlphaFold 3 when:

  • You have access to model weights and purely academic use is fine
  • You need post-translational modifications (Boltz-2 supports them via CCD but more limited)
  • Reproducing AF3 benchmark results is required

Scripts

# Build a YAML input from sequences and ligands
python scripts/build_input.py --name my_job \
  --protein MKTAYIAKQRQISFVK \
  --ligand-smiles "CC(=O)Nc1ccc(O)cc1" \
  --affinity B

# Build from a FASTA file
python scripts/build_input.py --name complex \
  --from-fasta sequences.fasta \
  --ligand-ccd ATP

# Parse and summarize an output directory
python scripts/build_input.py --report predictions/my_job/

Resources

References

  • references/input-format.md — full YAML schema: all entity types, constraints (pocket, bond, contact), affinity properties, modifications, templates, MSA options
  • references/outputs.md — parsing mmCIF, confidence JSON, affinity JSON, PAE/pLDDT arrays; batch ranking

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.