Nine reviewers. Nine lenses.
The default roster ships with atcr init as nine editable persona
files. Each one reviews the same diff through a different focus and emits findings in the
same pipe-delimited format — so the reconciler can cluster them by what they found, not
who found it.
The embedded roster, synced from the atcr repo:
bruce (generalist correctness),
dax (test coverage and error-path),
greta (algorithmic correctness),
ingrid (idiomatic-style and conventions),
kai (architecture and design),
mira (production feasibility),
otto (style, readability, and idiom),
penny (performance and resource),
sasha (security and injection).
bruce
- Inverted conditions, off-by-one, wrong operator
- Ignored returns and swallowed errors
- Code that does not do what its name promises
greta
- Boundary conditions: first/last, empty, overflow
- Loop termination, invariants, accumulators
- Numeric overflow, float comparison, div-by-zero
kai
- Boundary violations and upward imports
- Hidden coupling and shared mutable state
- The cost of the next change
mira
- Missing timeouts, unbounded retries
- Partial failures and resource exhaustion
- What the 3am pager sees
otto
- Names that mislead the next maintainer
- Structure that hides intent
- Fighting the language instead of using it
dax
- Untested failure branches
- Vacuous assertions that prove nothing
- Over-mocked fixtures hiding real behavior
ingrid
- Swallowed errors and lost error wrapping
- Leaked goroutines, missing cancellation
- Interface abuse and stdlib reinvention
penny
- N+1 queries and unbatched calls
- Unbounded caches and leaked resources
- Accidental O(n²) and hot-path allocation
sasha
- Injection: SQL, command, template
- Broken auth and predictable tokens
- Leaked secrets and insecure defaults
Beyond the built-in nine.
atcr personas install pulls community-contributed personas
from the community registry into ~/.config/atcr/personas/ —
they join the panel on your next review, no restart. Highlights:
Zero-egress, local-first panel
Three personas tuned for a local endpoint (Ollama / llama.cpp / vLLM), so no code ever
leaves your hardware: gerald (secrets & data-egress,
gemma3:27b), orson (duplication &
repo-wide redundancy, qwen3:30b-a3b), and
liam (invariants & state consistency,
llama3.3:70b). Discover them with
atcr personas search --provider local.
simon — the anti-slop lens
Hunts AI-generated bloat in a diff: comments that restate the code, abstractions wrapping one call site, defensive checks the type system already guarantees, and dead branches nothing can reach — flagged for deletion, not more structure.
Built one worth sharing? Tune a persona locally, run its fixture, and
send it back as a pull request with atcr personas submit — it
rides your own GitHub CLI session, no bot token.
The roster is yours. Personas are plain markdown files in
.atcr/personas/. Edit a focus, change a model binding, drop
one, or add your own — a Redis concurrency specialist for one PR, a protobuf reviewer
for another. The reconciler does not care how many panelists there are; it only cares
which findings overlap.
Different models miss different things.
A panel of one model run nine times still has one model's blind spots. atcr binds personas to different models and providers on purpose: when two independent models — not two prompts — catch the same bug, that agreement is the confidence signal the reconciler scores.