Run the panel in five minutes
atcr is one Go binary with three faces — a CLI, an MCP server, and a companion Agent Skill — all running on the same engine. It is local-first and bring-your-own-keys: nothing leaves your machine except the model calls you configure.
Install
Requires Go 1.25 or newer.
# 1. install the binary go install github.com/samestrin/atcr/cmd/atcr@latest # 2. scaffold .atcr/config.yaml + the editable persona files atcr init
atcr init writes .atcr/config.yaml — the roster (which agents
run, in which lane) plus project defaults such as payload_mode and
fail_on — and drops the editable persona files under
.atcr/personas/.
Configure providers
Providers and agents are defined in ~/.config/atcr/registry.yaml. Each
provider is a base_url plus an api_key_env naming the
environment variable that holds the key — resolved at invoke time and never written to
disk:
# ~/.config/atcr/registry.yaml
providers:
openrouter:
base_url: https://openrouter.ai/api/v1
api_key_env: OPENROUTER_API_KEY
agents:
greta:
provider: openrouter
model: claude-sonnet-4.6
export OPENROUTER_API_KEY=sk-...
The roster in .atcr/config.yaml lists which of those agents actually run —
add or remove an agent name to change who reviews. Resolution runs
CLI flag > .atcr/config.yaml > registry.yaml > embedded default. A
repo can also ship its own providers in .atcr/registry.yaml; because a
project-defined provider could direct a key at an arbitrary endpoint, atcr gates them —
run atcr trust to authorize one before any review will use it.
Verify with doctor
Before spending a real review, self-test every configured endpoint:
$ atcr doctor AGENT PROVIDER MODEL STATUS SOURCE greta openrouter claude-sonnet-4.6 ok user bruce openrouter gpt-4o ok user kai local llama-3.3-70b ok project # exit 0 — every agent has a working invocation path
review
Resolve the git range, build the payload, and fan it out to the roster. Zero arguments
works on a feature branch — the range resolves against the default branch and the review
id is recorded in .atcr/latest.
$ atcr review → range main..HEAD (4 files, 211 lines) → fan-out 5 panelists · parallel ✓ greta 3 findings ✓ bruce 2 findings ✓ kai 1 finding ✓ mira 2 findings ✓ otto 1 finding → wrote .atcr/reviews/r-4f2a/sources/
reconcile
Discover the per-agent sources, cluster by location, dedupe by similarity, and score confidence by agreement:
$ atcr reconcile → 9 raw findings → 6 clusters → 3 reconciled ✓ wrote reconciled/{findings.txt, findings.json, report.md}
report
Render the reconciled findings in whichever format you need. The same data, three views:
$ atcr report --format md $ atcr report --format json $ atcr report --format checklist
One-shot it. atcr review --fail-on high runs review,
reconcile, and a severity gate in a single command — drop it in CI to block a merge on
a confirmed high-severity finding.
scorecard
Every atcr reconcile run writes a normalized per-reviewer evaluation record
as a byproduct — no flag needed (pass --no-scorecard to suppress it for one
run). Read one run's record with atcr scorecard, or aggregate across runs
with atcr leaderboard:
$ atcr scorecard REVIEWER MODEL RAISED CORROBORATED SURVIVED COST greta claude-sonnet-4.6 12 6 0.80 $0.04 bruce gpt-4o 9 5 0.71 $0.03 # which model finds the most real bugs, at what cost
MCP server
Run the same engine as an MCP stdio server so an agent host can call it as a tool:
$ atcr serve
Agent Skill
The companion Agent Skill contributes the host model's own review as the
+1 source — so even a single API key yields two or more independent sources
and a working confidence signal.