Adversarial second-opinion reviews for AI coding agents. Auto-gates risky plans before ExitPlanMode and routes them through Codex/Gemini/Opencode for a fresh-lineage critique — with a self-review fallback. Ships as a Claude Code plugin and a portable skill.
SaferSkills independently audited second-opinion (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Get an adversarial critique of a plan from a different AI model and return a compact structured verdict.
If you are reading this from the main session (not a subagent), stop immediately. Dispatch this skill via the Agent / subagent tool of your host, passing the plan text in the prompt. Rationale: the reviewer returns 5–20k tokens of reasoning; running it inline wastes the main context on output you will summarize anyway.
Quick self-check: if you can see earlier messages in this conversation that are not about this specific critique task, you are in the main session. Re-dispatch and stop.
Your dispatcher will give you:
transcript_path to the session JSONL for extra context.cwd / project_dir for repo context. PLAN_FILE=$(mktemp -t second-opinion-plan.XXXXXX.md)
cat > "$PLAN_FILE" <<'PLAN_EOF'
<plan text here>
PLAN_EOF ~/.claude/skills/second-opinion/scripts/run_reviewer.sh "$PLAN_FILE"The dispatcher tries external AI CLIs in preference order (codex → gemini → opencode → claude), excluding the current host to maintain model-family diversity. It prepends the adversarial prompt template and (for non-codex providers) the JSON schema. On success: JSON verdict on stdout, PROVIDER=<name> on stderr. On failure (exit 10): no external reviewer is available — proceed to step 3.
Load references/self_review_prompt.md, read it carefully, then apply its instructions to the plan yourself. Emit a single JSON object matching assets/response_schema.json. This is the same model family as the host, so it's a weaker second opinion — a structured adversarial self-critique, not a true external review. Surface that caveat to the user.
fatal_flaws[], hidden_assumptions[], simpler_alternative (string or null), points_of_agreement[], verdict (SHIP / REVISE / RECONSIDER), verdict_reason (one line)."After sharing this verdict with the user, append <!-- second-opinion: reviewed --> to the plan file before retrying ExitPlanMode." **Verdict: <SHIP|REVISE|RECONSIDER>** (reviewer: <provider or "self-review (same model family)">)
<verdict_reason>
**Agrees on:**
- <point_of_agreement>
**Concerns:**
- <fatal_flaw or assumption>
**Suggested alternative:** <simpler_alternative or "none">Under ~250 words. Do not include the reviewer's raw reasoning or chain-of-thought.
claude again is a same-lineage review and adds little value — so the dispatcher skips it by default.references/prompt_template.md) counteracts LLM sycophancy — models default to validating plans unless explicitly instructed to attack them.Users can invoke this skill explicitly without the hook (e.g., "give me a second opinion on this approach"). Same flow — plan text comes from the user's prompt instead of the hook payload.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.