Concepts
Scope and limits
What AlertINT does, what it deliberately won't do, and its known weak spots.
The boundaries below are design decisions. Knowing them up front sets the right expectations.
Does and doesn't#
| AlertINT does | AlertINT doesn't |
|---|---|
| Read alerts, metrics, logs, errors, and changes | Change your infrastructure |
| Correlate, triage, and verify | Remediate, silence, or re-route alerts |
| Track each Situation to recovery, or say recovery is unconfirmed | Run scripts or runbooks |
| Post one message per Situation to Slack | Open tickets or page on-call tools |
| Send selected Situation changes to ntfy | Provide an on-call rota, acknowledgement or escalation policy |
| Serve context to your agent over MCP | Include a web UI (the self-hosted agent runs on config, MCP, and Slack) |
| Store your verdicts, notes, and expected-behaviour judgments in its own state | Write anywhere outside its own state |
Principles#
- Read-only toward your systems. Every connector only queries.
- Self-hosted. Alert data stays on your machine, except evidence and messages sent to configured LLM and notification services. ntfy.sh receives the selected message content; a self-hosted ntfy endpoint can keep that delivery inside your network. Use access-controlled topics.
- Fair Source. FSL-1.1-ALv2: free to use, modify, and self-host at any scale. Each release becomes Apache 2.0 two years after it ships. Paid tiers sit on top, never inside the engine: a hosted control plane for teams (fleet management, SSO/RBAC, audit retention), carrying metadata only.
Situation boundaries#
| Situations do | Situations don't |
|---|---|
| Group Incidents with the same group key into one episode, across restarts | Group Incidents with different group keys |
| Decide whether to investigate, and how urgent it is | Ask you questions on their own |
| Accept "this is expected" for one Situation, or a schedule for a proven Zabbix or Alertmanager rule | Infer schedules from webhook labels alone |
| Let "expected" lower urgency and change wording | Stop monitoring, investigation, or recovery tracking |
| Use advisory profiles to widen which checks run | Let a profile mark alerts firing or resolved, interrupt the channel, or post to Slack |
A Situation not yet assessed shows assessment: null over MCP, never a
placeholder.
Known weak spots#
| Problem | What to do |
|---|---|
Volatile grouping labels. A label like pod=web-68f9c-xk2pq in the group key creates one Incident per value. |
Group on stable labels (service, namespace, alertname) in your Alertmanager route or correlator.group_labels. |
Flapping inside the window. An alert that fires, resolves, and re-fires within the correlation window shows both firing and resolved in the evidence. |
Raise correlator.window_seconds past the flap cycle, or set Alertmanager's repeat_interval. |
| Confidence isn't calibrated. It's the model's own certainty: 0.9 doesn't mean 90% accurate. | Treat Findings as advisory. Review before acting. |
min_alerts above 1 skips lone alerts. A single alert gets no Finding. |
Keep the default 1; control noise with notify.slack.min_severity. |
| Automatic checks are bounded. Trends, comparisons, and custom PromQL are up to you or your agent. | Ask your agent for service-level queries (CPU, memory, latency, errors) around the window. |
| Escalations don't re-analyze. A recurring condition that gets worse is recorded, not re-triaged, while its Situation is open. | Watch recurred ×N; see Incident memory. |
Where it's heading#
Being explored:
- Pattern and slow-burn rollups (repeats over hours or days)
- More skills beyond acute triage
- Cost metering and budget caps
- SSO/RBAC and team fleet management (the hosted control plane)
- Pull-based Alertmanager reconciliation on startup
- A hosted option (planned, not available): we run and maintain the same engine for you, a small proxy in your network forwards alerts without firewall changes, and a web UI manages it
Remediation, if it ever lands, will require explicit operator approval.
Missing something? Open a feature request.