stella reachability — Command Guide

Current CLI status (2026-07-29): this guide describes a planned query workflow, not the command tree shipped at HEAD. upload-callgraph and list are not registered under stella reachability. The discoverable explain, witness, and guards verbs have no authoritative query client and fail closed with exit code 9, emitting no result. Implemented paths are show --input, export --input --output, and Scanner-backed trace --scan-id. Use stella reachability --help as the executable source of truth.

Overview

The stella reachability command group uploads call graphs and queries reachability analyses, letting you assess whether a vulnerability is actually exploitable in your code rather than merely present.

Audience: security engineers and developers triaging findings, and CI authors who want to feed reachability signals into policy gates.

Typical flow:

  1. Generate a call graph locally (optional): stella scan graph ...
  2. Upload the call graph: stella reachability upload-callgraph ...
  3. List analyses: stella reachability list ...
  4. Explain reachability: stella reachability explain ...

Notes:

Generate a call graph (stella scan graph)

stella scan graph extracts a call graph from source code using a language-specific extractor:

Examples:

# .NET solution
stella scan graph \
  --lang dotnet \
  --target . \
  --sln ./MySolution.sln \
  --output ./callgraph.json

# Node.js project (writes JSON to stdout)
stella scan graph \
  --lang node \
  --target ./service \
  --format json > ./callgraph.json

Supported stella scan graph output formats:

If you generate call graphs with other tooling, uploads support json, proto, and dot formats (or auto detection).

Commands

upload-callgraph

Upload a call graph for reachability analysis.

stella reachability upload-callgraph \
  --path ./callgraph.json \
  --scan-id scan-12345 \
  --tenant acme \
  --format auto

Options:

FlagDescription
--path, -pPath to the call graph file (required).
--scan-idScan identifier to associate with the call graph.
--asset-id, -aAsset identifier to associate with the call graph.
--format, -fauto (default), json, proto, dot.
--tenant, -tTenant identifier (recommended in multi-tenant envs).
--jsonEmit raw JSON payload instead of formatted output.

Required: at least one of --scan-id or --asset-id.

list

List reachability analyses.

stella reachability list \
  --scan-id scan-12345 \
  --status completed \
  --limit 20 \
  --json

Options:

FlagDescription
--scan-idFilter by scan identifier.
--asset-id, -aFilter by asset identifier.
--statusFilter by status (pending, processing, completed, failed).
--limit, -lMaximum number of results (default 100).
--offset, -oPagination offset.
--tenant, -tTenant identifier.
--jsonEmit raw JSON payload.

explain

Explain reachability for a vulnerability ID or a package PURL.

stella reachability explain \
  --analysis-id RA-abc123 \
  --vuln-id CVE-2024-1234 \
  --call-paths

Options:

FlagDescription
--analysis-id, -iAnalysis identifier (required).
--vuln-id, -vVulnerability identifier to explain.
--purlPackage URL to explain.
--call-pathsInclude detailed call paths in the explanation.
--tenant, -tTenant identifier.
--jsonEmit raw JSON payload.

Required: at least one of --vuln-id or --purl.

Policy simulation integration

Reachability overrides can be applied during policy simulation:

stella policy simulate P-7 \
  --reachability-state "CVE-2024-1234:unreachable" \
  --reachability-state "pkg:npm/lodash@4.17.21:reachable" \
  --reachability-score "CVE-2024-5678:0.25"

Override formats:

Identifier types:

Reachability states

StateMeaning
reachableVulnerable code is reachable from entry points.
unreachableVulnerable code is not reachable.
unknownInsufficient data to decide.
indeterminateInconclusive (dynamic dispatch/reflection/etc).

Exit codes

CodeMeaning
0Success.
1Command failed.
4Input validation error.
130Operation cancelled.

See also