Live Mode (BYOC Engine)
Run Lumis in your own network. Your container executes the ruleset, and only counters are reported back. Live payloads never enter Lumis infrastructure.
What is Live Mode (BYOC Engine)?
Live Mode is a bring-your-own-container deployment of the Lumis compliance engine. The customer's container runs our Rust image on their own hosts. It polls your workspace's ruleset bundle, evaluates transactions in-memory against that bundle, and reports only counters back to the control plane.
Live payloads — the transaction data sent to /evaluate — never enter Lumis infrastructure. They are evaluated on hosts you control, and the request body is kept in memory only.
Customer-hosted data plane
Our Rust image runs in your container runtime. You control the network, the storage, and the blast radius.
Ed25519-signed bundles
The control plane signs every ruleset bundle; the engine verifies the signature before loading it.
Counts-only telemetry
The heartbeat reports { evaluations_count, period_seconds } and nothing else.
Ed25519 evaluation seals
Every evaluation is signed with a per-deployment key for non-repudiable audit records.
Deployment
The engine ships as a single static binary in a minimal image (alpine-to-scratch build, roughly 8 MB). It has no OpenSSL dependency — TLS uses rustls. The container listens on port 8080 by default.
docker run -d --name lumis-engine -p 8080:8080 \ -e LUMIS_API_KEY=lmk_live_... \ -e LUMIS_ENGINE_PUBKEY=<64-hex-public-key> \ -e LUMIS_CONTROL_PLANE_URL=https://<your-control-plane-url> \ ghcr.io/nytmmyrrh/fintech-compliance-sandbox/lumis-engine:latest
LUMIS_CONTROL_PLANE_URL is the Lumis-hosted control-plane URL we provide for your workspace — you don't host or deploy it yourself. It appears under Console → Settings → Live Mode. Leave it unset only if you're testing the image locally.
LUMIS_API_KEY and LUMIS_ENGINE_PUBKEY are required at startup; without them the process exits with a clear error. All other variables are optional.
Endpoints exposed by the engine:
- ›
GET /health— Liveness + version/region/environment. - ›
GET /pubkey— The engine's evaluation-seal public key (64 hex). - ›
POST /evaluate— Runs one payload through a selected active ruleset — add a ruleset_id field to the body to pick one, otherwise the default runs. - ›
POST /api/v1/engine/export— Flushes PII-safe evaluation seal records to your SIEM webhook (Enterprise).
Workflow
1. Sync
The engine polls the control plane on an interval (default 300s), downloads every active ruleset bundle, verifies each Ed25519 signature against LUMIS_ENGINE_PUBKEY (all-or-nothing — one failure keeps the previous set), and caches them keyed by ruleset_id.
2. Evaluate
Each /evaluate call runs the payload through the in-memory DAG. The result is sealed with an Ed25519 signature (per-deployment LUMIS_ENGINE_SIGNING_KEY) so audit records are non-repudiable. The engine is stateless — request bodies are never logged or persisted.
3. Heartbeat
The engine reports { evaluations_count, period_seconds } to the control plane, which applies the counts against your monthly simulation quota. No rule names, payload fragments, stack traces, or URLs are transmitted.
Security & threat model
- ›Bundles are Ed25519-signed by the control plane; the engine refuses to load unsigned or incorrectly signed bundles.
- ›Evaluation seals are Ed25519-signed per deployment. A compromised engine can be rotated by rotating LUMIS_ENGINE_SIGNING_KEY.
- ›Telemetry boundary: the heartbeat is { evaluations_count, period_seconds } ONLY — no rule names, no payload fragments, no stack traces, no URLs.
- ›The engine keeps request bodies in memory only. It never writes them to disk and never ships them to Lumis.
Environment variable matrix
| Variable | Required | Purpose |
|---|---|---|
LUMIS_API_KEY | Required | Control-plane engine API key (workspace-scoped). Authenticates sync + heartbeat. |
LUMIS_ENGINE_PUBKEY | Required | Control-plane bundle signing public key (64 hex chars). The engine rejects any bundle not signed by this key. |
LUMIS_CONTROL_PLANE_URL | Optional | Control-plane URL Lumis provides (Console → Settings → Live Mode). Unset disables sync and heartbeat. |
LUMIS_ENGINE_SIGNING_KEY | Optional | 64-hex Ed25519 seed used to sign evaluation seals. A random key is generated at startup if unset (seals then rotate on restart). |
LUMIS_SYNC_INTERVAL_SECS | Optional | Default 300. Minimum 10. |
LUMIS_HEARTBEAT_INTERVAL_SECS | Optional | Default 300. Minimum 10. |
LUMIS_EXPORT_INTERVAL_SECS | Optional | Default 60. Minimum 10. How often evaluation seal records flush to your SIEM audit webhook (Enterprise). |
LUMIS_DEPLOYMENT_ID | Optional | Stable identifier shown on the console Live Mode page. Defaults to the engine public key hex. |
PORT | Optional | Default 8080. |
72h grace & revocation
If the control plane becomes unreachable, the engine keeps serving evaluations from its cached bundle for up to 72 hours (grace period). During grace the license state is grace.
A 401 response to any sync or heartbeat call immediately revokes the license. After revocation the engine returns 403 { error: "license_revoked" } for /evaluate — a hard stop.
FAQ
Does the engine call Lumis?
Only two calls: sync (fetch the signed ruleset bundle) and heartbeat (report counts). Neither contains live payload data.
Where do payloads travel?
Nowhere. Payloads sent to /evaluate stay in your engine's memory on your hosts.
What license tiers support Live Mode?
Pro, Business, and Enterprise workspaces. Free workspaces receive a 401 license_not_active.
Can I run it fully air-gapped?
After a successful sync you have up to 72 hours of service without any connection to the control plane. Beyond that the engine cannot verify or refresh the bundle.
Which ruleset does the engine evaluate?
All of your active rulesets, served from one container. Pass a ruleset_id field in the /evaluate body to select one; without it, the most recently activated ruleset runs. Add a ruleset_id field in the payload to pick a specific one. Draft rulesets stay in the sandbox only — they are never compiled or shipped to the engine.
Does the engine send data anywhere?
Only to the Lumis control plane, and only when you configure an SIEM webhook. Every evaluation produces a cryptographic seal plus a sanitized record (no payload values) which the engine batches and forwards to your configured audit webhook. The original request body never leaves your container.
Legal note
The Live Mode engine is a decision-aid and testing tool. Automated-decision and sanctions obligations remain with the customer, who remains responsible for compliance outcomes when routing production traffic through the engine. Running evaluations in-network may reduce liability surface — it is never a guarantee of zero liability.
See the Terms of Service (§7, No Live-Engine Liability) and the Privacy Policy for the full legal treatment.