Settings¶
The Settings section configures project-level infrastructure and observability integrations. Changes are written to YAML config files and take effect after a reload.

Navigation¶
The left panel groups settings into four categories:
| Category | Item | Purpose |
|---|---|---|
| Infrastructure | Redis | Shared state for multi-worker deployments |
| Observability | Telemetry | OpenTelemetry trace and metric export |
| Testing | LLM Judge | Automated quality evaluation for CI |
| Security | API Access | Control which HTTP API surfaces are mounted |
Redis¶
Redis is required when running tuvl with more than one uvicorn worker. Without Redis, OAuth2 CSRF state tokens and Biscuit token revocation lists are stored only in each worker's memory — causing random failures when a request lands on a different worker than the one that started the session.
Redis YAML format¶
kind: RedisConfig
version: v1
enabled: true
metadata:
name: redis-primary
spec:
type: redis
connection:
host: "${REDIS_HOST:localhost}"
port: "${REDIS_PORT:6379}"
db: 0
password: "${REDIS_PASSWORD:}"
Redis fields¶
| Field | Description | Default |
|---|---|---|
host |
Redis server hostname | localhost |
port |
Redis port | 6379 |
db |
Database index (0–15) | 0 |
password |
AUTH password (leave blank for no auth) | (empty) |
env var syntax
All fields support ${ENV_VAR:default} substitution. Set REDIS_HOST, REDIS_PORT, and REDIS_PASSWORD in your .env file or environment.
Telemetry¶
tuvl ships with built-in OpenTelemetry support. Traces and metrics can be exported to any OTLP-compatible backend (Jaeger, Tempo, Honeycomb, Datadog, …).
Telemetry YAML format¶
kind: TelemetryConfig
version: v1
enabled: true
metadata:
name: otel
spec:
exporter: otlp-grpc # otlp-grpc | otlp-http | jaeger | console
endpoint: "${OTEL_EXPORTER_OTLP_ENDPOINT:http://localhost:4317}"
service_name: "${OTEL_SERVICE_NAME:tuvl}"
sample_rate: 1.0 # 0.0–1.0 (1.0 = trace everything)
Exporter options¶
| Exporter | Description |
|---|---|
otlp-grpc |
OpenTelemetry Protocol over gRPC (default) |
otlp-http |
OpenTelemetry Protocol over HTTP/JSON |
jaeger |
Jaeger native UDP exporter (legacy) |
console |
Print spans to stdout — useful for debugging |
See the Telemetry configuration guide for a full guide including Grafana Tempo setup.
LLM Judge¶
The LLM Judge powers tuvl's tuvl test command. It evaluates workflow outputs against natural-language quality criteria using a secondary LLM.
LLM Judge YAML format¶
kind: LLMJudgeConfig
version: v1
enabled: true
metadata:
name: judge
spec:
model: default # references an AgentModel metadata.name
temperature: 0.0 # deterministic for consistent scoring
pass_threshold: 0.8 # 0.0–1.0; runs below this score are flagged
Judge fields¶
| Field | Description |
|---|---|
model |
AgentModel to use for evaluation (see AI Models) |
temperature |
Set to 0.0 for reproducible judgements |
pass_threshold |
Minimum pass score (0.0–1.0). Runs below this fail the test. |
See the LLM Judge guide and the Testing Workflows reference for how to write test cases and run them in CI.
API Access¶
Control which HTTP API surfaces are mounted. This edits .tuvl/system.yaml
(kind: SystemConfig) — see Configuration Overview
for the full knob reference.
Expose model CRUD APIs¶
A toggle for spec.api.expose_model_crud. When off, only workflow APIs are
mounted — /models/* CRUD endpoints return 404. This applies in production too;
the TUVL_EXPOSE_MODEL_CRUD env var overrides whatever is saved here.
Restart required to apply changes
The API surface is mounted once at startup. Save your config here, then
restart the engine with tuvl run (or tuvl dev) for changes to take effect.