This guide is for people who already have the starterctl binary and want to use it against a running starter app environment.
If you need build, release, or packaging instructions, see cli/README.md.
These are the fastest copy/paste commands for common workflows.
Log in with browser flow:
starterctl login --server http://localhost:3270Configure with a PAT:
starterctl configure --server http://localhost:3270 --token starter_pat_...Check connectivity:
starterctl health
starterctl versionList users:
starterctl users list
starterctl users list --status ACTIVE
starterctl users list --format jsonApprove or deactivate a user:
starterctl users approve <user-id>
starterctl users deactivate <user-id>Change a user role:
starterctl users role <user-id> --role SCOPE_ADMINBrowse audit entries:
starterctl audit list
starterctl audit list --action AUTH_LOGIN_SUCCEEDED --format json
starterctl audit export --format csv > audit.csvList or create jobs:
starterctl jobs list
starterctl jobs create --type noop --payload "{}"Use env vars instead of stored config:
$env:STARTERCTL_SERVER_URL='http://localhost:3270'
$env:STARTERCTL_TOKEN='starter_pat_...'
starterctl users list --format jsonBootstrap your first PAT through the app API:
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$loginBody = @{ email='admin@example.com'; password='ChangeMe123!' } | ConvertTo-Json
Invoke-WebRequest -UseBasicParsing -Uri 'http://localhost:3270/api/auth/login' -Method POST -ContentType 'application/json' -Body $loginBody -WebSession $session
$tokenBody = @{ name='CLI Bootstrap Token'; expiresInDays=90 } | ConvertTo-Json
$tokenResponse = Invoke-WebRequest -UseBasicParsing -Uri 'http://localhost:3270/api/tokens' -Method POST -ContentType 'application/json' -Body $tokenBody -WebSession $session
($tokenResponse.Content | ConvertFrom-Json).token.tokenValueLog out:
starterctl logoutstarterctl lets you work with the app API from a terminal. Common uses:
- check whether an environment is healthy
- sign in and store an access token locally
- list users and manage user lifecycle
- inspect audit trail entries
- list or create background jobs
You need:
- a running starter app environment
- permission to access that environment
- either a browser login flow or a personal access token
Examples in this guide use http://localhost:3270, but replace that with your real environment URL when needed.
You have two main options.
This is the friendliest path if your environment supports the CLI login flow.
starterctl login --server http://localhost:3270That command opens the browser, completes the web login flow, and stores the resulting token in your local CLI config.
If you already logged in before and only want to refresh the token, you can run:
starterctl loginIf you already have a PAT, configure the CLI directly:
starterctl configure --server http://localhost:3270 --token starter_pat_...This verifies the server and confirms the authenticated identity before saving the config.
If you need to bootstrap your very first PAT without the CLI, you can log into the app API and create one directly:
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$loginBody = @{ email='admin@example.com'; password='ChangeMe123!' } | ConvertTo-Json
Invoke-WebRequest -UseBasicParsing -Uri 'http://localhost:3270/api/auth/login' -Method POST -ContentType 'application/json' -Body $loginBody -WebSession $session
$tokenBody = @{ name='CLI Bootstrap Token'; expiresInDays=90 } | ConvertTo-Json
$tokenResponse = Invoke-WebRequest -UseBasicParsing -Uri 'http://localhost:3270/api/tokens' -Method POST -ContentType 'application/json' -Body $tokenBody -WebSession $session
($tokenResponse.Content | ConvertFrom-Json).token.tokenValueBy default, the CLI stores config here:
- Windows:
%APPDATA%\starterctl\config.json - macOS/Linux:
~/.config/starterctl/config.json
You can override that location with:
$env:STARTERCTL_CONFIG_DIR='C:\temp\starterctl'After login or configuration, these are the best first commands:
starterctl health
starterctl versionUseful output variants:
starterctl health --format json
starterctl users list --format json
starterctl audit list --format csvSupported output formats are:
tablejsoncsv
starterctl users list
starterctl users list --status ACTIVE
starterctl users list --format jsonSupported status filters:
ACTIVEPENDING_APPROVALINACTIVE
Approve a pending user:
starterctl users approve <user-id>Deactivate a user:
starterctl users deactivate <user-id>Reactivate a user:
starterctl users reactivate <user-id>Change a user role:
starterctl users role <user-id> --role SCOPE_ADMINSupported roles:
PLATFORM_ADMINSCOPE_ADMINSCOPE_USER
List recent entries:
starterctl audit listFilter by action:
starterctl audit list --action AUTH_LOGIN_SUCCEEDED
starterctl audit list --action USER_CREATED --format jsonFilter by actor or date range:
starterctl audit list --actor <user-id>
starterctl audit list --from 2026-04-01T00:00:00Z --to 2026-04-30T23:59:59ZExport audit data:
starterctl audit export --format json
starterctl audit export --format csv > audit.csvList jobs:
starterctl jobs list
starterctl jobs list --format jsonCreate a job:
starterctl jobs create --type noop --payload "{}"Example with structured payload:
starterctl jobs create --type echo --payload "{\"message\":\"hello\"}"Whether job creation succeeds depends on your server-side permissions and the allowlisted job types in that environment.
You can use these on most commands:
starterctl --help
starterctl users --help
starterctl audit list --helpVerbose HTTP output:
starterctl --verbose healthStructured output:
starterctl --format json users listGenerate completion scripts:
starterctl completion powershell
starterctl completion bash
starterctl completion zshInstall PowerShell completion:
starterctl completion install powershellCompletion is especially helpful for user IDs and some enum-style flags.
To remove the stored token from local config:
starterctl logoutAfter that, commands that need authentication will fail until you run login or configure again.
You can control CLI behavior with environment variables instead of stored config:
STARTERCTL_CONFIG_DIRSTARTERCTL_SERVER_URLSTARTERCTL_TOKENSTARTERCTL_AUTH_HEADER
Example:
$env:STARTERCTL_SERVER_URL='http://localhost:3270'
$env:STARTERCTL_TOKEN='starter_pat_...'
starterctl users list --format jsonIf STARTERCTL_AUTH_HEADER=api-key, the CLI sends the token in X-API-Key instead of Authorization: Bearer ....
- If a command says the server URL is not configured, run
starterctl login --server ...orstarterctl configure --server ... --token .... - If a command returns a connection error, verify the app URL and make sure the environment is reachable from your machine.
- If the browser login flow does not open, try PAT-based
configureinstead. - If you are scripting the CLI, prefer
--format jsonso downstream tools do not depend on table formatting.