Skip to content

Security ​

Authentication ​

API Keys ​

All API requests (except health check) require authentication via API keys:

Authorization: Bearer als_<64-hex-chars>
  • Keys are generated via POST /api/keys
  • The raw key is shown only once at creation time
  • Server stores only the SHA-256 hash of each key
  • Authentication is a constant-time hash comparison

Development Mode ​

Set AUTH_DISABLED=true to skip authentication during development. Never use this in production.

Webhook Verification ​

Inbound webhooks from AgentGate and FormBridge are verified using HMAC-SHA256:

  1. Sender computes HMAC-SHA256(raw_body, shared_secret) as hex
  2. Signature sent in X-Webhook-Signature header
  3. AgentLens verifies using timing-safe comparison (prevents timing attacks)

Tamper Evidence ​

Hash Chain ​

Every event includes a SHA-256 hash that chains to the previous event in its session:

hash = SHA-256(canonical_json(id, timestamp, sessionId, agentId, 
               eventType, severity, payload, metadata, prevHash))

If any event is modified after ingestion, verifyChain() will detect the break.

Append-Only Storage ​

The events table has no UPDATE or DELETE operations (except retention cleanup). This ensures the audit trail is immutable.

Data Protection ​

Payload Truncation ​

Payloads exceeding 10 KB are automatically truncated. This prevents:

  • Storage exhaustion from large payloads
  • Query performance degradation
  • Potential denial-of-service via oversized events

CORS ​

Configurable via CORS_ORIGIN environment variable:

  • Default: * (development)
  • Production: set to your dashboard domain

Network Isolation ​

AgentLens makes no outbound network calls except:

  • Alert webhook notifications (to configured URLs)
  • The MCP server's HTTP calls to the API server

No telemetry, no phone-home, no external dependencies at runtime.

Recommendations for Production ​

  1. Set AUTH_DISABLED=false (the default)
  2. Generate unique API keys per agent
  3. Set CORS_ORIGIN to your specific domain
  4. Use HMAC secrets for all webhook integrations
  5. Run behind a reverse proxy (nginx/caddy) with TLS
  6. Set RETENTION_DAYS according to your compliance requirements
  7. Back up the SQLite database file regularly

Released under the MIT License.