CLI reference
This reference follows continuum-attest/src/main.rs at version 0.2.0.
Use attest --help and attest <command> --help for the exact options of the
binary installed on your machine. Global options are --verbose and --quiet.
Installation
Continuum Attest 0.2.0 supports Linux and macOS, on x86-64 and arm64, under Apache-2.0. See the release files for binaries and verification material. Windows is not supported in this release.
Install with Cargo
The package is continuum-attest on
crates.io. Install it with Rust 1.89 or later:
cargo install continuum-attest --lockedThe installed command is attest. The crate named attest belongs to another
project.
First signed receipt
From your project's directory, initialize Continuum Attest and create a signing key:
attest init
attest keys generate --name releaseEdit the generated attest.yaml to declare your build command, input files and
outputs. Then execute it and verify the receipt against your workspace:
attest run --sign
attest verify .attest/receipts/*.yaml --recomputeSigning is explicit. Keep private keys private; a recipient needs the receipt and independently approved public keys to check its signature. Recomputing file hashes also requires the corresponding workspace files.
The public Receipt format specifies the evidence and signing rules. The Plugin protocol is a draft; version 0.2.0 does not execute plugins.
Commands
| Command | Purpose |
|---|---|
attest init |
Create the local workspace and a starter pipeline |
attest run |
Execute a pipeline or wrap one command |
attest sign |
Sign a receipt in a process that ran no project command |
attest trust |
Create, inspect, import or refresh signed trust bundles |
attest keys |
Generate, list, export, import or revoke keys; pin a timestamp authority |
attest hash |
Compute canonical hashes of declared paths |
attest capsule |
Initialize, run or hash an execution capsule |
attest verify |
Check receipts or an offline archive |
attest export |
Export a receipt as an in-toto DSSE envelope |
attest import |
Verify an imported in-toto DSSE envelope |
attest image |
Image signing and verification operations |
attest causal |
Causal ledger operations |
Run a pipeline
attest run --pipeline attest.yaml --sign
attest run --sign --key <key-id>
attest run --check-reproducibility
attest run --sign --timestamp--verify selects process isolation: resource limits, without network or
filesystem control. The receipt’s isolation block reports controls as
enforced, not enforced or unavailable. It does not replace attest verify
on the resulting receipt. --check-reproducibility runs the
pipeline twice in fresh workspaces and compares output hashes. Use
the configuration reference for step fields.
Wrap one command
attest run --wrap --name build --input src/ --output dist/ -- npm run buildRepeat --input and --output for multiple paths. --workspace DIR chooses
the root. Wrap mode runs without a pipeline file or sandbox; signing can be
added with --sign and a provisioned key. See CI integration.
Verify receipts
attest verify .attest/receipts/<receipt>.yaml
attest verify --recompute .attest/receipts/<receipt>.yaml
attest verify --trust-store /path/to/trust --format json receipt.yaml
attest verify --archive bundle.attest.tar.zst --offline
attest verify receipt.yaml --recompute --require signature,timestamp,recompute
attest verify --archive bundle.attest.tar.zst --offline --require signature,linkage,trust,successExit codes are 0 for success, 1 for a failed verification and 2 for an operational
error. JSON output is NDJSON. Signature checking defaults to true;
--check-signatures false explicitly allows checks of an unsigned receipt and
does not establish signer trust. See Receipts and trust.
A check that did not run is skipped and never satisfies a --require
requirement. This option requires a result; it does not enable a check:
add --recompute to perform recomputation. Supported properties are signature, timestamp, recompute,
linkage (archives), trust (a current bundle) and success (every step exited
0). The result distinguishes valid evidence from a successful build. Receipt
JSON adds policy, execution and trust_material; its contract is published
in the verification result v1 schema.
Archives default to limits of 64 MiB on disk, 512 MiB unpacked, 10 000 entries
and 64 MiB per entry. Receipts and DSSE envelopes are limited to 16 MiB before
parsing. Exceeding a limit produces exit code 2 and JSON error kind
resource-limit.
Share trust
attest trust bundle --output trust.json --key <issuer-key-id>
attest trust show trust.json
attest trust import trust.json --issuer <issuer-key-id>
attest trust refresh trust-2.jsonThe producer signs trusted keys and dated revocations into a bundle with a validity window and sequence number. The recipient obtains the issuer’s key id through a separate trusted channel before the first import. Updates older than the accepted sequence, tampered bundles and revoked issuers are refused. Authority rotation uses a successor named in the signed bundle. Import and refresh remain explicit and offline. The verdict reports bundle freshness against the local clock; it cannot know about revocations published after the last update.
Sign after the build
attest sign receipt.yaml --key <key-id> --timestamp --output signed-receipt.yamlattest sign signs in a process that ran no project command. ATTEST_KEYS_DIR
keeps private keys outside the workspace. With attest run --sign, the key is
loaded only after the last step exits. --timestamp and --key without
--sign are refused on attest run.
Keys and hashes
attest keys generate --name ci
attest keys list
attest keys export <key-id> --output ci.pub
attest keys import ci.pub --name team-ci
attest keys revoke <key-id>
attest keys trust-tsa digicert-ca.crt --name digicert
attest hash --input src/ --run 'npm run build'
attest hash --output dist/Key export contains public material only. See key management for CI provisioning and rotation.
Standard-format exchange
attest export --receipt receipt.yaml --format in-toto --output statement.json
attest import statement.json --format in-toto --report jsonExport signs the envelope using an available key; --key selects it.
--allow-unsigned explicitly permits unsigned export. Import verifies an
envelope against the trust store; it is not an upload to the SaaS.
Additional command groups
attest capsule --help
attest image --help
attest causal --helpCapsule initialization requires a digest-pinned OCI reference rather than a tag and capsule execution needs a container runtime. Review these paths in your environment before adopting them. The developer guide identifies their source and tests.
Commands such as attest login, attest publish, attest deploy, attest status
and attest cache are not exposed by the current binary.