API and CLI Reference

This is the single entry point for operators and integrators working with the Stella Ops APIs and the stella CLI. Use it to find:

This page is a hub — detailed references live under docs/api/ and docs/modules/cli/. The most-used stella command groups are summarized below; treat the linked OpenAPI documents and command guides as the source of truth.

Command currency: runnable-looking examples that the current CLI parser rejects are explicitly unshipped or stale. Check the machine-enforced baseline before copying an older example into automation.

GoalOpen this
API conventions (headers, pagination, errors)docs/api/overview.md
API versioning policydocs/api/versioning.md
Gateway tenancy header policydocs/api/gateway/tenant-auth.md
Gateway header hardening rulesdocs-archive/modules/gateway/identity-header-policy.md
Console workspaces (findings/VEX views)docs/api/console/workspaces.md
Console search and downloadsdocs/api/console/search-downloads.md
Exceptions API entry pointdocs/api/exceptions.md
Download aggregated OpenAPI via CLIdocs/modules/cli/guides/commands/api.md
CLI command reference (by command group)docs/modules/cli/guides/commands/
CLI authentication and tokensdocs/modules/cli/guides/commands/auth.md
CLI Concelier job triggers (db)docs/modules/cli/guides/commands/db.md, docs/CONCELIER_CLI_QUICKSTART.md
CLI offline/air-gap workflowsdocs/modules/cli/guides/commands/offline.md, docs/OFFLINE_KIT.md
CLI reachability workflowdocs/modules/cli/guides/commands/reachability.md
CLI vulnerability workflowdocs/modules/cli/guides/commands/vuln.md
Vuln Explorer OpenAPI (v1)docs/modules/vuln-explorer/openapi/vuln-explorer.v1.yaml
Graph Gateway API (draft)docs/api/graph.md, docs/api/graph-gateway-spec-draft.yaml

CLI command groups documented here

This page documents a curated set of stella commands in detail. Jump to one:

For the full command surface (one guide per command group), see docs/modules/cli/guides/commands/.

Where the API contracts live

Stella Ops treats the OpenAPI documents and JSON schemas as the source of truth for HTTP shapes.

If you are building an SDK or want a single document for tooling, prefer the CLI OpenAPI download flow:

See: docs/modules/cli/guides/commands/api.md.

Where the CLI docs live

The stella CLI is documented as:

CLI docs are written to match repo reality; avoid copying raw endpoint paths into the CLI guides unless they are backed by OpenAPI and tests.

Cross-cutting conventions (high-level)

For the detailed contract, see docs/api/overview.md. The stable rules to keep in mind:

stella system migrations commands

stella system migrations-run, migrations-status and migrations-verify: the database migration command group for SQL migrations managed by the shared PostgreSQL migration tooling.

(The heading avoids / on purpose: slash characters produce different heading anchors in different Markdown renderers, which silently breaks the table-of-contents link above.)

Synopsis

stella system migrations-status [--module <name>|all] [--connection <connection-string>]
stella system migrations-verify [--module <name>|all] [--connection <connection-string>]
stella system migrations-run [--module <name>|all] [--category <startup|release|seed|data>] [--dry-run] [--force]

Options

OptionDescription
--moduleModule name filter (AirGap, Authority, Concelier, Excititor, Notify, Platform, Policy, Scanner, Scheduler, TimelineIndexer, all).
--categoryMigration category: startup, release, seed, data.
--dry-runPreview migrations without executing SQL.
--forceRequired to execute release category migrations.
--connectionOverride PostgreSQL connection string for command execution.
--timeoutTimeout in seconds per migration command execution.

Examples

# Status across currently registered modules
stella system migrations-status --module all

# Checksum validation
stella system migrations-verify --module all

# Preview release migrations
stella system migrations-run --module all --category release --dry-run

# Execute release migrations
stella system migrations-run --module all --category release --force

Current Coverage Notes

Platform Migration Admin API (UI / backend orchestration)

UI-driven migration operations must execute through Platform WebService (server-side only, no browser-direct PostgreSQL access).

API operations:

Release safety guard:

# Optional manual demo datasets (not part of default bootstrap)
stella admin seed-demo --dry-run
stella admin seed-demo --confirm

stella scan diff

Compare ELF binaries between two container images using section hashes.

Synopsis

stella scan diff --base <image-ref> --target <image-ref> [options]

Options

OptionDescription
--base, -bBase image reference (tag or digest).
--target, -tTarget image reference (tag or digest).
--mode, -mAnalysis mode: elf, pe, auto (default: auto, currently uses ELF).
--emit-dsse, -dDirectory for DSSE attestation output.
--signing-keyPath to ECDSA private key (PEM) for DSSE signing.
--format, -fOutput format: table, json, summary (default: table).
--platform, -pPlatform filter (e.g., linux/amd64).
--include-unchangedInclude unchanged binaries in output.
--sectionsSections to analyze (comma-separated or repeatable).
--registry-authPath to Docker config for registry authentication.
--timeoutTimeout in seconds (default: 300).
--verbose, -vEnable verbose output.

Note: --emit-dsse requires --signing-key to sign the DSSE envelope.

Examples

# Basic comparison
stella scan diff --base myapp:1.0.0 --target myapp:1.0.1

# DSSE output with signing key
stella scan diff --base myapp:1.0.0 --target myapp:1.0.1 \
  --mode=elf --emit-dsse=./attestations --signing-key=./keys/binarydiff.pem

# JSON output for automation
stella scan diff --base myapp:1.0.0 --target myapp:1.0.1 --format=json > diff.json

# Specific platform
stella scan diff --base myapp:1.0.0 --target myapp:1.0.1 --platform=linux/amd64

Output

DSSE output produces two files per platform:

attestations/
  linux-amd64-binarydiff.dsse.json
  linux-amd64-binarydiff.payload.json

See also: docs/modules/scanner/binary-diff-attestation.md.

stella guard run

Collect bounded source files and run the server-owned Integrations AI Code Guard analysis. The CLI is a thin adapter that gathers bounded source input and posts it. It does not implement analyzers.

Synopsis

stella guard run [<path>] [options]
stella guard status [--format json|text]

<path> is the source file or directory to submit. It defaults to ..

Options (run)

OptionDescription
--policy, -pAI Code Guard YAML configuration file (conventionally .stellaops.yml).
--format, -fOutput format: json (default), text, sarif, gitlab.
--output, -oWrite the report to a file instead of stdout.
--ownerRepository owner sent to the Integrations contract (default: local).
--repoRepository name (defaults to the target directory or file name).
--commitCommit SHA or immutable revision identifier (default: working-tree).
--exclude, -eSimple wildcard path patterns to exclude (repeatable).
--serverIntegrations API base URL override.
--sealedReserved for a future offline analyzer bundle; currently fails closed.
--verbose, -vEnable verbose output.

Options (status)

OptionDescription
--format, -fOutput format: json (default) or text.
--verbose, -vEnable verbose output.

stella guard status describes the CLI/server contract only. It does not call the server, so it reports liveReadinessChecked: false and never proves that the backend is reachable.

Collection bounds

run fails closed rather than truncating. It refuses any single source or policy file over 1 MiB, a total payload over 10 MiB, more than 1000 collected files, or more than 10000 traversed entries. .git, .nuget, bin, node_modules, obj and vendor directories are skipped, and symlinks and junctions are never followed.

Exit codes

CodeMeaning
0Pass
1Warning or fail findings
10Input error (bad path, bad format, no eligible files, --sealed)
11Network error
12Analysis error (pending or error status)
99Unknown error

Examples

# Analyse the working tree and write SARIF
stella guard run --policy .stellaops.yml --format sarif --output guard.sarif

# Analyse one directory, attributed to a commit, excluding fixtures
stella guard run ./src --owner acme --repo billing --commit "$GIT_SHA" --exclude "**/testdata/*"

# Describe the contract without calling the server
stella guard status --format text

stella image inspect

Inspect OCI image manifests and layers.

Synopsis

stella image inspect <reference> [options]

Options

OptionDescription
--resolve-index, -rResolve multi-arch index to platform manifests (default: true).
--print-layers, -lInclude layer details in output (default: true).
--platform, -pPlatform filter (e.g., linux/amd64).
--output, -oOutput format: table, json (default: table).
--timeoutTimeout in seconds (default: 60).
--verbose, -vEnable verbose output.

Examples

# Basic inspection
stella image inspect nginx:latest

# JSON output
stella image inspect nginx:latest --output json

# Filter to a single platform
stella image inspect nginx:latest --platform linux/amd64

# Local registry over HTTP
stella image inspect http://localhost:5000/myapp:1.0.0

Exit codes

CodeMeaning
0Success
1Image not found
2Error (auth, network, invalid input, timeout)

stella setup

Installation-scoped control-plane bootstrap for the running StellaOps platform.

Synopsis

stella setup [--config <path>] [--non-interactive]
stella setup run [options]
stella setup resume [--session <id>]
stella setup status [--session <id>] [--json]
stella setup reset [--step <step-id> | --all] [--force]
stella setup validate --config <path>

Options

Options are scoped to the command that declares them. They are not inherited by subcommands: --config and --non-interactive belong to bare stella setup (and --config to validate), so stella setup run --config <path> is rejected with Unrecognized command or argument '--config'.

OptionWhere it is acceptedDescription
--config, -csetup, validatePath to the YAML configuration file used to seed setup draft values. Required by validate.
--non-interactive, -ysetupRun without prompts.
--step, -srun, resetLimit the operation to one supported control-plane step.
--skiprunSkip the named steps. Repeatable.
--dry-runrunValidate configuration without applying changes.
--force, -frun, resetrun re-runs already completed steps; reset skips confirmation prompts.
--allresetReset all setup state.
--sessionresume, statusUse an explicit session id instead of the latest.
--jsonstatusEmit machine-readable session state with sanitized draftValues and retained-secret secretDrafts metadata.
--verbose, -vallEnable verbose output.

Available Steps

Step IDNameRequiredDescription
databasePostgreSQL DatabaseYesConfigure database connection.
cacheValkey/Redis CacheYesConfigure cache connection.
migrationsDatabase MigrationsYesConverge the required schema migrations.
adminAdmin BootstrapYesEnsure the bootstrap administrator exists.
cryptoCrypto ProfileYesValidate and apply the selected crypto profile.

Compatibility aliases still accepted:

Former setup targets such as vault, settingsstore, registry, scm, notify, telemetry, llm, sources, environments, and agents now return explicit handoff guidance to the authenticated onboarding surfaces.

Examples

# Run the installation bootstrap
stella setup run

# Probe one step only
stella setup run --step database --dry-run

# Seed draft values from a config file (--config belongs to bare `setup`, not to `run`)
stella setup --config ./setup.yaml --non-interactive

# Check a config file without running setup
stella setup validate --config ./setup.yaml

# Resume and inspect status
stella setup resume
stella setup status --json

# Reset the installation session
stella setup reset --all --force

stella setup reset resets installation-session state only. It does not reset, rotate, or unlock an existing Authority admin password. For local compose source-checkout recovery, use devops/compose/scripts/authority-password-set.ps1 or authority-password-set.sh.

After stella setup, use the authenticated integration/onboarding surfaces instead of more setup steps:

stella config integrations bootstrap local
stella config integrations bootstrap local --include-gitlab
stella config integrations bootstrap local --include-gitlab --include-gitlab-registry

# Production or customer-managed systems still use BYO-secret onboarding
stella config integrations secrets targets
stella config integrations secrets upsert-bundle \
  --bundle gitlab-server \
  --target <vault-integration-id> \
  --path gitlab/server \
  --entry access-token=glpat-...

Setup-session secret handling:

stella config integrations bootstrap local

Bootstrap the Stella-owned local compose fixture catalog from the CLI.

Synopsis

stella config integrations bootstrap local [--include-gitlab] [--include-gitlab-registry] [--format table|json]

Options

OptionDescription
--include-gitlabInclude the owned local GitLab Server and GitLab CI fixtures. The CLI mints and stages the local PAT into Vault automatically.
--include-gitlab-registryInclude the optional local GitLab container registry fixture. Requires the heavy GitLab compose profile with GITLAB_ENABLE_REGISTRY=true.
--formatOutput format: table or json (default: table).
--verbose, -vEnable verbose output.

Examples

# Default 13-entry local fixture catalog
stella config integrations bootstrap local

# Add GitLab Server and GitLab CI
stella config integrations bootstrap local --include-gitlab

# Add the optional GitLab registry and emit machine-readable results
stella config integrations bootstrap local --include-gitlab --include-gitlab-registry --format json

Contract

stella advise ask

Ask questions to the AdvisoryAI assistant.

Synopsis

stella advise ask <query> [options]

Options

OptionDescription
--image, -iContainer image reference to scope the query.
--digest, -dArtifact digest to scope the query.
--environment, -eEnvironment context (e.g., production, staging).
--conversation-id, -cConversation ID for follow-up queries.
--no-action, -nSuppress proposed actions (read-only mode).
--evidenceInclude evidence links and citations.
--format, -fOutput format: table, json, markdown.
--output, -oWrite output to file.
--tenantTenant context.
--userUser context.
--verbose, -vEnable verbose output.

Prerequisites

An LLM provider must be configured. If not configured, the command will display:

Error: AI/LLM provider not configured.

AdvisoryAI features require an LLM provider to be configured.
Use the AdvisoryAI integration surfaces to configure an LLM provider.

Alternatively, set one of these environment variables:
  - OPENAI_API_KEY      for OpenAI
  - ANTHROPIC_API_KEY   for Claude (Anthropic)
  - GEMINI_API_KEY      for Google Gemini
  - GOOGLE_API_KEY      for Google Gemini

Or configure Ollama for local LLM inference.

Examples

# Basic query
stella advise ask "What vulnerabilities affect CVE-2024-1234?"

# Scoped to an image
stella advise ask "Is this image safe for production?" --image myapp:1.0.0

# With evidence citations
stella advise ask "Explain the risk of log4j in this artifact" \
  --digest sha256:abc123... --evidence

# JSON output for automation
stella advise ask "List critical vulnerabilities" --format json > report.json

stella advise chat-doctor

Check AdvisoryAI chat quota and configuration status.

Synopsis

stella advise chat-doctor [options]

Options

OptionDescription
--format, -fOutput format: table, json.
--output, -oWrite output to file.
--tenantTenant context.
--userUser context.
--verbose, -vEnable verbose output.

Examples

# Check configuration status
stella advise chat-doctor

# JSON output
stella advise chat-doctor --format json

stella advise chat-settings

Manage AdvisoryAI chat settings and quotas.

Synopsis

stella advise chat-settings get [options]
stella advise chat-settings update [options]
stella advise chat-settings clear [options]

Get Options

OptionDescription
--scope, -sSettings scope: effective, user, tenant.
--format, -fOutput format: table, json.

Update Options

OptionDescription
--scope, -sSettings scope: user, tenant.
--requests-per-minuteSet requests per minute quota.
--requests-per-daySet requests per day quota.
--tokens-per-daySet tokens per day quota.
--tool-calls-per-daySet tool calls per day quota.
--allow-all-toolsAllow all tools (true/false).
--allowed-toolsSet allowed tools (comma-separated).

Examples

# View effective settings
stella advise chat-settings get

# View user-level settings
stella advise chat-settings get --scope user

# Update quotas
stella advise chat-settings update --requests-per-day 100

# Clear user overrides
stella advise chat-settings clear --scope user

Search AdvisoryAI Knowledge Search (AKS) across docs, API operations, and Doctor checks.

Synopsis

stella search "<query>" [options]

Options

OptionDescription
--typeResult type filter: docs, api, doctor (repeatable or comma-separated).
--productProduct filter.
--versionVersion filter.
--serviceService filter (especially for API operations).
--tagTag filter (repeatable or comma-separated).
--kTop result count (1..100).
--jsonEmit stable machine-readable payload.
--verbose, -vInclude debug scoring fields when available.

Examples

stella search "docker login fails with x509 unknown authority"
stella search "endpoint for agent registration token" --type api --json
stella search "OIDC readiness checks" --type doctor --k 20

stella doctor suggest

Use AKS to suggest Doctor checks, docs, and API references for a symptom string.

Synopsis

stella doctor suggest "<symptom-or-error>" [options]

Options

OptionDescription
--productProduct filter.
--versionVersion filter.
--kTop result count (1..100).
--jsonEmit stable machine-readable payload.
--verbose, -vInclude debug scoring fields when available.

Examples

stella doctor suggest "database unavailable and timeout expired"
stella doctor suggest "gateway returns 404 on known route" --json

stella advisoryai index rebuild

Local repo build and use of the Stella CLI

When working from this repository, do not assume stella is already installed on PATH. Use one of these local workflows first:

# Run the CLI directly from source
dotnet run --project "src/Cli/StellaOps.Cli/StellaOps.Cli.csproj" -- --help

# Publish a reusable local binary
dotnet publish "src/Cli/StellaOps.Cli/StellaOps.Cli.csproj" -c Release -o ".artifacts/stella-cli"

# Windows
.artifacts/stella-cli/StellaOps.Cli.exe --help

# Linux/macOS
./.artifacts/stella-cli/StellaOps.Cli --help

Related docs:

Rebuild the AdvisoryAI deterministic knowledge index from local markdown, OpenAPI specs, and Doctor metadata.

Local source-checkout note:

Synopsis

stella advisoryai index rebuild [--json] [--verbose]

Examples

stella advisoryai index rebuild
stella advisoryai index rebuild --json

stella advisoryai sources prepare

Generate deterministic AdvisoryAI Knowledge Search (AKS) source artifacts used by index rebuild. Doctor controls output is enriched from configured seed plus locally discovered Doctor checks (when Doctor engine services are available), providing fallback metadata for AdvisoryAI ingestion.

Requirements:

Synopsis

stella advisoryai sources prepare [options]

Options

OptionDescription
--repo-rootRepository root used to resolve source paths.
--docs-allowlistJSON allow-list for markdown source folders/files.
--docs-manifest-outputOutput path for resolved docs manifest JSON (with hashes).
--openapi-outputOutput path for aggregated OpenAPI JSON artifact.
--doctor-seedInput doctor seed JSON path.
--doctor-controls-outputOutput path for doctor controls projection JSON (controls + fallback metadata).
--overwriteOverwrite existing output files.
--jsonEmit stable machine-readable summary.

Examples

export STELLAOPS_BACKEND_URL="http://127.0.0.1:10451"
stella advisoryai sources prepare --json
stella advisoryai sources prepare --repo-root . --openapi-output devops/compose/openapi_current.json --overwrite