Standalone evaluation of an existing PDB directory with Proteina-Complexa. Use when the user wants to "evaluate PDB files", "re-fold these designs", "compute interface pAE", "compute i_pLDDT for a folder", "run AF2 / RF3 / ESMFold on my designs", "score binder candidates", "designability of this folder", "scRMSD for designs", "motif RMSD for these PDBs", "complexa analysis", "complexa evaluate from a PDB directory", "evaluate from pdb dir", or to score third-party outputs (BindCraft, AlphaProteo, RFdiffusion, hand-curated decoys). Picks the correct evaluate_*.yaml config, wires ++dataset.pdb_dir and the folding backend, runs the evaluate → analyze chain, parses the result CSV, and reports pass-rates against the right result_type thresholds.
Standalone evaluation of an existing PDB directory with Proteina-Complexa. Use when the user wants to "evaluate PDB files", "re-fold these designs", "compute interface pAE", "compute i_pLDDT for a folder", "run AF2 / RF3 / ESMFold on my designs", "score binder candidates", "designability of this folder", "scRMSD for designs", "motif RMSD for these PDBs", "complexa analysis", "complexa evaluate from a PDB directory", "evaluate from pdb dir", or to score third-party outputs (BindCraft, AlphaProteo, RFdiffusion, hand-curated decoys). Picks the correct evaluate_*.yaml config, wires ++dataset.pdb_dir and the folding backend, runs the evaluate → analyze chain, parses the result CSV, and reports pass-rates against the right result_type thresholds.
compatibility
complexa CLI installed (pip install -e .); CUDA GPU; AF2_DIR (colabdesign) or RF3_CKPT_PATH+RF3_EXEC_PATH (rf3_latest); ESMFold weights for monomer paths
allowed-tools
Bash, Read, Write, AskUserQuestion
Complexa Evaluate-PDBs Skill
Score a directory of pre-existing PDB files against the same metrics Proteina-Complexa uses internally. Wraps complexa analysis <evaluate_config> ++sample_storage_path=<dir>: the CLI runs the evaluate step (refold + interface metrics + monomer metrics) and then the analyze step (success thresholds, diversity, pass-rate CSVs). Do not run complexa generate here — the inputs already exist.
What this skill enables
Re-fold a directory of designed PDBs with AF2 (), RF3 (), ESMFold (), or Boltz2 ().
For motif inputs: motif RMSD (CA + all-atom), motif-region designability/codesignability, sequence recovery.
Aggregate into per-PDB CSVs plus pass-rate summaries using the default thresholds for the result_type.
Step 1: Pre-flight
Always check GPU / disk / tool binaries before launching a refold job. RF3 and ColabDesign-AF2 are large.
bash .claude/skills/_shared/scripts/preflight.sh
Surface from preflight.json:
gpu.available and gpu.vram_gb — colabdesign/RF3 need ≥40 GB; ESMFold tolerates ≥24 GB.
env.missing_required — must include the keys for the chosen folding backend:
colabdesign → AF2_DIR
rf3_latest → RF3_CKPT_PATH, RF3_EXEC_PATH
esmfold → ESMFold weights resolvable
tools.{foldseek,mmseqs} — required by aggregation.compute_diversity / compute_mmseqs_diversity (both default true).
If any required key is missing, route the user to the complexa-setup skill.
Step 2: Identify the design type
Like complexa design, evaluation has one default flow (protein binder) and two extensions (ligand binder, AME). The evaluate config you pass to complexa analysis decides everything else (which metrics, which refolder defaults, which thresholds the analyze step applies).
Use this when the user's PDBs are protein-binder designs (multi-chain, binder is the last chain) or third-party outputs from BindCraft / AlphaProteo / RFdiffusion. Pulls thresholds for protein_binder (i_pAE * 31 ≤ 7.0, pLDDT ≥ 0.9, scRMSD_ca < 1.5 Å).
See reference/eval_configs.md for the full matrix (every result_type, every threshold default, every supported folding backend, motif-protein-binder variant).
Step 3: Gather inputs (AskUserQuestion)
Ask in one batched AskUserQuestion:
pdb_dir — absolute path to the directory of PDBs to evaluate.
Design type — protein binder / ligand binder / AME (motif + ligand).
Target / task name — must match a key in configs/targets/targets_dict.yaml, configs/targets/ligand_targets_dict.yaml, or configs/design_tasks/ame_dict_v2.yaml. Required for binder + AME evaluation (needed to identify the target reference and, for AME, the motif contigs).
AME-only: confirm ligand residue name is already renamed to L:0 in every PDB (see Troubleshooting). If not, do that rename first.
Step 4: Run evaluate → analyze
Prefer complexa analysis (the evaluate→analyze chain) — it reuses the same config for both steps and writes a single log dir.
For ligand binders flip binder_folding_method=rf3_latest, inverse_folding_model=ligand_mpnn, result_type=ligand_binder. For AME use configs/evaluate_ame_from_pdb_dir.yaml — see reference/eval_configs.md for full worked examples.
If you need to inspect output between stages, run them separately. The configs above are shared between evaluate and analyze:
complexa evaluate / analyze are subprocess wrappers around the Hydra
modules with logging + parallel job splitting bolted on. To attach a debugger
or run under a profiler, invoke the module directly:
For normal one-shot runs prefer complexa analysis — you get the shared log
dir and a single replayable invocation, instead of having to thread the same
overrides through two python -m calls.
Step 5: Parse results
Output lands under ./evaluation_results/${run_name}/:
Tighten or loosen specific thresholds (see reference/eval_configs.md).
++eval_njobs=N
Parallel GPUs for the evaluate step.
++dryrun=true
Plan without running any folding.
++file_limit=N
Cap input PDBs (handy for first-pass smoke tests).
Hardware
GPU: ≥1 CUDA GPU. AF2 (colabdesign) and RF3 (rf3_latest) need ≥40 GB VRAM (A100/H100/L40S). ESMFold runs on ≥24 GB. Multi-GPU via ++eval_njobs=N.
CPU/disk: 24 CPUs default (ncpus_: 24). Each refolded PDB + intermediate output is ~1–5 MB; keep_folding_outputs=true can balloon to tens of GB for thousands of inputs.
See _shared/reference/hardware.md for per-backend wall-clock and VRAM tables.
Troubleshooting
Error: Config file not found — paths are relative to the repo root; cd to the repo before invoking complexa analysis.
compute_motif_binder_metrics=True but result_type=protein_binder — result_type and the underlying compute_*_metrics must agree. Use configs/evaluate_ame_from_pdb_dir.yaml for AME inputs rather than mutating evaluate_from_pdb_dir.yaml.
RF3 shape errors on AME PDBs — RF3 tries to auto-complete the ligand atoms from CCD. Rename the ligand residue to L:0 in every input PDB before evaluation; see the snippet in README.md (atom_array.res_name[ligand_mask] = "L:0").
Diversity step fails (foldseek not found) — FOLDSEEK_EXEC not on PATH. Either fix .env (preferred) or disable: ++aggregation.compute_diversity=false ++aggregation.compute_mmseqs_diversity=false.
All pass-rates are 0% — check the binder_folding_method matches the target type (RF3 for ligand, AF2 for protein) and that ++dataset.task_name resolves to the correct reference PDB (complexa target show <name> to verify).
Reference
Full evaluate/analyze config matrix, every supported result_type, per-threshold defaults, and three worked examples (protein binder / ligand binder / AME): see reference/eval_configs.md.