Getting started
Quickstart
Run the agent, fire a built-in drill, and read the Finding from your AI agent, in under 15 minutes.
Zero to a Finding in under 15 minutes. The drill needs nothing but the agent; real alerts come last.
| Step | You get |
|---|---|
| 1. Run the agent | AlertINT listening for alerts |
| 2. Fire a drill | A Situation with a Finding, end to end |
| 3. Connect an MCP client | Your AI agent reading it |
| 4. Point Alertmanager at the agent | Real alerts flowing in |
Prerequisites#
- Docker with Compose v2, or Go 1.26+ for the binary
- An LLM: an Anthropic API key, or a self-hosted endpoint (SGLang, vLLM, Ollama, LM Studio); see OpenAI-compatible endpoint
- An MCP client: Claude Code, Codex, Gemini CLI, Cursor, VS Code (GitHub Copilot), Windsurf, or any client with Streamable HTTP and custom headers
1. Run the agent#
On Kubernetes? Install the Helm chart, then continue at step 2.
Option A: Docker Compose#
AlertINT, Prometheus, and Alertmanager, already wired together:
git clone https://github.com/alertint/alertint-agent
cd alertint-agent
cp .env.example .env
# Edit .env: set the three ALERTINT_* tokens (any long random string;
# openssl rand -hex 32 works) and your LLM API key
docker compose -f docker/docker-compose.yaml --env-file .env up
Then go to step 2.
Option B: Binary#
go install github.com/alertint/alertint-agent/cmd/alertint@latest
# or download a binary from GitHub Releases
A minimal config.yaml; everything omitted has a default:
alertmanager:
webhook_token_env: ALERTINT_WEBHOOK_TOKEN
llm:
provider: anthropic # or openai-compatible
api_key_env: ANTHROPIC_API_KEY
changes:
ingress: # lets the drill plant its fake deploy
enabled: true
webhook_token_env: ALERTINT_CHANGES_WEBHOOK_TOKEN
Fields ending in _env name an environment variable; secrets never go in the
file. Export them and start:
export ALERTINT_WEBHOOK_TOKEN="$(openssl rand -hex 32)"
export ALERTINT_CHANGES_WEBHOOK_TOKEN="$(openssl rand -hex 32)"
export ALERTINT_MCP_TOKEN="$(openssl rand -hex 32)" # also turns the MCP server on
export ANTHROPIC_API_KEY="sk-ant-..." # skip for an unauthenticated local endpoint
alertint serve --config config.yaml
Save
ALERTINT_MCP_TOKENin your team's secret store. You and every teammate paste it into MCP clients (step 3), long after this shell is gone.
Every option: Configuration.
2. Fire a drill#
alertint drill --config config.yaml
On Docker Compose, run it inside the agent container:
docker compose -f docker/docker-compose.yaml exec agent /alertint drill --config /etc/alertint/config.yaml
What happens:
- It plants a fake deploy.
- It fires a burst of clearly fictional alerts.
- It waits out the correlation window.
- It prints the Finding, which names the planted deploy, and an MCP command for step 3.
Every drill surface is marked: the alertint_drill="true" label, a 🧪 DRILL
banner in Slack, and drill: true over MCP.
--scenario |
What it shows |
|---|---|
flagship (default) |
A fake deploy, then an error burst. The Finding names the deploy. |
db-outage |
A database cascade with no deploy. The Finding points at the database and treats the rest as symptoms. |
storm |
Debug logging fills every node's disk: 14 near-identical alerts become one Incident. |
Try next#
alertint drill --config config.yaml --scenario db-outage # no deploy: the Finding points at the database
alertint drill --config config.yaml --scenario storm # 14 alerts, one Incident
alertint drill --config config.yaml # repeat within the attach window: recurred ×N, no new triage
alertint drill --config config.yaml --fresh # a brand-new drill instead
alertint drill --config config.yaml --resolve # clear the alerts after the Finding: Confirming recovery, then Recovered
alertint drill --config config.yaml --resolve --resolve-wait # clear them when you press Enter (for demos)
alertint drill --config config.yaml --result <incident-id> # print a Finding again, fire nothing
alertint drill --config config.yaml --color=never # plain output for logs; NO_COLOR also works
On Docker Compose, add the same flags to the docker compose … exec command
above.
3. Connect an MCP client#
AlertINT serves MCP on port 9912; clients authenticate with
ALERTINT_MCP_TOKEN. Copy-paste setup for each client:
MCP clients.
Then paste the command the drill printed:
investigate incident
<id>using alertint
or ask:
List active AlertINT Situations and summarize the most critical one.
4. Point Alertmanager at the agent#
Add a receiver to alertmanager.yml (full example: examples/alertmanager.yml):
route:
receiver: alertint-agent
group_by: [alertname, cluster, namespace, service]
receivers:
- name: alertint-agent
webhook_configs:
- url: "http://<agent-host>:9911/webhook/alertmanager"
send_resolved: true
http_config:
authorization:
credentials_file: /etc/alertmanager/alertint_token
Reload Alertmanager. Every alert now reaches AlertINT, is grouped into a Situation, and gets a Finding when it warrants one.
Next steps#
| To | Read |
|---|---|
| Add live metrics (lifts the metadata-only confidence cap) | Prometheus |
| Run triage on your own hardware | OpenAI-compatible endpoint |
| Post Situations to Slack | Slack |
| Receive selected Situation changes on your phone | ntfy |
| Tune grouping and everything else | Configuration |
| Know what it will and won't do | Scope and limits |