prometheus/alertmanager
Prometheus Alertmanager
Healthy across the board
Permissive license, no critical CVEs, actively maintained — safe to depend on.
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
No critical CVEs, sane security posture — runnable as-is.
- ✓Last commit 2d ago
- ✓18 active contributors
- ✓Distributed ownership (top contributor 38% of recent commits)
- ✓Apache-2.0 licensed
- ✓CI configured
- ✓Tests present
Computed from maintenance signals — commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Healthy" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/prometheus/alertmanager)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card
This card auto-renders when someone shares https://repopilot.app/r/prometheus/alertmanager on X, Slack, or LinkedIn.
Ask AI about prometheus/alertmanager
Grounded in the actual source code. Pick a starter question or write your own.
Onboarding doc
Onboarding: prometheus/alertmanager
Generated by RepoPilot · 2026-06-24 · Source
🎯Verdict
GO — Healthy across the board
- Last commit 2d ago
- 18 active contributors
- Distributed ownership (top contributor 38% of recent commits)
- Apache-2.0 licensed
- CI configured
- Tests present
<sub>Computed from maintenance signals — commit recency, contributor breadth, bus factor, license, CI, tests</sub>
⚡TL;DR
Prometheus Alertmanager is a sophisticated alert aggregation and routing system that deduplicates, groups, and dispatches alerts from Prometheus and other monitoring systems to multiple receiver integrations (email, PagerDuty, OpsGenie, webhooks, etc.). It provides advanced alert lifecycle management including silencing, inhibition, and stateful tracking, handling the complex operational problem of reducing alert noise while ensuring critical issues reach the right teams. Monolithic project with clear domain separation: alert/ contains core alert model and state machine, api/ houses REST/HTTP handlers split between v1 (deprecated) and v2 (openapi-generated clients), config/ handles YAML parsing, dispatch/ manages routing logic, and notifier/ contains concrete integrations (SMTP, AWS SNS, webhook). UI is separate (Elm + TypeScript in ui/) compiled into the binary. All binaries (alertmanager, amtool) share core packages via cmd/ entries.
👥Who it's for
Site reliability engineers and ops teams running Prometheus-based monitoring infrastructure who need to manage alert fatigue through intelligent grouping and routing; also developers building Prometheus-compatible monitoring tools who need a production-grade alert dispatcher.
🌱Maturity & risk
Highly mature and production-ready. Alertmanager is a core Prometheus project (under prometheus/ org) with comprehensive test coverage (alert_test.go, api/v2/api_test.go), multiple GitHub Actions CI/CD workflows (ci.yml, release.yml), and active maintenance evidenced by Go 1.25.0 support and recent dependency updates (awssdk-go-v2, opentelemetry integrations). Used across enterprise deployments globally.
Low risk for core functionality but moderate operational complexity. Has 30+ production dependencies including AWS SDK, OpenTelemetry, and gRPC with complex version constraints. Primary risk is Alertmanager's own config file format (YAML) complexity and the need to understand label matching, routing trees, and receiver integrations; breaking changes in config schema occasionally occur (see v1_deprecation_router.go). Single configuration file is a bottleneck for large multi-team deployments.
Active areas of work
Active OpenTelemetry instrumentation integration (otel 1.43.0), AWS SNS receiver support expansion (aws-sdk-go-v2), and Go dependency modernization (moving to newer minor versions). GitHub Actions workflows show active mixin generation for Grafana dashboards and container publishing. The v2 API is stable with generated client code in api/v2/client/.
🚀Get running
git clone https://github.com/prometheus/alertmanager.git
cd alertmanager
make build
./alertmanager --config.file=examples/simple.yml
For amtool CLI only: make build BINARIES=amtool. Requires Go 1.25.0+. UI rebuild requires Node.js (see .nvmrc). Access Alertmanager at http://localhost:9093.
Daily commands:
Development: make build compiles both alertmanager and amtool binaries to ./alertmanager and ./amtool. Local run: ./alertmanager --config.file=<config.yml> starts on port 9093. Docker: docker run -p 9093:9093 quay.io/prometheus/alertmanager. UI dev: cd to ui/, npm install, npm start (rebuilds Elm on changes). Tests: make test or go test ./... runs full suite.
🗺️Map of the codebase
cmd/alertmanager/main.go— Entry point for the alertmanager binary; defines CLI flags, configuration loading, and service initialization—every contributor must understand the startup flow.config/config.go— Core configuration parsing and validation for alertmanager routing, receivers, and inhibition rules—fundamental to how all alerts are processed.dispatch/dispatch.go— Alert routing and grouping engine that determines which alerts go to which receivers—the heart of alert processing logic.api/v2/api.go— REST API v2 handler setup and alert/silence endpoint definitions—critical for external integrations with alertmanager.alert/alert.go— Core Alert struct and lifecycle management including validation, state tracking, and status—the fundamental data model.notifier/notifier.go— Receiver integration abstraction and notification delivery orchestration—bridges grouped alerts to external systems.silencer/silence.go— Silence rule matching and alert suppression logic—critical for user-driven alert filtering.
🛠️How to make changes
Add a new REST API endpoint
- Define the API model (request/response structs) in api/v2/models/ (
api/v2/models/custom_model.go) - Update api/v2/openapi.yaml with endpoint schema and operation definitions (
api/v2/openapi.yaml) - Implement handler in api/v2/restapi/operations/ or extend api/v2/api.go (
api/v2/api.go) - Add integration tests to verify request/response marshaling and business logic (
api/v2/api_test.go)
Add a new notification receiver type
- Create receiver implementation in notify/ package following the Notifier interface (
notify/custom_receiver.go) - Register receiver in notifier factory/switch statement (
notifier/notifier.go) - Add configuration struct in config/ for the receiver type settings (
config/config.go) - Write tests for send logic and config validation (
notify/custom_receiver_test.go) - Update documentation and add example config to README or docs/ (
README.md)
Modify alert routing or grouping logic
- Update routing rules or grouping key calculation in dispatch/dispatch.go (
dispatch/dispatch.go) - Adjust alert matcher or label manipulation if needed (
config/config.go) - Add tests covering new routing scenarios and edge cases (
dispatch/dispatch_test.go) - Update any affected API models if response structure changes (
api/v2/models/alert_group.go)
Add a new alert filtering or suppression rule (silence/inhibit)
- Extend matcher logic or rule structures in config/config.go (
config/config.go) - Implement matching algorithm in silencer/silence.go or inhibit/inhibit.go (
silencer/silence.go) - Add configuration validation in alert/validate.go (
alert/validate.go) - Create comprehensive unit tests for matcher evaluation (
silencer/silence_test.go)
🔧Why these technologies
- Go 1.25 — Compiled language with strong concurrency primitives (goroutines, channels) needed for handling thousands of concurrent alerts; low memory footprint critical for edge/on-prem deployments.
- kingpin/v2 CLI — Declarative CLI flag parsing with sane defaults; widely used in Prometheus ecosystem for consistency.
- OpenAPI 3.0 / Swagger — Formal API contract definition enabling client code generation and compatibility testing across versions.
- AWS SDK v2 (SNS, STS) — Native support for AWS notification channels (SNS) and credential management without third-party dependencies.
- go-smtp / emersion/go-smtp — Native SMTP implementation for email receiver without bloated mail server dependencies.
⚖️Trade-offs already made
-
Synchronous alert processing with in-memory grouping
- Why: Simplifies consistency guarantees and avoids distributed state; alerts must be grouped and routed immediately.
- Consequence: Single alertmanager instance is a bottleneck for very large deployments; horizontal scaling requires clustering setup.
-
Declarative YAML configuration (not dynamic API-driven config)
- Why: Config-as-code approach with version control compatibility; static analysis and tooling friendliness.
- Consequence: Requires reload or restart to apply routing/receiver changes; no hot-reload of core rules (silence can be dynamic via API).
-
Multiple receiver integrations baked into main binary
- Why: Zero external dependency management and single deployment artifact; tight integration with notifier interface.
- Consequence: Large binary size (~100MB+); adding new receiver requires main codebase change (no plugin architecture).
-
Silences stored in-memory with optional persistence
- Why: Fast lookups for high-throughput alert filtering; silences are typically short-lived.
- Consequence: Silences lost on restart unless explicit persistence backend configured; not suitable for immutable audit logs.
🚫Non-goals (don't propose these)
- Does not authenticate or authorize end users (delegates to reverse proxy or external auth).
- Does not generate or predict alerts (only processes alerts from Prometheus or external sources).
- Not a message queue or event streaming system (alerts are processed synchronously, not persisted as event log).
- Does not provide alert visualization or graphical UI (API-only; UI is external project/community-maintained).
- Not a metrics database (does not store time-series data; only handles alert event lifecycle).
- Does not perform log aggregation or structured logging of alerts (audit trail is optional/external).
🪤Traps & gotchas
- Config file format is strict: YAML schema validation happens at startup (config/config.go); typos fail silently on certain fields. Use
amtool config routesto validate. 2. Receiver integrations require explicit setup: Email needs SMTP smarthost, SNS needs AWS credentials, PagerDuty needs integration key—missing any causes silent delivery failure. 3. Clustering requires network: In HA mode (cluster/ flag), alertmanager uses port 6783-6784 UDP/TCP for gossip; firewall misconfig silently prevents state sync. 4. Template rendering is Go text/template: Custom notification templates use Go syntax (not Jinja2); syntax errors in receiver.group_by_str fail during grouping, not config parse. 5. Silence API requires UTC timestamps: /api/v2/silences expects RFC3339 with explicit Z or ±HH:MM timezone; relative times not supported. 6. Alert deduplication uses all labels: Two alerts with identical alert name, labels, and annotations are treated as same alert even if source differs; no dedup key option.
🏗️Architecture
💡Concepts to learn
- Alert deduplication and grouping — Alertmanager's core value proposition—understanding how identical alerts merge and how group_by labels control notification batching is essential to avoiding alert fatigue in production
- Alert routing tree (route hierarchy) — The nested YAML route{ } config structure with matchers, receivers, and continue flags acts as a decision tree; misunderstanding it leads to alerts going to wrong teams or being silenced unexpectedly
- Silence inhibition pattern — Silences suppress notifications temporarily by label match; inhibition rules suppress alerts when other alerts exist—Alertmanager combines both for sophisticated alert suppression workflows
- Gossip protocol (memberlist) — HA Alertmanager instances use UDP gossip via hashicorp/memberlist to replicate silences and inhibition state; network issues silently break cluster consensus, requiring understanding of gossip semantics
- Template rendering with Go text/template — Alertmanager uses Go's standard text/template (not Jinja2 or Handlebars) for notification body generation; bugs in templates cause malformed alerts to receivers
- State machine (alert lifecycle) — Alerts progress through states (Unprocessed → Firing → Resolved/Suppressed) with timing windows managed by alert/state.go; state transitions trigger notification delivery decisions
- Receiver integration pattern (webhook + AMQP) — Alertmanager's extensibility relies on webhooks for generic integrations and AMQP/email for specific ones; understanding the Notifier interface and message format is key to adding custom receivers
🔗Related repos
prometheus/prometheus— Sends alerts to Alertmanager; tight integration as the canonical alert source in the Prometheus ecosystemprometheus/node_exporter— Commonly used metrics source that feeds Prometheus alerting rules; understanding its label format helps with alert routing rulesgrafana/cortex— Multi-tenant metrics platform with embedded alert routing; alternative alert dispatcher backend for distributed setupsprometheus-operator/prometheus-operator— Kubernetes-native operator that automatically configures Alertmanager instances and route rules via CRDs; standard way to deploy Alertmanager in K8smattermost/mattermost-plugin-alertmanager-bridge— Community receiver integration example showing how third-party systems hook into Alertmanager's webhook interface
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add comprehensive integration tests for api/v2 client methods
The api/v2/client directory contains auto-generated client code for alert, alertgroup, silence, receiver, and general endpoints, but api/v2/api_test.go appears to be the only test file. New contributors could add integration tests covering edge cases for each client module (GetAlerts, PostAlerts, DeleteSilence, GetSilences, etc.) to improve reliability and catch regressions early. This is high-value because the API is customer-facing and these clients are critical.
- [ ] Review existing api/v2/api_test.go to understand test patterns
- [ ] Create api/v2/client/alert/alert_client_test.go with tests for get_alerts and post_alerts
- [ ] Create api/v2/client/silence/silence_client_test.go testing delete, get single, and get multiple silences
- [ ] Create api/v2/client/alertgroup/alertgroup_client_test.go for alert grouping scenarios
- [ ] Add tests covering error responses, pagination, and filter parameters where applicable
- [ ] Ensure tests are run in CI by checking .github/workflows/ci.yml
Add validation tests for alert/validate.go covering complex routing and grouping rules
alert/validate.go and alert/validate_test.go exist, but given the complexity of Alertmanager's configuration (routing, grouping, receiver matching), the test coverage likely has gaps. New contributors could add tests for edge cases in configuration validation like circular route definitions, invalid label matchers, malformed receiver names, and conflicting inhibition rules. This prevents misconfigurations in production.
- [ ] Review alert/validate.go and alert/validate_test.go to identify untested validation paths
- [ ] Add tests for invalid route hierarchies and circular dependencies
- [ ] Add tests for malformed label matchers in routing rules
- [ ] Add tests for receiver configuration edge cases (missing required fields, invalid integrations)
- [ ] Add tests for inhibition rule conflicts and self-referential rules
- [ ] Run tests locally with
make testand verify coverage
Add UI-level E2E tests for silence creation and alert grouping workflows in .github/workflows/ui-ci.yml
The repo has .github/workflows/ui-ci.yml but it likely only runs linting/build checks. Critical user workflows like creating silences via the UI, filtering alerts by labels, and viewing alert groups are not covered. New contributors could add Playwright/Cypress E2E tests that validate the UI against a running Alertmanager instance, ensuring the frontend and backend integration works correctly.
- [ ] Review .github/workflows/ui-ci.yml to understand the current UI CI setup
- [ ] Choose E2E testing framework (Playwright or Cypress) and verify Node.js version in .nvmrc
- [ ] Create ui/e2e/silences.spec.ts testing silence creation, editing, and expiration UI flows
- [ ] Create ui/e2e/alerts.spec.ts testing alert viewing, grouping, and label filtering
- [ ] Create ui/e2e/receivers.spec.ts testing receiver configuration visibility
- [ ] Update .github/workflows/ui-ci.yml to run E2E tests against a containerized Alertmanager instance
🌿Good first issues
- Add unit tests for alert/validate.go: The validate.go file exists but has minimal test coverage (validate_test.go is sparse). Adding tests for edge cases in alert validation (missing labels, malformed matchers, regex compilation) would improve reliability and serve as good codebase introduction.
- Improve amtool documentation/examples: The amtool CLI (cmd/amtool/) has numerous subcommands but examples/ directory lacks comprehensive walkthroughs. Create example shell scripts showing silence creation via API, querying alerts with label matchers, and config template validation.
- Add integration test for receiver fallback/retry logic: notifier/ package has multiple retry mechanisms (cenkalti/backoff) but no end-to-end tests showing behavior when receivers are temporarily unreachable. Write test harness using httptest to verify backoff and queue behavior under failure conditions.
⭐Top contributors
Click to expand
Top contributors
- @dependabot[bot] — 38 commits
- @SoloJacobs — 19 commits
- @TheMeier — 17 commits
- @prombot — 6 commits
- @ultrotter — 4 commits
📝Recent commits
Click to expand
Recent commits
c85e06d— build(deps): bump @tanstack/react-query in /ui/mantine-ui (#5219) (dependabot[bot])34747c8— build(deps-dev): bump @types/node in /ui/mantine-ui (#5220) (dependabot[bot])75e3061— refactor(eventrecorder): rename EventRecorderConfig/Output and introduce output-type constants (#5190) (eyazici90)37a2d54— build(deps-dev): bump the styles group across 1 directory with 2 updates (#5218) (dependabot[bot])a03bf81— build(deps-dev): bump vite (#5217) (dependabot[bot])9cba62f— build(deps): bump the react group across 1 directory with 3 updates (#5214) (dependabot[bot])25828ef— build(deps-dev): bump the testing group in /ui/mantine-ui with 2 updates (#5215) (dependabot[bot])5f02788— build(deps): bump the mantine group in /ui/mantine-ui with 3 updates (#5213) (dependabot[bot])09a1d17— build(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 (#5212) (dependabot[bot])d68cdc1— build(deps): bump actions/setup-node from 6.3.0 to 6.4.0 (#5211) (dependabot[bot])
🔒Security observations
The Prometheus Alertmanager codebase demonstrates good security practices including non-root container execution, proper file permissions, and security reporting guidelines. However, there are concerns regarding the invalid/incomplete Go version specification in go.mod, incomplete dependency listing, use of 'latest' tag for base Docker image, and missing health checks. The presence of govulncheck in the CI workflow is a positive sign for vulnerability scanning. Address the Go version mismatch and Docker image versioning immediately, and implement additional container security hardening measures.
- High · Outdated Go Version —
go.mod. The go.mod specifies 'go 1.25.0' which appears to be a future/invalid version. Go 1.25 does not exist yet (as of knowledge cutoff). This may indicate a configuration error or use of an unreleased/unstable Go version, which could introduce security and stability issues. Fix: Update to a stable, currently supported Go version (1.21 or later, preferably 1.23+). Verify the intended Go version and update accordingly. - Medium · Incomplete Dependencies List —
go.mod. The go.mod file appears truncated with 'golang.org/x/mod v0.35.0' and 'golang.' at the end, indicating the dependency list is incomplete. This makes it impossible to fully assess all transitive dependencies for known vulnerabilities. Fix: Provide the complete go.mod file and run 'go list -json -m all' to verify all dependencies. Use 'govulncheck' (already in CI workflow) to scan for known vulnerabilities. - Medium · Docker Image Base Layer Risk —
Dockerfile. The Dockerfile uses 'quay.io/prometheus/busybox-${OS}-${ARCH}:latest' with the 'latest' tag. Using 'latest' tags can introduce unpredictable vulnerabilities as the base image can change without notice, making builds non-reproducible and potentially unsafe. Fix: Pin the base image to a specific digest or version tag (e.g., 'quay.io/prometheus/busybox-${OS}-${ARCH}:1.36.1'). Use image scanning tools in CI/CD pipeline to validate base image security. - Low · Container Running as 'nobody' User —
Dockerfile. While the Dockerfile correctly runs the container as 'nobody' user (non-root), this is a best practice already implemented. However, ensure that the mounted volume /alertmanager has proper permission restrictions to prevent privilege escalation. Fix: Continue enforcing non-root user execution. Add security scanning to container build pipeline. Consider using read-only filesystem where possible (--read-only flag at runtime). - Low · Missing HEALTHCHECK in Dockerfile —
Dockerfile. The Dockerfile does not define a HEALTHCHECK instruction. This can make it difficult for orchestration systems to detect unhealthy alertmanager instances and perform automatic recovery. Fix: Add a HEALTHCHECK instruction, e.g., 'HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 CMD curl -f http://localhost:9093/-/healthy || exit 1' - Low · Exposed Port Documentation —
Dockerfile (EXPOSE 9093). Port 9093 is exposed in the Dockerfile for the Alertmanager API. Ensure network policies restrict access to this port and that it's only accessible from authorized Prometheus instances and admin interfaces. Fix: Document network security requirements. Implement network policies, firewall rules, and authentication mechanisms to restrict access to port 9093. Use mutual TLS (mTLS) if exposing across network boundaries.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/prometheus/alertmanager shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live prometheus/alertmanager
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/prometheus/alertmanager.
What it runs against: a local clone of prometheus/alertmanager — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in prometheus/alertmanager | Confirms the artifact applies here, not a fork |
| 2 | License is still Apache-2.0 | Catches relicense before you depend on it |
| 3 | Default branch main exists | Catches branch renames |
| 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 5 | Last commit ≤ 32 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of prometheus/alertmanager. If you don't
# have one yet, run these first:
#
# git clone https://github.com/prometheus/alertmanager.git
# cd alertmanager
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of prometheus/alertmanager and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "prometheus/alertmanager(\\.git)?\\b" \\
&& ok "origin remote is prometheus/alertmanager" \\
|| miss "origin remote is not prometheus/alertmanager (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Apache-2\\.0)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Apache-2\\.0\"" package.json 2>/dev/null) \\
&& ok "license is Apache-2.0" \\
|| miss "license drift — was Apache-2.0 at generation time"
# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
&& ok "default branch main exists" \\
|| miss "default branch main no longer exists"
# 4. Critical files exist
test -f "cmd/alertmanager/main.go" \\
&& ok "cmd/alertmanager/main.go" \\
|| miss "missing critical file: cmd/alertmanager/main.go"
test -f "config/config.go" \\
&& ok "config/config.go" \\
|| miss "missing critical file: config/config.go"
test -f "dispatch/dispatch.go" \\
&& ok "dispatch/dispatch.go" \\
|| miss "missing critical file: dispatch/dispatch.go"
test -f "api/v2/api.go" \\
&& ok "api/v2/api.go" \\
|| miss "missing critical file: api/v2/api.go"
test -f "alert/alert.go" \\
&& ok "alert/alert.go" \\
|| miss "missing critical file: alert/alert.go"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 32 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~2d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/prometheus/alertmanager"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.
Embed this chat in your README →
Drop this iframe anywhere — the widget runs against the same live analysis cache as the main app.
<iframe src="https://repopilot.app/embed/prometheus/alertmanager" width="100%" height="500" style="border:1px solid #d0d7de; border-radius:8px;" allow="microphone" loading="lazy" ></iframe>