Argus Launches: Open-Source Security Platform for Read-Only AI Agents
Argus is a self-hosted, multi-tenant security operations platform that strictly separates AI agent analysis from execution. Agents operate with read-only permissions for evidence gathering and threat triage, while all state-changing actions are routed through a separate broker requiring policy approval, designed to defend against agentic attacks and reduce automation risks.
Full Report
Contents3 sections
Argus
Argus is a self-hosted, multi-tenant security operations platform in which AI agents analyze evidence but never act on the estate. Collectors inventory cloud, identity, code, endpoint, network and Kubernetes assets into an evidence graph; a detection engine evaluates events for swarm, identity, cloud, code and canary signals; a scope-gated test harness runs authorized security tools; governed agents triage, investigate and hunt with read-only tools; and a separate action broker (typed actions, policy, approvals, dry runs, rollback, kill switch) is the only component allowed to change anything.

This README describes what is in the repository today. docs/ARCHITECTURE.md describes the
design; docs/ROADMAP.md lists what is implemented versus planned.
Project status
Argus is an early open-source foundation, meant to be forked and extended. The platform core
(tenancy, auth, RBAC, audit chain, queue, policy and approvals) is tested end to end on SQLite
and PostgreSQL. The cloud and identity collectors and the action executors are tested against
recorded fixtures and mocked APIs, not yet against live accounts, and the 12 detection rules
are an untuned starting set. Expect to adapt collectors and rules to your estate, and run
monitoring-only (docs/GO-LIVE.md) before enabling any action. It is not a certified product;
see docs/COMPLIANCE.md for what it can and cannot evidence.
Architecture
Browser / SDK / sensors
|
v HTTPS (Caddy, ALB, Front Door or your ingress)
+-------------------------------------------------------------+
| API (FastAPI) auth: session / OIDC+PKCE / TOTP / API keys |
| RBAC (viewer < analyst < operator < admin < owner), CSRF, |
| per-principal rate limits, request ids, security headers |
+------+------------------+------------------+----------------+
| | |
PostgreSQL Redis queue Audit chain
(tenant_id on (leases, retries, (hash-linked per tenant,
every table) python -m HMAC, JSONL / S3 Object
app.worker) Lock / Azure immutable)
| |
+------+------------------+----------------------------------+
| Worker processes run the same handlers as the API: |
| collectors.run detections.run / baselines |
| graph.recompute testing.run agents.run |
+------------------------------------------------------------+
|
v agents call propose_action only -> ActionRequest(pending)
Action broker (separate policy, approvals, dry run, rollback, kill switch)Trust boundaries, in one sentence each (details in docs/THREAT-MODEL.md):
- Agents cannot execute anything; their one write-capable tool creates a pending request.
- Everything an agent reads is wrapped as untrusted data and the prompt says so.
- Active testing runs only inside a recorded authorization and scope, re-checked at run time.
- Every domain table carries
tenant_id; queries go through a scoped helper; tests assert it. - The audit chain is hash-linked, HMAC-signed (required in production), and mirrored to an external, optionally WORM, sink.
What is in this checkout
| Area | Status | Where |
|---|---|---|
| App factory, settings, DB, RBAC, auth (local, OIDC, TOTP, API keys), CSRF, rate limits | implemented, tested | app/core/, app/api/auth.py, app/api/deps.py |
| Audit chain with JSONL / S3 Object Lock / Azure immutable blob sinks | implemented | app/core/audit.py |
| Job queue (in-memory and Redis, leases, retries, cancellation, reaper) and standalone worker | implemented | app/core/queue.py, app/worker.py |
| Prometheus metrics, JSON logging, optional OpenTelemetry tracing | implemented | app/core/telemetry.py |
| Evidence graph: nodes, edges, attack paths, exposure scoring | implemented | app/graph/, app/api/graph.py |
| Detections: 12 rules (swarm x4, identity x2, cloud, k8s, code, canary, anomaly, agentic), baselines, canaries | implemented | app/detections/, app/api/detections.py, app/api/canaries.py |
| Collectors: AWS, Azure, GCP, Kubernetes, GitHub, Okta, Entra, osquery, netflow | implemented with fixtures; cloud SDKs optional | app/collectors/, app/api/collectors.py |
| Test harness: scope policy, rate limits, adapters for web baseline, trivy, nuclei, zap, prowler, caldera, semgrep, gitleaks | implemented; tools must be installed separately | app/testing/, app/api/tests.py, app/api/scans.py |
| Agent runtime, providers (Anthropic, OpenAI, Ollama, none), read-only tools, 7 specialists, eval suites | implemented | app/agents/, app/api/agents.py, app/api/evals.py |
| Action broker: catalog of 25 typed actions (AWS, Azure, GCP, Kubernetes, GitHub, Okta, Entra, Cloudflare, Argus-internal), policy, approvals, dry run, execute, rollback, kill switch | implemented | app/actions/, app/api/actions.py |
Integrations: 13 inbound parsers behind POST /api/v1/ingest/{source}, 6 outbound channels (webhook, Slack, Jira, ServiceNow, PagerDuty, email) with deliveries and retries, Wazuh indexer pull | implemented | app/integrations/, app/api/ingest.py, app/api/integrations.py |
| Admin, assets, findings, events, investigations, approvals, audit, reports routers | implemented | app/api/ |
Alembic migrations (initial revision) and scripts/migrate.py | implemented | alembic/, docs/MIGRATIONS.md |
| Containers, compose, Helm, Terraform (AWS, Azure), CI, observability, docs | implemented | Dockerfile, compose*.yaml, infra/, .github/, docs/ |
Routers are discovered automatically. The full v1 surface is in docs/API.md.
(注:更多技术实现细节与完整 API 文档请查阅原项目 README)