Skip to main content
The settings to look up when you run the engine yourself. The deployment steps are in Enterprise setup, and what differs from PromptGuard Cloud is in Self-host vs Cloud.

Environment variables

The settings that matter most, all documented inline in deploy/docker-compose.yml:

Helm chart settings

The Helm chart ships the controls you would otherwise write by hand. Set them in your values file rather than adding your own manifests: Pods run as non-root with a read-only root filesystem and every capability dropped (podSecurityContext, securityContext).

Licensing

Your license is an Ed25519-signed file verified locally against PromptGuard’s public verification key (embedded in the deployment package). There is no license server in the request path, and licensing sends no content:
  • Signature verification is local and offline — the engine checks the signature and expiry itself, on startup.
  • Air-gapped mode makes no licence calls. With DEPLOYMENT_MODE=airgap (the deployment package default) the license heartbeat is disabled entirely — the license is enforced by signature and expiry alone.
  • Connected mode’s only licence call is a daily, metadata-only heartbeat (license id, node fingerprint, customer name — never prompts, verdicts, or any request content). If the heartbeat can’t get out, the engine keeps serving through a configurable grace window (PROMPTGUARD_LICENSE_GRACE_DAYS). If the window runs out, billable requests get a 503 until the next heartbeat that reaches us — the engine keeps trying hourly, and recovery needs no restart.
  • What you can verify yourself: the license and heartbeat code paths are in the source you receive (shared/licensing/, shared/billing/license.py) — auditable end-to-end, including exactly what the heartbeat payload contains.

Monitoring

Scraping /metrics

A self-hosted API serves Prometheus metrics at /metrics to a scraper that presents its METRICS_TOKEN. Monitoring a self-hosted instance says how to set the token and what the endpoint carries; on Cloud it is not open to customers. A Prometheus outside Kubernetes scrapes it like this:

Alerting Rules

The Helm chart installs the alert rules we run on Cloud, written against these series: set monitoring.prometheusRule.enabled=true. For a Prometheus outside Kubernetes, copy the rules from deploy/helm/promptguard/templates/prometheusrule.yaml in the release you run. They are the maintained set. The examples below show the series they are built on:

Grafana Dashboards

promptguard_security_events_by_decision is read from the database, so every pod reports the same total: take max, not sum, across pods.
Last modified on October 31, 2026