Agent skill

Adversarial Review Before Shipping

by oaustegard in oaustegard/claude-skills

Has a fresh-context adversary attack a blog post, recommendation, analysis brief or piece of code before you ship it, using a profile suited to that kind of artifact.

MITAuto-check passedAgent Workflows

Install Adversarial Review Before Shipping

skills CLI
$ npx skills add oaustegard/claude-skills --skill challenging -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install oaustegard/claude-skills challenging --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/challenging .claude/skills/challenging && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
challenging
GitHub stars
150
Token cost
~3.4k tokens
SKILL.md length
1,270 words
Files
11 (incl. scripts, references)
Skills in repo
66
Repo updated
First seen
Licence
MIT

At a glance

Has a fresh-context adversary attack a blog post, recommendation, analysis brief or piece of code before you ship it, using a profile suited to that kind of artifact.

  • Works in 3 steps: Reads job['system'] — the prompt opens… → In a dedicated response, produces JSON… → Passes that JSON string to…
  • Stress-testing a blog post or essay for weak claims before publishing
  • SKILL.md covers Profiles, Usage — Claude Code (subagent…, Usage — claude.ai, Codex,… and Usage — self path…, plus 3 more sections
  • Runs Python scripts from its folder; needs CF_API_TOKEN and GOOGLE_API_KEY

What it does

This skill sets up an adversarial pass over a finished deliverable. It offers three routes: a subagent in Claude Code that starts with a fresh context and needs no API key, an external route that calls Gemini or the Anthropic API from environments such as claude.ai or Codex, and a self route where the same assistant plays the adversary in a separate reply. With automatic selection it tries Gemini, then Claude, then the self route, depending on which credentials exist.

You pick a profile for the artifact: prose, prose-register (for checking fidelity to a named voice), analysis, code, recommendation, or philosophers (for arguments and design rationales). Each profile file bundles a persona, an anti-rationalization table, evaluation criteria and the adversary prompt, and the agent reads only the one it needs. A Python script, scripts/challenger.py, backs the helpers, and a drill reference applies a 5 Whys pattern. The excerpt is cut off partway through the profile table.

When your agent uses it

  • Stress-testing a blog post or essay for weak claims before publishing
  • Getting an outside challenge to a technical recommendation or architecture choice
  • Reviewing a script or pull request with a fresh-context reviewer before merging
  • Checking that a draft keeps a specific writing voice

Example prompts

  • “Challenge this recommendation to move us from REST to gRPC before I send it to the team.”
  • “Run an adversarial pass on my draft post about database indexing and list the weakest claims.”
  • “Stress test this research brief using the analysis profile and a subagent.”

Requirements

  • A Gemini or Anthropic API key for the external route, if not using a subagent or the self route

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Reads job['system'] — the prompt opens with SELF-INVOCATION MODE instructing a full persona switch. Commit to it.
  2. In a dedicated response, produces JSON matching the schema described in the system prompt.
  3. Passes that JSON string to parse_response().

What it can do on your machine

Read from SKILL.md and the folder at commit cf49d47. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • timkellogg.me

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • CF_API_TOKEN
    • GOOGLE_API_KEY
    • ANTHROPIC_API_KEY
    • API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Adversarial Review Before Shipping loads about 3.4k tokens when it runs, and up to ~12k if it reads all its reference files. Until then it costs about 78 tokens; SKILL.md has 1,270 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~78
When it runs · the whole SKILL.md, loaded when a task matches
~3.4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~12k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from oaustegard/claude-skills at commit cf49d47, republished under its MIT licence (© oaustegard). 1,270 words, ~3,399 tokens.

Download SKILL.mdSave it as .claude/skills/challenging/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.
name
challenging
description
Cross-context adversarial review for deliverables before shipping. Use when producing blog posts, technical recommendations, analysis briefs, code, or any artifact where accuracy matters more than speed. Triggers on "challenge this", "review before shipping", "adversarial pass", "stress test this".
metadata.version
0.13.0

Challenging — Adversarial Review

Adversarial review before shipping. Three paths, each with distinct trade-offs:

  • Subagent path (Claude Code, primary). Native sub-Claude via the Task tool — zero API keys, fresh context window, same model. Best when available.
  • External API path (claude.ai, Codex, headless). Gemini (cross-model + cross-context) or Anthropic API (cross-context). Costs an incremental API call but gives genuine outside perspective.
  • Self path (any environment). The caller assistant inhabits the adversary persona in a dedicated response. Zero cost, retains full subject-matter context from the conversation. Weaker at catching same-session confabulations than fresh-context adversaries, stronger at catching local-convention and factual errors the artifact glosses over. Not a strict downgrade — a different failure-mode profile.

The adversary='auto' resolution (default) picks gemini → claude → self based on available credentials. Callers in Claude Code still use prepare() + Task tool explicitly (subagent is strictly better than self in that environment, and auto-detection of Claude Code is brittle).

Inspired by VDD (dollspace.gay) and Grainulation's anti-rationalization patterns. The drill helper adopts the 5 Whys pattern from Tim Kellogg's open-strix writeup. The self-path persona-inhabitation move is kin to generative-thinking's inversion — commit to the mode before evaluating.

Profiles

Pick the profile matching your artifact. Read only the profile you need — each is self-contained with persona, anti-rationalization table, evaluation criteria, and adversary system prompt.

ProfileUse ForIteration strategyFile
proseBlog posts, essays, articles — generic prose competenceparallel replayreferences/prose.md
prose-registerProse with a named voice signature — fidelity checkparallel replayreferences/prose-register.md
analysisResearch briefs, comparisons, synthesisparallel replayreferences/analysis.md
codeScripts, implementations, PRsparallel replayreferences/code.md
recommendationTechnical decisions, architecture choicesparallel replayreferences/recommendation.md
philosophersArguments, position pieces, design rationales — conceptual-layer auditparallel replayreferences/philosophers.md
drill5 Whys on one finding from a reviewsequential deepenreferences/drill.md

One engine, one surface, two iteration strategies. Review profiles iterate in parallel replay — each pass independent, novelty tracked for confabulation. Drill iterates in sequential deepen — each pass takes the chain so far and produces one more why-level until bedrock or max depth, followed by a synthesis pass that extracts root causes.

philosophers and analysis are complements on argument-heavy artifacts: analysis audits the evidentiary layer (source independence, cherry-picking, calibration); philosophers audits the conceptual layer via Socratic elenchus and Aristotelian division (definitional stability, inference validity, is/ought slippage, taxonomy-before-verdict). An artifact can pass one and fail the other.

prose and prose-register are siblings, not redundant. prose evaluates generic prose competence (claims, logic, structure, performed insight) and is explicitly told not to comment on style. prose-register evaluates fidelity to a named voice signature passed via voice=... (positive markers + anti-patterns) and ignores generic competence. Run both passes on voiced prose — they catch different failure modes.

Usage — Claude Code (subagent path, primary)

Two-step protocol: a Python helper builds the prompt, you spawn a subagent via the Task tool, then a parser turns its response into structured findings.

python
import sys
sys.path.insert(0, '/mnt/skills/user/challenging/scripts')
from challenger import prepare, parse_response

job = prepare(
    artifact=open('/home/claude/draft.md').read(),
    profile='prose',
    context='Blog post about RAG scaling laws',
)

Then invoke the Task tool — subagent_type='general-purpose', prompt=job['prompt'], description='Adversarial review (prose)'. The subagent runs in a fresh context, applies the persona, and returns a JSON message. Pass that message text to the parser:

python
result = parse_response(subagent_text)
print(result['verdict'])    # SHIP | REVISE | RETHINK
print(result['findings'])   # List of specific issues
print(result['strengths'])  # What to preserve

Why subagents (not the API): no key, no network dependency, fresh context, and the same Claude that's reviewing your work is reviewing it again with no prior bias — but in a clean window. For cross-model diversity (genuinely different blind spots), use Gemini below.

Voiced prose — prose-register (subagent path)

For prose written in a named voice, prose will miss register-specific failure modes by design (its persona is instructed not to comment on style). Use the prose-register profile with a voice=... signature instead — or in addition, since the two profiles target orthogonal failure modes.

python
voice = """
Corvid voice signature.
Positive markers: short sentences when certainty is high, dry observations,
lead with the answer then context, no throat-clearing.
Anti-patterns: heroic-narrator framing, drama-line-breaks ("Then the part that
almost killed it." floating alone), cliche tells ("shot itself in the foot",
"footgun"), time-scale inflation ("a month ago" when it was yesterday),
performed-significance setups ("What's interesting about this is..."),
RTFM-performed-as-revelation, precious sentimentality in closings.
"""

job = prepare(
    artifact=open('/home/claude/draft.md').read(),
    profile='prose-register',
    context='Blog post for muninn.austegard.com',
    voice=voice,
)
# Task tool → parse_response() as usual.

voice is required for prose-register and rejected for every other profile — pass the signature once, fail loud if it leaks to the wrong call. The richer the signature (with both positive markers and explicit anti-patterns), the more precise the review. A thin signature returns verdict: RETHINK with a finding describing what to sharpen rather than a confident review against an ambiguous spec.

Drill — 5 Whys on a systemic finding (subagent path)

Drill uses the same prepare() / Task / parse_response() protocol as review profiles, but you run the loop yourself — each pass takes the chain so far and produces exactly ONE new {why, because}. When the adversary sets bedrock=true (or you hit max depth), run a final synthesis pass.

python
from challenger import prepare, parse_response

suspect = next(f for f in result['findings'] if f['severity'] in ('high', 'critical'))
artifact = open('/home/claude/draft.md').read()
ctx = 'Blog post about RAG scaling laws'

chain = []
for depth in range(1, 6):
    job = prepare(artifact, 'drill', context=ctx, finding=suspect, chain=chain)
    # Task tool: subagent_type='general-purpose', prompt=job['prompt']
    step = parse_response(subagent_text)   # {why, because, bedrock, reasoning}
    chain.append({'why': step['why'], 'because': step['because']})
    if step.get('bedrock'):
        break

# Final synthesis pass over the completed chain
job = prepare(artifact, 'drill', context=ctx, finding=suspect, chain=chain, synthesize=True)
# Task tool again, then:
diagnosis = parse_response(subagent_text)
print(diagnosis['chain'])        # [{why, because}, ...]
print(diagnosis['root_causes'])  # usually 3-4 distinct systemic issues
print(diagnosis['direction'])    # compass heading for the process fix

finding accepts either a dict from parse_response() or a free-text description. Patches fix the instance; drills fix the class. Why sequential, not parallel? A single-shot drill lets the model shortcut the whole tree and produces renames instead of explanations; one level per pass forces each "because" to earn its depth. See references/drill.md for when to drill and the anti-patterns to reject.

Show full SKILL.md (503 more words)Show less

Usage — claude.ai, Codex, headless scripts (API path)

Where subagents aren't available, call an external model directly.

python
from challenger import challenge

result = challenge(
    artifact=open('draft.md').read(),
    profile='prose',
    context='Blog post about RAG scaling laws',
    adversary='gemini',     # default — cross-model diversity
)

adversary accepts:

  • auto (default) — resolves to gemini > claude > self based on available credentials. Logs the choice.
  • gemini — Gemini 3.8 Flash at thinking_level='high'. Cross-model + cross-context. Requires Gemini credentials. (Was 3.1 Pro until 2026-09-03; the Pro tier is off routing, its price/quality is dominated by the later Flash models.)
  • claude — Anthropic API. Cross-context, same model family. Do not use this in Claude Code — use the subagent path instead.
  • self — NOT runnable via challenge() (raises with a pointer to prepare_self()). Self-challenge requires the caller assistant to produce the adversary response, which a synchronous function cannot do.

Drill uses the same challenge() call with profile='drill'. challenge() runs the whole sequential-deepen loop internally and returns the synthesized diagnosis:

python
diagnosis = challenge(
    artifact,
    profile='drill',
    context=ctx,
    finding=suspect,          # required for drill
    max_iterations=5,         # optional — defaults to 5 for drill, 3 for review
)
print(diagnosis['chain'], diagnosis['root_causes'], diagnosis['direction'])
Blocking mode (API path, review profiles only)
python
result = challenge(artifact, profile='analysis', mode='blocking', max_iterations=3)

Loops the adversary until: (a) no actionable findings, (b) novelty rate > 75% (adversary inventing problems — artifact is clean), or (c) max iterations. mode is ignored when profile='drill' — drill always iterates until bedrock or max depth. Subagent-path callers can replicate blocking mode by looping prepare() / Task / parse_response() themselves and tracking findings across iterations.

Usage — self path (same-context adversary)

When neither subagents nor external API credentials are available — or when subject-matter context from the current conversation is load-bearing for the review — use prepare_self(). The caller assistant inhabits the adversary persona in a dedicated response.

python
from challenger import prepare_self, parse_response

job = prepare_self(
    artifact=open('draft.md').read(),
    profile='analysis',
    context='Cross-domain claim that depends on codebase-specific IEEE-754 conventions',
)
# job is {'system': <adversary system prompt>, 'user': <artifact + context>, ...}

The caller then:

  1. Reads job['system'] — the prompt opens with SELF-INVOCATION MODE instructing a full persona switch. Commit to it.
  2. In a dedicated response, produces JSON matching the schema described in the system prompt.
  3. Passes that JSON string to parse_response().
python
# After generating the adversary JSON in a dedicated response:
result = parse_response(adversary_json_text)
print(result['verdict'], result['findings'])

When self beats external: the artifact depends on conventions visible only from inside the conversation (codebase invariants, prior decisions, domain terminology established earlier). External adversaries with generic priors issue confident-but-wrong findings in these cases; self retains the context.

When external beats self: the artifact contains confabulations or blind spots the caller already committed to. Fresh context catches these; self inherits them.

When possible, run both. They have orthogonal failure modes.

Drill via self path uses the same loop as the subagent drill: iterate prepare_self(profile='drill', finding=..., chain=...) — produce one {why, because} per dedicated response — append to chain — until bedrock or max depth — then a final synthesize pass.

Verdicts

  • SHIP: Clean. Deliver.
  • REVISE: Real issues, sound core. Fix and deliver.
  • RETHINK: Structural problems. Reconsider approach.

Severity Levels

  • critical/high/medium/low: Standard severity — actionable findings that block in blocking mode.
  • unverifiable: Adversary flagged something it doesn't recognize (API, pattern, model name) but can't confirm is wrong. Surfaced for awareness but does not block SHIP. Use context to ground the adversary on APIs/patterns it may not know.

Credentials (API path only)

The subagent path needs no credentials. The API path loads from environment or project files:

  • Gemini via Cloudflare Gateway (preferred): CF_ACCOUNT_ID, CF_GATEWAY_ID, CF_API_TOKEN from env or proxy.env
  • Gemini direct: GOOGLE_API_KEY from env
  • Claude API (claude.ai fallback only): ANTHROPIC_API_KEY or API_KEY from env or claude.env

No external skill dependencies. requests is loaded lazily — only the API path requires it.

© oaustegard, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 10 other files (scripts, references) in challenging of oaustegard/claude-skills.

  • SKILL.md
  • CHANGELOG.md
  • README.md
  • references/analysis.md
  • references/code.md
  • references/drill.md
  • references/philosophers.md
  • references/prose-register.md
  • references/prose.md
  • references/recommendation.md
  • scripts/challenger.py

Open the folder on GitHubat commit cf49d47

Compare with similar skills

Adversarial Review Before Shipping next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Adversarial Review Before Shipping compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Adversarial Review Before Shipping this skilloaustegard/claude-skills150—~3.4kAutomated safety check: PassMIT
Loop Change Verifiercobusgreyling/loop-engineering11k1 repos~383Automated safety check: PassMIT
O2 Review Loopopenobserve/openobserve22k—~3.7kAutomated safety check: PassAGPL-3.0
Clawteamwin4r/ClawTeam-OpenClaw1.5k—~3.1kAutomated safety check: PassMIT
OMA Multi-Agent Orchestrationfirst-fluke/oh-my-agent1.3k—~4.1kAutomated safety check: PassMIT
UltracodePabloNAX/ultracode-skill187—~3.7kAutomated safety check: PassMIT

Similar skills

  • Loop Change Verifier

    cobusgreyling/loop-engineering

    Acts as a skeptical checker for changes an implementer sub-agent made, running the tests, confirming the diff scope and returning approve, reject or escalate to a human.

    11k GitHub starsUsed in 1 repo~383 tokens
    Agent WorkflowsAuto-check passed
  • O2 Review Loop

    openobserve/openobserve

    Splits a change into planner, coder and independent reviewer roles: you confirm a spec, a subagent implements it, and a separate reviewer checks each round's local WIP commit.

    22k GitHub stars~3.7k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Clawteam

    win4r/ClawTeam-OpenClaw

    Multi-agent swarm orchestration. An agent skill from win4r/ClawTeam-OpenClaw.

    1.5k GitHub stars~3.1k tokensUpdated 3 mo ago
    Agent WorkflowsAuto-check passed
  • OMA Multi-Agent Orchestration

    first-fluke/oh-my-agent

    Decomposes a complex feature into tasks, dispatches parallel specialist agents with durable state, and supervises verification, QA review and retries.

    1.3k GitHub stars~4.1k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Ultracode

    PabloNAX/ultracode-skill

    Run a lightweight Ultracode workflow for serious coding tasks: plan, split, delegate when useful and allowed by the host, integrate, and verify.

    187 GitHub stars~3.7k tokensUpdated 3 mo ago
    Agent WorkflowsAuto-check passed
  • Advisor Mode

    cursor/plugins

    Official

    Adds a second, stronger model that the main agent consults before major decisions, when stuck and before finishing, controlled by /advisor commands.

    10k GitHub stars~2.6k tokensUpdated yesterday
    Agent WorkflowsAuto-check: notes

More from oaustegard/claude-skills

All 66 skills in this repo
  • Vega-Lite Interactive Charts

    oaustegard/claude-skills

    Builds interactive Vega-Lite charts from uploaded data: analyzes the fields, picks five to ten fitting chart types, and produces a React artifact with the data embedded inline.

    150 GitHub stars~2.1k tokensUpdated yesterday
    Auto-check passed
  • Single-File HTML Composer

    oaustegard/claude-skills

    Builds self-contained single-file HTML pages such as reports, decks, postmortems, flowcharts and prototypes from a small spec using a bundled Python composer and templates.

    150 GitHub stars~3.2k tokensUpdated yesterday
    Auto-check passed
  • Declauding

    oaustegard/claude-skills

    Rewrites model-sounding prose into plain technical writing and checks that every claim survives, for PR text, docs, commit messages and similar drafts.

    150 GitHub stars~5.2k tokensUpdated yesterday
    Auto-check passed
  • Preact Developer

    oaustegard/claude-skills

    Guides building standards-based Preact apps with native-first choices, HTM syntax, import maps and vendored ESM, from single-file demos to larger builds.

    150 GitHub stars~4.6k tokensUpdated yesterday
    Auto-check passed
  • Bluesky Zeitgeist Sampler

    oaustegard/claude-skills

    Deprecated sampler that captures short windows of the Bluesky firehose, clusters trending terms and builds an HTML report; replaced by the browsing-bluesky skill.

    150 GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Controlling Spotify

    oaustegard/claude-skills

    Control Spotify playback and manage playlists via MCP server.

    150 GitHub stars~2.8k tokensUpdated yesterday
    Auto-check: notes

Questions about Adversarial Review Before Shipping

What does Adversarial Review Before Shipping do?

Has a fresh-context adversary attack a blog post, recommendation, analysis brief or piece of code before you ship it, using a profile suited to that kind of artifact. This skill sets up an adversarial pass over a finished deliverable.ai or Codex, and a self route where the same assistant plays the adversary in a separate reply.

When should I use Adversarial Review Before Shipping?

Adversarial Review Before Shipping fits situations like: stress-testing a blog post or essay for weak claims before publishing; getting an outside challenge to a technical recommendation or architecture choice; reviewing a script or pull request with a fresh-context reviewer before merging; checking that a draft keeps a specific writing voice.

How do I install Adversarial Review Before Shipping in Claude Code?

Run `npx skills add oaustegard/claude-skills --skill challenging -a claude-code`. Or copy the skill folder (challenging in oaustegard/claude-skills) into .claude/skills/challenging in your project. Claude Code loads it when a task matches its description.

How do I install Adversarial Review Before Shipping in Codex?

Run `npx skills add oaustegard/claude-skills --skill challenging -a codex`. Or copy the skill folder (challenging in oaustegard/claude-skills) into .agents/skills/challenging in your project. Codex loads it when a task matches its description.

Can I use Adversarial Review Before Shipping in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add oaustegard/claude-skills --skill challenging -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/challenging, .gemini/skills/challenging, .github/skills/challenging and .opencode/skills/challenging in your project.

What does Adversarial Review Before Shipping need to run?

Going by SKILL.md and its folder, Adversarial Review Before Shipping needs Python for the scripts in its folder and credentials named CF_API_TOKEN, GOOGLE_API_KEY, ANTHROPIC_API_KEY and API_KEY. Our summary lists: A Gemini or Anthropic API key for the external route, if not using a subagent or the self route.

Does Adversarial Review Before Shipping access the network?

SKILL.md names 1 domain. As links in the text: timkellogg.me. This is read from the text; nothing was executed.

Is Adversarial Review Before Shipping safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Adversarial Review Before Shipping use?

Adversarial Review Before Shipping is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Adversarial Review Before Shipping use?

About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 8.8k tokens, read only when the agent opens those files.

What are the alternatives to Adversarial Review Before Shipping?

Skills that share tags, products or a category with Adversarial Review Before Shipping: Loop Change Verifier (cobusgreyling/loop-engineering, 11k stars), O2 Review Loop (openobserve/openobserve, 22k stars), Clawteam (win4r/ClawTeam-OpenClaw, 1.5k stars) and OMA Multi-Agent Orchestration (first-fluke/oh-my-agent, 1.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Adversarial Review Before Shipping?

oaustegard (a GitHub user) maintains it in oaustegard/claude-skills, which has 150 GitHub stars. The repository holds 66 skills in this directory. The repository was last updated on October 8, 2026.

Source: oaustegard/claude-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.