Phi CLI and biomodals for the dyno protein design platform
Project description
dyno-phi
Phi CLI for the dyno protein structure analysis platform.
phi is the command-line interface for uploading protein structures, running
structure prediction and inverse-folding pipelines, filtering and scoring
candidates, and downloading results from the dyno API.
Results and scores are viewable in the web dashboard at
design.dynotx.com/dashboard/datasets/<dataset_id>.
Table of contents
- Installation
- Authentication
- Quick start
- Command reference
- Filter presets
- State caching
- Claude Code skill
- Development
Installation
pip install dyno-phi
Requires Python ≥ 3.9.
Authentication
Create an API key at Settings → API keys in the dyno web app
(https://design.dynotx.com/dashboard/settings), then export it:
export DYNO_API_KEY=ak_...
The key is cached to .phi/state.json on first use so you don't need to
re-export it in future sessions.
Verify your connection:
phi login
Quick start
Try the tutorial
The fastest way to get started — downloads five example PD-L1 binder structures and walks you through the full pipeline:
phi tutorial
This fetches the example files, prints step-by-step instructions, and leaves
you ready to run phi filter.
Scoring your own structures
# 1. Upload PDB/CIF files
phi upload ./designs/
# 2. Run the full filter pipeline
phi filter --preset default --wait
# 3. View scores and download results
phi scores
phi download --out ./results/
After each command, phi prints the active dataset and a link to the
dashboard:
Active: dataset [d7c3a1b2-...] · job [cb4553f5-...]
Dashboard: https://design.dynotx.com/dashboard/datasets/d7c3a1b2-...
Command reference
| Command | Alias | Description |
|---|---|---|
phi tutorial |
— | Download example structures and print a step-by-step walkthrough |
phi login |
— | Verify API key and print identity |
phi upload |
— | Upload PDB/CIF files or a directory |
phi fetch |
— | Download a structure from RCSB PDB or AlphaFold DB, crop, and optionally upload |
phi datasets |
— | List datasets |
phi dataset |
— | Show dataset details |
phi use <dataset_id> |
— | Set active dataset (cached to .phi/state.json) |
phi folding |
esmfold |
Single-sequence structure prediction (ESMFold) |
phi complex_folding |
alphafold |
Multi-chain complex prediction (AlphaFold2 multimer) |
phi inverse_folding |
proteinmpnn |
Sequence design via inverse folding (ProteinMPNN) |
phi esm2 |
— | Sequence embedding and scoring (ESM2) |
phi boltz |
— | Structure prediction (Boltz-1) |
phi filter |
— | Full filter pipeline: inverse folding → folding → complex folding → score |
phi status <job_id> |
— | Poll job status |
phi jobs |
— | List recent jobs |
phi logs <job_id> |
— | Stream job logs |
phi cancel <job_id> |
— | Cancel a running job |
phi scores |
— | Display scores table for a completed filter job |
phi download |
— | Download job artifacts (structures, scores, raw JSONs) |
phi research |
— | Run a research query against the platform |
phi notes |
— | Manage dataset research notes |
Common flags
| Flag | Commands | Description |
|---|---|---|
--dataset-id ID |
most | Target dataset (omit to use cached) |
--wait |
most | Poll until job completes, then print summary |
--out DIR |
download, scores |
Output directory (default: ./results) |
--preset default|relaxed |
filter |
Filter threshold preset |
--num-sequences N |
inverse_folding |
Sequences per design (default: 4) |
--models 1,2 |
complex_folding |
AlphaFold2 model numbers (default: 1,2,3) |
--poll-interval S |
global | Seconds between status polls (default: 5) |
Filter presets
phi filter applies a multi-stage quality-control pipeline and scores each
design against configurable thresholds.
| Metric | default |
relaxed |
Description |
|---|---|---|---|
| pLDDT | ≥ 0.80 | ≥ 0.80 | ESMFold per-residue confidence |
| pTM | ≥ 0.55 | ≥ 0.45 | Global TM-score proxy (ESMFold) |
| ipTM | ≥ 0.50 | ≥ 0.50 | Interface pTM (AF2 multimer) |
| iPAE | ≤ 10.85 Å | ≤ 12.4 Å | AF2 interface PAE in Å |
| RMSD | ≤ 3.5 Å | ≤ 4.5 Å | Backbone RMSD vs. reference |
Override any threshold with an explicit flag:
phi filter --dataset-id ... --plddt 0.75 --iptm 0.45
State caching
phi caches the most recently used dataset ID, job ID, and API key in
.phi/state.json so you don't need to pass --dataset-id or re-export your
key repeatedly:
phi use d7c3a1b2-... # set active dataset
phi filter --preset default # uses cached dataset
phi scores # uses cached job
phi download --out ./results # uses cached job
The dashboard URL for the active dataset is printed after every command:
Dashboard: https://design.dynotx.com/dashboard/datasets/d7c3a1b2-...
Claude Code skill
The phi skill is bundled at skills/phi/SKILL.md and is automatically
available when you open this repo in Claude Code (Cursor or the claude CLI).
No installation needed — just open the project and ask naturally:
Upload the PDB files in ./examples/ and run the default filter pipeline.
To make the skill available in all your projects (outside this repo):
mkdir -p ~/.claude/skills/phi
cp skills/phi/SKILL.md ~/.claude/skills/phi/SKILL.md
Development
git clone https://github.com/dynotx/phi-cli
cd phi-cli
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
# Lint
ruff check src/
# Type check
mypy src/phi/
# Run tests
pytest tests/
Releasing to PyPI
Releases are published via GitHub Actions. Push a version tag to trigger the workflow:
# Bump src/phi/_version.py, update CHANGELOG.md, then:
git tag v0.1.0
git push origin main --tags
The workflow publishes to TestPyPI automatically, then waits for manual
approval before publishing to the real PyPI. See
.github/workflows/publish.yml for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dyno_phi-0.2.3.tar.gz.
File metadata
- Download URL: dyno_phi-0.2.3.tar.gz
- Upload date:
- Size: 413.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b9fcc41f8dd8ebe9c8823a8d7e61288e50cc230bd1e2c4cd17d0e9915423b91
|
|
| MD5 |
5f9b62f2e91a3aeb5fbc1431833819f7
|
|
| BLAKE2b-256 |
5407ce6025f3f151eb4ccff4edc82297b17149d445016067cbcb2dad6949a76b
|
Provenance
The following attestation bundles were made for dyno_phi-0.2.3.tar.gz:
Publisher:
publish.yml on dynotx/phi-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dyno_phi-0.2.3.tar.gz -
Subject digest:
6b9fcc41f8dd8ebe9c8823a8d7e61288e50cc230bd1e2c4cd17d0e9915423b91 - Sigstore transparency entry: 1123263908
- Sigstore integration time:
-
Permalink:
dynotx/phi-cli@92673eaa7eedf1d27198d3dde67be23e0bb384cb -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/dynotx
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@92673eaa7eedf1d27198d3dde67be23e0bb384cb -
Trigger Event:
push
-
Statement type:
File details
Details for the file dyno_phi-0.2.3-py3-none-any.whl.
File metadata
- Download URL: dyno_phi-0.2.3-py3-none-any.whl
- Upload date:
- Size: 157.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff99b0960633cd864f9c21886d4d51a64ffe163bac0264977519dac26df4e1d4
|
|
| MD5 |
b954e2fd1f15b5283030e1f4d76ddb32
|
|
| BLAKE2b-256 |
fc58c2025e47f8110adca54021b28ad5319118d59294496e58512173c0984a22
|
Provenance
The following attestation bundles were made for dyno_phi-0.2.3-py3-none-any.whl:
Publisher:
publish.yml on dynotx/phi-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dyno_phi-0.2.3-py3-none-any.whl -
Subject digest:
ff99b0960633cd864f9c21886d4d51a64ffe163bac0264977519dac26df4e1d4 - Sigstore transparency entry: 1123263912
- Sigstore integration time:
-
Permalink:
dynotx/phi-cli@92673eaa7eedf1d27198d3dde67be23e0bb384cb -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/dynotx
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@92673eaa7eedf1d27198d3dde67be23e0bb384cb -
Trigger Event:
push
-
Statement type: