Configuration
Every service gets a sigil.toml at the repo root (or wherever you point --config). This page is the full reference.
Minimal example
Section titled “Minimal example”[service]name = "api"
[deploy]compose_file = "docker-compose.yml"health_url = "http://localhost:8080/health"
[judge]provider = "ollama"model = "qwen3:14b"[service]
Section titled “[service]”[service]name = "api" # service identifier (required)baseline = "merge-base" # merge-base | main | <ref>[deploy]
Section titled “[deploy]”[deploy]compose_file = "docker-compose.yml"health_url = "http://localhost:8080/health"health_timeout_s = 60env_file = ".env.test"[scenarios]
Section titled “[scenarios]”[scenarios]root = ".sigil/scenarios" # location of scenario fileskey = "age1..." # public age key for holdout encryption[judge]
Section titled “[judge]”See Configuring Judges.
[generate]
Section titled “[generate]”Optional override for scenario generation (sigil scenario generate):
[generate]provider = "anthropic"model = "claude-opus-4-7"context_specs = ["docs/specs/auth.md", "docs/specs/billing.md"][ci]status_context = "sigil/api"comment = trueauto_merge = true[policy]
Section titled “[policy]”[policy]max_staleness_for_allow_s = 60 # freshness gatemin_window_for_auto = 50 # min evals before AUTO promotionmin_clean_allow_rate = 0.98cooldown_after_incident_h = 24[policy.thresholds]
Section titled “[policy.thresholds]”Satisfaction score thresholds, per priority:
[policy.thresholds]p0 = { allow = 0.95, review = 0.85 } # below 0.85 -> BLOCKp1 = { allow = 0.90, review = 0.75 }p2 = { allow = 0.80, review = 0.60 }[scenarios.env]
Section titled “[scenarios.env]”Allow-list of env vars exposed to scenarios via sigil.env():
[scenarios.env]ALICE_PASSWORD = { from = "ALICE_PASSWORD" } # pass throughTEST_API_KEY = { from = "CI_TEST_API_KEY" } # rename from another varAnything not listed is invisible to scenarios.