{"id":"ccb78336-77df-4b05-a5e6-c51b13352b96","shortId":"5e8h3z","kind":"skill","title":"ipsae","tagline":"Binder design ranking using ipSAE (interprotein Score from Aligned Errors). Use this skill when: (1) Ranking binder designs for experimental testing, (2) Filtering BindCraft or RFdiffusion outputs, (3) Comparing AF2/AF3/Boltz predictions, (4) Predicting binding success rates, (5)","description":"# ipSAE Binder Ranking\n\n## Prerequisites\n\n| Requirement | Minimum | Recommended |\n|-------------|---------|-------------|\n| Python | 3.8+ | 3.10 |\n| NumPy | 1.20+ | Latest |\n| RAM | 8GB | 16GB |\n\n## Overview\n\nipSAE (interprotein Score from Aligned Errors) is a scoring function for ranking protein-protein interactions predicted by AlphaFold2, AlphaFold3, and Boltz1. It outperforms ipTM and iPAE for binder design ranking with **1.4x higher precision** in identifying true binders.\n\n**Paper**: [What's wrong with AlphaFold's ipTM score](https://www.biorxiv.org/content/10.1101/2025.02.10.637595v2)\n\n## How to run\n\n### Installation\n```bash\ngit clone https://github.com/DunbrackLab/IPSAE.git\ncd IPSAE\npip install numpy\n```\n\n### AlphaFold2\n```bash\npython ipsae.py scores_rank_001.json unrelaxed_rank_001.pdb 15 15\n```\n\n### AlphaFold3\n```bash\npython ipsae.py fold_model_full_data_0.json fold_model_0.cif 10 10\n```\n\n### Boltz1\n```bash\npython ipsae.py pae_model_0.npz model_0.cif 10 10\n```\n\n## Key parameters\n\n| Parameter | Description | Recommended |\n|-----------|-------------|-------------|\n| PAE file | JSON (AF2/AF3) or NPZ (Boltz) | Match predictor |\n| Structure file | PDB or CIF structure | Match PAE |\n| PAE cutoff | Threshold for contacts | 10-15 |\n| Distance cutoff | Max CA-CA distance (A) | 10-15 |\n\n## Output format\n\nTwo output files are generated:\n\n**Chain-pair scores** (`_chains.csv`):\n```\nchain_A,chain_B,ipSAE_min,pDockQ,pDockQ2,LIS,n_contacts,interface_dist\nA,B,0.72,0.65,0.58,0.45,42,8.5\n```\n\n**Residue-level scores** (`_residues.csv`):\n```\nchain,resnum,pSAE,pLDDT\nA,45,0.85,92.3\nA,67,0.78,88.1\n```\n\n## Sample output\n\n### Successful run\n```\n$ python ipsae.py scores_rank_001.json design_0.pdb 10 10\nProcessing design_0...\nFound 2 chains: A, B\nComputing ipSAE scores...\n\nResults written to:\n  design_0_chains.csv\n  design_0_residues.csv\n\nSummary:\n  ipSAE_min: 0.72\n  pDockQ: 0.65\n  LIS: 0.45\n  Interface contacts: 42\n```\n\n**What good output looks like:**\n- ipSAE_min > 0.61 (primary filter)\n- pDockQ > 0.5 (supporting metric)\n- Reasonable number of interface contacts (20-100)\n\n## Decision tree\n\n```\nShould I use ipSAE?\n│\n├─ What are you ranking?\n│  ├─ Designed binders → ipSAE ✓\n│  ├─ Natural complexes → ipTM is fine\n│  └─ Single proteins → Not applicable\n│\n├─ What predictor did you use?\n│  ├─ AlphaFold2 → ipSAE ✓\n│  ├─ AlphaFold3 → ipSAE ✓\n│  ├─ Boltz1 → ipSAE ✓\n│  ├─ Chai → ipSAE (use PAE output)\n│  └─ ESMFold → Not applicable (no PAE)\n│\n└─ Why ipSAE over ipTM?\n   ├─ Different length constructs → ipSAE ✓\n   ├─ Designs with disordered regions → ipSAE ✓\n   └─ Standard complexes → Either works\n```\n\n## Recommended thresholds\n\n| Metric | Standard | Stringent | Use Case |\n|--------|----------|-----------|----------|\n| ipSAE_min | > 0.61 | > 0.70 | Primary filter |\n| LIS | > 0.35 | > 0.45 | Interface quality |\n| pDockQ | > 0.5 | > 0.6 | Supporting |\n\n## Batch processing\n\n```python\nimport subprocess\nimport os\nfrom pathlib import Path\n\ndef score_designs(pae_dir, struct_dir, output_dir):\n    \"\"\"Score all designs in a directory.\"\"\"\n    Path(output_dir).mkdir(exist_ok=True)\n\n    for pae_file in Path(pae_dir).glob(\"*_scores*.json\"):\n        name = pae_file.stem.replace(\"_scores_rank_001\", \"\")\n        struct_file = Path(struct_dir) / f\"{name}.pdb\"\n\n        if struct_file.exists():\n            subprocess.run([\n                \"python\", \"ipsae.py\",\n                str(pae_file),\n                str(struct_file),\n                \"10\", \"10\"\n            ])\n```\n\n---\n\n## Verify\n\n```bash\nls *_chains.csv | wc -l  # Should match number of predictions\n```\n\n---\n\n## Troubleshooting\n\n**Low scores for good designs**: Check PAE/distance cutoffs\n**Missing output**: Verify PAE file format matches predictor\n**Inconsistent scores**: Use same cutoffs across all designs\n\n### Error interpretation\n\n| Error | Cause | Fix |\n|-------|-------|-----|\n| `KeyError: 'pae'` | Wrong PAE format | Check if AF2/AF3/Boltz format |\n| `FileNotFoundError` | Structure not found | Verify file paths |\n| `ValueError: no contacts` | No interface detected | Check chain IDs, reduce cutoffs |\n\n---\n\n**Next**: Select top designs (ipSAE_min > 0.61) → experimental validation.","tags":["ipsae","protein","design","skills","adaptyvbio","agent-skills","claude-code","protein-design","protein-engineering"],"capabilities":["skill","source-adaptyvbio","skill-ipsae","topic-agent-skills","topic-claude-code","topic-protein-design","topic-protein-engineering"],"categories":["protein-design-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/adaptyvbio/protein-design-skills/ipsae","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add adaptyvbio/protein-design-skills","source_repo":"https://github.com/adaptyvbio/protein-design-skills","install_from":"skills.sh"}},"qualityScore":"0.513","qualityRationale":"deterministic score 0.51 from registry signals: · indexed on github topic:agent-skills · 126 github stars · SKILL.md body (4,166 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T12:54:48.722Z","embedding":null,"createdAt":"2026-04-18T22:10:09.150Z","updatedAt":"2026-05-02T12:54:48.722Z","lastSeenAt":"2026-05-02T12:54:48.722Z","tsv":"'-100':293 '-15':175,185 '/content/10.1101/2025.02.10.637595v2)':107 '/dunbracklab/ipsae.git':117 '0':248 '0.35':368 '0.45':216,269,369 '0.5':284,373 '0.58':215 '0.6':374 '0.61':280,363,519 '0.65':214,267 '0.70':364 '0.72':213,265 '0.78':234 '0.85':230 '001':423 '1':16 '1.20':50 '1.4':88 '10':137,138,145,146,174,184,244,245,443,444 '15':129,130 '16gb':54 '2':23,250 '20':292 '3':29 '3.10':48 '3.8':47 '4':33 '42':217,272 '45':229 '5':38 '67':233 '8.5':218 '88.1':235 '8gb':53 '92.3':231 'across':478 'af2/af3':155 'af2/af3/boltz':31,493 'align':10,60 'alphafold':101 'alphafold2':74,123,321 'alphafold3':75,131,323 'applic':315,334 'b':201,212,253 'bash':112,124,132,140,446 'batch':376 'bind':35 'bindcraft':25 'binder':2,18,40,84,95,305 'boltz':158 'boltz1':77,139,325 'ca':180,181 'ca-ca':179 'case':360 'caus':484 'cd':118 'chai':327 'chain':194,198,200,224,251,509 'chain-pair':193 'chains.csv':197,448 'check':462,491,508 'cif':165 'clone':114 'compar':30 'complex':308,351 'comput':254 'construct':343 'contact':173,208,271,291,504 'cutoff':170,177,464,477,512 'decis':294 'def':387 'descript':150 'design':3,19,85,247,304,345,389,398,461,480,516 'design_0.pdb':243 'design_0_chains.csv':260 'design_0_residues.csv':261 'detect':507 'differ':341 'dir':391,393,395,404,415,428 'directori':401 'disord':347 'dist':210 'distanc':176,182 'either':352 'error':11,61,481,483 'esmfold':332 'exist':406 'experiment':21,520 'f':429 'file':153,162,190,411,425,439,442,469,500 'filenotfounderror':495 'filter':24,282,366 'fine':311 'fix':485 'fold_model_0.cif':136 'fold_model_full_data_0.json':135 'format':187,470,490,494 'found':249,498 'function':65 'generat':192 'git':113 'github.com':116 'github.com/dunbracklab/ipsae.git':115 'glob':416 'good':274,460 'higher':90 'id':510 'identifi':93 'import':379,381,385 'inconsist':473 'instal':111,121 'interact':71 'interfac':209,270,290,370,506 'interpret':482 'interprotein':7,57 'ipa':82 'ipsa':1,6,39,56,119,202,255,263,278,299,306,322,324,326,328,338,344,349,361,517 'ipsae.py':126,134,142,241,436 'iptm':80,103,309,340 'json':154,418 'key':147 'keyerror':486 'l':450 'latest':51 'length':342 'level':221 'like':277 'lis':206,268,367 'look':276 'low':457 'ls':447 'match':159,167,452,471 'max':178 'metric':286,356 'min':203,264,279,362,518 'minimum':44 'miss':465 'mkdir':405 'model_0.cif':144 'n':207 'name':419,430 'natur':307 'next':513 'npz':157 'number':288,453 'numpi':49,122 'ok':407 'os':382 'outperform':79 'output':28,186,189,237,275,331,394,403,466 'overview':55 'pae':152,168,169,330,336,390,410,414,438,468,487,489 'pae/distance':463 'pae_file.stem.replace':420 'pae_model_0.npz':143 'pair':195 'paper':96 'paramet':148,149 'path':386,402,413,426,501 'pathlib':384 'pdb':163,431 'pdockq':204,266,283,372 'pdockq2':205 'pip':120 'plddt':227 'precis':91 'predict':32,34,72,455 'predictor':160,317,472 'prerequisit':42 'primari':281,365 'process':246,377 'protein':69,70,313 'protein-protein':68 'psae':226 'python':46,125,133,141,240,378,435 'qualiti':371 'ram':52 'rank':4,17,41,67,86,303,422 'rate':37 'reason':287 'recommend':45,151,354 'reduc':511 'region':348 'requir':43 'residu':220 'residue-level':219 'residues.csv':223 'resnum':225 'result':257 'rfdiffus':27 'run':110,239 'sampl':236 'score':8,58,64,104,196,222,256,388,396,417,421,458,474 'scores_rank_001.json':127,242 'select':514 'singl':312 'skill':14 'skill-ipsae' 'source-adaptyvbio' 'standard':350,357 'str':437,440 'stringent':358 'struct':392,424,427,441 'struct_file.exists':433 'structur':161,166,496 'subprocess':380 'subprocess.run':434 'success':36,238 'summari':262 'support':285,375 'test':22 'threshold':171,355 'top':515 'topic-agent-skills' 'topic-claude-code' 'topic-protein-design' 'topic-protein-engineering' 'tree':295 'troubleshoot':456 'true':94,408 'two':188 'unrelaxed_rank_001.pdb':128 'use':5,12,298,320,329,359,475 'valid':521 'valueerror':502 'verifi':445,467,499 'wc':449 'work':353 'written':258 'wrong':99,488 'www.biorxiv.org':106 'www.biorxiv.org/content/10.1101/2025.02.10.637595v2)':105 'x':89","prices":[{"id":"15428aaa-ea63-42be-98fa-7edba0775ad9","listingId":"ccb78336-77df-4b05-a5e6-c51b13352b96","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"adaptyvbio","category":"protein-design-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:10:09.150Z"}],"sources":[{"listingId":"ccb78336-77df-4b05-a5e6-c51b13352b96","source":"github","sourceId":"adaptyvbio/protein-design-skills/ipsae","sourceUrl":"https://github.com/adaptyvbio/protein-design-skills/tree/main/skills/ipsae","isPrimary":false,"firstSeenAt":"2026-04-18T22:10:09.150Z","lastSeenAt":"2026-05-02T12:54:48.722Z"}],"details":{"listingId":"ccb78336-77df-4b05-a5e6-c51b13352b96","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"adaptyvbio","slug":"ipsae","github":{"repo":"adaptyvbio/protein-design-skills","stars":126,"topics":["agent-skills","claude-code","protein-design","protein-engineering"],"license":"mit","html_url":"https://github.com/adaptyvbio/protein-design-skills","pushed_at":"2026-01-19T13:06:29Z","description":"Claude Code skills for protein design","skill_md_sha":"ef306f1280ad46247b5044f3bcdf142179630617","skill_md_path":"skills/ipsae/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/adaptyvbio/protein-design-skills/tree/main/skills/ipsae"},"layout":"multi","source":"github","category":"protein-design-skills","frontmatter":{"name":"ipsae","license":"MIT","description":"Binder design ranking using ipSAE (interprotein Score from Aligned Errors). Use this skill when: (1) Ranking binder designs for experimental testing, (2) Filtering BindCraft or RFdiffusion outputs, (3) Comparing AF2/AF3/Boltz predictions, (4) Predicting binding success rates, (5) Need better ranking than ipTM or iPAE.  For structure prediction, use chai or alphafold. For QC thresholds, use protein-qc."},"skills_sh_url":"https://skills.sh/adaptyvbio/protein-design-skills/ipsae"},"updatedAt":"2026-05-02T12:54:48.722Z"}}