Configuration overview
How Mira layers a deployment-wide config file, optional per-repo .mira.yaml overrides, the admin Settings UI, and environment variables.
Mira's configuration is layered. Highest priority wins.
| Layer | File / surface | Lifecycle | Scope |
|---|---|---|---|
| Deployment-wide | mira.yaml via --config | Mounted into the container at startup | Default LLM, filter, review settings for every repo this Mira instance reviews. Full schema. |
| Admin UI overrides | Dashboard → Settings → Review behaviour overrides | Stored in Mira's database, editable without restart | Runtime tweaks to filter + review knobs only. Model selection is intentionally not exposed here. It lives in mira.yaml and the Settings → Models picker. |
| Per-repo file | .mira.yaml at the repo root, optional | Committed to the repo | Per-repo overrides, including llm.model if a single repo needs a different model. Same schema as mira.yaml. |
| Secrets & infra | Environment variables | Set in your host (Docker, Fly, Railway, Render) | GitHub App credentials, OpenRouter key, database URL, admin password |
Most teams point Mira at one mira.yaml, tune the noise filter from the
admin Settings page, and never touch a per-repo .mira.yaml. Reach for
.mira.yaml only when one repo needs to deviate from the rest of the org,
typically a noisier or quieter confidence_threshold, occasionally a
different model.
Why model selection isn't in the admin UI
Model swaps have spend implications and are something you set deliberately once per deployment, not iterate on weekly. Two surfaces cover them:
mira.yaml: the canonical place for the deployment's default model and fallback chain. Version-controllable.- Dashboard → Settings → Models: a searchable picker over your backend's
live catalog (any free-form id works too) for changing the indexing and
review models without rewriting
mira.yaml. Persists to the same DB the admin overrides use. A saved picker choice overridesmira.yamluntil you select Inherit from deployment config; Mira logs the effective model and its source on every review, so the override is never silent.
If you genuinely need a different model on a single repo, set llm.model
in that repo's .mira.yaml. There's no equivalent UI for it because the
use case is rare enough that requiring a file commit is the right
friction level.
Decision tree
- Setting up a new Mira deployment? → write a
mira.yamland pass it via--config. - Tuning the noise filter or review behaviour? → Dashboard → Settings → Review behaviour overrides. No restart required.
- One repo wants different review behaviour? → commit a
.mira.yamlat its root. - Switching models for the whole deployment? → either edit
mira.yamland restart, or use Settings → Models. - Need to set credentials, DB URL, or admin password? → environment variables only; never commit secrets to YAML.
Precedence
For any given setting, Mira resolves in this order (highest priority first):
- CLI overrides passed via
--override key=value(rare; see the CLI docs formira review). - Per-repo
.mira.yamlin the repo's working tree. - Admin UI overrides (DB-backed,
filter+reviewonly). - Deployment-wide
mira.yamlloaded via--configat server startup. - Environment variable fallbacks (
MIRA_MODEL,DATABASE_URL). - Built-in defaults.
The indexing/review models have one extra layer: a model saved in
Settings → Models (DB-backed) beats mira.yaml's
llm.indexing_model / llm.review_model. Select Inherit from deployment
config in the picker to clear it and hand control back to the file.
Where to next
Deployment config (mira.yaml)
The canonical schema reference: every key, default, and description.
.mira.yaml overrides
Optional per-repo overrides, same schema, scoped to one repo.
Environment variables
What's still env-only (secrets and infra) and what's now optional.
Choosing a model
OpenRouter routing, indexing vs review models, fallback chains.
Set up Forgejo
Connect Mira to Forgejo or Codeberg with an access token and a webhook — the same review pipeline as GitHub and GitLab.
Deployment config (mira.yaml)
The deployment-wide YAML loaded via `mira serve --config`. The main place Mira is configured, and the canonical schema reference for every llm / filter / review key.

Mira