Released-site CLI operator quickstart

Use this guide when Stella Ops is already released or deployed somewhere and you need to operate it from the CLI without a source checkout.

Pick the runner

SituationUse
You have a compose-based Stella Ops deploymentdevops/compose/scripts/stella-cli.sh or devops/compose/scripts/stella-cli.ps1
You only have Docker and the published CLI imagedocker run --rm registry.example.com/stellaops/cli:<version> ...
You are developing from this repositorydotnet run --project src/Cli/StellaOps.Cli/StellaOps.Cli.csproj -- ...

The source-free CLI image is the release artifact for deployed sites. It must be published with the service images and must contain the restart-time CLI plug-in payload under /app/plugins/cli.

Required environment

Set these values before using the source-free runner:

VariablePurposeTypical value
STELLAOPS_CLI_IMAGECLI image to runregistry.example.com/stellaops/cli:<release-version>
STELLAOPS_BACKEND_URLRouter or backend URL reachable from the CLI containerhttp://router.stella-ops.local:8080
STELLAOPS_AUTHORITY_URLAuthority URL reachable from the CLI containerhttp://authority.stella-ops.local:8440
STELLAOPS_AUTHORITY_CLIENT_IDAuthority client idstellaops-cli for human/bootstrap use, stellaops-cli-automation for automation
STELLAOPS_AUTHORITY_CLIENT_SECRETSecret for confidential automation clientsDeployment secret value
STELLAOPS_AUTHORITY_USERNAMEHuman/admin username when using password grantadmin
STELLAOPS_AUTHORITY_PASSWORDHuman/admin password when using password grantPrivate deployment secret
STELLAOPS_CLI_WORKDIRHost directory mounted as /workspaceDirectory containing setup YAML or operator inputs

The compose overlay stores CLI token/cache state in a dedicated stella-cli-state volume. Operator inputs should live under the mounted workspace and be referenced as /workspace/<file>.

Compose shortcut

Bash:

cd devops/compose
export STELLAOPS_CLI_IMAGE=registry.example.com/stellaops/cli:<release-version>
export STELLAOPS_CLI_WORKDIR="$PWD"
export STELLAOPS_BACKEND_URL=http://router.stella-ops.local:8080
export STELLAOPS_AUTHORITY_URL=http://authority.stella-ops.local:8440
export STELLAOPS_AUTHORITY_CLIENT_ID=stellaops-cli
export STELLAOPS_AUTHORITY_USERNAME=admin
export STELLAOPS_AUTHORITY_PASSWORD='<admin-password>'

./scripts/stella-cli.sh setup status --json

PowerShell:

cd devops/compose
$env:STELLAOPS_CLI_IMAGE = 'registry.example.com/stellaops/cli:<release-version>'
$env:STELLAOPS_CLI_WORKDIR = (Resolve-Path .).Path
$env:STELLAOPS_BACKEND_URL = 'http://router.stella-ops.local:8080'
$env:STELLAOPS_AUTHORITY_URL = 'http://authority.stella-ops.local:8440'
$env:STELLAOPS_AUTHORITY_CLIENT_ID = 'stellaops-cli'
$env:STELLAOPS_AUTHORITY_USERNAME = 'admin'
$env:STELLAOPS_AUTHORITY_PASSWORD = '<admin-password>'

.\scripts\stella-cli.ps1 setup status --json

Run setup with a workspace file:

./scripts/stella-cli.sh setup run --config /workspace/setup.yaml --non-interactive

Run admin password reset from a released CLI image only when that image is already inside the Authority environment and the command has the required Authority storage access:

printf '%s\n' 'Admin@Stella2026!' |
  ./scripts/stella-cli.sh admin users password-set admin \
    --confirm-authority-access \
    --password-stdin

For a local source checkout with the compose stack running, use the dedicated Authority recovery helper instead. It publishes the current Stella CLI, runs a one-shot container on the Stella compose network, and passes the password through stdin:

$env:STELLAOPS_ADMIN_PASS = '<new-private-password>'
$env:STELLAOPS_ADMIN_PASS |
  .\scripts\authority-password-set.ps1 -Username admin -Tenant default -PasswordStdin

Direct Docker runner

Use direct Docker when compose files are not present:

docker run --rm -it \
  -e STELLAOPS_BACKEND_URL=https://stella.example.com \
  -e STELLAOPS_AUTHORITY_URL=https://authority.example.com \
  -e STELLAOPS_AUTHORITY_CLIENT_ID=stellaops-cli \
  -e STELLAOPS_AUTHORITY_USERNAME=admin \
  -e STELLAOPS_AUTHORITY_PASSWORD='<admin-password>' \
  -v "$PWD:/workspace" \
  registry.example.com/stellaops/cli:<release-version> \
  setup status --json

For automation, use the confidential client instead:

docker run --rm \
  -e STELLAOPS_BACKEND_URL=https://stella.example.com \
  -e STELLAOPS_AUTHORITY_URL=https://authority.example.com \
  -e STELLAOPS_AUTHORITY_CLIENT_ID=stellaops-cli-automation \
  -e STELLAOPS_AUTHORITY_CLIENT_SECRET='<client-secret>' \
  registry.example.com/stellaops/cli:<release-version> \
  setup status --json

Verify the image is complete

Before trusting a newly published CLI image, check both core help and plug-in-only command groups:

docker run --rm registry.example.com/stellaops/cli:<release-version> --help
docker run --rm registry.example.com/stellaops/cli:<release-version> runtime --help
docker run --rm registry.example.com/stellaops/cli:<release-version> excititor --help
docker run --rm registry.example.com/stellaops/cli:<release-version> offline kit --help

Expected restart-time plug-ins in /app/plugins/cli:

The loader intentionally skips duplicate root commands that are already provided by the core CLI. A release check that only runs stella --help is not enough; also check runtime, excititor, and offline kit.

Troubleshooting

SymptomCheck
setup status cannot reach servicesConfirm STELLAOPS_BACKEND_URL is reachable from inside the CLI container. In compose, use service DNS names such as router.stella-ops.local.
Authority login failsConfirm STELLAOPS_AUTHORITY_URL, client id, username/password or client secret, and tenant/scope settings.
Existing local admin password is stale or unknownIn a source checkout, use devops/compose/scripts/authority-password-set.ps1; do not wipe databases, edit authority.users, or enable demo seed.
authority-password-set.* publish reports MSB3541 and Null character in pathGenerated MSBuild obj state is corrupt. The current helper runs publish with build servers disabled, removes only the named generated obj directory inside the repo, and retries once.
Plug-in commands are missingConfirm the image has /app/plugins/cli/** manifests and assemblies, and STELLAOPS_CLI_PLUGIN_BASE_DIRECTORY=/app.
Workspace files are not foundPut files under STELLAOPS_CLI_WORKDIR and reference them as /workspace/<file> from CLI arguments.
Docker network is missingStart the Stella Ops compose stack first, or point backend/Authority URLs at externally reachable endpoints.

Deeper references