CLI

202 commands. Install the CLI with the quickstart, then sign in with pando login.

Top level

pando

Host your apps without setting up a deployment pipeline

$pando [flags]

Flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando config

Show the server's startup configuration and where each setting came from

$pando config [flags]

Lists every setting the server started with, its value, and where it was set: an environment variable, the config file, or the default. Host policy fields set there are listed separately; they cannot be changed with pando policy set while they are set. Secrets are never shown.

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando deploy

Deploy an app, or a directory on this machine

$pando deploy <app|path> [flags]

With an app ID, deploys that app. With a path, packs the directory, uploads it as the app's source, and deploys that.

The second form is for an agent: something that has just generated an app cannot commit and push, but it can run a command.

Flags

FlagDefaultDescription
--app stringdeploy a directory as an existing app, instead of creating one
--env stringArrayKEY=VALUE, set when a new directory's setup is accepted; repeat for more (e.g. --env API_URL=https://api)
--revision int0the spec revision to deploy (defaults to the pinned one)
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando events

List the events a subscription can name, or an app's recent events with --app

$pando events [flags]

Flags

FlagDefaultDescription
--app stringShow this app's recent events (its ID) instead of the catalog
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando exec

Run a command inside a running app

$pando exec <app> [--workload <name>] [-- <command>...] [flags]

Opens a terminal inside a running workload.

This is the most privileged thing you can do to an app: what runs here can read the app's database directly and read its injected environment, including secrets. The command is recorded in the audit log; what happens inside the session is not.

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)
--workload stringwhich part of the app to open a terminal in (default: the one its URL points at)

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando export

Print an app's spec

$pando export <app> [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando join

Join a new Pando to a cluster with a join token

$pando join [token] [flags]

Joins the Pando at --server, which must be new, with no account or app, to the cluster that minted the join token (pando cluster tokens create). The Pando checks the cluster's certificate authority against the token, joins, and restarts into the cluster. It also needs the setup_token that Pando printed to its log at startup.

Each token is read from PANDO_JOIN_TOKEN and PANDO_SETUP_TOKEN, or asked for without echoing, or read from standard input one per line, join token first.

Flags

FlagDefaultDescription
--name stringthis host's name in the cluster (default: the machine's hostname)
--server stringPando server URL (defaults to the one you logged in to)
--setup-token stringthe setup token from the joining Pando's log (setup_token); prefer PANDO_SETUP_TOKEN or the prompt

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando login

Sign in and store a token for this machine

$pando login [server-url] [flags]

Opens Pando in your browser, where you sign in however your account signs in — a password, two-factor authentication, or your organization's identity provider — and approve this CLI. The CLI then stores a token that acts as you and holds nothing you do not. pando mcp uses the same token.

On a machine with no browser, such as over SSH, --no-browser prints the address to open on another computer and asks for the code shown there.

--username signs in with a username and password in the terminal instead.

Flags

FlagDefaultDescription
--no-browserprint the address to open on another computer, and paste the code it shows
--server stringPando server URL (defaults to the one you logged in to)
--username stringsign in with this username and a password instead of a browser

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando logs

Read an app's logs

$pando logs <app> [flags]

Read an app's logs.

An app made of several parts — a web service, a worker, a database it brought with it — has a log per part. Without --workload this is the primary one, which is the part the app's address resolves to. pando app status <app> lists the names.

Flags

FlagDefaultDescription
-f, --followkeep the connection open and print new lines
--server stringPando server URL (defaults to the one you logged in to)
-n, --tail int0how many of the most recent lines to print, at most 5000 (default 200; with --follow, the recent lines Pando holds)
-w, --workload stringwhich part of the app to read (default: the primary one)

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando mcp

Run an MCP server over stdio, for agents

$pando mcp [flags]

Exposes Pando's API as MCP tools, using the token from pando login.

An agent is a principal like any other: nothing here bypasses authorization, and every action lands in the audit log under the token's owner. The most dangerous actions — running commands in apps, reading secret values, changing who has access — are refused by host policy for tokens by default, and are not offered as tools.

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando migrate

Apply pending database migrations and exit

$pando migrate

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando plan

Show what a deploy would do, without doing it

$pando plan <app> [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando restart

Restart Pando, loading its adapters and configuration file again

$pando restart [flags]

Restart Pando. Requests in flight finish first, and apps behind Pando are unreachable for the seconds it takes. Adapters and the configuration file are read again; environment variables are not.

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)
--wait duration1m30show long to wait for Pando to come back; 0 returns at once

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando rollback

Roll an app back to an earlier spec

$pando rollback <app> [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)
--to int0spec revision to roll back to (defaults to the previous one)

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando self-update

Replace this pando CLI with the latest release, after checking its signature

$pando self-update [version] [flags]

Downloads the release for this platform, checks the release's checksums.txt against its signature from Pando's release workflow and the archive against checksums.txt, and replaces this binary. A CLI installed with Homebrew or a Linux package is upgraded by that package manager instead, and this prints its command.

Flags

FlagDefaultDescription
--prereleaseconsider release candidates when choosing the latest

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando serve

Run the Pando server

$pando serve

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando updates

Show whether a newer Pando is released, what changed, and how to upgrade

$pando updates [flags]

Shows the version the server runs, the latest release on the update channel, and the changelog of every version in between, with security fixes and breaking changes marked. Then the command that upgrades the server. The check is host policy: disable_update_check turns it off and update_channel chooses stable or prerelease (pando policy set). Pando checks at startup and every six hours; --check asks GitHub now.

Flags

FlagDefaultDescription
--checkAsk GitHub now rather than showing the last check
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando version

Print the version

$pando version

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando adapter

pando adapter

See and configure this installation's adapters

$pando adapter [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando adapter add

Add an adapter, or change one, by kind

$pando adapter add <category>/<kind> [flags]

Adds an adapter of a kind from pando adapter kinds. Ordinary settings go in --set KEY=VALUE; a secret setting such as an API key is asked for without echoing it, so it never lands in your shell history (piped in when stdin is not a terminal). Adding with an existing --id changes that adapter. Pando loads adapters at startup: restart it afterwards, except after a source connection or an image registry, which are used from the moment they are saved.

With a kind named, --help lists its settings and their defaults, the advanced ones under their own heading. Advanced settings take --set like any other.

pando adapter add ai/anthropic --set model=claude-sonnet-5

Flags

FlagDefaultDescription
--defaultmake it the default adapter of its category, in place of the current one (default: only when the category has none)
--disabledsave it turned off: Pando keeps its settings and does not use it. A secret left empty keeps the stored one
--id stringthe adapter's ID (default: the kind's usual prefix and name, e.g. ai_anthropic)
--name stringwhat the console calls it (default: the kind's name)
--preset stringa known provider's settings to start from, by ID, as pando adapter kinds lists them; at a terminal, asked when not given
--set stringArraya setting, KEY=VALUE; repeat for more

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando adapter kinds

Show the kinds of adapter this build can run, and their settings

$pando adapter kinds

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando adapter list

Show the adapters configured here

$pando adapter list

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando admin

pando admin

Administer this installation from the host

$pando admin

Commands that work against the database directly, for when nobody can sign in.

Running these needs shell access on the host and the configuration that names the database. That is the whole of the authorization, and it is the same access that could change the row by hand.

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando admin enable-password-sign-in

Turn password sign-in back on when no identity provider works

$pando admin enable-password-sign-in

Clears disable_password_sign_in in host policy, so local accounts can sign in with a password again.

For when password sign-in is off and nobody can sign in through an identity provider. Follow it with pando admin reset-password if you also need a password for an account.

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando admin reset-password

Set a local account's password when nobody can sign in

$pando admin reset-password [username] [flags]

Sets a new password for a local account, ends every session it has, revokes its API tokens, and lifts any limit its wrong passwords put on signing in.

The account must change the password again at its next sign-in: this hands a way back in to somebody, which is not the same as choosing their credential.

Accounts that sign in through an external identity provider are changed where they live, not here.

Flags

FlagDefaultDescription
--password stringthe new password; prompts on a terminal, and generates one otherwise

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando admin reset-two-factor

Remove a local account's two-factor authentication when nobody can sign in

$pando admin reset-two-factor [username]

Removes a local account's authenticator and recovery codes, ends every session it has, revokes its API tokens, and lifts any limit its wrong codes put on signing in. It then signs in with its password alone, and sets two-factor authentication up again there if host policy requires it.

Accounts that sign in through an external identity provider get their second factor from the provider, not here.

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando admin setup-token

Make a new setup token for an installation that is not set up yet

$pando admin setup-token

Prints a new one-time setup token and retires the one Pando printed to its log at startup.

A new installation is set up in the console, and the setup form asks for this token, so that reaching the console first is not enough to become its administrator. Refused once the installation has an account.

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando ai

pando ai

Assign AI functions to adapters, and ask the AI functions

$pando ai [flags]

Each AI function is handled by at most one AI adapter, optionally on a model of its own. A function with no adapter is off. The draft commands propose and never apply: create what they draft with pando group and pando policy, or in the console.

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando ai ask

Ask how to do something, answered from the API, CLI and MCP reference

$pando ai ask <question>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando ai assign

Have an AI adapter handle a function, optionally on its own model

$pando ai assign <function> <adapter> [flags]

Refused while another adapter handles the function: unassign it there first. --model needs an adapter that can choose its model.

Flags

FlagDefaultDescription
--model stringa model for this function only; empty uses the adapter's own

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando ai audit

Search the audit log with a question, and summarize what matched

$pando ai audit <question>

Prints the summary and the filters it used. Run pando audit with those filters to see the records.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando ai draft-access

Draft a custom role and a group from a description

$pando ai draft-access <description>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando ai draft-policy

Propose host policy from a description

$pando ai draft-policy <description>

Prints the proposed document; save it with pando policy set.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando ai functions

List each AI function, the adapter that handles it, and on which model

$pando ai functions

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando ai unassign

Turn an AI function off

$pando ai unassign <function>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app

pando app

Work with apps

$pando app [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando app add

Create an app from a repository, or from an image that is already built

$pando app add <source-url> | --image <reference> [flags]

Flags

FlagDefaultDescription
--connection stringread a private repository with this source connection (default: the one covering its address, from pando source list)
--ecr-access-key-id stringpull from AWS ECR with this access key; the secret access key is read from the terminal
--ecr-region stringwith --ecr-access-key-id, the region (default: read from the registry host)
--image stringrun this prebuilt image instead of building a repository, such as ghcr.io/acme/web:1.4
--name stringname for the app (defaults to the repository or image name)
--registry-username stringpull a private image as this user; the password or token is read from the terminal
--timeout duration10m0swith --wait, how long to wait before giving up
--waitwait for detection to finish, as pando app detection --wait does

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app address

Show or change where an app is reached

$pando app address <app> [flags]

With no flags, shows the app's routing and address, where it moves at the next deploy if a change is saved, and the routing adapters it could use with the domains each serves.

With flags, changes it. A flag left out keeps what the app has, or takes the adapter's default when moving to another adapter. --domain puts the app in another of the adapter's domains, such as a second Cloudflare zone: alone it makes <app>.<domain>, and with --hostname docs it makes docs.<domain>.

A change is saved as a spec revision and takes effect at the next deploy, when the old address stops working. Without --confirm nothing is changed and Pando says what would move.

Examples

pando app address notes
pando app address notes --domain trypando.ai --confirm
pando app address notes --hostname docs.example.com --confirm

Flags

FlagDefaultDescription
--adapter stringthe routing adapter, such as rte_cloudflare
--confirmmake the change; without it Pando only says what would move
--domain stringwith subdomain mode: which of the adapter's domains, such as trypando.ai
--hostname stringwith subdomain mode: the hostname, or with --domain a single name such as docs
--mode stringsubdomain, path or port
--path stringwith path mode: the path, such as /team/notes

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app auto-deploy

Deploy an app automatically when its branch or releases change

$pando app auto-deploy

Pando checks the app's repository every few minutes and deploys what it finds. Off by default. A change here is saved as a new configuration revision and takes effect at the app's next deploy.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

Commands

pando app auto-deploy off

Turn automatic deploys off

$pando app auto-deploy off <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app auto-deploy set

Turn automatic deploys on, following a branch or new releases

$pando app auto-deploy set <app> [flags]

With --trigger branch (the default), each new commit on the branch deploys. Without --branch, that is the branch the app was deployed from.

With --trigger release, each new release tag deploys. A release is a tag such as v1.2.3, or one matching --tag-pattern, a pattern such as release-* where * matches any characters.

Flags

FlagDefaultDescription
--branch stringthe branch to follow; empty follows the branch the app was deployed from
--tag-pattern stringwhich tags are releases, such as release-*; empty means tags like v1.2.3
--trigger stringbranchwhat deploys: branch (each new commit) or release (each new release tag)

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app auto-deploy show

Show the settings, the last check and the webhook

$pando app auto-deploy show <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app auto-deploy webhook-secret

Make the app a new webhook secret, and print it with the webhook URL

$pando app auto-deploy webhook-secret <app> [flags]

A webhook lets the git host tell Pando about a push or a release as it happens, instead of Pando finding out at its next check. It needs Pando to be reachable from the git host. Paste the URL and secret into the repository's webhook settings, with content type application/json. The secret is printed this once; making a new one replaces it.

Flags

FlagDefaultDescription
--removeremove the secret instead, which turns the webhook off

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app delete

Delete an app, keeping a final backup of its data

$pando app delete <app> [flags]

Deletes an app. Its storage is backed up first and the backup is kept until you discard it — not aged out.

If the backup fails the app is not deleted, because a failed backup means the data is not safe. Pass --discard-data to delete without one.

Flags

FlagDefaultDescription
--discard-datadelete without keeping a backup of the app's storage

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app detection

Show how far detection has got, and what to do next

$pando app detection <app> [flags]

Shows where an app's detection stands: running and at which stage, or how it finished — ready, waiting on answers, blocked or failed — and what to do next. Questions are printed exactly as Pando wrote them, to paste into whatever wrote the app.

With --wait, waits for detection to finish, printing each stage as it is reached. It then exits 0 when the app is ready to accept, 2 when there are questions to answer, and 1 when detection failed or was blocked.

Flags

FlagDefaultDescription
--timeout duration10m0swith --wait, how long to wait before giving up
--waitwait for detection to finish, and exit non-zero unless it is ready

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

Commands

pando app detection accept

Accept detection's proposal as the app's configuration

$pando app detection accept <app> [flags]

Accepts what detection worked out and pins it as the app's configuration. This does not deploy: pando deploy <app> does that.

--env and --secret set variables in the same step; a secret is stored by the install's secrets adapter. --optional names a dependency the app runs without.

Accepting over an app that is already configured replaces how it is built and what it runs, and needs --confirm. Variables you set, how each dependency is filled, and storage you added are carried over. pando app detection diff <app> shows what would change.

Flags

FlagDefaultDescription
--confirmreplace the configuration of an app that is already configured
--env stringArrayset a variable, KEY=VALUE (repeatable)
--hostname stringthe address to serve the app at, where its routing gives it a hostname of its own
--optional stringArraya dependency the app runs without, by its key (repeatable)
--secret stringArrayset a secret variable, KEY=VALUE (repeatable)

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app detection answer

Answer one of detection's questions

$pando app detection answer <app> <key> <answer> [flags]

Answers a question detection asked. The key is the one printed with the question by pando app detection <app>.

An answer that changes what is built, such as a build argument, has Pando build and scan the image again, so the plan shows the score of what will run. This waits for that, printing each stage, then exits as pando app detection --wait does: 0 when the app is ready to accept, 2 when there are questions left, and 1 when detection failed or was blocked.

Flags

FlagDefaultDescription
--timeout duration10m0show long to wait for a rebuild before giving up

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app detection diff

Show what accepting the proposal would change

$pando app detection diff <app>

Compares detection's proposal with the configuration the app is pinned to, and lists each change with what applying it takes: benign, restart, rebuild or destructive. A destructive change loses data, such as removing a volume.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app detection rerun

Run detection again, against the source as it is now

$pando app detection rerun <app> [flags]

Works out again how to run an app, from its source as it is now: after the repository changed, after uploading new files, or after fixing what blocked it. Nothing about the app changes until the new proposal is accepted.

With --wait, waits for it and exits as pando app detection --wait does.

Flags

FlagDefaultDescription
--timeout duration10m0swith --wait, how long to wait before giving up
--waitwait for detection to finish, and exit non-zero unless it is ready

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app detection revise

Tell the AI adapter what is wrong with the plan

$pando app detection revise <app> <message>...

Tells the install's AI adapter what is wrong with the plan, in your own words, for example "The app serves on port 8080." It checks the repository, changes what it can show, and replies. Prints the reply, what it changed and what Pando refused, then where detection stands. Needs an AI adapter.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app favorite

Pin an app to the top of your launcher

$pando app favorite <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app icon

Set the image on an app's launcher tile

$pando app icon

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

Commands

pando app icon clear

Remove an app's image, so its tile shows the map generated for it

$pando app icon clear <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app icon set

Set an app's image from a PNG, JPEG, WebP or GIF file

$pando app icon set <app> <image-file>

Sets the image shown on the app's tile in everyone's launcher.

PNG, JPEG, WebP or GIF, at most 256 KB. SVG is not accepted. A square image a few hundred pixels across is plenty.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app idle

Show or set when Pando stops or deletes an app nobody uses

$pando app idle <app> [flags]

With no flags, shows the app's idle settings: its own, the installation's, the ones in force, when it was last used, and when Pando would stop or delete it.

--stop-days and --delete-days take a number of days, never, or default for the installation's setting. A flag left out keeps what the app has. Both count from the app's last use, deploy or start, so deleting has to come later than stopping. These are app settings, not spec: nothing is deployed.

Flags

FlagDefaultDescription
--delete-days stringdays without use before Pando deletes the app: a number, never, or default
--stop-days stringdays without use before Pando stops the app: a number, never, or default

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app image-update

Check whether an image app's tag names a newer build, and upgrade to it

$pando app image-update <app> [flags]

Asks the registry which build the app's image tag names now and compares it with the build the app runs. Nothing changes unless --upgrade is given, which writes a revision running that build and deploys it.

Flags

FlagDefaultDescription
--upgradedeploy the newer build when there is one

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app list

List the apps you can manage

$pando app list

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app notices

See what an app asks of you, and ignore a notice until it changes

$pando app notices

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

Commands

pando app notices ignore

Ignore a notice until what it says changes

$pando app notices ignore <app> <key>

Hides a notice from you until what it says changes. Only you: everyone else still sees it. A deploy the notice warned about is still refused for the same reason.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app notices list

List an app's notices

$pando app notices list <app> [flags]

Lists what the app's Overview asks of somebody: a configuration not yet deployed, variables with no value, a backup that was not taken, a security score below this installation's minimum, the spec's warnings. Notices you have ignored are left out unless --all is given.

Flags

FlagDefaultDescription
--allinclude notices you have ignored

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app notices restore

Show a notice you ignored again

$pando app notices restore <app> <key>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app registry-credential

Manage the credential an app's private image is pulled with

$pando app registry-credential

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

Commands

pando app registry-credential remove

Remove the credential, so the image is pulled anonymously

$pando app registry-credential remove <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app registry-credential set

Set the credential, replacing any the app had

$pando app registry-credential set <app> [flags]

Flags

FlagDefaultDescription
--ecr-access-key-id stringpull from AWS ECR with this access key; the secret access key is read from the terminal
--ecr-region stringwith --ecr-access-key-id, the region (default: read from the registry host)
--registry-username stringpull a private image as this user; the password or token is read from the terminal

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app registry-credential show

Say whether the app has a credential, and of which kind, without its secret

$pando app registry-credential show <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app rename

Change an app's display name

$pando app rename <app> <new-name>

Changes the name shown for the app in the console and on everyone's launcher.

The app's ID and address do not change.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app restart

Restart an app's workloads, changing nothing

$pando app restart <app>

Restarts the workloads in place.

Nothing is rebuilt and nothing is re-read: this is the same version, started again. To ship a change, deploy.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app show

Show an app

$pando app show <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app spec

Read and write an app's spec revisions

$pando app spec

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

Commands

pando app spec create

Write a new spec revision from a JSON file

$pando app spec create <app> [flags]

Writes a whole spec, read as JSON from --file or stdin, as a new revision. pando export <app> prints the pinned spec to start from. This does not pin or deploy: pando app spec pin <app> <revision> and pando deploy <app> do. --dry-run checks the spec and writes nothing.

Flags

FlagDefaultDescription
--dry-runcheck the spec without writing it
-f, --file stringthe spec as a JSON file (default: read stdin)

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app spec diff

Compare two spec revisions

$pando app spec diff <app> <from> <to>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app spec list

List spec revisions, and which one is pinned

$pando app spec list <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app spec pin

Pin a spec revision as what the app runs

$pando app spec pin <app> <revision>

Pins a revision: what the app converges to, and what the next deploy ships. This does not deploy: pando deploy <app> does that.

On an app that has been deployed, pinning changes what it runs, so it needs app.deploy, and a revision whose deploy needs approval is refused: deploy it instead.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app spec show

Print one spec revision

$pando app spec show <app> <revision>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app start

Start an app that was stopped

$pando app start <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app status

What each part of an app is doing right now

$pando app status <app>

What each part of an app is doing right now.

An app can be made of several parts, and "degraded" is the app's answer for all of them together. This is the per-part answer: which are running, which are restarting and how many times, and which health check is failing. The names are also what pando logs --workload takes.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app stop

Stop an app without deleting it

$pando app stop <app>

Stops an app.

Nothing is removed: its storage, its configuration and its address are kept, and pando app start brings back the version that was running. A stopped app stays stopped — it is the app's desired state, not a one-off act, so it survives Pando itself restarting.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app unfavorite

Unpin an app from your launcher

$pando app unfavorite <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app usage

What each part of an app is using right now: CPU, memory and disk

$pando app usage <app>

What each part of an app is using right now, beside its limits.

CPU is in cores; a part with no limit may use what the host has. A reading, not a history.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app webhook-route

Let verified webhook deliveries reach one path of an app

$pando app webhook-route

A route lets a delivery with no Pando credential through to one method and path, once it is verified. The rest of a private app stays private. A change is saved as a new configuration revision and takes effect at the app's next deploy.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

Commands

pando app webhook-route add

Add a route, and print its secret if Pando generated one

$pando app webhook-route add <app> <name> <path> [flags]

With --verify hmac_sha256 (the default), --header holds the hex HMAC-SHA256 of the body, after any --prefix. With --verify header, --header holds the secret itself.

Without --paste-secret, Pando generates one and prints it this once.

Flags

FlagDefaultDescription
--allow-repeatsturn the replay check off, for a sender that repeats identical bodies
--header stringRequiredthe header holding the signature or the secret
--method stringPOSTPOST, PUT or PATCH
--paste-secretask for the secret the provider issued instead of generating one
--prefix stringwhat comes before the signature, such as sha256=
--verify stringhmac_sha256hmac_sha256 or header

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app webhook-route list

List an app's webhook routes

$pando app webhook-route list <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app webhook-route remove

Remove a route

$pando app webhook-route remove <app> <name>

The route's secret goes at once, so deliveries are refused from now on.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando app webhook-route secret

Replace a route's secret, and print it if Pando generated it

$pando app webhook-route secret <app> <name> [flags]

The old secret stops working at once.

Flags

FlagDefaultDescription
--paste-secretask for the secret the provider issued instead of generating one

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando approvals

pando approvals

See and decide deploys waiting for approval

$pando approvals [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando approvals approve

Approve a deploy waiting for approval; the last approval it needs starts it

$pando approvals approve <app> <deployment> [flags]

Flags

FlagDefaultDescription
--comment stringa note recorded with the decision

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando approvals list

Deploys waiting for approval on the apps you can see

$pando approvals list [flags]

Flags

FlagDefaultDescription
--decidableOnly the deploys you may approve or reject

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando approvals reject

Reject a deploy waiting for approval, which ends the request

$pando approvals reject <app> <deployment> [flags]

Flags

FlagDefaultDescription
--comment stringa note recorded with the decision

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando audit

pando audit

Read the audit log

$pando audit [flags]

Lists what was done on this installation, newest first. The filters combine.

--since and --until take a time (2026-09-21T09:00:00Z) or a duration back from now (24h, 30m), so --since 24h is the last day.

Flags

FlagDefaultDescription
--action stringactions starting with this, e.g. app. or grant.delete
--actor stringwho did it: a user or token ID, or system, reconciler or detection
--actor-kind stringwhat kind of actor: user, token, system or anonymous
--app stringevents on this app
--before stringthe page before this cursor, as printed after a full page
--involving stringevents where this ID is the actor or the target, e.g. a user ID
--limit int0how many events (default 100, at most 500)
--outcome stringhow it ended: success, denied or failed
--search stringtext in the action, the actor, the target or the app
--server stringPando server URL (defaults to the one you logged in to)
--since stringfrom this time, or this long ago (24h)
--target stringthe ID of the thing it was done to
--target-kind stringwhat kind of thing it was done to, e.g. user, role, app
--until stringup to this time, or this long ago

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando audit archives

List the months of the audit log archived past retention

$pando audit archives

Months older than host policy's audit_retention_months are archived, checked, and removed from the live log, so pando audit no longer finds them. This lists the archives; download one with pando audit archives download <id>.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

Commands

pando audit archives download

Download one archived month, checking it against its digest

$pando audit archives download <archive-id> [flags]

Saves the archive — gzipped JSON lines, one audit event per line — to --output, or to audit-<month>.jsonl.gz in the current directory. The SHA-256 is checked against the archive's manifest as it arrives, and a file that does not match is removed rather than kept.

Flags

FlagDefaultDescription
-o, --output stringwhere to save it; - writes to standard output

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando audit export

Export a range of the audit log as gzipped JSON lines

$pando audit export [flags]

Writes the audit events between --since and --until, in commit order, as gzipped JSON lines: to --output, or to standard output when that is not a terminal. --since and --until take a time (2026-09-21T09:00:00Z) or a duration back from now (24h); left out, the range is open at that end.

The export covers the live log only. When the range reaches back before it, a note on standard error says where the live log starts; pando audit archives has the months before that.

Examples

pando audit export --since 720h > audit.jsonl.gz
pando audit export --since 2026-09-01T00:00:00Z --until 2026-10-01T00:00:00Z --format ocsf -o september.jsonl.gz

Flags

FlagDefaultDescription
--action stringArrayonly actions starting with this, e.g. grant.; repeatable
--exclude stringArrayleave out actions starting with this; repeatable
--format stringnative (the archive's line format, the default) or ocsf
-o, --output stringthe file to write; - or left out writes to standard output
--since stringfrom this time, or this long ago (720h)
--until stringup to this time, or this long ago

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando audit sinks

List where the audit log is sent, and how far each destination has got

$pando audit sinks

An audit sink is a destination, such as a SIEM's syslog or HTTPS collector, that Pando pushes the audit log to as it is written. This lists each one with what it sends where, the events waiting to go (BACKLOG), when it last delivered, and its last error. Below the table, each sink's line says exactly what leaves the installation, and any range of events it missed.

Audit sinks are adapters: add one with pando adapter add audit_sink/<kind>.

Examples

pando audit sinks

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando audit tail

Print the audit log in commit order, one JSON event per line

$pando audit tail [flags]

Prints audit events oldest first, one JSON object per line, from --after: a cursor a previous run printed, or now for only what happens from here on. Without --after it starts at the oldest event in the live log. Without --follow it stops once it has caught up; with --follow it keeps waiting for new events until interrupted.

When it stops, for any reason, it prints the last cursor to standard error as cursor: c1.…. Pass that back as --after to carry on where it left off. Delivery is at least once: an event can be printed again after a resume, and its id is the key to drop it by.

Examples

pando audit tail --follow --after now
pando audit tail --after c1.AAAA --action grant. --exclude grant.view 2>cursor.txt >>events.jsonl

Flags

FlagDefaultDescription
--action stringArrayonly actions starting with this, e.g. grant.; repeatable
--after stringstart after this cursor, as a previous run printed it, or now
--exclude stringArrayleave out actions starting with this; repeatable
-f, --followkeep waiting for new events until interrupted
--format stringnative (the archive's line format, the default) or ocsf
--limit int0events per request (default 500, at most 1000)

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando backup

pando backup

Back up and restore this installation

$pando backup [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando backup create

Take a backup of the whole installation

$pando backup create

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando backup list

List backups

$pando backup list

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando backup restore

Replace this installation from a backup

$pando backup restore <backup-id> [flags]

Flags

FlagDefaultDescription
--yesskip the typed confirmation (for scripts that already have one)

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando backup verify

Check a backup is complete, without restoring it

$pando backup verify <backup-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando cluster

pando cluster

The hosts this installation runs on, and joining new ones

$pando cluster [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando cluster hosts

The cluster's hosts

$pando cluster hosts

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

Commands

pando cluster hosts list

List the cluster's hosts

$pando cluster hosts list

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando cluster hosts lost

Say a host is gone, and start its apps' standbys

$pando cluster hosts lost <host-id>

Marks the host lost and starts the standby of each app homed on it. With three or more hosts Pando does this itself when most of them cannot reach the host; with fewer it never does. Refused while the host answers. A failed app is not failed over.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando cluster hosts remove

Remove a host from the cluster

$pando cluster hosts remove <host-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando cluster tokens

Tokens new hosts join with

$pando cluster tokens

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

Commands

pando cluster tokens create

Create a join token. It is shown once

$pando cluster tokens create [flags]

Flags

FlagDefaultDescription
--address stringThe installation's address the joining host reaches (default this server's advertise address)
--expires-hours int0How many hours it lasts (default 24)
--role stringSlicecontrol, app, or both (repeat or comma-separate). Default: both while the cluster has fewer than three hosts, then app
--uses int0How many hosts may join with it (default 1)

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando cluster tokens list

List join tokens

$pando cluster tokens list

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando cluster tokens revoke

Revoke a join token

$pando cluster tokens revoke <token-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando grant

pando grant

Share an app, or stop sharing it

$pando grant [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando grant add

Give someone access to an app

$pando grant add <app> [flags]

Flags

FlagDefaultDescription
--anyoneshare with anyone on the internet, without signing in
--group stringgroup ID to share with
--passcode stringwith --anyone: only those who enter this passcode
--plane stringdatadata (use the app) or control (manage it)
--role stringrole ID, for control-plane grants
--user stringuser ID to share with

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando grant list

Show who an app is shared with

$pando grant list <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando grant passcode

Change the passcode on an app shared with everyone, or remove it

$pando grant passcode <app> <grant-id> [passcode]

Sets a new passcode on the app's grant to everyone; everyone let in by the old one is asked again. With no passcode, removes it: the app is then open to anyone.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando grant remove

Take a grant away

$pando grant remove <app> <grant-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando grant role

Change the role a grant for managing an app carries

$pando grant role <app> <grant-id> <role-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando group

pando group

Work with groups and what they hold

$pando group [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando group add-member

Add an account to a group; it then holds what the group holds

$pando group add-member <group-id> <user-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando group app-limit

Show or set how many apps each person in a group may own

$pando group app-limit <group-id> [apps] [flags]

With only the group, shows its limit. With a number, sets it; 0 is unlimited. --clear removes it. Somebody in several groups gets the most generous, and a limit on their own account replaces every group's.

Flags

FlagDefaultDescription
--clearremove the group's own limit

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando group apps

Show the apps a group has access to, and its role on each

$pando group apps <group-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando group list

Show every group, how many people are in it, and its installation role

$pando group list

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando group remove-member

Remove an account from a group

$pando group remove-member <group-id> <user-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando group rename

Rename a group made in Pando

$pando group rename <group-id> <name>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando group role

Give a group an installation role, or take it away with --clear

$pando group role <group-id> [role-id] [flags]

Flags

FlagDefaultDescription
--cleartake the group's installation role away

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando host-agent

pando host-agent

The forwarding agent on each host of a multi-host Docker install

$pando host-agent

Each app host of a multi-host Docker install runs a forwarding agent, which carries connections from Pando's proxy, and only from it, to app containers on that host. The Docker hosts runtime starts and replaces the agents itself; the one command here an operator runs is new-authority.

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando host-agent new-authority

Print a new certificate authority for the host agents

$pando host-agent new-authority

Prints a certificate authority, certificate and private key, as PEM. Paste it into the Docker hosts runtime's agent_authority credential, which Pando stores encrypted. Pando issues its own client certificate and each agent's certificate from it. To replace it, put a new one before the old one in the credential, wait for the agents to be replaced, then remove the old one.

Global flags

FlagDefaultDescription
--config stringpath to a config file

pando identity-provider

pando identity-provider

Connect identity providers: OpenID Connect, SAML and SCIM

$pando identity-provider [flags]

Also: idp

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando identity-provider add

Add an identity provider

$pando identity-provider add <oidc|saml> [flags]

Adds an identity provider, turned off until you test it and turn it on. --preset fills in what a known provider needs (okta, entra, google, keycloak, authentik); --set KEY=VALUE sets the rest. A client secret is asked for without echoing it.

pando idp add oidc --preset okta --name Okta --set issuer=https://example.okta.com --set client_id=0oa… pando idp add saml --preset entra --name Entra --set idp_metadata_url=https://login.microsoftonline.com/…

Flags

FlagDefaultDescription
--enableturn it on now, without testing it first
--jitcreate an account at someone's first sign-in
--link-by-emaillink a first sign-in to an existing account by verified email
--name stringwhat the sign-in page calls it, such as Okta
--preset stringa known provider's settings: okta, entra, google, keycloak, authentik
--set stringArraya setting, KEY=VALUE; repeat for more

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando identity-provider check

Check that Pando can reach the provider

$pando identity-provider check <provider-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando identity-provider list

Show the identity providers, what to register with each, and how soon each can revoke

$pando identity-provider list

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando identity-provider remove

Remove an identity provider nobody has signed in through

$pando identity-provider remove <provider-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando identity-provider scim-token

Turn SCIM on for a provider and print its token, or replace it

$pando identity-provider scim-token <provider-id> [flags]

Prints the SCIM base URL and a new token. The token is shown once; running this again replaces it.

Flags

FlagDefaultDescription
--offturn SCIM off instead

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando identity-provider set

Change an identity provider

$pando identity-provider set <provider-id> [flags]

Changes a provider. --set KEY=VALUE changes one setting and keeps the rest; --secret asks for a new client secret; --enable and --disable turn it on and off.

Flags

FlagDefaultDescription
--disableturn it off
--enableturn it on
--jit stringtrue or false: create an account at first sign-in
--link-by-email stringtrue or false: link by verified email
--name stringa new name
--secretask for a new client secret
--set stringArraya setting, KEY=VALUE; repeat for more

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando identity-provider test

Print the address that starts a test sign-in in your browser

$pando identity-provider test <provider-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando instructions

pando instructions

Read and set the instructions every agent is given

$pando instructions [flags]

Agents connecting over MCP are given Pando's guidance for building apps here, then the company's own instructions, which win where the two differ.

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando instructions set

Replace the company's instructions with text read from stdin

$pando instructions set

Reads the company's instructions as text on stdin, at most 32 KB, and replaces the current ones. Empty input clears them. Needs install.policy.manage.

pando instructions set < instructions.md

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando instructions show

Print the instructions agents are given

$pando instructions show [flags]

Flags

FlagDefaultDescription
--companyprint only the company's instructions

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando notifications

pando notifications

Choose which of Pando's notifications reach you, and where

$pando notifications [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando notifications list

Your notifications, newest first

$pando notifications list [flags]

Flags

FlagDefaultDescription
--unreadOnly the ones you have not read

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando notifications preferences

Show your notification preferences, or change them with --set

$pando notifications preferences [flags]

Show which of Pando's own notifications reach you on each channel.

--set kind:channel=on|off changes one, and may be repeated, for example:

pando notifications preferences --set app_shared:ntf_smtp=on --set deploy_approval:ntf_console=off

Flags

FlagDefaultDescription
--set stringArraykind:channel=on|off, repeatable

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando notifications read

Mark a notification read, or every one with --all

$pando notifications read [notification-id] [flags]

Flags

FlagDefaultDescription
--allMark every notification read

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando notifications unread

How many of your notifications are unread

$pando notifications unread

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando notify

pando notify

Connect notification adapters such as Slack, and list their channels

$pando notify [flags]

A Slack adapter posts as Pando's own Slack app, which connecting creates. Add the adapter with pando adapter add notify/slack, connect it with pando notify connect, then subscribe with pando subscriptions create --adapter <id> --channel <channel>.

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando notify channels

List the channels a subscription to the adapter can post to

$pando notify channels <adapter> [flags]

Flags

FlagDefaultDescription
--query stringOnly channels whose names contain this

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando notify connect

Connect a notification adapter, such as Slack, to its provider

$pando notify connect <adapter> [flags]

Asks for a Slack configuration token: in Slack's app settings, under Your App Configuration Tokens, choose Generate Token. Pando uses it once to create its app, and prints Slack's approval page to open in a browser signed in to Pando. Slack returns only to an https address; without one, --manual prints a link that creates the app in Slack, and --bot-token asks for the bot token it shows once installed. A token is read from the terminal, never from the command line.

Flags

FlagDefaultDescription
--bot-tokenAsk for the bot token of an app created with --manual
--manualPrint a link that creates the app in Slack, for a Pando without an https address

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando notify list

Show the notification adapters and whether each can send

$pando notify list

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando policy

pando policy

Read and set host policy

$pando policy [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando policy set

Replace the policy with a document read from stdin

$pando policy set

Reads a whole policy document as JSON on stdin and replaces the current one. Replaces rather than merges: a merge would make it impossible to remove a rule.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando policy show

Print the installation's policy

$pando policy show

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando role

pando role

Work with roles and who holds them

$pando role [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando role edit

Rename a custom role, or replace its permissions

$pando role edit <role-id> [flags]

Flags

FlagDefaultDescription
--name stringthe role's new name
--verbs stringSliceevery permission the role carries, comma-separated

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando role holders

Show the groups and accounts holding a role, directly or through a group

$pando role holders <role-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando secret

pando secret

Manage an app's secrets

$pando secret [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando secret delete

Remove a secret

$pando secret delete <app> <key>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando secret list

List which secrets are set, without their values

$pando secret list <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando secret set

Set a secret value, read from the terminal

$pando secret set <app> <key>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando section

pando section

Group the apps in your launcher into sections

$pando section [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando section add

Move an app into a section

$pando section add <section-id> <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando section create

Make a section

$pando section create <name>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando section delete

Delete a section. Its apps go back to Your apps

$pando section delete <section-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando section list

The apps you can open, by section

$pando section list

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando section remove

Move an app out of a section, back to Your apps

$pando section remove <section-id> <app>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando section rename

Rename a section

$pando section rename <section-id> <name>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando slot

pando slot

Fill an app's service slots

$pando slot [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando slot set

Say how a slot is filled

$pando slot set <app> <key> [flags]

Flags

FlagDefaultDescription
--bind stringbind to an existing service
--literal stringuse this value directly
--provisionlet Pando create the service

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando source

pando source

See and authorize the connections private repositories are read with

$pando source [flags]

A source connection is how Pando reads private repositories on GitHub, GitLab, Azure DevOps, Bitbucket, Gitea or any git host. Add one with pando adapter add source/<kind> — pando adapter kinds lists the kinds — and every app whose repository it covers is read with it.

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando source authorize

Sign a connection in with OAuth

$pando source authorize <connection> [flags]

Shows a code to enter on the provider's site, then waits until you have. Nothing needs to be able to reach this Pando, so it works on a laptop. --web prints an address to open in a browser instead, which returns to Pando's own address. A GitHub App connection is always authorized in a browser: the address creates the App on GitHub, then installs it.

Flags

FlagDefaultDescription
--timeout duration15m0show long to wait for the code to be approved
--webauthorize in a browser instead of with a code (always, for a GitHub App)

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando source branches

List a repository's branches through a connection

$pando source branches <connection> <repository-url>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando source list

Show the source connections and whether each is ready

$pando source list

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando source remove

Disconnect a source connection and delete its stored credential

$pando source remove <connection>

Apps read with the connection keep running. Their next deploy fails, saying the connection is gone, until another connection covers their repository.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando source repos

List the repositories a connection can read

$pando source repos <connection> [flags]

Flags

FlagDefaultDescription
--limit int0at most this many (default 100)
--query stringonly repositories whose name contains this

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando subscriptions

pando subscriptions

Send Pando's events to a webhook, Slack, Teams, Discord, email or ntfy

$pando subscriptions [flags]

Also: subscription, subs

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando subscriptions create

Subscribe to events on one app, or install-wide

$pando subscriptions create [flags]

Subscribe to events and send them to a webhook (--url) or through a notification adapter (--adapter).

--events takes event names, prefixes such as deploy.*, or * for everything; pando events lists them. Without --app the subscription is install-wide, which needs install.events.manage.

A webhook's signing key is printed once. Keep it: Pando signs every delivery with it and cannot show it again.

Flags

FlagDefaultDescription
--adapter stringSend each event through this notification adapter
--app stringThe app's ID; omit for install-wide
--channel stringThe channel it posts to, for an adapter such as Slack; pando notify channels lists them
--content-type stringThe body's content type; application/json by default
--description stringWhat this subscription is for
--events stringSliceRequiredEvents to send: names, prefixes such as deploy.*, or *
--header stringArrayA header to send, "Name: value", repeatable. Values are stored encrypted and never shown again
--method stringThe webhook's HTTP method: POST (the default), PUT or PATCH
--template-file stringA file holding the body template, in Go template syntax; docs/events.md says what it is given
--url stringPost each event to this webhook URL

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando subscriptions delete

Delete a subscription and its delivery log

$pando subscriptions delete <subscription-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando subscriptions deliveries

A subscription's recent deliveries

$pando subscriptions deliveries <subscription-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando subscriptions delivery

One delivery and every attempt at it

$pando subscriptions delivery <subscription-id> <delivery-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando subscriptions list

Your subscriptions, or everybody's with --everyone

$pando subscriptions list [flags]

Flags

FlagDefaultDescription
--app stringOnly subscriptions about this app (its ID)
--everyoneEvery person's subscriptions (needs install.events.manage)

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando subscriptions redeliver

Send a delivery again now

$pando subscriptions redeliver <subscription-id> <delivery-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando subscriptions rotate-key

Replace a webhook's signing key and print the new one, once

$pando subscriptions rotate-key <subscription-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando subscriptions show

One subscription

$pando subscriptions show <subscription-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando subscriptions test

Send a test event to one subscription

$pando subscriptions test <subscription-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando subscriptions update

Change a subscription, or turn it on or off

$pando subscriptions update <subscription-id> [flags]

Flags

FlagDefaultDescription
--adapter stringA new notification adapter
--channel stringA new channel, for an adapter such as Slack
--content-type stringThe body's content type; application/json by default
--description stringA new description
--disableTurn it off
--enableTurn it on, clearing its record of failures
--events stringSliceReplace the events it sends
--header stringArrayA header to send, "Name: value", repeatable. Values are stored encrypted and never shown again
--method stringThe webhook's HTTP method: POST (the default), PUT or PATCH
--template-file stringA file holding the body template, in Go template syntax; docs/events.md says what it is given
--url stringA new webhook URL

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando token

pando token

Manage your API tokens

$pando token [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando token list

List your tokens

$pando token list

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando token revoke

Revoke a token

$pando token revoke <token-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando two-factor

pando two-factor

Set up or change two-factor authentication on your own local account

$pando two-factor [flags]

Two-factor authentication asks for a code from an authenticator app after your password. Accounts from an identity provider set it up at the provider instead.

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando two-factor disable

Turn off two-factor authentication

$pando two-factor disable

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando two-factor recovery-codes

Replace your recovery codes with new ones

$pando two-factor recovery-codes

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando two-factor setup

Set up an authenticator app, or replace the one in use

$pando two-factor setup

Shows a QR code to scan with an authenticator app, asks for the code it then shows, and prints recovery codes. An authenticator already in use keeps working until the new one is confirmed.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando two-factor status

Show whether two-factor authentication is on

$pando two-factor status

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando upgrade

pando upgrade

Upgrade the Pando server in place to a newer release

$pando upgrade [version] [flags]

Upgrades the server to the latest release, or to the version given. Pando verifies the image's signature, takes a full backup (or not, with --skip-backup), and starts a helper that replaces Pando's container and puts the previous version back if the new one does not start. Every app is unreachable while Pando restarts. Needs install.upgrade, and upgrade_in_place on in host policy. pando upgrade last shows how the last one went.

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)
--skip-backupupgrade without taking a full backup first (recorded in the audit log)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando upgrade last

Show how the most recent in-place upgrade went

$pando upgrade last

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando user

pando user

Work with accounts

$pando user [flags]

Flags

FlagDefaultDescription
--server stringPando server URL (defaults to the one you logged in to)

Global flags

FlagDefaultDescription
--config stringpath to a config file

Commands

pando user app-limit

Show how many apps an account may own and where that comes from, or set the account's own limit

$pando user app-limit <user-id> [apps] [flags]

With only the account, shows the limit in force, where it comes from (the account, a group, or host policy) and how many apps the account owns.

With a number, sets the account's own limit, which applies whatever its groups say. 0 is unlimited. --clear removes it, so its groups' or the installation's applies.

Flags

FlagDefaultDescription
--clearremove the user's own limit

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando user apps

Show the apps an account has access to, and its role on each

$pando user apps <user-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando user create

Create a local account with a generated password

$pando user create <username> [flags]

Creates a local account and prints the password Pando generated for it, once. Give it to the account holder yourself; by default they choose their own at first sign-in.

Flags

FlagDefaultDescription
--email stringthe account's email address
--name stringthe name shown in the console and the audit log
--no-change-requireddo not require a new password at first sign-in

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando user get

Show one account, and each installation role it holds, directly or through a group

$pando user get <user-id>

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando user list

Show every account, and each installation role it holds, directly or through a group

$pando user list [flags]

Flags

FlagDefaultDescription
--q stringonly accounts whose username, name or email contains this

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando user reset-password

Give an account a new generated password

$pando user reset-password <user-id> [flags]

Sets a new generated password on a local account, ends every session it holds, and prints the password once. By default its holder chooses their own at the next sign-in.

Flags

FlagDefaultDescription
--no-change-requireddo not require a new password at the next sign-in

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando user reset-two-factor

Remove an account's two-factor authentication

$pando user reset-two-factor <user-id>

Removes a local account's authenticator and recovery codes and ends every session it holds, for someone who has lost both. They sign in with their password alone, and set it up again there if host policy requires it.

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)

pando user update

Change an account's username, name or email

$pando user update <user-id> [flags]

Flags

FlagDefaultDescription
--email stringthe account's email address
--name stringthe name shown in the console and the audit log
--username stringthe name the account signs in with

Global flags

FlagDefaultDescription
--config stringpath to a config file
--server stringPando server URL (defaults to the one you logged in to)