-
Notifications
You must be signed in to change notification settings - Fork 1
06 Reviewer Profiles
nitpik reviews a diff through lenses — issue-typed specialist reviewers, each hunting one orthogonal class of problem (correctness, security, concurrency, …). Several run in parallel and their findings are merged, deduplicated, and verified.
By default nitpik runs --profile auto: two always-on lenses plus the conditional lenses a triage step judges the change actually warrants. Pass --profile <name> to run an exact set instead.
Every default review runs the two always-on lenses:
| Lens | Hunts for |
|---|---|
security |
injection, authZ, secrets, input validation, crypto, cross-tenant isolation |
correctness |
logic bugs, off-by-one, error handling, edge cases, invariant/state-machine violations |
On top of those, a fast triage step selects from the conditional lenses — only the ones whose failure mode the change plausibly contains:
| Lens | Hunts for | Scope |
|---|---|---|
concurrency |
races, deadlocks, shared mutable state, ordering | per file |
performance |
N+1 queries, hot-path allocation, complexity, latency | per file |
test-integrity |
coverage of changed behavior, determinism, tautological tests | per file |
operational |
observability, migrations (fwd+rollback), feature flags, config/secrets | per file |
a11y |
semantics, ARIA, keyboard nav/focus, contrast, labels | per file |
user-journey |
UX happy-path + failure-mode walkthrough | per file |
contract-impact |
rename/remove/signature ripple to call sites; cross-file API/back-compat | whole diff |
docs-drift |
docs/comments/OpenAPI/changelog no longer matching changed behavior | whole diff |
holistic |
whole-PR coherence; symmetric obligations (rollback-for-migration) | whole diff |
It is normal for triage to pick no conditional lens on a small, self-contained change — the always-on lenses already cover it. The three whole-diff lenses (contract-impact, docs-drift, holistic) review the entire change set at once and use repository-exploration tools by default (see Agentic Mode).
When --profile is omitted, nitpik runs auto. You can request it explicitly:
nitpik review --diff-base main --profile autoThe always-on lenses always run. The conditional lenses are chosen by --auto-mode:
| Mode | Behavior |
|---|---|
heuristic |
File/path rules only — no LLM call. Maps frontend files → a11y/user-journey, tests → test-integrity, structural/large diffs → operational/contract-impact/holistic, docs → docs-drift. Fully offline. |
llm |
Always ask the model to pick conditional lenses by substance, using the built-in triage prompt. |
hybrid (default) |
Consults the LLM for substance-based selection on every run; falls back to the heuristic if the triage call can't run or fails. |
Triage is a cheap call — point it at a smaller model with [provider.models] triage or NITPIK_TRIAGE_MODEL (see Providers).
--profile <names> runs exactly what you name — the always-on lenses are not added on top. This keeps explicit selection predictable (and is the power-user/CI path), but note that --profile my-lens alone runs without the security net; add it back with --profile my-lens,security,correctness.
nitpik review --diff-base main --profile security,correctness,concurrencyWhen multiple lenses run together, each is told what the others cover so they stay in their lane and avoid duplicate findings. See How Reviews Work.
Upgrading from 2.x? The domain profiles
backend,frontend,architect, andgeneralwere removed in 3.0. Use the issue-typed lenses above instead — for most setups the defaultautois the direct replacement. Custom profiles you ship in--profile-dirare unaffected.
Select profiles by tag instead of name; matching is case-insensitive and spans built-in lenses and custom profiles:
nitpik review --diff-base main --tag accessibility
nitpik review --diff-base main --tag performance,concurrencyCombine --tag with --profile to add tag-matched reviewers on top of an explicit set.
security and correctness set always_include: true, which is why they run on every default review. Any custom profile in your --profile-dir with the same flag rides along too; a custom profile that sets auto_candidate: true joins the conditional triage pool. See Custom Profiles.
nitpik profiles
nitpik profiles --profile-dir ./agentsShows each profile's name, description, and tags.
- Custom Profiles — create your own reviewers
- How Reviews Work — multi-agent coordination
-
Agentic Mode —
--agentpolicy and tool access - CLI Reference — all profile-related flags
Getting Started
Using nitpik
- Diff Inputs
- Reviewer Profiles
- Custom Profiles
- Agentic Mode
- Output Formats
- Editor & Agent Integrations
How It Works
Security & Privacy
Deployment
Reference