skillZs
★ LIVE SKILL TAGS ★
>>> LIVE SKILLS INDEX <<<
* OPEN SOURCE *
NO LOGIN, NO TRACKING
※ REAL INSTALL DATA ※
← back to all skills
nvidia-bionemo/bionemo-agent-toolkit209 installs

complexa-setup

First-time setup, environment configuration, and model-weight installation for Proteina-Complexa. Reach for this skill whenever the user says "set up complexa", "install complexa", "configure my environment file", "first-time setup", "what models do I have installed", "what's in my environment file", "download model weights", "download Complexa / AF2 / RF3 / ProteinMPNN / LigandMPNN / ESM2 / ESMFold checkpoints", "preflight my GPU", "verify environment", "complexa init", "complexa download", "complexa download --status", "complexa validate env", or any time a fresh checkout needs to be made runnable. This is the first skill to run on a new clone — it drives `complexa init`, `complexa download`, and `complexa validate env` end-to-end, edits the required `.env` keys, picks the right runtime (UV vs Docker), and emits a replayable setup artifact.

How do I install this agent skill?

npx skills add https://github.com/nvidia-bionemo/bionemo-agent-toolkit --skill complexa-setup
view source ↗

Is this agent skill safe to install?

  • Gen Agent Trust Hubpass

    The skill facilitates the initialization and configuration of the Proteina-Complexa development environment. It manages local environment variables, builds the project's Python virtual environment, and downloads required model weights from verified and well-known infrastructure, including NVIDIA's NGC registry, Hugging Face, AWS, and GitHub. All activities are standard for setting up a scientific computing project.

  • Socketpass

    No alerts

  • Snykpass

    Risk: LOW · No issues

What does this agent skill do?

Complexa Setup Skill

Drive the three steps a fresh Proteina-Complexa checkout needs before any design run: create .env, fetch model weights, and sanity-check the env. Probe the host for GPU / disk / tool binaries first so the user does not discover a missing dependency mid-pipeline. End with a JSON setup artifact the user (or a future agent) can re-read instead of re-deriving state.

CLI vs direct file-edit — pick the cheapest path per step

StepPreferred pathWhy
.env creation (Step 2)File edit (copying the env template + 3 line swaps) or complexa initcomplexa init is a thin wrapper around cp + 3 regex swaps (_swap_runtime_in_env in cli_runner.py). Either path works; pick CLI for new humans, direct edit for agents.
.env value edits (Step 3)File edit (StrReplace LOCAL_CODE_PATH=… etc.)No CLI for this — the values are user-specific paths.
Download model weights (Step 4)CLI (complexa download --…)Dispatches to env/download_startup.sh (~1000 lines of bash with NGC URLs, retries, checksum-style skip-if-present). Don't try to replicate.
Validate env (Step 5)CLI (complexa validate env) or test -f .env && test -d $DATA_PATHCLI prints a nicer report; the manual check is one-liner-safe.
Validate full design config (after picking a pipeline)CLI (complexa validate design CONFIG)Non-trivial Hydra defaults traversal + ckpt + env-var checks; not worth replicating.

What this skill enables

  • A correctly-shaped .env for either UV or Docker runtime.
  • Model checkpoints (Complexa protein/ligand/AME plus community models) downloaded to known paths.
  • A preflight.json snapshot of the host (GPU, disk, .env, ckpts, tool binaries).
  • A run_manifest.json capturing exactly which complexa init + complexa download invocations were used (replay-friendly).
  • A pass/fail report from complexa validate env with clear next-step hints.

Step 1: Pre-flight check

Always run the shared preflight before touching the environment. It does not require .env to exist — it falls back to defaults — and it tells you whether the host can run Complexa at all.

bash .claude/skills/_shared/scripts/preflight.sh

The script writes ./complexa_setup/preflight.json. Read it and surface:

  • gpu.available — if false, design / evaluate steps will fail; warn the user.
  • gpu.vram_gb — Complexa needs ≥40 GB (A100/H100/L40S).
  • disk.free_gb at CKPT_PATH — minimum ~50 GB for the full Complexa + community model set.
  • env.missing_required — anything listed here must be edited in .env before validation passes.
  • tools.{foldseek,mmseqs,dssp,hbplus,sc}.exists — missing tools degrade evaluation but do not block generation.

Step 1b: Build the Python environment (only if .venv/ is missing)

The complexa CLI is installed inside the project's Python environment, not on the system path by default. On a fresh clone, the .venv/ directory does not yet exist and complexa init will fail with command not found. Build the UV venv before anything else:

test -d .venv || ./env/build_uv_env.sh   # first-time UV build
source .venv/bin/activate
which complexa                            # sanity check: should point inside .venv

Skip this step if which complexa already resolves — that means a previous build is still good. The Docker runtime skips it entirely; the venv lives inside the container image instead. If the user said "I just cloned" or you see no .venv/ next to pyproject.toml, run the build script — complexa init without a venv produces a confusing command not found rather than an obvious "build the venv first" error.

Step 2: Create .env

Pick the runtime. UV is the default and faster to start; Docker is required on Ubuntu 20.04 or systems with GLIBC mismatches.

Use AskUserQuestion if it is not obvious from context:

"Which runtime do you want to configure? uv (recommended, faster) or docker (use if you do not have a UV venv built locally)?"

Path A: file edit (preferred for agents)

complexa init only does three things — copy .env_example → .env and swap the COMPLEXA_RUNTIME= line plus the UV_* ↔ DOCKER_* prefixes on the tool/data/cache path block. You can do the same with cp + StrReplace and skip the CLI:

cp .env_example .env
# Then StrReplace these lines in .env:
#   COMPLEXA_RUNTIME=uv          → COMPLEXA_RUNTIME=<runtime>
#   FOLDSEEK_EXEC=${UV_FOLDSEEK_EXEC}  → FOLDSEEK_EXEC=${DOCKER_FOLDSEEK_EXEC}   (and same for RF3_EXEC_PATH, SC_EXEC, HBPLUS_EXEC, MMSEQS_EXEC, DSSP_EXEC, TMOL_PATH)
#   DATA_PATH=${LOCAL_DATA_PATH} → DATA_PATH=${DOCKER_DATA_PATH}                  (and same for CACHE_DIR, CKPT_PATH)

Skip the prefix swap entirely if you're staying on UV (the .env_example already targets UV).

Path B: CLI

complexa init                    # UV runtime (default)
complexa init --runtime docker   # Docker runtime
complexa init --force            # Recreate .env from .env_example (drops any edits)

If .env already exists and --force is not passed, only the runtime-dependent lines are swapped — user edits in Step 3 are preserved across runtime flips.

Verify either way

test -f .env && echo "OK: .env present" || echo "MISSING"
grep -E '^COMPLEXA_RUNTIME=' .env

Step 3: Edit .env

No CLI for this — Step 2 only set the runtime; you still need to write your machine-specific paths into .env by hand (StrReplace or your editor). The two absolutely-required edits are:

LOCAL_CODE_PATH=/absolute/path/to/protein-foundation-models
LOCAL_DATA_PATH=/absolute/path/to/PFM_data

Everything else (cache, ckpts, community-model dirs, tool binaries) is derived from LOCAL_CODE_PATH by default and only needs editing if you have a non-standard layout. For the full table — every key, what it controls, what fails if it is missing — see reference/env_keys.md.

Quick decision table for the four edits most users make:

KeyDefaultSet this if
LOCAL_CODE_PATHplaceholderAlways — required
LOCAL_DATA_PATH/path/to/PFM_dataAlways — required, points at target PDBs
HF_TOKENplaceholderYou need ESMFold or gated HF models
WANDB_API_KEYplaceholderYou want training runs logged to W&B

Step 4: Download checkpoints

Always use the CLI here. complexa download dispatches to env/download_startup.sh (~1000 lines of bash with NGC URLs, retries, and skip-if-present logic across ~6 community-model families). Rolling your own wget loop is a recipe for partial downloads and wrong destination paths.

Ask which models the user actually needs — downloading everything is ~100+ GB. Pick from the three Complexa variants and the community-model set. Each Complexa variant unlocks exactly one complexa design pipeline; AF2 / RF3 inside the community-model set are what evaluate (and reward-guided search) need at run time.

FlagWhat it downloadsUnlocks pipelineDestinationApprox size
--complexaComplexa protein-binder model + AE (complexa.ckpt, complexa_ae.ckpt)Protein binder (default) — configs/search_binder_local_pipeline.yaml./ckpts/~3 GB
--complexa-ligandLigand-binder model + AE (complexa_ligand.ckpt, complexa_ligand_ae.ckpt)Ligand binder — configs/search_ligand_binder_local_pipeline.yaml./ckpts/~3 GB
--complexa-ameAME motif-scaffolding model + AE (complexa_ame.ckpt, complexa_ame_ae.ckpt)AME (enzyme) — configs/search_ame_local_pipeline.yaml./ckpts/~3 GB
--complexa-allAll three Complexa variantsAll three pipelines./ckpts/~9 GB
--allAll community models (ProteinMPNN + LigandMPNN + AF2 + ESM2 + ESMFold + RF3)Needed by evaluate / reward: AF2 (protein binder), RF3 (ligand binder + AME), MPNNs (inverse folding for every pipeline)../community_models/~50 GB
--everythingComplexa + community + optional (Boltz2 / Protenix)Everything plus alternative refold backendsboth~100+ GB
--statusShow install state — does not download(none)(none)n/a

Minimum download per pipeline:

  • Protein binder (default): complexa download --complexa --all
  • Ligand binder: complexa download --complexa-ligand --all
  • AME / enzyme: complexa download --complexa-ame --all
  • All three: complexa download --everything

For the full per-model destination breakdown and per-flag NGC sources, see reference/downloads.md.

Pick the smallest invocation that covers the user's goal, then run:

complexa download --complexa            # protein binder only
complexa download --complexa-all        # all three Complexa variants
complexa download --all                 # community models only
complexa download --everything          # everything

Without arguments, complexa download launches an interactive wizard — prefer explicit flags in agent mode.

Verify what landed:

complexa download --status

The status output groups by family (Complexa / community / optional) and prints "Installed" or "Missing" per ckpt. Re-run the specific flag if a ckpt is flagged missing.

Step 5: Validate

Final check that .env is loadable and the required paths resolve:

complexa validate env

validate env checks: (1) .env exists, (2) DATA_PATH is set and points at an existing directory. It does not check ckpt files — those are checked by complexa validate design <config> once you have a pipeline config picked.

Common failures and fixes:

SymptomCauseFix
.env file: No .env file foundcomplexa init not runRun complexa init first
DATA_PATH: Not set in .envPlaceholder not editedEdit LOCAL_DATA_PATH in .env
DATA_PATH: Directory not foundPath edited but does not exist on diskmkdir -p $LOCAL_DATA_PATH or copy target data there
Hydra error InterpolationKeyError: AF2_DIRReward/eval config wants AF2 but .env does not define itDownload AF2 weights or remove AF2 from the config

Step 6: Emit setup artifact

Drop a JSON manifest in ./complexa_setup/ so the user has a single file describing the resulting state. The shared helper writes it for you:

mkdir -p ./complexa_setup
python .claude/skills/_shared/scripts/write_manifest.py \
    --kind setup \
    --runtime "$(grep -E '^COMPLEXA_RUNTIME=' .env | cut -d= -f2)" \
    --preflight ./complexa_setup/preflight.json \
    --out ./complexa_setup/run_manifest.json

Surface the resulting files to the user:

ls -la ./complexa_setup/

Expected contents:

complexa_setup/
├── preflight.json      # GPU / disk / .env / ckpt / tool snapshot
└── run_manifest.json   # init + download invocations + git SHA + runtime

Hardware requirements

ResourceMinimumRecommended
GPU1× CUDA GPU, ≥24 GB VRAMA100 / H100 / L40S, 40–80 GB VRAM
CUDA12.012.4+
Disk (CKPT_PATH)50 GB150 GB (covers --everything)
RAM16 GB64 GB+
OSUbuntu 22.04+ (UV)Ubuntu 22.04+ or Docker on any host

Ubuntu 20.04 throws GLIBC errors with the UV runtime — use complexa init --runtime docker on those hosts. See .claude/skills/_shared/reference/hardware.md for per-pipeline (binder vs ligand vs AME) requirements.

Troubleshooting

SymptomCauseFix
complexa: command not foundPackage not installed in active envsource .venv/bin/activate then pip install -e .
complexa init says .env_example not foundRunning outside repo rootcd to the project root (where .env_example lives)
.env_example not found. Cannot initialize .env.Not in project rootcd into protein-foundation-models/ and retry
complexa download fails on NGC URLBehind firewall / no internetConfigure a proxy for the download script, or download the model .ckpts manually from the NGC pages linked in the main README.md and drop them into ./ckpts/
complexa download --status shows ckpts present but validate fails.env CKPT_PATH points elsewhereEither move ckpts or edit LOCAL_CHECKPOINT_PATH in .env
GLIBC error on importUbuntu 20.04 with UV runtimeRe-run complexa init --runtime docker and use ./env/docker-ops.sh run

For the full .env reference (every key, defaults, failure modes), see reference/env_keys.md.

For the full download flag matrix, NGC URLs, and destination layout, see reference/downloads.md.

Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.

<a href="https://skillzs.dev/skills/nvidia-bionemo/bionemo-agent-toolkit/complexa-setup">View complexa-setup on skillZs</a>