LLM provider (pick one

August 8, 2026 Β· View on GitHub

πŸ›‘οΈ Wazuh Autopilot

Your Wazuh SIEM, run by an autonomous AI SOC team β€” that triages, investigates, and responds in seconds, while humans stay in control.

A full AI SOC team β€” eleven security-expert agents: a seven-stage reactive pipeline (Tier 1 β†’ Tier 2 β†’ DFIR β†’ IR Lead β†’ Compliance β†’ Containment β†’ SOC Manager) plus four proactive specialists (Vulnerability Management, Threat Intel, Threat Hunting, Detection Engineering).
Every containment action is gated behind two-tier human approval. No alert goes unread. Every decision leaves an evidence trail.

Release License: MIT CI Tests Issues Stars

Wazuh OpenClaw Hermes Agent NVIDIA NemoClaw MCP

Quick Start Β Β·Β  How It Works Β Β·Β  Runtimes Β Β·Β  Deploy Β Β·Β  API Β Β·Β  Architecture Β Β·Β  Changelog


Wazuh Autopilot closes the gap between detection and response. A Wazuh alert that used to wait hours in a queue is triaged in ~40 seconds, correlated across your fleet, investigated with 7+ live pivot queries, and turned into a risk-assessed response plan β€” all before an analyst opens their laptop. When it's time to act, a human clicks Approve and Execute. Nothing dangerous happens without you.

⚑ ~40s triage Β Β·Β  πŸ” 7+ auto pivots/case Β Β·Β  βœ… 2-tier human approval Β Β·Β  🧩 55 Wazuh MCP tools Β Β·Β  πŸ•“ 24/7 coverage Β Β·Β  πŸ”’ air-gap ready


⭐ Why Star This Project

  • A real SOC team, not a chatbot β€” eleven agents with distinct security-expert personas: a seven-stage reactive pipeline plus proactive vulnerability management, threat intel, hunting, and detection engineering.
  • Humans stay in control β€” AI proposes, humans approve and execute. Two-tier approval with separation of duties, enforced in code.
  • Runs anywhere β€” cloud LLMs, self-hosted GPU (vLLM), fully air-gapped (Ollama), or the NVIDIA stack (NemoClaw + Nemotron) β€” same pipeline.
  • Three agent runtimes β€” OpenClaw (default), Hermes (analyst chat-ops), NemoClaw (governed, NVIDIA-sandboxed).
  • Production-grade β€” 587 passing tests, structured evidence packs, Prometheus SOC KPIs, policy engine, crash recovery, security-audited.

What It Does

A Wazuh alert fires. Within minutes β€” not hours β€” your SOC has:

  1. Triaged the alert with entity extraction, MITRE mapping, and severity assessment
  2. Correlated it with related alerts across hosts, IPs, and users
  3. Investigated via live Wazuh queries β€” auth history, process trees, lateral movement checks
  4. Generated a response plan with risk assessment and rollback procedures
  5. Executed the response (IP block, host isolation, process kill) β€” only after human approval

No alert sits unread. No playbook gets skipped. Every action has an evidence trail.

Before and After

Without AutopilotWith Autopilot
Alert triageManual review, 15-60 min per alertAutomatic, ~40 seconds
InvestigationAnalyst runs queries, cross-references7+ pivot queries run automatically
ResponseFind playbook, execute manuallyRisk-assessed plan, one-click approve
EvidenceScattered across toolsStructured JSON evidence pack per case
CoverageBusiness hours, analyst availability24/7, every alert processed

πŸ”¬ How It Works

  Wazuh Alert
       β”‚
       β–Ό
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ Triage  │───▢│ Correlation │───▢│ Investigation │───▢│   Response   β”‚
  β”‚  Agent  β”‚    β”‚    Agent    β”‚    β”‚    Agent      β”‚    β”‚   Planner    β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
   Extract IOCs   Group related      Query Wazuh via       Generate plan
   Map MITRE       alerts into        MCP (55 tools)       Assess risk
   Set severity    unified cases      Build timeline       Assign actions
                                                                β”‚
                                                                β–Ό
                                                     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                                     β”‚  Policy Guard    β”‚
                                                     β”‚  + Human Review  β”‚
                                                     β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                              β”‚
                                                     [Approve] [Reject]
                                                              β”‚
                                                              β–Ό
                                                     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                                     β”‚   Responder      β”‚
                                                     β”‚   (Execution)    β”‚
                                                     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                      block_ip, isolate_host,
                                                      kill_process, disable_user...

The diagram above is the seven-stage reactive pipeline. Each agent has a single responsibility, its own playbook, and communicates through the runtime service via webhooks. The runtime enforces policy at every step β€” action allowlists, confidence thresholds, rate limits, time windows, and idempotency checks.

Alongside it run four proactive specialists β€” Vulnerability Management (risk-based CVE prioritization via KEV/EPSS/CVSS/SSVC), Threat Intelligence (IOC enrichment + ATT&CK attribution), Threat Hunter (proactive hypothesis-driven hunts), and Detection Engineer (turns coverage gaps and hunt findings into detection proposals). Eleven agents total; see ARCHITECTURE.md.

AI agents never act autonomously. Every response action requires explicit two-tier human approval (Approve + Execute). The responder capability is disabled by default.


Key Features

Detection & Analysis

  • Autonomous alert triage with entity extraction (IPs, users, hosts, hashes)
  • MITRE ATT&CK technique and tactic mapping
  • Entity-based alert grouping into unified cases
  • AbuseIPDB IP reputation enrichment with TTL caching
  • Investigation agent runs 7+ pivot queries per case via Wazuh MCP Server (55 tools)

Response & Enforcement

  • Risk-assessed response plans with rollback metadata
  • 9 Wazuh Active Response actions (block IP, isolate host, kill process, disable user, quarantine file, firewall drop, host deny, restart, generic AR)
  • Inline policy enforcement: action allowlists, confidence thresholds, approver authorization, evidence requirements, time windows, rate limits, idempotency
  • Two-tier approval workflow with separation of duties

Observability & Reporting

  • Structured JSON evidence packs for compliance and forensics
  • Prometheus metrics with SOC KPIs (MTTD, MTTT, MTTI, MTTR, MTTC)
  • KPI endpoint with SLA compliance tracking
  • Reporting agent generates hourly, daily, weekly, and monthly SOC health reports
  • Slack integration with real-time alerts and interactive approval buttons (Socket Mode)

Operations

  • Crash recovery for plans stuck mid-execution
  • Stalled pipeline detection with automatic re-dispatch
  • Alert dedup across date boundaries
  • LLM type coercion for local model compatibility
  • Investigation findings auto-promoted to case severity/confidence

πŸš€ Quick Start

Prerequisites

RequirementDescription
Wazuh 4.8+SIEM platform, installed and running
Wazuh MCP Server v4.3.0+MCP bridge for Wazuh API (55 tools)
OpenClaw v2026.7.1+AI agent framework (latest stable; tested with v2026.7.1-2 β€” npm install -g openclaw@latest)
Node.js 20+Runtime service (22+ recommended)
LLM API KeyClaude, GPT, Groq, Mistral, or local Ollama/vLLM

Install

git clone https://github.com/gensecaihq/Wazuh-Autopilot.git
cd Wazuh-Autopilot
sudo ./install/install.sh

The installer handles MCP Server setup, OpenClaw configuration, agent deployment, and optional Slack integration. For air-gapped environments, use --mode bootstrap.

Configure

sudo nano /etc/wazuh-autopilot/.env
# Wazuh connection
WAZUH_HOST=localhost
WAZUH_PORT=55000
WAZUH_USER=wazuh-wui
WAZUH_PASS=your-password

# LLM provider (pick one β€” we recommend OpenRouter for simplicity)
OPENROUTER_API_KEY=sk-or-...

# Optional: Slack approval buttons
SLACK_APP_TOKEN=xapp-...
SLACK_BOT_TOKEN=xoxb-...

Verify

curl http://localhost:9090/health
curl http://localhost:9090/metrics

πŸ“¦ Deployment Options

MethodBest ForCommand
Docker ComposeProductiondocker-compose up -d
SystemdNative Linuxsudo ./install/install.sh
Air-gappedClassified / offlinesudo ./install/install.sh --mode bootstrap + guide
vLLMSelf-hosted GPUvLLM Guide
NemoClaw (NVIDIA)Governed / enterprise, NVIDIA stackcurl -fsSL https://www.nvidia.com/nemoclaw.sh | bash + guide
Hermes AgentAnalyst-assist / chat-opscurl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash + guide
ManualDevelopmentcd runtime/autopilot-service && npm start

πŸ€– Agent Runtimes

The Autopilot pipeline runs on your choice of agent runtime:

RuntimeShapeInferenceGuide
OpenClaw (default)11 agents (7-stage pipeline + 4 specialists), webhook-driven, 24/7Any provideropenclaw/
Hermes Agent (Nous Research)Single self-improving SOC analyst + subagents; CLI/TUI and messaging gatewayNous Portal, OpenRouter, any OpenAI-compatible endpointHERMES_DEPLOYMENT.md
NemoClaw (NVIDIA)OpenClaw or Hermes wrapped in the NVIDIA OpenShell sandbox β€” policy enforcement outside the agent, managed inference, snapshotsNVIDIA stack only: Nemotron 3 via build.nvidia.com, local NIM, or Ollama-NemotronNEMOCLAW_DEPLOYMENT.md

NemoClaw rule: a NemoClaw deployment is NVIDIA end-to-end β€” Nemotron 3 models, NIM/build.nvidia.com inference, OpenShell runtime. No third-party model providers. See nemoclaw/README.md.

All runtimes share the same Wazuh MCP server, Runtime API, and two-tier human approval workflow.

Scaling to a Swarm

The eleven agents form a virtual SOC team (see agent personas) β€” and the same roles scale horizontally into a swarm when alert volume demands it:

  • OpenClaw: raise agents.defaults.maxConcurrent and per-agent heartbeat frequency β€” each webhook delivery and heartbeat run is an independent session, so one triage agent definition fans out across many alerts in parallel.
  • Hermes: the analyst agent spawns isolated subagents for parallel workstreams (e.g., one per pivot during a multi-host investigation).
  • NemoClaw: run multiple OpenShell sandboxes (NEMOCLAW_SANDBOX_NAME=wazuh-autopilot-{1..n}) behind the same Runtime API for fleet-style isolation β€” each sandbox is independently policed, snapshotted, and rollback-able.

Whatever the swarm size, every response action still funnels through the single Policy Guard gate and two-tier human approval β€” more workers, same chain of command.


LLM Providers

OpenClaw is model-agnostic. Use any provider:

ProviderBest ForCost
OpenRouterSafest option β€” 300+ models, single key, no ban riskPay per token
AnthropicBest reasoning (Claude)Pay per token
GroqUltra-fast inferenceFree tier available
OllamaAir-gapped / freeFree (local)
vLLMSelf-hosted GPU inferenceHardware only
NVIDIA build.nvidia.comNemotron 3 hosted / NIM local β€” required for NemoClawFree tier available

Plus OpenAI, Google, Mistral, xAI, Together, Cerebras. See full provider guide below.

API Keys Only: Use pay-per-token API keys, not subscription OAuth tokens. Anthropic and Google have banned subscription tokens in third-party tools. Details.


Human-in-the-Loop Approval

 PROPOSED ────▢ APPROVED ────▢ EXECUTED
    β”‚               β”‚               β”‚
    β–Ό               β–Ό               β–Ό
 Policy Check   Policy Check    Policy Check
 ─ allowlist    ─ approver ID   ─ evidence
 ─ confidence   ─ risk level    ─ time window
 ─ time window                  ─ rate limit
                                ─ idempotency

AI agents generate plans. Humans approve them. The runtime enforces policy at every step. No action executes without human authorization.


Wazuh Compatibility

Tested via Wazuh MCP Server v4.3.0 (55 tools):

Wazuh VersionStatus
4.14.xFully Supported (recommended)
4.8.x – 4.13.xFully Supported
4.0.0 – 4.7.xLimited (no vulnerability tools)

Platforms: Ubuntu 22.04/24.04, Debian 11/12, RHEL/Rocky/AlmaLinux 8/9, Docker.


API Reference

Core Endpoints

EndpointMethodDescription
POST /api/alertsPOSTIngest Wazuh alert β€” triggers full pipeline
GET /api/casesGETList cases (filter: ?status=, ?severity=, ?since=, ?until=)
GET /api/cases/summaryGETAggregated case statistics
GET /api/cases/:idGETFull case with evidence pack
GET /api/plansGETList plans (filter: ?state=, ?case_id=)
GET /api/plans/:idGETPlan details
POST /api/plans/:id/approvePOSTApprove plan (Tier 1)
POST /api/plans/:id/executePOSTExecute plan (Tier 2)
GET /api/kpisGETSLA/KPI metrics (?period=24h)
GET /api/reportsGETList stored reports
GET /metricsGETPrometheus metrics

Agent Action Endpoints (GET-based for web_fetch)

EndpointDescription
/api/agent-action/update-caseUpdate case status/data
/api/agent-action/create-planCreate response plan
/api/agent-action/approve-planApprove/deny plan
/api/agent-action/execute-planExecute approved plan
/api/agent-action/store-reportStore generated report
/api/agent-action/search-alertsProxy search to Wazuh MCP

Full API documentation: RUNTIME_API.md


SOC KPIs & Reporting

The runtime tracks case status transitions and computes SLA metrics:

curl http://localhost:9090/api/kpis?period=24h
{
  "period": "24h",
  "cases_analyzed": 50,
  "mttt": 42,
  "mtti": 138,
  "mttr": 280,
  "mttc": 450,
  "auto_triage_rate": 0.92,
  "false_positive_rate": 0.18,
  "sla_compliance": {
    "triage_within_15m": 0.95,
    "response_within_1h": 0.82
  }
}

The reporting agent generates hourly, daily, weekly, and monthly SOC health reports automatically.


Evidence Packs

Every case produces a structured evidence pack for compliance and forensics:

{
  "case_id": "CASE-20260327-1df903b68bc7",
  "severity": "high",
  "confidence": 0.95,
  "entities": [
    {"type": "ip", "value": "176.120.22.47", "role": "source"},
    {"type": "host", "value": "virt-5378", "role": "victim"}
  ],
  "mitre": [{"technique_id": "T1110.001", "tactic": "Credential Access"}],
  "investigation_notes": "200+ failed SSH login attempts over 7 days...",
  "findings": {"classification": "brute_force", "confidence": 0.95},
  "status_history": [
    {"from": "open", "to": "triaged", "timestamp": "..."},
    {"from": "triaged", "to": "investigated", "timestamp": "..."}
  ],
  "plans": [...],
  "actions": [...],
  "mcp_calls": [...]
}

Security

LayerProtection
NetworkAll services localhost-only. Tailscale zero-trust for inter-node.
AuthBearer token + query param auth. Timing-safe comparison.
PolicyInline enforcement at every pipeline step. Fail-closed in production.
AgentsSandboxed execution. Anti-injection instructions. No exec access.
ApprovalTwo-tier human approval. Separation of duties. Bootstrap gate requires explicit opt-in.
MCPRBAC scopes (wazuh:read/wazuh:write). JWT auth. Circuit breaker.

Slack Integration

Socket Mode β€” outbound-only, no webhooks or public endpoints required:

  • Real-time alert notifications with severity coloring
  • Interactive [Approve] / [Reject] / [Execute] buttons
  • Slash commands: /wazuh status, /wazuh approve, /wazuh execute
  • Confirmation dialogs for destructive actions

Project Structure

β”œβ”€β”€ install/install.sh              # Security-hardened installer
β”œβ”€β”€ docker-compose.yml              # Production container orchestration
β”œβ”€β”€ openclaw/
β”‚   β”œβ”€β”€ openclaw.json               # Gateway & model config
β”‚   └── agents/                     # 11 SOC agents (7 pipeline + 4 specialist)
β”œβ”€β”€ hermes/                         # Hermes Agent runtime profile (Nous Research)
β”œβ”€β”€ nemoclaw/                       # NemoClaw profile β€” NVIDIA stack only (Nemotron/NIM/OpenShell)
β”œβ”€β”€ runtime/autopilot-service/
β”‚   β”œβ”€β”€ index.js                    # Runtime service (7,000+ LOC)
β”‚   β”œβ”€β”€ slack.js                    # Slack Socket Mode integration
β”‚   └── *.test.js                   # 587 tests across 16 files
β”œβ”€β”€ policies/
β”‚   β”œβ”€β”€ policy.yaml                 # Action allowlists, approvers, thresholds
β”‚   └── toolmap.yaml                # MCP tool mappings (9 actions + 5 verification + 5 rollback)
β”œβ”€β”€ playbooks/                      # 7 incident response playbooks
└── docs/                           # 19 documentation files

Local LLM Options

Ollama (Air-Gapped)

Zero external network calls. Full data sovereignty. See Air-Gapped Guide.

sudo ./install/install.sh --mode bootstrap

vLLM (Self-Hosted GPU)

Production-grade throughput with open-source models. See vLLM Guide.

vllm serve Qwen/Qwen3-32B --enable-auto-tool-choice --tool-call-parser hermes
ModelVRAMBest For
Qwen3 32B~64 GBBest tool calling
Llama 3.3 70B~140 GBStrongest reasoning
DeepSeek-R1 70B~140 GBChain-of-thought

Provider Details

Full provider list and configuration
ProviderModelsAPI Key Env
OpenRouter300+ modelsOPENROUTER_API_KEY
AnthropicClaude Sonnet 4.5, Haiku 4.5ANTHROPIC_API_KEY
OpenAIGPT-4o, o3-miniOPENAI_API_KEY
GroqLlama 3.3 70B, MixtralGROQ_API_KEY
GoogleGemini 2.0 Flash/ProGOOGLE_API_KEY
MistralMistral Large, CodestralMISTRAL_API_KEY
xAIGrok 2, Grok 3XAI_API_KEY
OllamaLlama, Mistral, QwenN/A (local)
vLLMAny HuggingFace modelVLLM_API_KEY
TogetherOpen-source modelsTOGETHER_API_KEY
CerebrasUltra-fast inferenceCEREBRAS_API_KEY

Model format: "provider/model-name" (e.g., "anthropic/claude-sonnet-4-5").

Cost Optimization

TaskRecommended ModelWhy
Complex investigationanthropic/claude-sonnet-4-5Best reasoning
High-volume triagegroq/llama-3.3-70b-versatileFast and free
Heartbeatsanthropic/claude-haiku-4-5Cheapest Claude
Air-gappedollama/llama3.3No network
GPU self-hostedvllm/qwen3-32bBest open-source tool calling

Provider Policy Notice

Important: API keys vs subscription tokens

Anthropic and Google have banned subscription-plan OAuth tokens (Claude Pro/Max, Google AI Ultra) in third-party tools. Using them will result in account suspension.

Always use pay-per-token API keys from the provider's developer console, or route through OpenRouter (billing proxy, no ban risk).

  • OpenRouter: Single key, 300+ models, no restrictions
  • Groq, Mistral, xAI, Together, Cerebras: No restrictions reported

Documentation

Start here

DocumentDescription
ARCHITECTURE.mdSystem architecture β€” pipeline, runtimes, MCP, control plane
QUICKSTART.mdInstallation guide (under 15 minutes)
SCENARIOS.mdEnd-to-end attack scenarios you can replay

Operate

DocumentDescription
RUNTIME_API.mdREST API reference
CLI_REFERENCE.mdCommand-line reference
POLICY_AND_APPROVALS.mdPolicy engine and approval workflow
SLACK_SOCKET_MODE.mdSlack setup
OBSERVABILITY_EXPORT.mdPrometheus metrics and SOC KPIs
HEARTBEATS_AND_COST.mdHeartbeat inference cost and event-driven tuning
EVIDENCE_PACK_SCHEMA.mdEvidence pack format
TROUBLESHOOTING.mdCommon issues and fixes

Deploy & integrate

DocumentDescription
AGENT_CONFIGURATION.mdAgent files, personas, and customization
AGENT_COMMUNICATION.mdAgent-to-runtime message flow
MCP_INTEGRATION.mdMCP server integration (55 tools)
TAILSCALE_MANDATORY.mdMandatory Tailscale network isolation
AIR_GAPPED_DEPLOYMENT.mdOffline deployment with Ollama
VLLM_DEPLOYMENT.mdSelf-hosted GPU inference with vLLM
HERMES_DEPLOYMENT.mdHermes Agent runtime (Nous Research)
NEMOCLAW_DEPLOYMENT.mdNemoClaw on the NVIDIA stack (OpenShell, Nemotron, NIM)
CHANGELOG.mdVersion history

Contributing

cd runtime/autopilot-service
npm install
npm test   # 587 tests across 16 files, all passing

See CONTRIBUTING.md for guidelines.


Acknowledgments

Huge thanks to @idrone3d for exceptionally thorough field testing of Wazuh Autopilot on real, self-hosted local hardware, and for the detailed findings and suggestions in issue #33. That work directly drove several improvements, including:

  • Heartbeat operational cost β€” surfacing that timer-based heartbeats dominate idle inference on small local models and paid APIs, which led to relaxed defaults and the new event-driven tuning guide.
  • New alerts grouped into terminal cases β€” a correctness bug where a fresh alert could be merged into an already-closed/executed case.
  • Plan-expiry persistence β€” expired plans that reverted to actionable after a restart.

Community testing like this makes the project meaningfully better. Thank you. πŸ™


Community


ProjectDescription
Wazuh MCP ServerMCP bridge for Wazuh API (55 tools, RBAC, audit logging)
OpenClawAI agent framework powering the SOC agents

License

MIT License β€” see LICENSE


Built by GenSecAI