Everything about Argus — the reviewer registry, profiles, host rules, routing, CLI commands, and
cost gates — lives in config.yaml.
API keys are the one thing that is not in config: they come from environment variables only.
config.yaml at a glance
| Section | What it holds |
|---|---|
defaults | Global knobs: route_preference, confidence threshold, corroboration boost, merge_line_tolerance, default profile. |
reviewers | The registry — one entry per reviewer with its route(s), model IDs, context window, tier, and cost. |
profiles | Named rosters (quick, standard, panel, security, deep, favorites, direct, leaderboard-top5). |
host_rules | Per-host skip / add rules for host-CLI awareness. |
cost | Warn / hard-block thresholds for review and benchmark modes. |
Routing preference new
A single knob, route_preference under defaults:, decides which provider a
dual-route reviewer tries first:
| Value | Order | When to use |
|---|---|---|
openrouter public default | OpenRouter first, direct API as fallback. | The simplest setup — one OPENROUTER_API_KEY covers most reviewers. |
direct | Each provider’s own API first, OpenRouter as fallback. | Cheaper / use your own subscriptions, or when your OpenRouter balance is depleted. |
Only dual-route reviewers are reordered by this knob: glm-5.2,
minimax-m3, deepseek-v4-pro, and the custom-only hermes-4.3. CLI reviewers
(Codex / Claude / OpenCode / Gemini) are never reordered — their CLI subscription stays
primary and OpenRouter stays a true fallback.
Override precedence
Precedence is CLI flag > env var > config:
# 1. CLI flag on dispatch.py / verify.py / benchmark.py / estimate_cost.py
python scripts/dispatch.py ... --route-pref direct
python scripts/verify.py --all --prefer-direct # shorthand
python scripts/dispatch.py ... --prefer-openrouter # shorthand
# 2. Environment variable
export ARGUS_ROUTE_PREF=direct
# 3. config.yaml default
# defaults:
# route_preference: openrouter
direct profileFor when your OpenRouter balance is depleted, pair
route_preference: direct with the direct profile
(direct-API subs only, no Gemini): glm-5.2, minimax-m3, deepseek-v4-pro, codex, claude, opencode.
Environment variables
API keys live in the environment, never on disk. aichat reads AICHAT_<CLIENT>_API_KEY,
which Argus forwards from $<PROVIDER>_API_KEY at subprocess dispatch time. The Claude CLI
uses its own auth.
| Variable | Purpose | Required? |
|---|---|---|
ARGUS_HOME | Path to the Argus checkout | required (set to repo root) |
OPENROUTER_API_KEY | OpenRouter — covers most reviewers | recommended (public default route) |
ZAI_API_KEY | z.ai Coding Plan endpoint (GLM direct) | optional |
MINIMAX_API_KEY | MiniMax direct | optional |
DEEPSEEK_API_KEY new | DeepSeek direct (api.deepseek.com) | optional |
KIMI_API_KEY | Consumer-scoped (not Moonshot Platform) | optional |
GEMINI_API_KEY | Gemini | optional |
OPENAI_API_KEY | Used by the Codex CLI fallback | optional |
NOUSRESEARCH_API_KEY | Hermes direct | optional |
ARGUS_ROUTE_PREF | openrouter | direct route override | optional |
ARGUS_YES_COST=1 | Downgrade a cost hard-block to a warning | optional |
aichat clients
Run python scripts/install_aichat.py --merge to generate
~/.config/aichat/config.yaml with a client definition per provider route. No keys are written
— each client reads its AICHAT_<CLIENT>_API_KEY from the environment, which Argus
sets at dispatch. The universal aichat adapter handles all of the OpenRouter and direct-API routes.
Cost gates
Before any spend, Argus estimates cost and applies a warn / hard-block gate.
| Mode | Warn | Hard block | Override |
|---|---|---|---|
| review | $0.50 | $2.00 | --yes-cost / ARGUS_YES_COST=1 |
| benchmark | $10 | $30 | --yes-cost / ARGUS_YES_COST=1 |
| OR balance | auto warn (review) | blocks (benchmark) when available < safety×estimate | --skip-balance-check |
Paid-CLI reviewers (Gemini / Codex / Claude / OpenCode / Copilot) have cost_per_m: null,
so they count as $0 in the estimate.