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.
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
idiomatic
- Swallowed errors and lost error wrapping
- Leaked goroutines, missing cancellation
- Interface abuse and stdlib reinvention
sentinel
- Injection: SQL, command, template
- Broken auth and predictable tokens
- Leaked secrets and insecure defaults
tracer
- N+1 queries and unbatched calls
- Unbounded caches and leaked resources
- Accidental O(n²) and hot-path allocation
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.