Skip to content

lookout triage changes

What changed around one workload in the window before onset — rollouts, config/secret updates, rescales, node ops — chronological, scoped to the target’s graph neighborhood; full fidelity from a sentinel store, best-effort live otherwise.

MCP tool: k8s_recent_changes

Terminal window
lookout triage changes <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.

FlagTypeDefaultMeaning
--depthint2neighborhood radius: graph edges followed per direction to decide which objects’ changes are in scope
FlagTypeDefaultMeaning
--namespacestring—limit the scan to one namespace
-Abool—scan all namespaces
--workloadstring—target one workload as <Kind>/<namespace>/<name>, e.g. Deployment/prod/api
--sinceduration—how far back to look (0 = command default)
--formatstringlogfmtoutput format: logfmt|json (one record per line either way)
--timeoutduration10sabort the invocation after this long (exit 1)
--kubeconfigstring—path to a kubeconfig file, instead of $KUBECONFIG / ~/.kube/config
--contextstring—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
--exemptionsstring—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:

FlagTypeDefaultMeaning
--atstring—answer as of this instant instead of live: RFC3339 (2026-07-25T10:00:00Z) or a duration ago (20m). Requires —store.
--storestring—path to a sentinel’s SQLite store (its —store file); source for —at point-in-time topology
--store-clusterstring—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

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.

KindSeverityClaim
change.rolloutinfoa workload’s pod template changed — a new image, container or mount, or a controller churn event
change.scaleinfoa workload’s replica count changed
change.configinfoa ConfigMap in the neighborhood changed
change.secretinfoa Secret in the neighborhood changed (names and shortened hashes only, never values —)
change.nodeinfoa Node in the neighborhood changed
change.labelinfoonly labels changed on a neighborhood object — enough to move it in or out of a selector
change.topologyinfoa neighborhood object appeared, disappeared, or changed in a way none of the other classes name

Beyond the shared envelope fields (kind, severity, namespace, kind_of_object, name, reason, message, fingerprint, exempt_reason, exempt_expires):

FieldMeaning
atwhen the change happened, RFC 3339 (also the summary-line note for the resolved —at instant)
relationthe changed object’s place in the target’s neighborhood: self (the target or its pods), upstream, lateral, downstream
fieldschanged fields as path=from→to pairs — names, counts, and shortened hashes only, never values
originwhere the change was seen: log (delta log), event (Kubernetes Event), api (reconstructed from current API state)
revisiondeployment.kubernetes.io/revision of a rollout’s ReplicaSet (live approximation)
imagefirst container image of a rollout’s new pod template (live approximation)
windowsummary-line note: the (from, to] window the answer covers, RFC 3339
sourcesummary-line note: history (delta log from —store) or live-approximation (no store; see the fidelity gap in —help)

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= findings= elapsed= — findings=0 with a summary present means “scanned and healthy”; a stream without a summary line is void. Exit 0 data, 1 runtime error (diagnostics on stderr only), 2 usage.

Terminal window
lookout triage changes Deployment/prod/api --store=/var/lib/lookout/lookout.db
lookout triage changes Deployment/prod/api --since=1h --at=2026-07-25T10:00:00Z --store=/var/lib/lookout/lookout.db
lookout triage changes payments-api-7d9c4b-x2n8p --namespace=prod