Home / Stories / Slack commands
Story · Conversation Live

Ask in the channel. Get a draft MR, or a skip that sticks.

An engineer mentions the assistant in Slack about a workload that is misbehaving. It finds the manifests that describe it, works out a concrete change and answers in the same thread. When a proposal is not wanted, one line in Slack turns "no thanks" into a reviewed annotation in git, so the same suggestion does not come back next week.

Starts fromAn @mention or a direct message in Slack, in plain English.
Looks atThe manifests in your repositories that match the workload, namespace and repo you named.
You getA threaded reply, a draft MR with the usual gates, and a proposal ping in your proposals channel.
01 · Just ask

Mention the bot where the conversation already is.

No command syntax to learn. The engineer describes the problem the way they would to a colleague: the workload, the namespace, what they want looked at.

The assistant acknowledges within seconds, in the thread, so everyone in the channel can see it picked the request up.

02 · Understand the request

Pull out the names, not the adjectives.

The request is parsed with plain patterns, no extra model call: quoted names, phrases like deployment orders-api, namespace hints such as in namespace shop, and cluster or repository hints. Filler words ("keeps", "please", "can you") are dropped.

03 · Find what describes it

Search every repository it is allowed to read.

Manifests are matched on namespace first, then on name, kind and repository. The best matches become the context for the analysis.

A repository in context mode contributes what it knows but never receives an MR. Only repositories in full mode can get a proposal.

04 · Check the live state In development

Optionally, look at the cluster too, read-only.

When tool servers are configured, the analysis can walk live cluster state through a bounded tool loop: list the pods, read the last termination reason, check the reconcile status. Every tool is read-only and there is a hard ceiling on calls per request.

This path is built and opt-in; the default answers from the manifests in git.

05 · Same gates as everything else

A Slack request does not skip the checks.

Suggestions below the confidence floor are dropped. A proposal that already exists for the same repository is not opened twice. The diff goes through the same safety guard as scheduled scans: large removals are escalated to high risk and held for review.

06 · The answer, in the thread

What it found, what it proposes, how risky it is.

The reply lists each proposal with its category and risk. By default the draft MR is opened by the next scheduled submit rather than straight from Slack, so the reply says "draft MR pending review". Teams that want it immediately can switch on auto-submit.

If nothing matched, it says what it searched and suggests how to be more specific. It does not invent a change.

07 · The proposal ping

Every new MR is announced where your team looks.

When the draft MR is opened, a card lands in the proposals channel: repository, category, risk, which agent produced it, the first lines of the reasoning and a button to the MR. Alert-driven changes go to the alerts channel instead. High-risk proposals can mention a named group.

08 · "Not for this one"

Skip a proposal, and make the decision durable.

A different thread: the assistant proposed monitoring for a batch job the team is retiring. An allowlisted operator replies skip <MR> monitoring. The assistant builds a one-line change that adds a skip annotation to that resource and stores it as its own proposal. Once merged, that class of proposal stops for that resource, across every future run.

skip-all opts the resource out of everything. The same commands work as /skip comments on the MR itself.

09 · Two more things you can say

Corrections, and a review on request.

A message starting with feedback or wrong is recorded for the tuning pass and acknowledged. review <MR> asks the reviewer to look at any MR, including ones a human wrote In development.

The draft MR from the first thread is below.

# shop-oncall
M
maya 09:41
@gitops-assistant deployment orders-api in namespace shop keeps OOMKilling since the promo started, can you look at its memory limits?
G
gitops-assistant APP · 09:41
Analyzing your request…
request parsing · patterns only, no model call
  • deployment orders-api resource phrase
  • in namespace shop namespace hint
  • memory, limits, oomkilling keywords
  • keeps, since, started, can, you, look stopwords · dropped
  • no cluster or repo hint search all enabled repos
tool loop · read-only · 4 of max 10 calls
 list_workloads(namespace="shop")
  orders-api  3/3 ready  restarts 14 (6h)
 describe_object(pod orders-api-7c9f…)
  lastState.terminated.reason: OOMKilled
  limits.memory: 512Mi
 prometheus_query(max_over_time(working_set[7d]))
  peak 509Mi · p95 431Mi
 flux_reconcile_health(apps-shop)
  Ready · last applied 2d ago
no write verbs exist in this tool set
Suggestionraise memory limit
Confidence≥ floor ✓
Dedupno open twin ✓
Diff safetyrisk re-graded
proposal · stored as pending
title:    Raise orders-api memory limit 512Mi → 768Mi
category: resources   risk: low
source:   slack_command
diffs:    1 file, +2 −2
# shop-oncall · thread
M
maya 09:41
…can you look at its memory limits?
G
gitops-assistant APP · 09:43
✅ Analysis complete — 1 proposal(s) generated:
📊 🟢 Raise orders-api memory limit 512Mi → 768Mi (platform-prod) — draft MR pending review
M
maya 09:44
perfect, thanks 🙏
👀 2
# platform-proposals
G
gitops-assistant APP · 10:00
📊 New GitOps Proposal
Repositoryplatform-prod
CategoryResources
Risk🟢 Low
Sourceslack_command
Raise orders-api memory limit 512Mi → 768Mi
Seven-day peak working set is 509Mi against a 512Mi limit; 14 OOM restarts in 6h. Raises the limit to 768Mi and the request to 512Mi…
View Merge Request
opened by the next scheduled submit · draft, never auto-merged
# platform-proposals · thread
G
gitops-assistant APP
📋 New GitOps Proposal · Add ServiceMonitor for legacy-batch
J
jonas 10:12
@gitops-assistant skip platform-prod!57 monitoring — legacy-batch is being retired next quarter
G
gitops-assistant APP · 10:12
🔇 Skip recorded for platform-prod!57 — an annotation-add change adding monitoring to Deployment/legacy-batch is stored as proposal 3f2a…. The review gates then decide draft MR vs NEEDS_REVIEW.
apps/batch/legacy-batch/deployment.yaml
  metadata:
    name: legacy-batch
+   annotations:
+     gitops-assistant/skip: monitoring
direct message · gitops-assistant
M
maya
wrong: the probe proposals keep ignoring that our sidecar serves /healthz on 8081
G
gitops-assistant APP
Feedback recorded. It will be reviewed in the next tuning run.
in development
J
jonas
review platform-prod!61
G
gitops-assistant APP
Review posted on platform-prod!61: approve, quality 88/100, 1 concern.
Open review

The merge request the thread produced.

Illustrative: names and numbers are invented. A Slack-originated proposal is a normal draft MR, with the same labels and gates as one from a scheduled scan, and it carries the original request as evidence.

Draft

Raise orders-api memory limit 512Mi → 768Mi

from gitops-ai/raise-orders-api-memory-limit into main · 1 file · +2 −2
category:resourcessource:slack_commandrisk:lowxrev::LGTM
OverviewEvidenceChangesRequest
Summary

Requested in Slack: "deployment orders-api in namespace shop keeps OOMKilling since the promo started, can you look at its memory limits?"

Raises orders-api's memory limit from 512Mi to 768Mi and its request from 384Mi to 512Mi, so the scheduler reserves what the pod actually uses at peak.

Risk

Low. Resource-only change to one Deployment; no selector, port or image change. Three replicas roll one at a time.

After merge, expect
  • A rolling restart of orders-api, three pods.
  • No new OOMKilled terminations over the next 24 hours.
SignalValue
Memory limit (git)512Mi
Peak working set, 7 days509Mi
p95 working set, 7 days431Mi
Restarts, last 6 hours14, all OOMKilled

Matched manifests: apps/shop/orders-api/deployment.yaml (changed), hpa.yaml and the chart values in app-repo (context only, not modified).

        resources:
          requests:
            cpu: 250m
-           memory: 384Mi
+           memory: 512Mi
          limits:
-           memory: 512Mi
+           memory: 768Mi
Evidence
On-demand Slack request: deployment orders-api in namespace shop keeps OOMKilling since the promo started, can you look at its memory limits?

Not wanted? Comment /skip on this MR, or skip <MR> in Slack, and the assistant prepares a skip annotation for this Deployment instead.

R
independent reviewer second opinion, no pipeline context

Diff touches only the resources block of one Deployment. The new request fits under the seven-day peak with headroom, and the limit is not below the request. LGTM.

What keeps it honest.

A chat interface makes it easy to ask for things. These are the rules that keep that from becoming a way around review.

Draft MRs onlyA Slack request never changes the cluster and never merges anything. It produces a draft MR that someone on your team reviews like any other.
Same gates, same risk gradingConfidence floor, duplicate check and the diff safety guard all apply. A diff that removes most of a file is escalated to high risk and held for review.
Skips are an allowlistOnly people on the trigger allowlist can skip. Anyone else gets a polite refusal naming the setting an admin would change.
Skips live in gitA skip becomes a one-line annotation MR, so the decision is reviewable, visible in the manifest and survives a database reset. Repeating the command in the same thread does nothing twice.
Context repos stay read-onlyRepositories you mark as context inform the answer but can never be the target of an MR.
Says when it found nothingNo match means a reply explaining what it searched, not a guessed change.

Where this stands.

Live
  • @mention and DM requests, answered in thread
  • Proposal pings in the proposals and alerts channels
  • skip / skip-all from Slack, and /skip on MRs
  • feedback / wrong corrections recorded for tuning
In development
  • Read-only live cluster checks during a Slack request (built, opt-in)
  • review <MR> from Slack, via the on-demand reviewer
Roadmap
  • Standing instructions given in chat or on MRs ("never propose X in this repo") surfaced as candidates for your POLICY.md
← Previous storyCluster state & Flux failures