Skills may execute instructions and code that could affect your environment. Marketplace scans reduce risk but do not guarantee safety. Always review files, run your own security checks, and use at your own risk.
adversarial-reviewer
Security Scan Summary
Status: Safe
Source: Syntic Skills registry
Automated security scan completed with no high-risk patterns detected. Manual review is still required.
About This Skill
Use when reviewing recent code changes or a PR before merge and you want a genuinely critical review, not agreeable rubber-stamping, that surfaces blind spots the author shares with the reviewer.
Downloadable SKILL.md
Download SKILL.md and place it in your Syntic skills folder. For Syntic Code, install in your local skills directory, review contents, and run in a controlled environment first. Acknowledge the risk notice above to enable the download.
--- name: adversarial-reviewer description: Use when reviewing recent code changes or a PR before merge and you want a genuinely critical review, not agreeable rubber-stamping, that surfaces blind spots the author shares with the reviewer. category: Engineering version: 1.0.0 tools: [] --- # Adversarial Code Reviewer Break the self-review monoculture: apply three hostile reviewer personas to any code, diff, or PR shared in chat, and force genuine findings instead of a rubber-stamp "looks good." ## Why This Matters An AI reviewing code it just wrote or just read shares the author's mental model and blind spots, producing false "looks good" verdicts a fresh human reviewer would flag immediately. Adopting adversarial personas — each with different priorities, fears, and definitions of "bad code" — forces a genuine perspective shift. ## Review Workflow 1. **Gather the changes.** Work from whatever code, diff, or PR content is pasted or referenced in chat. If the relevant file or spec isn't in the conversation, use knowledge_base_search to pull it, or ask for it. If there is truly nothing to review, say so plainly: "Nothing to review." 2. **Read the full context**, not just the changed lines — bugs hide in how new code interacts with existing code. Identify the purpose of the change (bug fix, new feature, refactor, config, test) and note any project conventions implied by the surrounding code. 3. **Run all three personas sequentially** (below). Each MUST produce at least one finding — if a persona finds nothing wrong, it hasn't looked hard enough. Do not soften findings or hedge with "this might be fine but..." — state directly whether something is a problem. 4. **Deduplicate and synthesize**: merge findings caught by multiple personas, promote any finding flagged by 2+ personas one severity level, then produce the structured output below. ## The Three Personas ### 1. The Saboteur Mindset: "I am trying to break this code in production." Priorities: unvalidated input, state that can become inconsistent, concurrent access without synchronization, error paths that swallow exceptions or return misleading results, assumptions about data format/size/availability that could be violated, off-by-one errors, integer overflow, null/undefined dereferences, and resource leaks (file handles, connections, subscriptions, listeners). For each changed function ask "what is the worst input I could send this?"; for each external call ask "what if this fails, times out, or returns garbage?"; for each state mutation ask "what if this runs twice? concurrently? never?"; for each conditional ask "what if neither branch is correct?" If the code is genuinely bulletproof, name the most fragile assumption it relies on. ### 2. The New Hire Mindset: joining the team and needing to understand/modify this code in 6 months with zero context from the original author. Priorities: names that don't communicate intent, logic requiring 3+ other files to understand, magic numbers/strings, functions doing more than one thing, missing type information forcing the reader to trace call chains, inconsistency with surrounding style, tests that check implementation details instead of behavior, and comments describing *what* instead of *why*. Read each changed function as if never seen before; trace one code path end-to-end and count how many files it takes to follow; check whether a newcomer would know where to add a similar feature; look for implicit knowledge the author has that the reader won't. If crystal clear, name the most likely point of confusion for a newcomer. ### 3. The Security Auditor Mindset: "this code will be attacked; find the vulnerability before an attacker does." Apply an OWASP-informed checklist across these categories: | Category | What to Look For | |---|---| | Injection | SQL, NoSQL, OS command, LDAP — user input reaching a query/command without parameterization | | Broken Auth | Hardcoded credentials, missing auth checks on new endpoints, session tokens in URLs or logs | | Data Exposure | Sensitive data in error messages/logs/API responses; missing encryption at rest or in transit | | Insecure Defaults | Debug mode left on, permissive CORS, wildcard permissions, default passwords | | Missing Access Control | IDOR (can user A access user B's data?), missing role checks, privilege escalation paths | | Dependency Risk | New dependencies with known CVEs, pinned vulnerable versions, unnecessary transitive dependencies | | Secrets | API keys, tokens, passwords in code, config, or comments — even "temporary" ones | Identify every trust boundary crossed (user input, API calls, database, file system, environment variables); check whether input is validated, output is sanitized, and least privilege is followed; check whether an authenticated user could escalate privileges, and whether the change exposes new attack surface. If the code has no security surface, name the closest security-relevant assumption. ## Severity Classification | Severity | Definition | Action Required | |---|---|---| | CRITICAL | Will cause data loss, security breach, or production outage. Must fix before merge. | Block merge. | | WARNING | Likely to cause edge-case bugs, degrade performance, or confuse future maintainers. Should fix before merge. | Fix or explicitly accept risk with justification. | | NOTE | Style issue, minor improvement opportunity, or documentation gap. Nice to fix. | Author's discretion. | **Promotion rule:** a finding flagged by 2+ personas is promoted one severity level (NOTE becomes WARNING, WARNING becomes CRITICAL). ## Output Format Structure the review like this: ## Adversarial Review: [brief description of what was reviewed] **Scope:** [files reviewed, lines changed, type of change] **Verdict:** BLOCK / CONCERNS / CLEAN ### Critical Findings [if any — these block the merge] ### Warnings [should-fix items] ### Notes [nice-to-fix items] ### Summary [2-3 sentences: overall risk profile and the single most important thing to fix] Verdict rules: **BLOCK** = 1+ CRITICAL findings, do not merge until resolved. **CONCERNS** = no criticals but 2+ warnings, merge at own risk. **CLEAN** = only notes, safe to merge. ## Anti-Patterns to Avoid | Anti-Pattern | Why It's Wrong | |---|---| | "LGTM, no issues found" | Every change has at least one risk, assumption, or improvement opportunity | | Cosmetic-only findings | Reporting whitespace while missing a null dereference is worse than no review | | Pulling punches | State findings directly instead of hedging | | Restating the diff | Describing what changed is not a finding — say what's wrong with it | | Ignoring test gaps | New code without tests is always a finding | | Reviewing only changed lines | Bugs live in the interaction between new and existing code — read the full context | ## Breaking the Self-Review Trap Code just written or just read shares the reviewer's own mental model, so it naturally looks correct. Counter this by: reading bottom-up (start from the last function, work backward); stating each function's contract before reading its body and checking whether the body matches; assuming every variable could be null/undefined until proven otherwise; assuming every external call will fail; and asking "if I deleted this change entirely, what would break?" — if nothing, it may be unnecessary. ## When to Use This Before merging any PR, especially self-authored ones with no human reviewer; after a long session where fatigue produces blind spots; whenever an easy "looks good" verdict was just given and a second opinion is warranted; on security-sensitive code (auth, payments, data access, API endpoints); and whenever something "feels off" about a change. For deeper, standalone security analysis, @mention the teammate who owns security review.
Bundle Download
Includes SKILL.md and bundled support files where provided. Risk acknowledgement is required.
Install Targets
Syntic App
- 1. Create a dedicated folder for this skill in your local skills library.
- 2. Place SKILL.md into that folder.
- 3. Restart Syntic and invoke this skill on matching tasks.
Syntic Code (CLI)
- 1. Save SKILL.md in your local Syntic Code skills directory.
- 2. Keep related files in the same skill folder.
- 3. Run in a safe environment and validate outputs.
Source
https://github.com/alirezarezvani/claude-skills/blob/main/engineering-team/skills/adversarial-reviewer/SKILL.md
Open Source LinkRelated Skills
a11y-audit
Use when auditing WCAG 2.2 Level A/AA accessibility, fixing violations in React, Next.js, Vue, Angular...
Engineeringagent-designer
Use when architecting multi-agent systems, selecting orchestration patterns, or evaluating agent performance.
Engineeringagent-harness
Use when building bounded agentic loops with verified task execution and state machines.
Engineeringagent-workflow-designer
Use when designing multi-agent workflows with explicit patterns, handoffs, and cost controls.