Open-source platform for automating alert triage, enrichment, and response — in real Python. No DSL, no sandbox, no per-action billing. Works for security, IT ops, or anything that pages you at 3 AM.
SOAR tools, runbook builders, no-code automators — they all invent their own way to define workflows. Visual canvases you can't diff. YAML you can't debug. Proprietary SDKs that lock you in. Per-action pricing that punishes you for automating more.
OpenSOAR uses the abstraction that already exists: Python. Your playbooks are async functions with decorators. Test them, version them, review them in PRs. Apache 2.0, self-hosted, free.
How It Works
Three steps. Zero vendor meetings.
1
Alerts flow in
Connect any source — SIEM, EDR, monitoring, custom webhooks. OpenSOAR normalizes payloads, extracts IOCs, and deduplicates automatically.
Elastic Securityconnected
PagerDutyconnected
Custom webhookconnected
2
Playbooks run
Your Python playbooks trigger automatically based on alert conditions. Enrich, triage, escalate, contain — all async, all testable.
Automation handles the volume. Your team handles the judgment calls. Every action is logged with full context for audit and review.
Critical: Lateral movement detectedNeeds approval
Failed login brute forceAuto-resolved
Port scan from known scannerAuto-resolved
No DSL. No Sandbox.
Not "code-like." Actual Python.
Other platforms say "Python support" but mean a sandboxed runtime with vendor imports and no debugger. OpenSOAR playbooks are plain async functions — import anything, run locally, ship like software.
pytest your playbooks — catch bugs before they hit production, not after
Deploy with git push — PRs, code review, CI/CD. Standard engineering workflow
asyncio.gather() — enrich from 10 APIs in parallel, not chained sequentially
Any pip package — not a marketplace of vendor-approved integrations
triage_critical.py
fromopensoarimportplaybook, action@action(name="enrich_ip",timeout=30,retries=2)async defenrich_ip(ip:str)->dict:return awaitvirustotal.lookup_ip(ip)@playbook(trigger="webhook",conditions={"severity": ["high","critical"]})async deftriage_critical(alert):# Enrich all IPs in paralleliocs=alert.get("iocs",{})results=awaitasyncio.gather(*[enrich_ip(ip)foripiniocs.get("ips",[])])# Auto-escalate if confirmed maliciousifany(r.get("malicious")forrinresults):awaitnotify_soc(f"Confirmed: {alert['title']}")
Under the Hood
Built for engineers, not demo audiences
Every feature links to source code. No black boxes, no hidden limits.
Python-Native PlaybooksCore
No YAML. No sandbox. No vendor SDK. A playbook is a decorated async function — your IDE, your debugger, your rules.
•Runbook automation that's actually testable and version-controlled
•Reduce on-call fatigue by auto-resolving known patterns
PagerDutyDatadogAWSJira
DevOps & Platform
CI/CD, deployments, cloud ops
•Auto-rollback failed deployments based on health check alerts
•Coordinate cross-service incident response with approval gates
•Cost anomaly detection and automated scaling responses
GitHubKubernetesTerraformSlack
Compliance & Audit
GRC, evidence collection, reporting
•Automated evidence collection for SOC 2, GDPR, HIPAA audits
•Every automation action logged with timestamps and full context
•Generate incident reports automatically from playbook run history
ServiceNowJiraEmailS3
Brute Force SSH Login
500+ failed attempts from 45.33.32.156
AI analyzing alert…
Classified as Brute Force Attack
MITRE ATT&CK: Credential Access · T1110.001
Severity raised from medium → high
AbuseIPDB lookup: 98% malicious confidence
Correlated with 12 related events from same IP
Recommended: Block IP + escalate to on-call
Auto-triaged in 0.8s
Playbook triggered — IP blocked, SOC notified via Slack
highElastic SIEM · just now
Cobalt Strike Beacon
C2 callback pattern on port 443
AI analyzing alert…
Classified as C2 Communication
MITRE ATT&CK: Command & Control · T1071.001
JA3 fingerprint matches known Cobalt Strike signature
Beacon interval: 60s with 25% jitter — classic CS profile
Correlated with 2 lateral movement alerts on same host
Recommended: Isolate endpoint + initiate IR
Auto-triaged in 1.1s
Host isolated, IR playbook triggered, Slack alert sent
criticalCrowdStrike · 5s ago
Impossible Travel
Login from 2 countries in 10 minutes
AI Triage Complete
Classified as Account Compromise
MITRE ATT&CK: Valid Accounts · T1078
Distance: NYC → Lagos — 6,870 km in 10 min
VPN analysis: No corporate VPN detected
User risk score: 78/100 — first impossible travel event
Recommended: Force re-auth + require MFA
Auto-triaged in 1.4s
Session revoked, MFA re-enrollment triggered
mediumAzure AD · 12s ago 1.4s
AI Triage
Your model. Your data. Your confidence thresholds.
AI triage is a playbook action — not a black box. Call it from any playbook, set your own thresholds, and keep humans in the loop for anything below your confidence bar. No data leaves your network if you don't want it to.
Bring your own LLM — Anthropic, OpenAI, Google, or fully local with Ollama