Everything you need to install, configure, and operate Reflex Runtime.
Reflex is a Kubernetes controller that watches your Prometheus metrics, detects SLO breaches, and runs a chosen remediation. Three steps:
Trust ladder details are below; the live demo at reflexslo.io/demo shows the full loop in real time.
charts.reflexslo.io is the supported install path.--set prometheus.install.enabled=true.OPENAI_API_KEYat startup and never persists it.Reflex runs in your Kubernetes cluster via Helm. Requirements: Kubernetes 1.24+, Helm 3.x, Prometheus.
# Add Reflex chart repository helm repo add reflex https://charts.reflexslo.io helm repo update # Install (observe mode, 3 SLOs, 3 Reflexes) helm install reflex reflex/reflex-runtime \ --set prometheus.url="http://prometheus:9090"
After purchasing at reflexslo.io/pricing, you'll receive a license key via email.
helm install reflex reflex/reflex-runtime \ --set license.key="YOUR_LICENSE_KEY" \ --set prometheus.url="http://prometheus:9090" \ --set slack.webhookUrl="https://hooks.slack.com/services/..." # optional
http://prometheus-kube-prometheus-prometheus.monitoring:9090http://prometheus-server.monitoring:9090--set prometheus.install.enabled=trueFollow the installation steps above.
Download the CLI from the latest release, then:
# Port-forward Prometheus kubectl port-forward -n monitoring svc/prometheus 9090:9090 & # Preview what Reflex finds (dry-run) reflex setup --dry-run --prometheus-url http://localhost:9090 # Apply SLOs when ready reflex setup --prometheus-url http://localhost:9090
kubectl get slo -A kubectl get reflex -A kubectl get reflexrecommendation -A
kubectl logs -l app.kubernetes.io/name=reflex-runtime -f
Every reflex starts in observe mode. Promote when you trust it.
Logs what it would do. Sends Slack notification. No action taken.
Sends Slack message with Approve / Reject / Snooze buttons. Waits for human approval before executing.
Executes immediately when triggered. Notifies Slack after the action.
# observe → dry-run
kubectl patch reflex <name> -n <namespace> \
--type=merge -p '{"spec":{"automationLevel":"dry-run"}}'
# dry-run → auto
kubectl patch reflex <name> -n <namespace> \
--type=merge -p '{"spec":{"automationLevel":"auto"}}'Reflex sends breach notifications and approval requests to Slack.
Go to api.slack.com/apps → Create New App → From scratch.
In the app settings → Incoming Webhooks → toggle On → Add New Webhook → select your alerts channel.
--set slack.webhookUrl="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
For dry-run mode approval buttons to work, enable Interactivity in your Slack app and set the Request URL to your controller's callback endpoint:
https://<your-reflex-controller>:8080/slack/callback
This requires the controller to be reachable from the internet (LoadBalancer, Ingress, or ngrok for testing).
Key Helm values for customizing Reflex:
| Parameter | Default | Description |
|---|---|---|
| license.key | "" | Pro license key from purchase email |
| prometheus.url | http://prometheus:9090 | Prometheus server URL |
| slack.webhookUrl | "" | Slack incoming webhook URL |
| slack.enabled | true | Enable Slack notifications |
| ai.apiKey | "" | OpenAI API key (BYOK) |
| ai.model | gpt-4o-mini | AI model for analysis |
| events.enabled | true | Enable JSONL event logging |
| prometheus.install.enabled | false | Bundle kube-prometheus-stack |
# SLO: API must be 99.9% available
apiVersion: reflex.io/v1
kind: SLO
metadata:
name: api-availability
spec:
service: api-gateway
indicator:
type: availability
metric: http_requests_total
goodQuery: 'sum(rate(http_requests_total{service="api",status!~"5.."}[5m]))'
totalQuery: 'sum(rate(http_requests_total{service="api"}[5m]))'
objective:
target: 99.9
window: "30d"
errorBudget:
policy: high
burnRate:
critical: 14.4
high: 6.0# Reflex: restart when error rate spikes
apiVersion: reflex.io/v1
kind: Reflex
metadata:
name: restart-api
spec:
trigger:
errorRate: "> 5%"
window: "5m"
action:
type: restart
target: deployment/api-gateway
automationLevel: observe # Start safe
cooldown: "10m"| Feature | Free | Pro ($149/mo) |
|---|---|---|
| Clusters | Unlimited | Unlimited |
| SLOs | 3 | Unlimited |
| Reflexes | 3 | Unlimited |
| Modes | Observe only | Observe + Dry-run + Auto |
| Slack notifications | Yes | Yes + approval buttons |
| AI recommendations | No | Yes (BYOK OpenAI) |
| Support | Community | Priority email |
Check logs: kubectl logs -l app.kubernetes.io/name=reflex-runtime
Common causes: invalid license key, Prometheus URL unreachable.
Verify Prometheus can reach your services. Check that your SLO queries match your actual metric labels.
Verify SLACK_WEBHOOK_URL is set. Check controller logs for webhook errors.
Check that the reflex's trigger thresholds are being exceeded. View SLO state: kubectl get slo -A
After installing, all CRD fields are self-documenting:
kubectl explain slo.spec kubectl explain slo.spec.indicator kubectl explain reflex.spec kubectl explain reflex.spec.action kubectl explain reflexrecommendation.spec
Pro customers get priority email support. Free tier users can file issues on GitHub.