ShoreGuard Settings Reference¶
Auto-generated from shoreguard config schema --format markdown. Every environment variable understood by ShoreGuard is listed below, grouped by the settings sub-model it belongs to.
server¶
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_HOST |
0.0.0.0 |
Bind address for the HTTP server |
SHOREGUARD_PORT |
8888 |
TCP port for the HTTP server |
SHOREGUARD_PUBLIC_URL |
`` | Externally reachable base URL of this ShoreGuard (e.g. https://spark.tail1234.ts.net). Used to build absolute links in notifications; required for one-tap approval links. |
SHOREGUARD_LOG_LEVEL |
info |
Log level: critical|error|warning|info|debug|trace |
SHOREGUARD_LOG_FORMAT |
text |
Log output format — 'text' for humans, 'json' for aggregators |
SHOREGUARD_RELOAD |
true |
Auto-reload on code changes (dev only) |
SHOREGUARD_DATABASE_URL |
`` | SQLAlchemy database URL (sqlite:/// or postgresql://). Unset falls back to sqlite in the XDG config dir. |
SHOREGUARD_LOCAL_MODE |
false |
Allow private-IP targets in SSRF checks (local gateway dev) |
SHOREGUARD_GRACEFUL_SHUTDOWN_TIMEOUT |
15 |
Seconds uvicorn waits for in-flight requests on SIGTERM |
SHOREGUARD_GZIP_MINIMUM_SIZE |
1000 |
Minimum response body size in bytes before gzip compression kicks in |
SHOREGUARD_READYZ_TIMEOUT |
5.0 |
Timeout in seconds for /readyz dependency probes |
SHOREGUARD_FORWARDED_ALLOW_IPS |
127.0.0.1 |
Comma-separated IPs (or '') whose X-Forwarded- headers uvicorn trusts. Set to '*' when serving behind a k8s Ingress — the default only trusts loopback, which means TLS-terminating proxies are ignored. |
SHOREGUARD_ALWAYS_BLOCKED_IPS |
`` | Comma-separated IPs or CIDR ranges that are always blocked as SSRF targets regardless of local_mode. Mirrors upstream OpenShell #814. Parsed once at startup; an invalid entry hard-fails boot. |
SHOREGUARD_SSRF_ALLOWED_IPS |
`` | Comma-separated IPs or CIDR ranges exempted from the private/loopback SSRF rejection — e.g. a homelab OIDC provider or webhook target on a LAN address. Matched against the resolved address, so hostnames are exempt only if they resolve into an allowlisted range. SHOREGUARD_ALWAYS_BLOCKED_IPS takes precedence. Parsed once at startup; an invalid entry hard-fails boot. |
SHOREGUARD_UNSAFE_LAN |
false |
Allow serving without authentication (SHOREGUARD_NO_AUTH) on a non-loopback bind address. Off by default — an unauthenticated UI on a network interface gives everyone on that network admin access. |
## database |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_DB_POOL_SIZE |
5 |
SQLAlchemy connection pool size |
SHOREGUARD_DB_MAX_OVERFLOW |
10 |
Additional pool connections allowed above pool_size |
SHOREGUARD_DB_POOL_TIMEOUT |
30 |
Seconds to wait for a pool connection before failing |
SHOREGUARD_DB_POOL_RECYCLE |
1800 |
Seconds after which connections are recycled |
SHOREGUARD_DB_STATEMENT_TIMEOUT_MS |
30000 |
PostgreSQL statement_timeout in ms (applied per connection) |
SHOREGUARD_DB_STARTUP_RETRY_ATTEMPTS |
10 |
Number of times init_db() retries Alembic upgrade on OperationalError |
SHOREGUARD_DB_STARTUP_RETRY_DELAY |
2.0 |
Initial backoff in seconds between DB retry attempts |
SHOREGUARD_DB_STARTUP_RETRY_MAX_DELAY |
30.0 |
Maximum backoff cap in seconds between DB retry attempts |
## auth |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_NO_AUTH |
false |
Disable authentication entirely (development only) |
SHOREGUARD_SINGLE_USER |
false |
Single-user mode: one admin account whose password is SHOREGUARD_ADMIN_PASSWORD, kept in sync on every startup. The homelab middle ground between --no-auth and full RBAC. |
SHOREGUARD_TAILSCALE_IDENTITY |
false |
Trust Tailscale Serve identity headers (Tailscale-User-Login) from a loopback proxy as authentication. The login must match an existing user's email. Only honoured for connections from 127.0.0.1/::1 — i.e. tailscale serve in front of a loopback-bound ShoreGuard. |
SHOREGUARD_PASSKEYS_ENABLED |
true |
Enable WebAuthn passkey registration and login (requires HTTPS or localhost in the browser) |
SHOREGUARD_DEVICE_LINK_ENABLED |
false |
Enable QR 'device-link' sign-in handoff: a logged-in operator mints a one-time code, the phone that scans it gets its own session after the operator approves the request on the original device. Off by default — opt-in like passkeys/one-tap. |
SHOREGUARD_DEVICE_LINK_TTL |
120 |
Seconds a device-link code stays valid before it must be scanned and claimed (default: 120). |
SHOREGUARD_DEVICE_LINK_SESSION_MAX_AGE |
86400 |
Lifetime in seconds of the session minted for a device-link handoff. Deliberately shorter than the desktop session (default: 24h) — these sessions cannot be individually revoked. |
SHOREGUARD_DEVICE_LINK_RATE_LIMIT_ATTEMPTS |
20 |
Max device-link redeem attempts per IP before rate limit |
SHOREGUARD_DEVICE_LINK_RATE_LIMIT_WINDOW |
60 |
Device-link redeem rate-limit sliding window in seconds |
SHOREGUARD_DEVICE_LINK_RATE_LIMIT_LOCKOUT |
120 |
Device-link redeem rate-limit lockout duration in seconds |
SHOREGUARD_PASSKEY_RP_ID |
`` | Override the WebAuthn relying-party ID; defaults to the host of SHOREGUARD_PUBLIC_URL, else the request host |
SHOREGUARD_SECRET_KEY |
`` | HMAC secret for sessions and signed cookies. Unset falls back to on-disk .secret_key — set explicitly for multi-replica. |
SHOREGUARD_ALLOW_REGISTRATION |
false |
Allow unauthenticated self-signup via /register |
SHOREGUARD_ADMIN_PASSWORD |
`` | Bootstrap admin password used on first startup if no users exist |
SHOREGUARD_COOKIE_NAME |
sg_session |
Session cookie name |
SHOREGUARD_SESSION_MAX_AGE |
604800 |
Session cookie lifetime in seconds (default: 7 days) |
SHOREGUARD_SESSION_TRACKING |
true |
Record each signed-in session (device, IP, last seen) so users can list and individually revoke their active sessions. When off, sessions remain stateless and the only revocation levers are deactivating the user or rotating the secret key. |
SHOREGUARD_INVITE_MAX_AGE |
604800 |
Invite token validity in seconds (default: 7 days) |
SHOREGUARD_PASSWORD_MIN_LENGTH |
8 |
Minimum password length for user registration |
SHOREGUARD_PASSWORD_REQUIRE_COMPLEXITY |
false |
Require mixed-case, digit, and symbol in passwords |
SHOREGUARD_LOGIN_RATE_LIMIT_ATTEMPTS |
10 |
Max failed login attempts per IP before rate limit kicks in |
SHOREGUARD_LOGIN_RATE_LIMIT_WINDOW |
300 |
Login rate-limit sliding window in seconds |
SHOREGUARD_LOGIN_RATE_LIMIT_LOCKOUT |
900 |
Login rate-limit lockout duration in seconds |
SHOREGUARD_ACCOUNT_LOCKOUT_ATTEMPTS |
5 |
Max failed logins per account before lockout |
SHOREGUARD_ACCOUNT_LOCKOUT_DURATION |
900 |
Account lockout duration in seconds after threshold |
SHOREGUARD_WRITE_RATE_LIMIT_ATTEMPTS |
30 |
Max write requests per IP before rate limit kicks in |
SHOREGUARD_WRITE_RATE_LIMIT_WINDOW |
60 |
Write rate-limit sliding window in seconds |
SHOREGUARD_WRITE_RATE_LIMIT_LOCKOUT |
120 |
Write rate-limit lockout duration in seconds |
SHOREGUARD_GLOBAL_RATE_LIMIT_ATTEMPTS |
300 |
Global per-IP rate limit (DDoS guardrail) |
SHOREGUARD_GLOBAL_RATE_LIMIT_WINDOW |
60 |
Global rate-limit sliding window in seconds |
SHOREGUARD_GLOBAL_RATE_LIMIT_LOCKOUT |
60 |
Global rate-limit lockout duration in seconds |
SHOREGUARD_METRICS_PUBLIC |
false |
Expose /metrics without authentication (default: admin-only) |
SHOREGUARD_HSTS_ENABLED |
false |
Emit Strict-Transport-Security header (enable behind HTTPS proxy) |
SHOREGUARD_HSTS_MAX_AGE |
63072000 |
HSTS max-age in seconds (default: 2 years) |
SHOREGUARD_CSP_POLICY |
default-src 'self'; script-src 'self'... |
Content-Security-Policy header value (used when csp_strict=False) |
SHOREGUARD_CSP_STRICT |
true |
Enforce strict CSP with per-request nonce, no 'unsafe-inline', and frame-ancestors 'none'. Default as of v0.27.0 — blocks inline scripts, inline event handlers, and inline styles. Since the Preact islands rewrite removed Alpine.js, 'unsafe-eval' is no longer needed. Set SHOREGUARD_CSP_STRICT=false to fall back to the legacy 'unsafe-inline' policy in csp_policy. |
SHOREGUARD_CSP_POLICY_STRICT |
default-src 'self'; script-src 'self'... |
CSP template used when csp_strict=True. Must contain a '{nonce}' placeholder that is replaced per-request. |
## gateway |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_GATEWAY_BACKOFF_MIN |
5.0 |
Initial reconnect backoff in seconds |
SHOREGUARD_GATEWAY_BACKOFF_MAX |
60.0 |
Maximum reconnect backoff in seconds |
SHOREGUARD_GATEWAY_BACKOFF_FACTOR |
2.0 |
Exponential backoff multiplier between attempts |
SHOREGUARD_GATEWAY_GRPC_TIMEOUT |
30.0 |
Default timeout for gRPC calls to gateways |
SHOREGUARD_GATEWAY_GRPC_RETRY_MAX_ATTEMPTS |
4 |
Maximum number of attempts (including the first) for a retryable gRPC call |
SHOREGUARD_GATEWAY_GRPC_RETRY_INITIAL_BACKOFF |
0.25 |
Initial exponential backoff between retries in seconds |
SHOREGUARD_GATEWAY_GRPC_RETRY_MAX_BACKOFF |
4.0 |
Maximum exponential backoff between retries in seconds |
SHOREGUARD_GATEWAY_GRPC_RETRY_DEADLINE |
60.0 |
Total wall-clock budget in seconds for a single logical RPC including all retries. Retries will not exceed this deadline. |
SHOREGUARD_GATEWAY_REQUIRE_MTLS |
true |
Reject plaintext gRPC channels to gateways. Disable only for local development against an insecure gateway. |
SHOREGUARD_GATEWAY_CERT_EXPIRY_WARN_DAYS |
14 |
Warn (but do not reject) when a gateway certificate expires within this many days. A structured log warning is emitted per affected channel. |
## ops |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_OPS_MAX_RESULT_BYTES |
65536 |
Maximum bytes of operation result stored in DB (larger truncated) |
SHOREGUARD_OPS_RUNNING_TTL |
600.0 |
Seconds a running operation can go without a heartbeat before timeout |
SHOREGUARD_OPS_RETENTION_DAYS |
30 |
Days to retain completed operations before cleanup |
SHOREGUARD_OPS_FIELD_TRUNCATION_CHARS |
8000 |
Max characters per text field before truncation in operation records |
SHOREGUARD_OPS_MAX_LIST_LIMIT |
200 |
Maximum page size for /operations list queries |
## audit |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_AUDIT_RETENTION_DAYS |
90 |
Days to retain audit log entries before cleanup |
SHOREGUARD_AUDIT_EXPORT_LIMIT |
10000 |
Maximum rows returned by /audit/export in a single call |
SHOREGUARD_AUDIT_EXPORT_STDOUT_JSON |
false |
Emit each audit entry as a JSON line on stdout (Loki/Vector lane) |
SHOREGUARD_AUDIT_EXPORT_SYSLOG_ENABLED |
false |
Ship each audit entry to a remote syslog receiver as JSON body |
SHOREGUARD_AUDIT_EXPORT_SYSLOG_HOST |
localhost |
Syslog server host when export_syslog_enabled=true |
SHOREGUARD_AUDIT_EXPORT_SYSLOG_PORT |
514 |
Syslog server port when export_syslog_enabled=true |
SHOREGUARD_AUDIT_EXPORT_SYSLOG_FACILITY |
user |
Syslog facility name (user, local0..local7, daemon, ...) |
SHOREGUARD_AUDIT_EXPORT_WEBHOOK_ENABLED |
false |
Bridge audit entries into the existing webhook pipeline as 'audit.entry' events; individual targets are configured per Webhook record |
## webhooks |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_WEBHOOK_DELIVERY_TIMEOUT |
10.0 |
HTTP request timeout for webhook delivery in seconds |
SHOREGUARD_WEBHOOK_RETRY_DELAYS |
[5, 30, 120] |
Retry delays in seconds between failed webhook delivery attempts |
SHOREGUARD_WEBHOOK_DELIVERY_MAX_AGE_DAYS |
7 |
Days to retain webhook delivery records before cleanup |
SHOREGUARD_WEBHOOK_ONE_TAP_APPROVALS |
false |
Attach signed one-tap approve/reject links to approval webhook events. Anyone holding such a link can cast that one vote until it expires — treat notification channels accordingly. Requires SHOREGUARD_PUBLIC_URL. |
SHOREGUARD_WEBHOOK_ONE_TAP_TTL |
3600 |
Validity window of one-tap approval links in seconds |
## background |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_BG_CLEANUP_INTERVAL |
600 |
Seconds between operation/audit cleanup passes |
SHOREGUARD_BG_CLEANUP_MAX_INTERVAL |
900 |
Maximum backoff cap for cleanup task after failures |
SHOREGUARD_BG_CLEANUP_BACKOFF_THRESHOLD |
10 |
Consecutive cleanup failures before entering backoff mode |
SHOREGUARD_BG_HEALTH_INTERVAL |
30 |
Seconds between gateway health probe cycles |
SHOREGUARD_BG_HEALTH_MAX_INTERVAL |
300 |
Maximum backoff cap for health monitor after failures |
SHOREGUARD_BG_HEALTH_BACKOFF_THRESHOLD |
10 |
Consecutive health probe failures before entering backoff mode |
## local_gw |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_LOCAL_GW_STARTUP_RETRIES |
10 |
Times to retry probing a local gateway container during startup |
SHOREGUARD_LOCAL_GW_STARTUP_SLEEP |
2.0 |
Seconds to sleep between startup probe retries |
SHOREGUARD_LOCAL_GW_OPENSHELL_TIMEOUT |
600.0 |
Timeout in seconds for openshell subprocess calls |
SHOREGUARD_LOCAL_GW_DOCKER_TIMEOUT |
30.0 |
Timeout in seconds for docker subprocess calls (start, stop, inspect) |
SHOREGUARD_LOCAL_GW_STARTING_PORT |
8080 |
First port assigned to locally-spawned gateways |
## websocket |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_WS_QUEUE_MAXSIZE |
1000 |
Maximum number of buffered events per WebSocket client |
SHOREGUARD_WS_QUEUE_GET_TIMEOUT |
1.0 |
Seconds to wait for an event before sending a heartbeat |
SHOREGUARD_WS_HEARTBEAT_INTERVAL |
15.0 |
Seconds between WebSocket heartbeat frames |
SHOREGUARD_WS_BACKPRESSURE_DROP_LIMIT |
50 |
Events dropped before a slow client is disconnected |
## sandbox |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_SANDBOX_READY_TIMEOUT |
180.0 |
Seconds to wait for a sandbox to become ready before failing |
## limits |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_LIMIT_MAX_CERT_BYTES |
65536 |
Maximum PEM certificate size in bytes |
SHOREGUARD_LIMIT_MAX_METADATA_JSON_BYTES |
16384 |
Maximum metadata JSON payload size in bytes |
SHOREGUARD_LIMIT_MAX_DESCRIPTION_LEN |
1000 |
Maximum free-text description length |
SHOREGUARD_LIMIT_MAX_LABELS |
20 |
Maximum label entries per resource |
SHOREGUARD_LIMIT_MAX_LABEL_VALUE_LEN |
253 |
Maximum label value length (DNS-style) |
SHOREGUARD_LIMIT_MAX_NAME_LEN |
253 |
Maximum resource name length (DNS-style) |
SHOREGUARD_LIMIT_MAX_URL_LEN |
2048 |
Maximum URL length in any field |
SHOREGUARD_LIMIT_MAX_API_KEY_LEN |
512 |
Maximum API key token length |
SHOREGUARD_LIMIT_MAX_EVENT_TYPES |
50 |
Maximum event types per webhook subscription |
SHOREGUARD_LIMIT_MAX_EVENT_TYPE_LEN |
100 |
Maximum event type string length |
SHOREGUARD_LIMIT_MAX_ENV_VARS |
100 |
Maximum environment variables per sandbox/command |
SHOREGUARD_LIMIT_MAX_ENV_KEY_LEN |
256 |
Maximum env var key length |
SHOREGUARD_LIMIT_MAX_ENV_VALUE_LEN |
8192 |
Maximum env var value length |
SHOREGUARD_LIMIT_MAX_CONFIG_ENTRIES |
50 |
Maximum config map entries per resource |
SHOREGUARD_LIMIT_MAX_CONFIG_VALUE_LEN |
8192 |
Maximum config map value length |
SHOREGUARD_LIMIT_MAX_COMMAND_LEN |
65536 |
Maximum command-line string length |
SHOREGUARD_LIMIT_MAX_REASON_LEN |
1000 |
Maximum audit reason text length |
SHOREGUARD_LIMIT_MAX_TIMEOUT_SECS |
3600 |
Maximum per-operation timeout requestable by API |
SHOREGUARD_LIMIT_MAX_IMAGE_LEN |
512 |
Maximum container image reference length |
SHOREGUARD_LIMIT_MAX_PASSWORD_LEN |
128 |
Maximum password length accepted (bcrypt 72-byte limit) |
SHOREGUARD_LIMIT_MAX_REQUEST_BODY_BYTES |
10485760 |
Maximum HTTP request body size in bytes (default: 10 MiB) |
## oidc |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_OIDC_PROVIDERS_JSON |
[] |
JSON array of OIDC provider configs (name, issuer, client_id, ...) |
SHOREGUARD_OIDC_DEFAULT_ROLE |
viewer |
Role assigned to OIDC users whose claims do not match any mapping |
SHOREGUARD_OIDC_STATE_MAX_AGE |
300 |
Seconds an OIDC state cookie remains valid after authorize redirect |
## cors |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_CORS_ALLOW_ORIGINS |
[] |
Exact origins permitted by CORS (comma-separated via env var) |
SHOREGUARD_CORS_ALLOW_CREDENTIALS |
true |
Allow cookies/authorization headers in CORS requests |
SHOREGUARD_CORS_ALLOW_METHODS |
["*"] |
HTTP methods allowed by CORS (default: all) |
SHOREGUARD_CORS_ALLOW_HEADERS |
["*"] |
Request headers allowed by CORS (default: all) |
SHOREGUARD_CORS_MAX_AGE |
600 |
CORS preflight cache duration in seconds |
## prover |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_PROVER_TIMEOUT_MS |
5000 |
Z3 solver timeout per query in milliseconds |
SHOREGUARD_PROVER_MAX_QUERIES_PER_REQUEST |
10 |
Maximum queries per verify request |
SHOREGUARD_PROVER_ENABLED |
true |
Enable/disable the prover feature |
## discovery |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_DISCOVERY_ENABLED |
false |
Enable the gateway discovery background loop |
SHOREGUARD_DISCOVERY_DOMAINS |
[] |
Base domains to scan for _openshell._tcp SRV records |
SHOREGUARD_DISCOVERY_INTERVAL_SECONDS |
300 |
Background re-scan interval in seconds (>= 30) |
SHOREGUARD_DISCOVERY_DEFAULT_SCHEME |
grpc+tls |
Connection scheme assigned to auto-registered gateways |
SHOREGUARD_DISCOVERY_AUTO_REGISTER |
true |
If false, discovery only lists endpoints without registering |
SHOREGUARD_DISCOVERY_RESOLVER_TIMEOUT_SECONDS |
5.0 |
Per-query DNS resolver timeout in seconds |
SHOREGUARD_DISCOVERY_MDNS_ENABLED |
false |
Also browse mDNS/zeroconf (_openshell._tcp.local.) during discovery scans — finds gateways on the local network without any DNS server (homelab) |
SHOREGUARD_DISCOVERY_MDNS_TIMEOUT_SECONDS |
3.0 |
How long an mDNS browse listens for announcements |
## drift_detection |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_DRIFT_DETECTION_ENABLED |
false |
Enable the policy drift detection background loop |
SHOREGUARD_DRIFT_DETECTION_INTERVAL_SECONDS |
300 |
Re-scan interval in seconds (>= 60) |
## tracing |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_TRACING_ENABLED |
false |
Enable OpenTelemetry auto-instrumentation for FastAPI and gRPC client |
SHOREGUARD_TRACING_SERVICE_NAME |
shoreguard |
service.name resource attribute attached to every span |
SHOREGUARD_TRACING_OTLP_ENDPOINT |
`` | OTLP/HTTP traces endpoint URL; if unset, spans go to stdout console exporter |
SHOREGUARD_TRACING_SAMPLE_RATIO |
1.0 |
Head-based sampling ratio between 0.0 (off) and 1.0 (all) |
## cert_rotation |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_CERT_ROTATION_ENABLED |
true |
Enable the background proactive cert-rotation service |
SHOREGUARD_CERT_ROTATION_THRESHOLD_DAYS |
7 |
Rotate when remaining validity drops below this many days |
SHOREGUARD_CERT_ROTATION_POLL_INTERVAL_S |
3600 |
Seconds between rotation-check passes across gateways |
SHOREGUARD_CERT_ROTATION_MAX_RETRIES |
3 |
Retry attempts per rotation before deferring to the next cycle |
## digest |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_DIGEST_ENABLED |
false |
Dispatch a daily digest.daily webhook event summarising the last 24h (audit activity, sandbox churn, approvals, today's inference spend and top spenders, gateway health, webhook failures). On by default in --local mode unless set explicitly |
SHOREGUARD_DIGEST_HOUR |
7 |
Local hour of day after which the daily digest is sent |
SHOREGUARD_DIGEST_CHECK_INTERVAL |
600 |
Seconds between digest due-checks by the background task |
## budget |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_BUDGET_METERING_ENABLED |
false |
Meter per-sandbox inference usage by polling gateway logs (phase 1 — replaced by the upstream metering RPC when it lands). Required for budgets and the usage/spend views. |
SHOREGUARD_BUDGET_INTERVAL_SECONDS |
60 |
Usage metering poll interval in seconds |
SHOREGUARD_BUDGET_INFERENCE_SOURCES |
["inference", "proxy"] |
Log source substrings counted as inference requests |
SHOREGUARD_BUDGET_LOG_BATCH_LINES |
2000 |
Maximum log lines fetched per sandbox per metering poll |
## smtp |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_SMTP_HOST |
`` | Default SMTP relay host for email webhooks. When set, email webhooks only need to_addrs in their extra_config; per-webhook smtp_host still overrides. |
SHOREGUARD_SMTP_PORT |
587 |
Default SMTP port |
SHOREGUARD_SMTP_USERNAME |
`` | Default SMTP username |
SHOREGUARD_SMTP_PASSWORD |
`` | Default SMTP password (secret) |
SHOREGUARD_SMTP_FROM_ADDR |
shoreguard@localhost |
Default From address for email webhooks |
## node_alert |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_NODE_ALERT_ENABLED |
true |
Evaluate host thresholds periodically and fire node.threshold_breached / node.recovered webhook events on transitions (no-op unless a webhook subscribes) |
SHOREGUARD_NODE_ALERT_INTERVAL_SECONDS |
60 |
Seconds between host threshold evaluations |
SHOREGUARD_NODE_ALERT_GPU_TEMP_C |
85.0 |
GPU temperature breach threshold in degrees Celsius |
SHOREGUARD_NODE_ALERT_DISK_USED_PCT |
90.0 |
Root-disk usage breach threshold in percent |
SHOREGUARD_NODE_ALERT_MEM_USED_PCT |
95.0 |
Host memory usage breach threshold in percent |
## push |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_PUSH_CONTACT |
mailto:admin@localhost |
VAPID contact claim (mailto: or https:) sent to browser push services with each notification |
## curfew |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_CURFEW_ENABLED |
true |
Evaluate per-gateway curfews periodically (no-op unless a curfew is configured) |
SHOREGUARD_CURFEW_CHECK_INTERVAL |
60 |
Seconds between curfew window evaluations |
## backup |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_BACKUP_ENABLED |
false |
Periodically snapshot the SQLite DB + key material into a tar.gz archive (SHOREGUARD_BACKUP_DIR) |
SHOREGUARD_BACKUP_INTERVAL_HOURS |
24 |
Hours between periodic backup snapshots |
SHOREGUARD_BACKUP_DIR |
`` | Backup target directory (default: |
SHOREGUARD_BACKUP_KEEP |
7 |
Newest backup archives to retain during rotation |
## updates |
| Environment variable | Default | Description |
|---|---|---|
SHOREGUARD_UPDATES_ENABLED |
false |
Periodically check PyPI for a newer ShoreGuard release and fire a shoreguard.update_available webhook event (off by default — no phone-home without opt-in) |
SHOREGUARD_UPDATES_INTERVAL_HOURS |
24 |
Hours between update checks |
SHOREGUARD_UPDATES_URL |
https://pypi.org/pypi/shoreguard/json |
Release index JSON endpoint queried by the update check |