CLI
Every parity command and flag.
parity is a single static binary. Commands that talk to Parity read PARITY_API (set it to https://api.parity.ninja; there is no default) and PARITY_TOKEN, print JSON on stdout and progress on stderr, and exit non-zero on failure. Commands that take a sandbox default to the one named after your git branch; --sandbox picks another.
parity approve
Approve a block step that waits: a release's, or a rollout's in an environment.
parity approve <step> [--release N | --env <environment>]approve decides a block step. Without --env, a block of a release (release.steps):
the newest release waiting at that step, or --release N. With --env, a block
job of the environment's current rollout (jobs: with block:). It prints the
step's prompt and asks you to confirm, unless --yes. Approve lets the steps
after it run; reject ends the release (or fails the rollout). Only people
decide: a sandbox token or an agent can't.
| Flag | Type | Default | Description |
|---|---|---|---|
--env | string | A rollout's block job in this environment, such as production. | |
--manifest, -f | string | parity.yaml | Manifest whose project to use. |
--message, -m | string | A note kept with the decision. | |
--project | string | Project (default: the manifest's) | |
--release | int64 | The release number (default: the newest waiting at that step) | |
--yes, -y | Don't ask to confirm. |
parity auth
Manage the users of a sandbox's auth resource and mint sign-in links.
parity auth user
Create, list, update and delete users.
parity auth user create
Create a user (email verified, no MFA); prints {id, email, password, orgs}.
parity auth user create <email>Create a user. The email is verified and there is no MFA. Without
--password, one is generated and printed once.
Give memberships as pairs: --org acme --role admin --org beta --role viewer.
An --org without its --role gets the role "member".
| Flag | Type | Default | Description |
|---|---|---|---|
--org | string | Org slug (repeatable) | |
--password | string | Password (default: generated) | |
--role | string | Role in the --org just before it (default member) |
parity auth user delete
Delete a user and revoke its tokens.
parity auth user delete <email|id>parity auth user get
Show one user.
parity auth user get <email|id>parity auth user list
List users.
parity auth user list| Flag | Type | Default | Description |
|---|---|---|---|
--limit | number | Users per page (default 50, at most 500) | |
--page-token | string | The page after a previous list (its next_page_token) | |
--q | string | Only users whose email contains this. |
parity auth user update
Change a user's email, password or memberships.
parity auth user update <email|id>Change a user. Only the flags given change. --org and --role replace the
whole membership list; --no-orgs clears it. --password "" generates a new
password and prints it.
| Flag | Type | Default | Description |
|---|---|---|---|
--email | string | New email. | |
--no-orgs | Remove every membership. | ||
--org | string | Org slug (repeatable; replaces all memberships) | |
--password | string | New password (empty: generated) | |
--role | string | Role in the --org just before it (default member) |
parity check
Check parity.yaml and show what each service gets (no cluster needed)
parity checkcheck reads parity.yaml, reports every problem it finds at once, and prints what the platform will run: each service's image, port and public URL, every env variable with where its value comes from (including the PORT and the standard variables that depends_on adds), and when each job runs. It needs no cluster and no images. It exits 1 when the manifest has a problem.
With --env staging or --env production, it prints what that environment runs:
the base with environments.<name> merged in, each value the environment sets
marked (environments.<name>).
A manifest may include other files (include:). check then cites every
problem as file:line, names the file each entry comes from, and warns about
each parity.yaml or *.parity.yaml under the root's directory that nothing
includes. --merged prints the one merged manifest that parity up and promote send,
each entry marked with the file and line it comes from.
| Flag | Type | Default | Description |
|---|---|---|---|
--env | string | Show what an environment runs: staging or production. | |
--json | Print the report as JSON. | ||
--manifest, -f | string | parity.yaml | Path to the manifest. |
--merged | Print the merged manifest (one file, with each entry's source) that parity up and promote send. |
parity down
Delete a sandbox and everything in it.
parity down| Flag | Type | Default | Description |
|---|---|---|---|
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) | |
--timeout | duration | 5m0s | Give up waiting after this long. |
--wait | true | Wait until everything is gone. |
parity environments
List the project's environments, or show one with its steps.
parity environments [environment]environments lists the environments the project's manifest declares: where each takes its builds from, whether it is frozen, its current rollout and status, and the block steps waiting for a person, with their prompts. With an environment, it shows that one in full (services, steps, conditions).
| Flag | Type | Default | Description |
|---|---|---|---|
--manifest, -f | string | parity.yaml | Manifest whose project to use. |
--project | string | Project (default: the manifest's) |
parity exec
Run a command in a service or resource and print its output.
parity exec <service> -- <command>...exec runs a command in a running container of a service or resource (such
as psql in db) and prints its stdout and stderr; parity exits with the
command's exit code. --json prints {exit_code, stdout, stderr} instead.
| Flag | Type | Default | Description |
|---|---|---|---|
--json | Print the result as JSON. | ||
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) | |
--stdin | string | Text to send on the command's stdin. | |
--timeout | string | Give up after this long (default 60s, at most 10m) |
parity freeze
Hold deploys to an environment, with a note; no argument lists the freezes.
parity freeze [staging|production]freeze holds deploys to staging or production until someone runs parity
unfreeze or the freeze reaches --for or --until. A deploy it stops (parity
promote, the console's Promote) fails with the note, who set it and when.
Rollback is never frozen. Freezing again replaces the note.
With no environment, freeze prints the project's freezes. Setting and lifting needs a project token with environments.deploy; a sandbox token can read them but not change them.
| Flag | Type | Default | Description |
|---|---|---|---|
--for | duration | Lift by itself after this long (2h, 72h) | |
--manifest, -f | string | parity.yaml | Manifest whose project to use. |
--message, -m | string | Why deploys are held. | |
--project | string | Project (default: the manifest's) | |
--until | string | Lift by itself at this time (RFC 3339) |
parity import
Start a parity.yaml from another app format.
parity import score
Write a parity.yaml from Score workload files (score.dev/v1b1)
parity import score [file or dir]...import score reads Score workload files (one workload per file; a directory
means every score*.yaml under it) and writes a parity.yaml: each workload is a
service, postgres, redis and s3 resources are managed entries, route is
expose, and ${resources.<r>.<output>} placeholders become ${<entry>.<attr>}.
What it can't map is printed on stderr, then the result is checked as
parity check would. Without --out it prints the manifest on stdout.
| Flag | Type | Default | Description |
|---|---|---|---|
--force | Overwrite --out if it exists. | ||
--out, -o | string | Write the manifest to this file instead of stdout. | |
--project | string | Project name (default: the directory's name) |
parity inbox
Read the sandbox's email.
parity inbox attachment
List a message's attachments, or download one (-o file, - for stdout)
parity inbox attachment <msg> [part-or-name]| Flag | Type | Default | Description |
|---|---|---|---|
--output, -o | string | File to write (default: the attachment's name; - for stdout) | |
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) |
parity inbox list
List messages, newest first, with their links, codes and attachments.
parity inbox list| Flag | Type | Default | Description |
|---|---|---|---|
--after | string | Only messages received after this message id (or now, start) | |
--limit | number | At most this many messages (default 50) | |
--page-token | string | The page after a previous list (its next_page_token) | |
--q | string | Search every message, not one page (Mailpit's search: words, to:, subject:); not with --after. | |
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) | |
--since | string | Only messages newer than this: a duration such as 5m, or an RFC 3339 time. | |
--subject | string | Text the subject contains, in any case. | |
--subject-re | string | Regular expression the subject matches (RE2; (?i) for any case) | |
--to | string | Recipient: an address, or a name alone (bob) for bob@ at any domain. |
parity inbox read
Read one message: text, links, codes, attachments (--html for the HTML part)
parity inbox read <msg>| Flag | Type | Default | Description |
|---|---|---|---|
--html | Also print the HTML part. | ||
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) |
parity inbox wait
Wait for a message and print it (--none: assert that none arrives)
parity inbox waitwait prints the first message that matches, as soon as there is one.
Without --after it is the newest match, which may have arrived before the
wait. With --after <id|now> it is the oldest match received after that
message: chain waits with --after set to the last message's id to see each
message once.
--none asserts the opposite: that no match arrives after the cursor (default
now) for --timeout. It prints {"none": true, ...} with the window and exits
0, or prints the message that came and exits 1. The calls are in
calls.jsonl, so the proof holds the negative evidence.
Each API call waits at most about 50 s; parity calls again, after Retry-After,
until --timeout.
| Flag | Type | Default | Description |
|---|---|---|---|
--after | string | Only a message received after this message id, or now (default: any message; --none: now) | |
--html | Also print the HTML part. | ||
--none | Assert that no matching message arrives within --timeout. | ||
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) | |
--since | string | Only messages newer than this: a duration such as 5m, or an RFC 3339 time. | |
--subject | string | Text the subject contains, in any case. | |
--subject-re | string | Regular expression the subject matches (RE2; (?i) for any case) | |
--timeout | duration | 1m0s | How long to wait. |
--to | string | Recipient: an address, or a name alone (bob) for bob@ at any domain. |
parity logs
Print logs of a service, a job, or the whole sandbox.
parity logs [service|job]| Flag | Type | Default | Description |
|---|---|---|---|
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) | |
--since | string | Only logs newer than this duration, such as 10m. | |
--tail | number | Lines per container (default 200, or 100 with no service or job; at most 10000) | |
--timestamps | Prefix each line with its time. |
parity mcp
Serve the Parity MCP tools on stdin and stdout, for a local agent (needs PARITY_API and PARITY_TOKEN)
parity mcpmcp serves the sandbox tools (sandbox_status, auth_user_create, inbox_wait,
job_run, sandbox_logs, sandbox_exec, proof_add, proof_export, ...) over MCP's
stdio transport. Every call goes to Parity's API at PARITY_API with PARITY_TOKEN,
so the agent can do exactly what its token allows. Register it with an agent,
for example: claude mcp add parity -e PARITY_API=... -e PARITY_TOKEN=pst_... -- parity mcp
parity open
Print the app's URL (with --browser, open it)
parity open| Flag | Type | Default | Description |
|---|---|---|---|
--browser, -b | Open the URL in a browser. | ||
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) | |
--service | string | The service whose URL to open (default: the first with one) |
parity promote
Make this manifest the project's current one, which staging and production follow.
parity promote [environment]promote makes this parity.yaml the project's current manifest, which staging and production will follow, and keeps it as a revision. Sandboxes don't follow it: each pins the manifest it was created from, so promoting never changes a running sandbox. Prints {project, generation, revision}. It needs a project token; a sandbox token can't promote. While production is frozen (parity freeze) it is refused with the freeze's note.
With an environment, promote ships a release's build into it by hand, outside
the release's steps: the newest release, or --release N. It is how a hotfix
skips a step, and how an environment a rollback pinned is unpinned. It asks
you to confirm, unless --yes.
| Flag | Type | Default | Description |
|---|---|---|---|
--manifest, -f | string | parity.yaml | Path to the manifest. |
--project | string | Project, with an environment (default: the manifest's) | |
--release | int64 | With an environment: the release whose build to ship (default: the newest) | |
--yes, -y | Don't ask to confirm. |
parity proof
Attach evidence to the sandbox's proof bundle, and export it (needs PARITY_API)
parity proof add
Attach files (screenshots, test output) with a note, in one call.
parity proof add <file|dir>...add attaches files to the proof bundle, in one call: each file, and the files directly in each directory given (not hidden ones, not subdirectories). The note is every file's note. Parity records each file's content type, from its extension or its first bytes.
| Flag | Type | Default | Description |
|---|---|---|---|
--name | string | Name in the bundle, for a single file (default: the file's name) | |
--note | string | What the file shows. | |
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) |
parity proof export
Export the proof bundle as a zip.
parity proof export| Flag | Type | Default | Description |
|---|---|---|---|
--claim | string | What the change does (proof.json verdict.claim) | |
--output, -o | string | Zip to write (default proof-<id>.zip) | |
--result | string | Your verdict, such as pass (proof.json verdict.result) | |
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) | |
--summary | string | What a reviewer should read first (proof.json verdict.summary) |
parity proof verify
Check that a proof bundle was signed by Parity and not changed since.
parity proof verify <proof.zip>verify checks signature.json: the ed25519 signature over the manifest of every file in the zip, then each file's size and SHA-256. Any edited, added or removed file fails it.
Offline, pass the public key with --key (a file or text holding the JSON of
GET /v0/keys, or one base64 key). Online, with PARITY_API set, the keys come
from Parity's GET /v0/keys, and with PARITY_TOKEN too, Parity is asked whether it
holds this very bundle. parity exits 1 when the bundle fails.
| Flag | Type | Default | Description |
|---|---|---|---|
--key | string | The public key, for offline checks: a file or text with GET /v0/keys's JSON, or one base64 ed25519 key. |
parity reject
Reject a block step that waits: a release's, or a rollout's in an environment.
parity reject <step> [--release N | --env <environment>]reject decides a block step. Without --env, a block of a release (release.steps):
the newest release waiting at that step, or --release N. With --env, a block
job of the environment's current rollout (jobs: with block:). It prints the
step's prompt and asks you to confirm, unless --yes. Approve lets the steps
after it run; reject ends the release (or fails the rollout). Only people
decide: a sandbox token or an agent can't.
| Flag | Type | Default | Description |
|---|---|---|---|
--env | string | A rollout's block job in this environment, such as production. | |
--manifest, -f | string | parity.yaml | Manifest whose project to use. |
--message, -m | string | A note kept with the decision. | |
--project | string | Project (default: the manifest's) | |
--release | int64 | The release number (default: the newest waiting at that step) | |
--yes, -y | Don't ask to confirm. |
parity releases
List the project's releases, or show one with its steps.
parity releases [number]releases lists the project's releases, newest first: each is one build moving through the manifest's release steps (promote, block, wait, run, group), with where it is and what it waits for. With a number, it shows that release's steps in full: each promote's environments, each block's prompt and decisions, each wait's end.
| Flag | Type | Default | Description |
|---|---|---|---|
--limit | number | 20 | How many releases to list (at most 30) |
--manifest, -f | string | parity.yaml | Manifest whose project to use. |
--project | string | Project (default: the manifest's) |
parity render
Print a sandbox's Kubernetes objects as multi-document YAML, by phase.
parity renderrender prints the Kubernetes objects Parity would apply for one sandbox, in three phases, each introduced by a "# phase: N" comment:
1 namespace, network policy, secrets and managed services 2 deploy jobs, then seed jobs, then start jobs, in order 3 services and public routes
Nothing is applied. Generated values are kept in --seed-file when given, so
re-renders keep them. With --env staging or --env production, it prints what
that environment would run.
| Flag | Type | Default | Description |
|---|---|---|---|
--env | string | Render what a declared environment runs, such as production. | |
--image | string, repeatable | Image for a service, as service=ref (repeatable; required for build-only services, and shared by services with the same build block) | |
--manifest, -f | string | parity.yaml | Path to the manifest. |
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) | |
--seed-file | string | YAML file of generated values; read if present, then updated. |
parity retry
Roll out an environment's current build again (after a failure, reject or timeout)
parity retry <environment>| Flag | Type | Default | Description |
|---|---|---|---|
--manifest, -f | string | parity.yaml | Manifest whose project to use. |
--project | string | Project (default: the manifest's) | |
--yes, -y | Don't ask to confirm. |
parity rollback
Roll an environment back to a build it ran before.
parity rollback <environment>rollback makes the environment run one of its last 5 builds again: the
previous one, or --to a commit or App revision. Its block steps pass (the
build passed them before), and it is never frozen. A branch environment stays
there, pinned, until someone promotes it: releases hold their promotes into it
meanwhile. It asks to confirm, unless --yes.
| Flag | Type | Default | Description |
|---|---|---|---|
--manifest, -f | string | parity.yaml | Manifest whose project to use. |
--project | string | Project (default: the manifest's) | |
--to | string | A commit or App revision the environment ran recently. | |
--yes, -y | Don't ask to confirm. |
parity run
Run a manifest job now and wait for it.
parity run <job>run starts one of the manifest's jobs now, from the manifest revision the sandbox pins, waits for it, and prints its status and log tail. This is how a schedule fires in a sandbox, where its CronJob is suspended.
| Flag | Type | Default | Description |
|---|---|---|---|
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) |
parity sandbox
Inspect, list and extend sandboxes.
parity sandbox extend
Push a sandbox's expiry back, up to max_ttl.
parity sandbox extend <duration>| Flag | Type | Default | Description |
|---|---|---|---|
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) |
parity sandbox list
List sandboxes.
parity sandbox list| Flag | Type | Default | Description |
|---|---|---|---|
--limit | number | Sandboxes per page (default 50, at most 500) | |
--page-token | string | The page after a previous list. |
parity sandbox status
Print a sandbox's status as JSON.
parity sandbox status| Flag | Type | Default | Description |
|---|---|---|---|
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) |
parity scale
Set how many replicas a service runs in the sandbox (0 stops it)
parity scale <service> <replicas>scale sets a service's replica count in the sandbox: 0 stops it, 1 is the manifest's default. It lasts for the sandbox's life and is not a rollout, so deploy jobs don't rerun. Use it to quiet a service whose process runs its own schedule (Plane's beat, say): the manifest's own { schedule } jobs are already suspended in sandboxes, and parity run <job> fires one.
| Flag | Type | Default | Description |
|---|---|---|---|
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) |
parity signin
Mint a one-time sign-in link; prints {url, expires_at}.
parity signin <email|id>Mint a one-time sign-in link for a user. Opening it in a browser signs the user in at the auth resource and starts the app's own OIDC login (its initiate_login_uri), so the app's callback runs and the app sets its own session. The link works once and expires after 15 minutes.
| Flag | Type | Default | Description |
|---|---|---|---|
--org | string | Org the tokens carry in org and roles (default: the user's first org) | |
--redirect | string | Where the browser should end up (sent to the app as target_link_uri) | |
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) |
parity skip
Skip a step of a release (a block, a wait, a held promote), saying why.
parity skip <step> -m <reason> [--release N]skip passes over a step of a release that hasn't finished: a block nobody will
approve, a soak you don't need, a promote held by a freeze. The reason is
kept in the release's record. A promote whose rollouts started can't be
skipped: they finish. Without --release, the newest release at that step.
| Flag | Type | Default | Description |
|---|---|---|---|
--manifest, -f | string | parity.yaml | Manifest whose project to use. |
--message, -m | string | Why (required) | |
--project | string | Project (default: the manifest's) | |
--release | int64 | The release number (default: the newest at that step) | |
--yes, -y | Don't ask to confirm. |
parity ui
Open the web console in your browser.
parity ui| Flag | Type | Default | Description |
|---|---|---|---|
--print | Print the sign-in link instead of opening a browser. |
parity unfreeze
Lift an environment's deploy freeze.
parity unfreeze <staging|production>| Flag | Type | Default | Description |
|---|---|---|---|
--manifest, -f | string | parity.yaml | Manifest whose project to use. |
--project | string | Project (default: the manifest's) |
parity up
Create a sandbox, or bring an existing one up to date, and wait until it is ready.
parity upup creates a sandbox from parity.yaml, or brings an existing one up to date, and waits until it is ready: managed services up, deploy, seed and start jobs done, services healthy. While it waits it prints what the sandbox is waiting for, such as an image being pulled or a job running. It stops early with the reason when something needs a change from you, such as an image that can't be pulled or a job that failed.
Rerunning it is safe: the sandbox keeps its generated values, its creation time and its token, a changed manifest rolls out, and a failed sandbox retries what failed. A job whose container never started is replaced by the new manifest's job.
In a git checkout the sandbox is named after the branch (feature/orders
runs as feature-orders), and --ref and --commit default to the branch and
HEAD. With a sandbox token, up updates that token's own sandbox.
While it waits, it prints each outbound call the sandbox blocked (a host missing from externals). When something is stuck: parity sandbox status shows each service's and job's state and reason and the blocked hosts (egress.blocked), and parity logs <service or job> shows its log, or why it has none yet.
| Flag | Type | Default | Description |
|---|---|---|---|
--agent | string | The agent acting for you, such as "Claude Code" (default $PARITY_AGENT) | |
--build | Ignore develop.watch sync rules and build every service's real image, as staging and production run it. | ||
--commit | string | Git commit the sandbox runs. | |
--dev | list | Run these services in dev mode: their develop.command, fed by their develop.watch sync rules (repeatable or comma-separated; each up states the full list) | |
--idempotency-key | string | Sent as Idempotency-Key, so rerunning with the same key returns the same sandbox and token. | |
--image | string, repeatable | Image for a service, as service=ref (repeatable); it also goes to every service with the same build block. | |
--manifest, -f | string | parity.yaml | Path to the manifest. |
--pr | string | Its pull request: a number or a URL. | |
--ref | string | Git ref (branch) the sandbox runs. | |
--sandbox | string | Sandbox ID (default $PARITY_SANDBOX, the sandbox token's, or the git branch) | |
--task | string | The task it is for: a title, optionally followed by a URL. | |
--timeout | duration | 15m0s | Give up waiting after this long. |
--ttl | string | Lifetime from creation (default: the manifest's sandbox.ttl, else 2h) | |
--wait | true | Wait until the sandbox is ready. |