Signing in with keenauth login

keenauth login signs you in with your dashboard account, so you can manage your environments from a terminal without creating an API key. For CI jobs and scripts, keep using an API key in KEENAUTH_API_KEY (see Command line interface).

Commands

Command What it does
keenauth login Signs in with the device flow: the CLI prints an address and a code, you open the address on any device, sign in to the dashboard and enter the code.
keenauth login --web Signs in in the browser on this computer. The CLI opens the sign-in page and receives the result on http://127.0.0.1:<port>/callback (or http://[::1]:<port>/callback); the request is protected with PKCE (S256), state and the iss parameter.
keenauth whoami Shows the signed-in user, the organization and the selected environment.
keenauth env use <environment_id> Selects the environment that later commands manage. The control plane checks that you have a dashboard role in it.
keenauth env list Lists the environments you can work on, from the control plane. The environment selected with env use is marked with *.
keenauth logout Revokes the session on the server and removes it from this computer.
keenauth login
keenauth env use env_01j9z3c0000000000000000000
keenauth users list

When KEENAUTH_API_KEY is set, it always wins; the stored session is used only when no API key is set.

Listing environments

keenauth env list asks the control plane for the environments of the account you signed in to and in which you have a dashboard role (GET /v1/environments, see List your environments for the CLI). It needs a session; without one it asks you to run keenauth login.

Flag Description
--limit Page size, 1 to 100 (default 20).
--after The cursor printed by the previous page (more results: --after <cursor>).
--all Follows the pages and lists every environment.
-o table|json|yaml Output format; the table marks the selected environment with *, and in JSON and YAML each row has current: true for it.

An invalid or foreign --after cursor is refused (invalid_cursor); run the command again without it.

How the session works

Where the session is stored

What Where
Issuer, user ID, organization, DPoP key thumbprint, selected environments config.json in KEENAUTH_CONFIG_DIR, or in keenauth under your user configuration directory (mode 0600)
Refresh token and DPoP private key The OS keychain: macOS Keychain (security) or the Secret Service on Linux (secret-tool)

The secrets are passed to the keychain tool on standard input, never as command arguments. If no keychain is available (for example on Windows, or on a Linux server without a Secret Service), keenauth login stops with an error. You can then pass --insecure-storage to store the refresh token and the DPoP private key unencrypted in credentials.json (mode 0600) next to config.json. The CLI prints a warning: anyone who can read that file can act as you until the session expires. Prefer an API key on shared machines.

Settings

Variable Default Description
KEENAUTH_LOGIN_ISSUER https://login.keenauth.com The sign-in server. Must be an https address.
KEENAUTH_CONTROL_URL https://api.keenauth.com/v1 The control plane that issues management tokens. Must be an https address.
KEENAUTH_CONFIG_DIR your user configuration directory + keenauth Where config.json (and with --insecure-storage, credentials.json) is kept.

Errors

Message What to do
you are not signed in / your session has expired or was revoked Run keenauth login again. Exit code 3.
no environment is selected Run keenauth env use <environment_id>.
environment … does not exist or you have no dashboard role in it Check the ID in the dashboard or ask an owner for a role.
no OS keychain is available Install a keychain, use --insecure-storage, or use an API key.