01 · The alert comes in
From wherever your alerts already live.
Every 15 minutes the assistant collects alerts from PagerDuty and Alertmanager (what is firing right now, with silences). It also reads Prometheus alert history, which catches alerts that flap faster than a page.
The assistant handles each alert once. If the same rule fires on twenty filesystems, the assistant merges them into one "this is widespread" case. It does not run twenty investigations.
02 · Find what it is about
From alert labels to a file in git.
The assistant resolves the alert's target (kind, namespace, name) from its labels. Before the investigation starts, it fetches a snapshot of the live object and its git manifest. If the alert body is thin, it reads the rule definition itself.
If no tracked repository declares the workload, the outcome is already known: an issue, never an edit to an unrelated file.
03 · Look at the pod
Describe, restart history, events.
The investigation is a loop of read-only tool calls against the
cluster. The pod's last state says OOMKilled (the system stopped it for using too much memory), exit code 137, seven restarts. Events confirm the pattern of back-off, restart, back-off.
The cluster identity behind these tools can read. It cannot change
anything.
04 · Check the history
A range query shows the shape of the problem.
Over the last two days, the memory working set climbs every night during the catalogue reload. It touches the 512 MiB limit, and then the system kills the container. Daytime use is well below.
That is not a leak (it drops back each time) and not random. It is
a known peak that no longer fits.
05 · Read the logs, if allowed
The previous container's last lines.
Where you have enabled log access for a cluster, the assistant reads
a short tail of the previous container, the one that died. Here the last line before the kill shows the catalogue reload. The reload has a much larger item count than a year ago.
Without log access it does not guess. It says what it could not
see and hands you the command to look.
06 · The deciding question
Could a manifest change have prevented this?
Root cause: the catalogue grew, so the reload's peak outgrew a memory limit that someone set long ago. A limit is a manifest value, so the answer is
yes, and the output is a draft MR.
Suppose the cause is outside git: a node problem, a workload in a repository you do not track, or a bug that needs a code change. Then the answer is no. The assistant does not allow speculative "bump it just in case" fixes.
07 · Gates before it ships
Right workload, right kind of fix, real numbers.
Before anyone sees the drafted fix, rule-based checks run on it. These checks are code, not an AI model (LLM):
- it edits the workload that alerted, not a similarly named one,
- the kind of change can address this class of alert (memory for an OOM, not a probe tweak),
- the file is actually applied by Flux, not an orphan,
- new memory values go through the same measured-usage clamps as right-sizing.
If a check fails, the assistant holds the fix for human review and names the reason.
08 · Two possible outcomes
An MR when git can fix it. An issue when it cannot.
The MR carries the alert, the evidence trail and the reasoning. The
issue carries what was observed, the copy-paste commands to finish
the diagnosis, and the likely fix for each outcome.
The loop does not end at the proposal. The assistant closes an issue with a note when its alert stays quiet for long enough. If a merged fix does not stop its alert, the assistant escalates and links back to the MR.