Workflow
If boltz-api is missing from PATH, use boltz-cli-setup for install/update guidance before retrying.
If a command reports missing or expired authentication, use boltz-cli-setup to start boltz-api auth login --device-code before retrying; do not ask permission first.
If the agent host sandbox blocks boltz-api install/auth/API calls, use boltz-cli-setup to request the host sandbox bypass/escalation needed for user-wide CLI install, browser login, credential storage, temp files, or API access before retrying.
Use this skill when the user wants de novo small-molecule binders (no existing library).
- Normalize the target: one or more protein sequences into
target.entities, plus optionalpocket_residues(0-based) and/orreference_ligands(known binders to help locate the pocket). - Pick
num_molecules— valid range 10 to 1,000,000 (server rejects outside it). If the user says fewer than 10, explain the floor and propose 10. - Only add
chemical_space(e.g."enamine_real") if the user explicitly wants generation restricted to synthesizable molecules within that library. - Supported optional features include
chemical_spaceandmolecule_filters; only add them on explicit request. Read references/api.md [blocked] for exact shapes and filter options. - Author the payload YAML or JSON, run
estimate-cost, show the USD cost, wait for explicit confirmation. Cost is a flat $0.025 per molecule (size-independent); still quoteestimated_cost_usdfrom the response as the authoritative total. startto submit (synchronous). Capture the ID.- Launch
download-resultsthrough the runtime's long-running or non-blocking command facility; it polls, paginates, downloads per-hit structures, and exits when terminal. Use the mechanism the runtime documents; consultboltz-cli-setupif unsure. After launching the downloader, always report the job ID, run name, and output directory. If the runtime can schedule follow-up checks, schedule adownload-statuscheck and state the cadence; otherwise include thedownload-statuscommand. - Rank hits from
<output-root>/<run-name>/results/index.jsonlbybinding_confidencefor hit discovery oroptimization_scorefor lead optimization. Each generated molecule also carries a freeadmeblock (solubility,permeability,lipophilicity) — surface it for developability triage when the user cares about ADME, or when a top hit looks risky. Read references/results.md [blocked] for output layout and metric details.
Command Pattern
Payload keys are num_molecules, target, chemical_space, molecule_filters — the API body field names.
Always Do This
- Enforce
10 <= num_molecules <= 1,000,000before callingestimate-cost. The server rejects values outside that range. - Cost is a flat $0.025 per molecule (size-independent).
estimate-costreturns the authoritative total. - Treat pocket residue indices as 0-based.
- Keep payload field names exactly as the API body names shown in
references/api.md. - Use absolute paths for the output root, payload files, and embedded target files. Do not
cdinto the run directory for follow-up commands; pass the same--root-dirand use absolute paths so later relative paths do not drift. - Prefer one merged top-level payload via
--input @yaml:///absolute/path/payload.yamlor@json:///absolute/path/payload.jsonforestimate-costandstart. Keep--idempotency-keyand--workspace-idtop-level; if they also appear inside--input, the top-level flags win. - Direct object flags still work as overrides: for example
--target @yaml:///absolute/path/target.yamlor--molecule-filters @json:///absolute/path/filters.json. Piped YAML / JSON on stdin also works, but it must use API body field names. Never use@file://. - Use the same slug as both
--idempotency-keyat submit and--nameondownload-results. - In permission-gated runtimes, keep each Boltz call as a top-level command that starts with
boltz-api. Prefer concrete arguments oversh -c, inline environment assignments, aliases, wrapper scripts, loops, or pipelines around theboltz-apiinvocation unless the user already allowed that exact command form. Use--raw-output --transform id, read the printed ID, then paste that literal ID into the nextdownload-resultscommand. - Run
download-resultsthrough the runtime's long-running or non-blocking command facility, using the mechanism the runtime documents rather than tool arguments you assume exist. Do not detach it with shell&ornohupunless the runtime documents shell backgrounding as its supported mode; some tool runners reap shell-backgrounded children before.boltz-run.jsonis written. If unsure how this runtime handles long-running commands, consultboltz-cli-setup. - After the download starts, do not manually wait on it or run ad hoc polling loops. Wall-clock time scales roughly with
num_molecules: under 100 often finishes in a few minutes, 100-1,000 may take several minutes to tens of minutes, and larger runs can take longer or hours depending on inputs and system load. Don't quote a fixed duration.--poll-interval-seconds 60is a sensible default for the downloader.download-resultsemits JSONL progress on stderr by default; add--progress-format text --verboseonly when you explicitly want human-readable logs. - If the runtime can schedule follow-up checks (a heartbeat, scheduled task, or reminder), schedule one after launching
download-results. It should runboltz-api --format json download-status --name "<run-name>" --root-dir "/absolute/path/boltz-experiments", post only material status changes or terminal completion/failure, and stop once terminal. Choose cadence bynum_molecules: under 100 -> every 1-2 minutes; 100-1,000 -> every 5 minutes; over 1,000 -> every 15 minutes. If the runtime cannot schedule follow-ups, do not claim an automatic next check: report the job ID, run name, output directory, and thedownload-statuscommand. Poll a saved session handle only for interactive, user-requested progress checks; never run a manual poll loop in the current turn. - If detached download needs to be restarted, re-run
boltz-api download-resultswith the same--name "<run-name>"and the same--root-dir. - Do not invent filters; only add
molecule_filterson user request.
Escape Hatch
- Payload reference: https://api.boltz.bio/docs/api/python/resources/small_molecule/subresources/design/methods/start
- CLI flag names:
boltz-api small-molecule:design start --help
Read references/api.md [blocked] for the target, chemical_space, and molecule_filters shapes (filter catalog matches the screen endpoint). Read references/results.md [blocked] after download when ranking generated molecules or explaining outputs.
Outputs
Rank from results/index.jsonl after download-results; use references/results.md [blocked] for local file layout and metric meanings.


