BenefitsCLI docsRelease 0.2Get started
CLI documentation

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 --locked

The 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 release

Edit 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 --recompute

Signing 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 build

Repeat --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,success

Exit 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.json

The 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.yaml

attest 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 json

Export 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 --help

Capsule 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.