Command-line runner for Adagio pipeline files.
Project description
Adagio CLI
Command-line runner for Adagio pipeline files
Requirements
- Python 3.10+
uv(recommended for development)- Docker for the default task runtime
- Apptainer or Singularity when using
kind = "apptainer"with local.sifimages
Installation
Install from PyPI:
pip install adagio-cli
Install a prerelease from TestPyPI while validating a release candidate:
pip install \
--index-url https://test.pypi.org/simple/ \
--extra-index-url https://pypi.org/simple \
adagio-cli
Install from the current checkout:
pip install .
Or with uv:
uv pip install .
Verify install:
adagio --version
adagio --help
Usage
Run a pipeline
Show command help:
adagio run --help
Run with a pipeline file:
adagio run --pipeline path/to/pipeline.json --cache-dir /path/to/cache
adagio run executes each plugin task in its own task environment.
The default task environment is a Docker image in GHCR derived from the plugin
name in the pipeline spec, for example dada2 -> ghcr.io/cymis/qiime2-plugin-dada2:2026.1.
Runtime config can override that per default/plugin/task and switch selected work to
Apptainer/Singularity with a local .sif image path. The cache directory is required
and is reused across reruns by default so unchanged successful tasks can be replayed.
Equivalent positional form:
adagio run path/to/pipeline.json --cache-dir /path/to/cache
Use an arguments file:
adagio run --pipeline path/to/pipeline.json --cache-dir /path/to/cache --arguments path/to/arguments.json
Use a runtime config file with defaults, plugin-level overrides, and optional task overrides:
adagio run --pipeline path/to/pipeline.json --cache-dir /path/to/cache --config path/to/runtime.toml
Control which dynamic flags are shown in help:
adagio run --pipeline path/to/pipeline.json --cache-dir /path/to/cache --show-params required
# choices: all | missing | required
Disable reuse for a run while still writing outputs into the selected cache directory:
adagio run --pipeline path/to/pipeline.json --cache-dir /path/to/cache --no-reuse
The same boolean pair is available as --reuse / --no-reuse. --reuse is the default.
Clear an existing cache directory:
adagio cache clear --cache-dir /path/to/cache
Inspect a pipeline
Print a dependency-ordered summary of the plugin actions in a pipeline:
adagio pipeline show path/to/pipeline.json
Arguments file format
--arguments can be downloaded from Adagio directly in the "Run" workflow :
{
"version": 1,
"inputs": {
"input_name": "/path/to/input.qza"
},
"parameters": {
"param_name": "value"
},
"outputs": "/path/to/output-dir"
}
outputs may also be a map keyed by output name (WIP: not currently generated by Adagio):
{
"outputs": {
"output_a": "/path/to/output-a",
"output_b": "/path/to/output-b"
}
}
If outputs are omitted, defaults are generated under ./adagio-outputs.
Runtime config format
--config accepts TOML. Defaults apply first, then plugin keys, then task keys:
version = 1
[defaults]
platform = "linux/amd64"
[plugins]
dada2 = { image = "ghcr.io/cymis/qiime2-plugin-dada2:2026.1" }
demux = { image = "ghcr.io/cymis/qiime2-plugin-demux:2026.1" }
[tasks]
"dada2.denoise_single" = { image = "registry.internal/custom-dada2:1.0", platform = "linux/amd64" }
kind, image, and platform are all optional on defaults, plugin entries, and task entries.
kind may be docker or apptainer. image remains the environment reference:
for Docker it is the container image, and for Apptainer it must be a local .sif path.
Precedence is task override > plugin override > defaults > default resolver.
Task lookup supports graph node id, optional task name when present in the
pipeline, and plugin.action as a fallback. Plugin lookup uses the pipeline's
plugin name. If platform is omitted all the way through, Adagio uses normal
Docker platform resolution with no implicit fallback. Anything not listed in the
config uses the default plugin image resolver.
Concrete Apptainer example:
version = 1
[defaults]
kind = "docker"
[plugins]
bowtie2 = { kind = "apptainer", image = "/shared/qiime-images/q2-bowtie2-test.sif" }
For kind = "apptainer", Adagio prefers the apptainer executable and falls back to
singularity. The current implementation supports only local .sif paths and runs
tasks serially; no scheduler submission or remote image pull behavior is included.
QAPI generation/submission
Generate and submit plugin metadata from the active QIIME environment:
adagio qapi build --action-url http://localhost:81/api/v1
Submit to a protected deployment such as adagio.run with a scoped submission token:
export ACTION_URL=https://adagio.run/api/v1
export QAPI_SUBMISSION_TOKEN=<token copied from https://adagio.run/app/profile>
uv run adagio qapi build
You can also pass --submission-token, but the environment variable is safer because it does
not end up in shell history.
Write payload to disk without submitting:
adagio qapi build --output qapi.json --dry-run
Submit selected plugins only:
adagio qapi build --plugin dada2 --plugin feature-table
Development
Setup
Install runtime and dev dependencies:
uv sync --group dev
Run commands inside the project environment:
uv run adagio --help
Linting
uv run ruff check .
uv run ruff format --check .
uv run ruff format .
Tests
uv run pytest
Build distributions
uv run python -m build
uv run python -m twine check dist/*
Running locally during development
uv run adagio run --pipeline path/to/pipeline.json --cache-dir /path/to/cache
Runtime entrypoint (container/integration use)
The runtime subcommand is intended for runtime-adapter jobs:
uv run adagio runtime --spec spec.json --config runtime.toml --arguments arguments.json --cache-dir /path/to/cache
Releasing
See RELEASING.md for the one-time PyPI/GitHub setup, version/tag workflow, and TestPyPI/PyPI publishing steps.
Project details
Release history Release notifications | RSS feed
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 adagio_cli-0.1.0a1.tar.gz.
File metadata
- Download URL: adagio_cli-0.1.0a1.tar.gz
- Upload date:
- Size: 45.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
34f295272e7050a0f94548737426ef0cc93f716f46ddc5fc0d739be3cb29a9a6
|
|
| MD5 |
cc84da8f78a165820f03f9f100ac2e32
|
|
| BLAKE2b-256 |
f8b66f878c3feafa7335a2ce31244c68c5ba863cc90e1dc0f9649c0d74e45e21
|
Provenance
The following attestation bundles were made for adagio_cli-0.1.0a1.tar.gz:
Publisher:
publish.yml on cymis/adagio-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
adagio_cli-0.1.0a1.tar.gz -
Subject digest:
34f295272e7050a0f94548737426ef0cc93f716f46ddc5fc0d739be3cb29a9a6 - Sigstore transparency entry: 1315522743
- Sigstore integration time:
-
Permalink:
cymis/adagio-cli@9cdd778232ef0b41c8d6f52789c05d1aff3e37e7 -
Branch / Tag:
refs/tags/v0.1.0a1 - Owner: https://github.com/cymis
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9cdd778232ef0b41c8d6f52789c05d1aff3e37e7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file adagio_cli-0.1.0a1-py3-none-any.whl.
File metadata
- Download URL: adagio_cli-0.1.0a1-py3-none-any.whl
- Upload date:
- Size: 65.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e3a39a1d4dea8e2ac73a70a800e9499b3c01170f2408a799a80391419d11d98
|
|
| MD5 |
033ab9f076ef00df13b619501806a493
|
|
| BLAKE2b-256 |
905ba462dac4a1a1448837b5b8687b96c8f16911b7d85a28ace6172c4647c173
|
Provenance
The following attestation bundles were made for adagio_cli-0.1.0a1-py3-none-any.whl:
Publisher:
publish.yml on cymis/adagio-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
adagio_cli-0.1.0a1-py3-none-any.whl -
Subject digest:
2e3a39a1d4dea8e2ac73a70a800e9499b3c01170f2408a799a80391419d11d98 - Sigstore transparency entry: 1315522826
- Sigstore integration time:
-
Permalink:
cymis/adagio-cli@9cdd778232ef0b41c8d6f52789c05d1aff3e37e7 -
Branch / Tag:
refs/tags/v0.1.0a1 - Owner: https://github.com/cymis
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9cdd778232ef0b41c8d6f52789c05d1aff3e37e7 -
Trigger Event:
push
-
Statement type: