個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Open-source AI Agents for Incident Management
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Self-hosted, AI-powered AIOps platform for SRE teams.
Ingests alerts from your monitoring stack, investigates them with LLM agents that reach your infrastructure through real tools, and executes remediation behind approval gates.
Website · Documentation · Quick Start · Architecture · Issues · Discord
| Provider | Models |
|---|---|
| OpenAI | GPT-6.1 Sol, GPT-6 (Sol / Astra / Luna), GPT-5.6 (Terra / Sol / Luna), GPT-5.5, GPT-5.5 Pro, GPT-5.4, GPT-5.4 Mini, GPT-5.3 Codex, GPT-5 Mini, o4-mini |
| Anthropic | Claude Fable 5.1 / 5, Opus 5.5, Sonnet 5.5, Opus 5, Sonnet 5, Opus 4.8 / 4.7, Sonnet 4.6, Haiku 4.5 |
| Gemini 3.1 Pro Preview, Gemini 3.5 – 3.8 Flash, Gemini 3.1 Flash Lite, Gemini 3 Pro / Flash Preview, Gemini 2.5 Pro / Flash, 2.0 Flash | |
| OpenRouter | 100+ models from every major lab |
| NVIDIA NIM | Llama 3.3 / 3.1 70B Instruct, Nemotron 3 Ultra, Nemotron 3.5 Lightning, Nemotron 3 Nano / Nano Omni, Llama 3.1 Nemotron 70B |
| MiniMax | MiniMax M3, M2.7, M2.7-highspeed |
| Ant Ling | Ling-2.6-1T, Ling-2.6-flash, Ring-2.6-1T |
| Custom / On-prem | Any OpenAI-compatible endpoint (GLM, Kimi, Mistral, LLaMA, vLLM, …) |
Model lists track the in-app picker; the model field is free-text, so newer model IDs work without an upgrade.
The recommended install pulls pre-built multi-arch images from GHCR — no git clone, no local build.
Prerequisites: Docker with Compose v2+, an API key for any supported LLM provider (or an on-prem OpenAI-compatible endpoint), and optionally a Slack App.
Download the release assets (compose file + nginx config):
mkdir akmatori && cd akmatori
curl -fsSLO https://github.com/akmatori/akmatori/releases/latest/download/docker-compose.yml
mkdir proxy && curl -fsSL -o proxy/nginx.conf \
https://github.com/akmatori/akmatori/releases/latest/download/nginx.conf
(Optional) Create an .env to pin a specific version or configure a corporate proxy. All secrets (POSTGRES_PASSWORD, JWT_SECRET, and the admin password) are auto-generated on first run, so the file is only needed for the overrides shown below:
cat > .env <<'EOF'
# AKMATORI_VERSION=1.2.0
# HTTP_PROXY=http://proxy.corp:3128
# HTTPS_PROXY=http://proxy.corp:3128
EOF
AKMATORI_VERSION defaults to latest. See Behind an HTTP proxy for proxy details.
Pull and start, then verify all services show "Up":
docker compose pull
docker compose up -d
docker compose ps
Open the web dashboard at http://localhost:8080 (username admin). The first visit runs a one-time setup wizard that lets you set the admin password.
Configure your LLM provider in Settings → LLM Provider.
(Optional) Connect Slack:
is_default_post on the channel that should receive alerts when an alert source does not pin one explicitly. can_post / can_listen decide whether the channel appears in the alert-source picker or is monitored for inbound mentions.(Optional) Schedule recurring runs in Cron Jobs: pick a schedule, write a prompt, attach the tools the agent is allowed to call, and point it at one of your Channels. Every tick runs as a full agent investigation under the cron-agent system skill.
Bump AKMATORI_VERSION in .env (or leave it unset to track latest) and:
docker compose pull
docker compose up -d
There are two independent concerns: pulling images through the proxy (a Docker daemon setting) and the running services egressing through the proxy at runtime (a compose environment: setting). Both must be configured or you'll get stuck partway through.
This is a Docker daemon-level setting — compose can't fix it from inside the file.
Linux + systemd:
# /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://proxy.corp:3128"
Environment="HTTPS_PROXY=http://proxy.corp:3128"
Environment="NO_PROXY=localhost,127.0.0.1,.svc,.local"
Then:
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker Desktop (macOS / Windows): Settings → Resources → Proxies.
Allowlist note: your corporate proxy allowlist must include pkg-containers.githubusercontent.com alongside ghcr.io. GHCR stores image manifests on ghcr.io and the actual blob layers on pkg-containers.githubusercontent.com — the most common GHCR-through-corporate-proxy footgun is "manifest pulls but blob downloads hang."
Set HTTP_PROXY / HTTPS_PROXY once in your .env (or in the shell that runs docker compose up); the api, mcp-gateway, and agent containers inherit them via the compose file. The default NO_PROXY bypasses internal service-to-service traffic (api↔postgres, agent↔gateway, etc.) so internal hops never hit the corporate proxy.
# .env
HTTP_PROXY=http://proxy.corp:3128
HTTPS_PROXY=http://proxy.corp:3128
# NO_PROXY defaults to the internal service names; override only if you need to add hosts.
The runtime HTTP_PROXY covers the API server's outbound calls (Slack), the agent worker's LLM API calls, and the MCP Gateway's HTTP-connector tools and external MCP-server connections. The MCP Gateway's built-in monitoring/CMDB tools (Zabbix, Grafana, VictoriaMetrics, PagerDuty, NetBox, Kubernetes, Catchpoint, Jira) ignore the env-var proxy by design and have their own per-tool proxy toggle in Settings → Proxy — enable those if your monitoring endpoints also need to go through the corporate proxy.
Akmatori uses a secure multi-container architecture:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Alert Sources │────▶│ API Server │◀───▶│ PostgreSQL │
│ (Prometheus, │ │ (Go backend) │ │ (encrypted │
│ PagerDuty, │ │ │ │ credentials) │
│ Datadog...) │ └────────┬────────┘ └─────────────────┘
└─────────────────┘ │
│ WebSocket
┌─────────────────┐ ▼
│ Slack Bot │◀───▶┌─────────────────┐ ┌─────────────────┐
│ │ │ Agent Worker │◀───▶│ MCP Gateway │
└─────────────────┘ │ (pi-mono + │ │ (SSH, APIs) │
│ subagents) │ │ │
└────────┬────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ LLM Providers │
│ (OpenAI, │
│ Anthropic, │
│ Google, etc.) │
└─────────────────┘
Security by design:
Runbook and memory search: runbooks and cross-incident memory live as markdown files mounted into the agent container (runbooks read-only, memory read-write). The main agent reaches them through pi-mono subagents — runbook-searcher for SOP lookup, memory-searcher for prior-incident recall, and memory-writer to record durable findings at the end of an investigation. The API materializes new memory files back into Postgres at incident completion.
Working on Akmatori itself? Build from source with the dev override, which restores the per-service build: blocks:
git clone https://github.com/akmatori/akmatori.git
cd akmatori
cp .env.example .env # edit ADMIN_PASSWORD / POSTGRES_PASSWORD
make dev # docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d --build
make dev is the canonical maintainer entry point. The base docker-compose.yml alone has only image: references (the end-user pull flow); the docker-compose.dev.yml override adds the build: blocks back. Without the -f docker-compose.dev.yml argument, docker compose build is a no-op against a release install.
Self-hosted API docs: every install serves interactive documentation — Swagger UI at http://localhost:8080/api/docs and the raw OpenAPI 3.1 spec at http://localhost:8080/api/openapi.yaml (no authentication required).
Questions, setup help, and feature ideas: join the Akmatori Discord.
Ask in #help, share your skills in #skills-and-runbooks, and talk about the code in #dev.
Contributions are welcome! Start with docs/CONTRIBUTING.md and the
good first issue label.
Licensed under the Apache License 2.0.