plain.cloud
Command-line tool for Plain Cloud.
Overview
Mint a personal API token at https://plainframework.com/dashboard/api-keys/, then log in. The token is stored in your OS keyring (Keychain on macOS, Credential Manager on Windows, Secret Service on Linux); the api_url lives in plain text at ~/.plain/cloud/config.toml.
plain-cloud login
plain-cloud whoami
plain-cloud apps list
Commands
plain-cloud login— paste a token, validate it, and save it to your OS keyring.plain-cloud logout— forget the saved token.plain-cloud whoami— show the user the current token belongs to.plain-cloud apps list— list apps you have access to across every team.plain-cloud api <path>— call any API path with the saved token. Modeled ongh api:-X/--method(defaultGET);-H KEY:VALUEfor headers;-f key=valuefor string fields;-F key=valuefor typed fields (true/false/null/numbers become JSON literals,@pathreads a string from disk);--input FILE(or-for stdin) to send a raw body;--rawto skip JSON pretty-printing. Fields go in the query string forGETand in the JSON body otherwise. Exit code is 0 for 2xx, 1 otherwise.
Pass paths exactly as listed in plain-cloud openapi — the /api/ mount prefix is added for you (passing it explicitly also works).
plain-cloud api /me/
plain-cloud api /apps/ -F page=2
plain-cloud api /apps/foo/exceptions/abc123/resolve/ -X POST
plain-cloud api /apps/ -X POST --input body.json -H "X-Trace: 1"
plain-cloud openapi— fetch the OpenAPI document. No token required (the schema is metadata). Pipe intojqor save with> openapi.jsonto feed to an agent.plain-cloud open [path]— open a Plain Cloud URL in your browser. Defaults to/dashboard/.plain-cloud config— show the active keyring backend and api_url.
Self-hosted / staging
Pass --api-url at login to point at a non-production install:
plain-cloud login --api-url https://plain-cloud.example.com
Headless / CI use
Skip login entirely and pass the token via env var. This works everywhere — useful for CI, Docker, and headless Linux boxes that don't ship a keyring backend, but also as a per-shell override on a machine that's already logged in.
PLAIN_CLOUD_TOKEN=... # required
PLAIN_CLOUD_API_URL=... # optional, defaults to https://plainframework.com
When PLAIN_CLOUD_TOKEN is set, it overrides anything stored in the keyring.
FAQs
Where is my token stored?
In your OS keyring under the service name plain-cloud, keyed by the api_url. Run plain-cloud config to see which backend is active.
Can I have prod and staging tokens at the same time?
Tokens are keyed by api_url in the keyring, so multiple installations coexist. The config.toml tracks the most recent login; switch by running plain-cloud login --api-url ... again.
What if login says "no OS keyring backend available"?
You're on a system without a keyring (common on headless Linux). Use the PLAIN_CLOUD_TOKEN env var instead — see Headless / CI use.
Installation
uv tool install plain-cloud