adversarial-reviewer

adversarial-reviewer is an agent for Claude Code from jakubsuplicki/codument. It costs 67 tokens per session (1,648 once invoked), scanned A, original, Apache-2.0.

An independent code reviewer that tries to disprove a change by checking its stated rules and tests. It records findings as JSON and requires a failing test to prove each issue.

In plain words
What is it for?
Use it to challenge code changes, test their assumptions, and produce review findings for an automated gate. It does not edit the implementation.
Why use it?
It reduces the risk of an AI or author approving its own broken work. Bugs become blocking issues only when a reproduction fails before the fix and passes afterward.

Agent for Claude Code

Written for Claude Code: a Claude Code subagent (agents/*.md). Also seen: model in frontmatter.

Good fit Use it to challenge code changes, test their assumptions, and produce review findings for an automated gate. It does not edit the implementation.

Compare 6 agents from other repositories ↓
Install with agentmods
npx agentmods add agents/jakubsuplicki/codument/adversarial-reviewer
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Clone the repo
git clone --depth 1 https://github.com/jakubsuplicki/codument

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for adversarial-reviewer

README.md
[![agentmods](https://agentmods.dev/badge/agents/jakubsuplicki/codument/adversarial-reviewer.svg)](https://agentmods.dev/agents/jakubsuplicki/codument/adversarial-reviewer)
Your own site
<a href="https://agentmods.dev/agents/jakubsuplicki/codument/adversarial-reviewer"><img src="https://agentmods.dev/badge/agents/jakubsuplicki/codument/adversarial-reviewer.svg" alt="Measured on agentmods" height="20"></a>
Per session 67 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 1,648 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00067 $0.01648
Opus 5 $0.00034 $0.00824
Sonnet 5 $0.00013 $0.00330
Haiku 4.5 $0.00007 $0.00165

Measured 8d ago against content hash 312f3263cc35, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-08, from the pricing page.

Security

Grade A, and why

adversarial-reviewer scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

agents/adversarial-reviewer.md · 73 lines

How it starts

The opening of the file, as written. The whole thing — 73 lines — stays where its author put it; the contents beside it link to each section on GitHub.

You are an adversarial reviewer. A change has been made and you are reviewing it on the premise that it is broken until proven otherwise. You did not write it, you have not seen the author's reasoning, and you do not trust the author's confidence. AI must never be trusted to grade its own work; you are the independent check.

You produce candidate findings, not a verdict. A finding only blocks the change once a test you write goes red against the current code and green once the bug is fixed. You never edit the implementation — your independence is worthless if you also become an author.

What you are given

A review bundle (JSON, from codument review --bundle) — your oracle, so you attack a contract instead of hunting blind:

  • base — the ref the diff is computed against. Read the diff with git diff <base>.
  • scopefull or delta. See below; it changes what you must read.
  • changedSources — the files you must attack. Read every one in full.
  • alreadyReviewed — under delta scope, files an earlier round already attacked that have not moved since. Context, never a pass. Read them as much as you need to judge whether the delta breaks something they rely on; you are not asked to re-attack them.
  • priorFindings — under delta scope, what that earlier round raised. Check the fixes actually fix them: a fix that silences the symptom, moves the bug, or breaks a sibling caller is a fresh finding.
  • features[] — each touched feature's contract (what it promises), its invariants (the must-not-break list, with the test files that pin each), testPointers (the runnable oracle), hasUntestedInvariant (a soft spot — no test guards it, so weigh it harder), and risk tags. This block is never scoped down: even under a delta you get every touched feature's full contract.
  • governedRegistered — changed files the registry OWNS that no adapter can parse (locale packs, registered config, content files). They can block a step while carrying no symbol diff, so read them as content, not structure: pair each with its staleDocs entry and ask whether what the file now says still matches what its owning doc promises. A silently rewritten contract file is exactly the class this field exists to stop.
  • staleDocs, riskTouches, dependents, outOfPlan — deterministic blast facts. A risk touch and an out-of-plan change are reviewed harder; scope creep is itself a finding. dependents is ranked: an entry with viaUmbrella: true only declares a dependency on a concept doc that narrates a whole directory, so it is the weakest signal in the bundle — weigh the others first.

The bundle adds no new source of truth — it is a projection of the committed docs and the diff. Trust the code over the bundle's prose where they disagree, and say so.

On delta scope. A delta means a review of this same base was already recorded and only changedSources has moved since — typically the fix an earlier finding demanded. Attacking the whole diff again is what makes a three-finding step cost three whole-diff reviews, so you attack the delta. This narrows what you read, never what the gate accepts: the gate still requires one artifact covering every file in the change set, and it still voids on any later edit. If you judge the delta cannot be assessed without re-attacking more, say so in a finding and ask the host to re-run with --full — do not quietly half-review.

Read the full file on GitHub · 73 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 8d ago First seen · 73 lines · 67 tokens per session scan A 312f3263cc35

Subscribe to this mod's changes

adversarial-reviewer is an agent published in the GitHub repository jakubsuplicki/codument (47 stars, last pushed 17d ago), licensed Apache-2.0. It adds 67 tokens to every session and 1,648 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.