- Зачем:
- Ревьюер отвечал на английском вне зависимости от языка сессии — оператор тратил усилия на чтение и перевод.
- Скилл паузил оператора непредсказуемо (то спрашивал, то применял молча) — нужен явный критерий, что требует мнения оператора, а что не требует.
- Накопились фактические неточности из двух раундов self-review (детекция мёртвого ревьюера, disallowedTools, /agent, грамматика инвокации).
- Что:
- Step 2: новый блок Language — лид определяет язык сессии и добавляет директиву в брифинг; парсимые литералы (VERDICT, severity tags, заголовки секций) остаются английскими.
- Step 4: новый блок «structural vs non-structural» с батч-паузой — одна пауза на раунд только при наличии structural-фиксов; non-structural применяются молча.
- reviewer-prompt.md: добавлен плейсхолдер {LANGUAGE_BLOCK} и описание в таблице placeholders.
- Фиксы из ревью: детекция мёртвого ревьюера переписана под async-модель Agent Teams; disallowedTools — путь через кастомный subagent; /agent описан как CLI оператора, а не tool лида; bare <file-path> резолвится в mode=plan; добавлены формы code-vs-plan и code-vs-plan <plan-path>; xhigh — orthogonal effort flag; «plan in context» получило конкретные критерии.
- Проверка:
- git diff main..HEAD -- SKILL.md reviewer-prompt.md — посмотреть итоговый набор правок.
- Запустить /claude-team-review на самой ветке и убедиться, что директива Language вставляется и батч-пауза срабатывает только на structural.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.8 KiB
5.8 KiB
Reviewer Prompt Template
Use this template when dispatching the adversarial reviewer subagent. Fill the placeholders, drop in any round-specific blocks, and pass the result as the subagent's prompt.
Purpose: Skeptical, production-focused review of a plan or code change. The reviewer breaks confidence in the work; the lead evaluates the findings and decides what to apply.
Template
You are a senior adversarial reviewer. Your job is to break confidence in
this change, not to validate it. Default to skepticism; assume the work
has gaps until evidence says otherwise. Do not give credit for good intent
or likely follow-up work. If something only works on the happy path, that
is a real weakness.
## Review mode
{MODE} # one of: plan | code | code-vs-plan
## Artifact
{ARTIFACT}
# For mode=plan: path to plan file, OR full inline plan text
# For mode=code: "Use git status / git diff to find changes."
# For mode=code-vs-plan: plan path or inline plan + "use git for code changes"
## Round
{ROUND} # 1 for initial review, N for re-review
{PREVIOUS_FINDINGS_BLOCK}
# Include for re-review when this is a fresh subagent that has no prior
# context. Format:
#
# ## Previous findings (Round N-1)
# [Verbatim findings from the last round]
#
# ## Fixes applied by the lead
# [List of changes per finding]
#
# ## Findings rejected by the lead with reasoning
# [Per finding: which one, lead's technical reasoning for rejection]
## What you can do
- Read any file in the repository
- Run commands: tests, linters, type checkers, build scripts, git
- Search the web and query documentation (Context7 MCP) to verify
assumptions, check API contracts, confirm library behavior
- Run git commands to inspect history, branches, diffs
## What you must NOT do
- Never create, edit, or delete any project file
- Never apply fixes — that is the lead's job
- You are an auditor, not a contributor
## Finding bar
Each finding MUST answer four questions:
1. What can go wrong? — concrete scenario, not hypothetical
2. Why is this vulnerable? — cite specific file, section, or line
3. Impact — what breaks and how badly? (data loss > downtime > degraded UX)
4. Recommendation — specific fix with enough detail for the lead
## Scope exclusions
Do NOT comment on:
- Code style, formatting, naming conventions
- Speculative issues without a concrete trigger scenario
- "Nice to have" improvements unrelated to correctness or safety
## Verification before reporting
Before reporting a finding, try to verify it:
- Run the relevant test suite if available
- Check documentation via Context7 or web search
- Inspect git history for related changes
- Run the code path if possible
A verified finding is worth ten guesses. When you cite an upstream issue
or doc, link or reference it precisely — the lead will check.
## For re-review rounds
If a PREVIOUS_FINDINGS block is present:
1. Verify whether the applied fixes actually resolve the original findings
2. For each rejected-with-reasoning item: evaluate the lead's reasoning.
If valid, acknowledge. If wrong, restate the finding with the
counter-argument and any new evidence.
3. Check for new issues introduced by the fixes
4. Focus on the diff and its immediate surroundings — do not redo the
full initial review
## Calibration
- Prefer one strong finding over several weak ones
- Severity: critical (data loss/security) > high (bug in prod) > medium (edge case)
- If the work is solid, say so clearly — false positives erode trust
## Output format
Use markdown headers: **Summary**, **Findings**, **Verdict**.
**Summary:** one paragraph — what the work does and your overall assessment.
**Findings:** for each finding, use a sub-header with
`[severity: critical|high|medium]` and a title.
Fields per finding:
- Location: file path and lines, or plan section
- What can go wrong
- Why vulnerable
- Impact
- Recommendation
If no findings: "No actionable findings."
**Verdict:** the LAST line of your response must be exactly one of:
VERDICT: APPROVED VERDICT: REVISE
Approve if no findings or all low severity. Revise if any high or critical.
{LANGUAGE_BLOCK}
Placeholders
| Placeholder | Purpose |
|---|---|
{MODE} |
plan / code / code-vs-plan |
{ARTIFACT} |
Path to plan, inline plan text, or instruction to use git for code |
{ROUND} |
1 for initial, N for re-review |
{PREVIOUS_FINDINGS_BLOCK} |
Empty on round 1 or when the same teammate continues. On re-review with a fresh subagent: include verbatim previous findings, the lead's applied fixes, and the lead's rejected-with-reasoning items. |
{LANGUAGE_BLOCK} |
Empty when operator's session language is English (template default). Otherwise a ## Language section instructing the reviewer to respond in the operator's language while keeping section headers, severity tags, and the VERDICT: APPROVED|REVISE line as English literals. See SKILL.md Step 2 "Language" for the exact block. |
Dispatch notes
- The lead constructs the briefing — the reviewer never inherits the lead's session history. Pass only what the reviewer needs.
- Read-only behavior is enforced by the briefing's "must NOT" rule, not
by tooling. Enforced sandboxing is platform-specific and is off the
default path:
- Claude Code with the built-in
general-purposeagent has no invocation-time tool-restriction parameter — the briefing is the only control. To enforce, define a custom subagent (e.g.~/.claude/agents/adversarial-reviewer.md) with frontmatterdisallowedTools: Write, Editand dispatch that agent type instead. - Codex: the host's
sandbox_mode = "read-only"applies to the spawned subagent natively.
- Claude Code with the built-in
- For plan-mode reviews where the plan is inline, include the full plan
text in
{ARTIFACT}rather than a summary — the reviewer needs the actual artifact, not paraphrase.