A control plane that sits between AI agents and anything real.
Agents never hold credentials or touch systems directly โ€”
they ask the gateway, and the gateway decides.

โšก Quick Start ๐Ÿ“– API Docs
 agent โ”€โ”€โ–ถ org halt โ”€โ”€โ–ถ capability grant โ”€โ”€โ–ถ rate ceiling
                           โ”€โ”€โ–ถ policy โ”€โ”€โ–ถ detection โ”€โ”€โ–ถ execution

 Six checks run on every action, in order, and none can be skipped.
 Policy: ordered rules, first match wins, deny by default.
 Detection: 11 signals scored 0โ€“100. Can only tighten the outcome.

How it works

๐Ÿ” Nothing on the device

Dashboard auth is an httpOnly cookie no JavaScript can read. API keys are HMAC'd with a pepper the database never contains. Agents exchange a key for a 15-minute session-bound token.

๐Ÿ›ก๏ธ Six checks, no shortcuts

Org halt, capability grant, rate ceiling, policy, detection, execution. Every action passes through all six. A denial at any stage is final. Detection can only make an outcome stricter.

๐Ÿ“‹ Append-only audit

Every action is recorded in a hash-chained, append-only log enforced by database triggers. Periodic Merkle roots are Ed25519-signed and can be published anywhere you don't control.

๐ŸŒ SSRF-proof egress

DNS resolved up front, every address checked. Cloud metadata endpoints blocked. Address pinning closes DNS rebinding. Redirects re-validated at each hop. 5 MB response ceiling.

โšก 11 detection signals

Novel tools, rate spikes, sensitive content, encoded payloads, exfiltration sequences, new destinations, probing, off-hours use, budget burn, and prompt injection โ€” all scored independently.

๐Ÿ”‘ Envelope encryption

Secrets are AES-256-GCM encrypted. The data key is wrapped by a KEK in AWS KMS or HashiCorp Vault. Plaintext exists only in gateway memory, only for one call.

Features

Policy engine

Ordered rules with glob+regex matching. First match wins, deny by default. Dual-control for high-risk operations. Justification requirements.

Rate limiting

Per-org sliding window. Org-wide halt switch. Circuit breaker: 3 quarantines in 15 minutes trips the whole org.

TOTP + WebAuthn

Argon2id passwords. TOTP with replay protection. Recovery codes. Lockout after 5 failures.

Operator terminal

Real-time dashboard with live gate tape, session monitoring, approval queue, risk histogram, alert feed, and command palette.

Two-person rule

Configurable per-policy. High-risk actions need two different operators to approve. Both decisions are in the audit trail.

Compliance pack

ISO 27001 SoA (93 controls), CRA Annex I conformity, GDPR Art 15/17/20 handling, SBOM generation. One call exports evidence.

Network pinning

API keys can be bound to a CIDR. Agents can be restricted to an egress allowlist. No implicit access.

Prompt injection scan

Every fetched response is scanned for content addressing an AI system. Flagged responses carry a warning that reaches the agent.

Compliance

ISO 27001

Statement of Applicability covering all 93 Annex A controls. Each mapped to a specific implementation: database triggers, KMS backend, network isolation, audit signing.

EU Cyber Resilience Act

Annex I Part I conformity mapping. Part II vulnerability handling with statutory clocks: 24h early warning, 72h notification, 14d final report. Incident table with generated deadlines.

GDPR

Art 5(1)(e) storage limitation via retention jobs. Art 15/20 subject access export. Art 17 erasure with pseudonymisation that preserves audit integrity. Data request handling with 30-day clock.

These are prepared documents, not certifications. CRA conformity requires assessment. ISO 27001 requires an accredited audit. Around a quarter of Annex A controls are marked operational โ€” yours to run.

Install

One command. Docker Compose brings up the gateway, MySQL, and Caddy.

curl -fsSL https://mona.expert/install.sh | bash

You'll be asked for an admin email, password, and org slug. After the build, the bootstrap API key is shown exactly once. Copy it to a process environment.

Then point an A record at the host so Caddy can issue TLS and set MONA_KEK_BACKEND=aws-kms before production use.

API

MethodPathDescription
POST/v1/auth/tokenExchange a long-lived API key for a 15-minute session token
POST/v1/auth/loginDashboard sign-in with password + optional TOTP
POST/v1/auth/logoutDestroy the browser session
POST/v1/actions/requestAn agent asks to execute a tool โ€” the gateway decides
POST/v1/actions/{id}/decisionApprove or reject a held action
GET/v1/dashboard/summarySessions, pending approvals, alerts, KPIs, compliance clock
GET/v1/dashboard/feedRecent actions with risk scores and detection signals
GET/v1/dashboard/histogramHourly action counts for 24h
GET/v1/policiesAll policies for the org
GET/v1/agentsAll agents for the org
GET/v1/secretsSecret names and metadata (never the values)
GET/v1/analytics7-day trends, tool usage, per-agent risk breakdown
GET/v1/compliance/exportEvidence pack: SoA, CRA, incidents, vulns, SBOM
GET/v1/compliance/clockOpen obligations with deadlines
POST/v1/org/haltHalt all agents in the org immediately
POST/v1/org/resumeResume a halted org
GET/v1/audit/verifyVerify the hash chain and check anchors
POST/v1/audit/anchorSeal entries under a signed Merkle root
WS/v1/ws/feedReal-time WebSocket stream of actions, alerts, sessions
GET/healthzHealth check