Configuration
The full .argus.yml consumer configuration reference.
Configuration
This page explains .argus.yml — a small optional config file that customizes how Argus reviews your repository. If you never create one, Argus works fine with sensible defaults; this page is for when you want to adjust them.
Prerequisites: Argus installed and running (see Getting Started), and an idea of which rule you want to change.
The short version
Place a file named .argus.yml in the root of your repository. Every field is optional — leave one out and Argus uses its built-in default.
The most common config (keeps the defaults, and makes P0 and P1 findings block the merge):
# .argus.yml
version: "0.4" # schema version — always include this
skills:
- design-review # the review skill to activate
fail-on: [P0, P1] # findings at these levels will fail CI (block merge)
What happens if I create no config at all?
You get the defaults. Concretely:
- Argus uses the
design-reviewskill only (design tokens, hardcoded values, dark mode, accessibility). - It expects design tokens to start with
--ds-. - P0 and P1 findings block the merge; P2 and P3 are reported but don’t block.
- It skips
node_modules/,dist/, and.git/automatically. - It reports up to 50 findings, grouped by severity.
Full schema reference
# ── Schema version ────────────────────────────────────────────────
version: "0.4" # string, must be "0.2", "0.3", or "0.4"
# ── Skills to activate ────────────────────────────────────────────
skills:
- design-review # the stable review skill
# - security-review # (coming soon) secrets, SQL injection, CORS
# - api-contract # (coming soon) REST conventions, error codes
# - performance # (coming soon) N+1 queries, bundle size
# - infrastructure # (coming soon) Dockerfile hygiene, K8s limits
# ── Rule overrides ────────────────────────────────────────────────
overrides:
token-prefix: "--ds-" # what your tokens start with (default: "--ds-")
severity:
hardcoded-spacing: P3 # downgrade this rule from P1 to P3 for this project
bem-naming: P2 # downgrade from P1 to P2
# ── Ignore list ───────────────────────────────────────────────────
ignore:
paths: # files/directories to skip entirely
- "src/legacy/**"
- "tests/fixtures/**"
- "vendor/**"
rules: # rules to disable completely
- bem-naming # e.g. this project doesn't use BEM
# ── Failure thresholds ────────────────────────────────────────────
fail-on:
- P0
- P1 # default: [P0, P1]
# ── Project lessons ───────────────────────────────────────────────
lessons-path: .argus/LESSONS.md # path to per-project lessons (default; absent = none)
# ── Output options ────────────────────────────────────────────────
output:
group-by-severity: true # group output P0 → P1 → P2 → P3 (default: true)
show-token-names: true # include "Token: var(--ds-*)" lines (default: true)
max-findings: 50 # cap findings per review (default: 50, max: 500)
Field-by-field guide
version
| Type | string |
| Required | No (default "0.4") |
| Valid values | "0.2", "0.3", "0.4" |
When to use it: always. It declares which schema version your file follows.
What happens if you omit it: Argus assumes "0.4". Including it protects you later — if the schema evolves, Argus can still parse your file correctly.
skills
| Type | list of strings |
| Default | ["design-review"] |
When to use it: rarely today — design-review is the only stable skill.
| ID | Status | Description |
|---|---|---|
design-review |
Stable | Design tokens, hardcoded values, dark mode, accessibility |
security-review |
Coming soon | Hardcoded secrets, SQL injection, CORS misconfiguration |
api-contract |
Coming soon | REST conventions, error codes, API versioning |
performance |
Coming soon | N+1 queries, bundle size, unused imports |
infrastructure |
Coming soon | Dockerfile hygiene, K8s resource limits, IaC drift |
What happens if you omit it: you get design-review — the current default and the only stable option.
overrides.token-prefix
| Type | string |
| Default | "--ds-" |
When to use it: your design tokens use a different prefix, e.g. --brand- or --my-prefix-.
overrides:
token-prefix: "--brand-"
What happens if you omit it: Argus looks for --ds-* tokens. If your project uses another prefix, you’ll get false positives — Argus flags correct code as “missing token.”
overrides.severity
| Type | map of rule-id: severity |
| Default | {} (no overrides) |
| Valid severities | P0, P1, P2, P3 |
When to use it: a rule fires on code your team intentionally keeps (for example, a legacy file you’ll migrate later). Downgrade it so it doesn’t block work.
overrides:
severity:
hardcoded-spacing: P3 # report it, but don't block merge
You can only downgrade, never upgrade. You can’t raise a rule from P1 to P0 — overrides only make rules less strict.
What happens if you omit it: every rule keeps its default severity.
ignore.paths
| Type | list of glob strings |
| Default | ["node_modules/**", "dist/**", ".git/**"] |
When to use it: you have folders Argus should skip — legacy code, generated files, third-party packages.
What happens if you omit it: Argus skips node_modules, dist, and .git automatically. Your custom paths are added to these defaults, not replacing them.
ignore.rules
| Type | list of rule ID strings |
| Default | [] |
When to use it: a rule is completely wrong for your project (e.g. BEM naming in a project that doesn’t use BEM).
What happens if you omit it: all rules stay active. Prefer downgrading via overrides.severity — a fully disabled rule leaves a documentation gap in your review.
fail-on
| Type | list of severity strings |
| Default | ["P0", "P1"] |
| Valid values | P0, P1, P2, P3 |
When to use it: you want stricter or more lenient merge gates.
# Only P0 findings block merge (lenient)
fail-on: [P0]
# All findings block merge (strict)
fail-on: [P0, P1, P2, P3]
What happens if you omit it: P0 and P1 findings make the CI check fail (exit code 1), blocking the merge. Lower-severity findings still appear in the comment but don’t block.
lessons-path
| Type | string (path, relative to repo root) |
| Default | .argus/LESSONS.md |
Path to the project lesson file Argus loads into every review for this repo. Each entry records a project-specific fact Argus keeps getting wrong (a legitimate pattern, a token convention, a known exemption). Absent file = no lessons loaded = no behavior change. Validate it with make validate-lessons FILE=.argus/LESSONS.md; a starter lives at config/lessons.template.md.
# Default
lessons-path: .argus/LESSONS.md
# Keep lessons in the docs tree instead
lessons-path: docs/argus-lessons.md
output.max-findings
| Type | integer |
| Default | 50 |
| Range | 1 – 500 |
When to use it: your repo is large and a single review finds hundreds of issues; cap the comment so it stays readable.
What happens if you omit it: Argus reports up to 50 findings — highest severity first — and adds a “N more findings suppressed” note when it hits the cap.
Complete example
Here’s a realistic .argus.yml for a team adopting Argus gradually on a large codebase:
version: "0.4" # always include the schema version
skills:
- design-review # activate the standard review skill
overrides:
token-prefix: "--brand-" # our tokens use the --brand- prefix
severity:
hardcoded-spacing: P3 # report spacing issues but don't block
bem-naming: P3 # we're not using BEM yet — downgrade, don't disable
ignore:
paths:
- "src/legacy/**" # old code we'll migrate later
- "packages/third-party/**" # vendor code we don't own
fail-on: [P0] # only P0 blocks merge during adoption
output:
max-findings: 20 # keep review comments short
How the config is loaded
- At the start of every review, the composite action runs
tools/load_config.py. - It looks for
.argus.ymlin your repository’s root (not in the Argus repo). - Your fields are merged with the built-in defaults — missing fields use defaults.
- The resolved config is written to
$GITHUB_ENVso later steps can read it. - If your file has validation errors, the review fails immediately with a clear error message.
Tip: you can validate a config locally before pushing:
python3 tools/load_config.py --validate-only
Troubleshooting
Q: My config is invalid — the review fails with a config error.
Run the validation command above. Common causes: a typo in a field name, a wrong version value, or a severity outside P0–P3.
Q: Argus flags correct code as “missing token” everywhere.
Your token-prefix is probably wrong. If your tokens are --brand-*, set overrides.token-prefix: "--brand-". If you don’t use tokens at all, you may want to downgrade token rules while you adopt them.
Q: I set fail-on: [P0] but P1 findings still block the merge.
The config file may not be where Argus expects it. Confirm the path is exactly .argus.yml at the repository root (not in a subfolder) and that the change is in the branch being reviewed.
Q: I want to silence a rule completely, but I’m told to prefer downgrading.
Downgrading keeps the finding visible (as P3) so you don’t lose track of it. If a rule is genuinely irrelevant (like BEM in a non-BEM project), ignore.rules is the right tool.