lookout triage radius
Blast radius of one pod/workload — who is upstream (routes/owns/governs it), lateral (same node, shared config/volume), downstream (it depends on); —at answers it as of incident onset from a sentinel store.
MCP tool: k8s_blast_radius
lookout triage radius <Kind>/[<namespace>/]<name> [flags]<Kind>/[<namespace>/]<name> — the pod or workload at the center of the question: <Kind>/<namespace>/<name>, <Kind>/<name> (namespace from —namespace, else “default”), or a bare pod name; kinds are case-insensitive with the usual short forms (po, deploy, rs, sts, ds, cj). —workload=<Kind>/<ns>/<name> is the flag-shaped alternative.
| Flag | Type | Default | Meaning |
|---|---|---|---|
--depth | int | 3 | graph edges followed per direction from the target’s pods |
Common flags (every lookout command)
Section titled “Common flags (every lookout command)”| Flag | Type | Default | Meaning |
|---|---|---|---|
--namespace | string | — | limit the scan to one namespace |
-A | bool | — | scan all namespaces |
--workload | string | — | target one workload as <Kind>/<namespace>/<name>, e.g. Deployment/prod/api |
--since | duration | — | how far back to look (0 = command default) |
--format | string | logfmt | output format: logfmt|json (one record per line either way) |
--timeout | duration | 10s | abort the invocation after this long (exit 1) |
--kubeconfig | string | — | path to a kubeconfig file, instead of $KUBECONFIG / ~/.kube/config |
--context | string | — | kubeconfig context to read, instead of its current-context. Selects a cluster for THIS invocation only — nothing is written back — so concurrent invocations can target different clusters. Reported as context=<name> in the summary line |
--exemptions | string | — | path to a git-reviewed exemption file (YAML); covered findings are ANNOTATED with their reason and expiry and counted as exempt=<n> in the summary, never dropped |
Point-in-time flags (graph-backed commands)
Section titled “Point-in-time flags (graph-backed commands)”This command answers from the topology graph and accepts the point-in-time flags:
| Flag | Type | Default | Meaning |
|---|---|---|---|
--at | string | — | answer as of this instant instead of live: RFC3339 (2026-07-25T10:00:00Z) or a duration ago (20m). Requires —store. |
--store | string | — | path to a sentinel’s SQLite store (its —store file); source for —at point-in-time topology |
--store-cluster | string | — | read/write the store for THIS cluster, treating —store as the multi-cluster stem the sentinel was given: —store=/var/lib/lookout/lookout.db —store-cluster=prod-us opens /var/lib/lookout/lookout-prod-us.db (issue #410). Set it only against a sentinel running —clusters/—clusters-from; a single-cluster sentinel writes the literal —store path |
Finding kinds
Section titled “Finding kinds”Every kind= this command can emit, and the severities it carries them at. Nothing else appears in its output; a kind absent from a run means the check looked and found nothing. See the finding-kind glossary for the whole vocabulary.
| Kind | Severity | Claim |
|---|---|---|
radius.neighbor | info | one object in the target’s neighborhood, with its direction, relation, and hop distance — an enumeration of impact, not a defect |
radius.missing | warning | a neighbor the graph references but never observed, in a kind the snapshot does watch: the reference is dangling |
Output fields
Section titled “Output fields”Beyond the shared envelope fields (kind, severity, namespace, kind_of_object, name, reason, message, fingerprint, exempt_reason, exempt_expires):
| Field | Meaning |
|---|---|
direction | neighbor’s direction from the target: upstream (routes/owns/governs it), lateral (shares a node/volume/config), downstream (the target points at it) |
relation | how the neighbor attaches: the edge kind (RoutesTo, Owns, Selects, Governs, RunsOn, Mounts) for upstream/downstream, shared-node|shared-zone|shared-config|shared-secret|shared-pvc for lateral |
hop | BFS depth from the target at which the neighbor was first reached (1 = direct edge) |
shared | on lateral neighbors: the shared object as <Kind>/<name> |
ready | pod readiness (live mode only — history stores topology, not status) |
source | summary-line note: live (one-shot List pass) or history (reconstructed from —store) |
at | summary-line note: the resolved —at instant the history answer is as of, RFC 3339 |
Output contract
Section titled “Output contract”Output: one finding per line (logfmt; —format=json for one JSON object
per line), keys in fixed order; healthy resources emit nothing. The final
line is always the summary: scanned=
Examples
Section titled “Examples”lookout triage radius Deployment/prod/apilookout triage radius payments-api-7d9c4b-x2n8p --namespace=prodlookout triage radius --workload=StatefulSet/db/postgres --depth=2lookout triage radius Deployment/prod/api --at=20m --store=/var/lib/lookout/lookout.db