OpenSRE uses a hierarchical configuration system managed by the config-service. Configuration flows from org-level defaults down to team-specific overrides — dicts merge, lists replace.
The minimal required configuration is one env var:
| Variable | Required | Description |
|----------|----------|-------------|
| OPENROUTER_API_KEY | Yes | LLM API key via OpenRouter |
| SLACK_BOT_TOKEN | No | Slack bot token (xoxb-...) |
| SLACK_APP_TOKEN | No | Slack app token (xapp-...) for Socket Mode |
| NEO4J_URI | No | Neo4j connection URI (default: bolt://localhost:7688) |
| NEO4J_USERNAME | No | Neo4j username (default: neo4j) |
| NEO4J_PASSWORD | No | Neo4j password |
| ADMIN_TOKEN | No | Admin token for web UI |
integrations:
prometheus:
url: "http://prometheus:9090"
enabled: true
integrations:
grafana:
url: "http://grafana:3000"
api_key: "your-grafana-api-key"
enabled: true
integrations:
datadog:
api_key: "your-datadog-api-key"
app_key: "your-datadog-app-key"
enabled: true
integrations:
elasticsearch:
url: "http://elasticsearch:9200"
enabled: true
integrations:
pagerduty:
api_key: "your-pagerduty-api-key"
enabled: true
OpenSRE routes LLM requests through LiteLLM, which supports any LLM provider:
# litellm_config.yaml
model_list:
- model_name: claude-3-5-sonnet
litellm_params:
model: openrouter/anthropic/claude-3-5-sonnet
api_key: os.environ/OPENROUTER_API_KEY
Configuration is stored in the config-service and organized hierarchically:
org (base defaults)
└── team (team-specific overrides)
└── agent (per-agent overrides)
Dict values are deep merged at each level. List values are replaced — if a team specifies a list, it replaces the org-level list entirely.
Enable or disable specific investigation skills per agent:
{
"agents": {
"my-agent-id": {
"skills": {
"k8s-debug": true,
"datadog-metrics": false
}
}
}
}
See Investigation Skills for the full list of available skills.