{
  "id": "second-opinion-review",
  "type": "loadout",
  "title": "Second-opinion review from another model",
  "summary": "Before calling work done, the agent gets a read-only review of its diff from a different model, checks each finding and stops after two rounds.",
  "description": "A pattern that spread through practitioner feeds this autumn: Claude Code writes the change, then calls codex exec to\nreview the diff before saying it is finished, or the other way round. It works because the reviewer is a different\nmodel and cannot edit what it judges. This loadout sets when a second opinion is worth it, keeps the reviewer\nread-only, gives a prompt that asks for ranked, located findings, and caps the loop at two rounds so it cannot spin.\n",
  "highlights": [
    "When a second opinion is worth the time, and when to skip it",
    "Exact read-only commands for codex exec and claude -p",
    "Prompt template that returns ranked path:line findings",
    "Findings are verified against code, never applied blindly",
    "Hard cap of two rounds, then escalate to the human"
  ],
  "version": "1.0.0",
  "license": "MIT",
  "author": {
    "name": "Agent Loadout",
    "url": "https://loadout.jnw-it.com"
  },
  "credits": [
    {
      "title": "@Damir_Akaza: Claude Code calls codex exec to review its diff",
      "url": "https://x.com/Damir_Akaza/status/2106333764548702392"
    },
    {
      "title": "@leavemagic: a reviewer that cannot edit what it judges (MIT)",
      "url": "https://github.com/leavemagic-cyber/earned-confidence"
    },
    {
      "title": "Codex docs: non-interactive mode",
      "url": "https://developers.openai.com/codex/noninteractive"
    },
    {
      "title": "Claude Code docs: headless mode",
      "url": "https://code.claude.com/docs/en/headless"
    }
  ],
  "categories": [
    "workflow",
    "ai-agents"
  ],
  "stacks": [
    "any"
  ],
  "files": [
    {
      "path": "AGENTS.md",
      "role": "instructions",
      "description": "When and how to get an independent review.",
      "skill": null,
      "agent": null,
      "install_to": {
        "claude-code": "AGENTS.md",
        "codex": "AGENTS.md",
        "cursor": "AGENTS.md",
        "gemini-cli": "AGENTS.md",
        "antigravity-cli": "AGENTS.md",
        "copilot": "AGENTS.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/AGENTS.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/second-opinion-review/latest/AGENTS.md",
      "bytes": 1351,
      "lang": "markdown",
      "content": "# AGENTS.md: second-opinion review from another model\n\nBefore you call a non-trivial change done, get an independent read-only review from a different agent or model.\nA different model misses different things; a reviewer that cannot edit cannot \"fix\" its way past a problem.\n\n## When to ask\n- The change touches three or more files, a public interface, auth, payments, data migrations or concurrency.\n- You fixed a bug you could not reproduce with a test.\n- You are about to tell the human the work is finished.\n\nSkip it for typo fixes, formatting, dependency bumps with green CI, and changes the human will review line by line anyway.\n\n## Rules\n- Use the `cross-model-review` skill. The reviewer runs read-only (Codex: default `codex exec` sandbox; Claude Code: plan or\n  dontAsk mode with read tools only).\n- Give the reviewer the goal, the diff and the test command. Do not give it your reasoning; it should judge the code, not your story.\n- Treat findings as claims. Verify each against the code before changing anything. Reject wrong findings with a one-line reason.\n- Maximum two review rounds per change. If round two still finds blocking issues, stop and report to the human.\n- Never paste secrets, `.env` contents or customer data into a review prompt.\n- In the final report, list what the reviewer found and what you did about each finding.\n"
    },
    {
      "path": "CLAUDE.md",
      "role": "adapter",
      "description": "Imports AGENTS.md for Claude Code.",
      "skill": null,
      "agent": "claude-code",
      "install_to": {
        "claude-code": "CLAUDE.md",
        "codex": null,
        "cursor": null,
        "gemini-cli": null,
        "antigravity-cli": null,
        "copilot": null
      },
      "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/CLAUDE.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/second-opinion-review/latest/CLAUDE.md",
      "bytes": 400,
      "lang": "markdown",
      "content": "# CLAUDE.md\n\n@AGENTS.md\n\n## Claude Code notes\n- Skills from this loadout live in `.claude/skills/`: `cross-model-review`. Use them when their description matches the task.\n- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.\n\n<!-- From the Agent Loadout \"Second-opinion review from another model\" v1.0.0 — https://loadout.jnw-it.com/loadouts/second-opinion-review/ -->\n"
    },
    {
      "path": "GEMINI.md",
      "role": "adapter",
      "description": "Imports AGENTS.md for Gemini CLI.",
      "skill": null,
      "agent": "gemini-cli",
      "install_to": {
        "claude-code": null,
        "codex": null,
        "cursor": null,
        "gemini-cli": "GEMINI.md",
        "antigravity-cli": null,
        "copilot": null
      },
      "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/GEMINI.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/second-opinion-review/latest/GEMINI.md",
      "bytes": 401,
      "lang": "markdown",
      "content": "# GEMINI.md\n\n@./AGENTS.md\n\n## Gemini CLI notes\n- Skills from this loadout live in `.agents/skills/`: `cross-model-review`. Use them when their description matches the task.\n- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.\n\n<!-- From the Agent Loadout \"Second-opinion review from another model\" v1.0.0 — https://loadout.jnw-it.com/loadouts/second-opinion-review/ -->\n"
    },
    {
      "path": "skills/cross-model-review/SKILL.md",
      "role": "skill",
      "description": "Run a read-only review by another model and triage findings.",
      "skill": "cross-model-review",
      "agent": null,
      "install_to": {
        "claude-code": ".claude/skills/cross-model-review/SKILL.md",
        "codex": ".agents/skills/cross-model-review/SKILL.md",
        "cursor": ".agents/skills/cross-model-review/SKILL.md",
        "gemini-cli": ".agents/skills/cross-model-review/SKILL.md",
        "antigravity-cli": ".agents/skills/cross-model-review/SKILL.md",
        "copilot": ".agents/skills/cross-model-review/SKILL.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/skills/cross-model-review/SKILL.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/second-opinion-review/latest/skills/cross-model-review/SKILL.md",
      "bytes": 1800,
      "lang": "markdown",
      "content": "---\nname: cross-model-review\ndescription: Ask a second agent (Codex from Claude Code, or Claude Code from Codex) for a read-only review of the current diff, then verify and act on its findings. Use before reporting a non-trivial change as done.\n---\n\n# Cross-model review\n\n1. **Prepare.** Commit or stage the work. Pick the base (usually `origin/main`). Write the diff to a temporary file:\n   `git diff origin/main...HEAD > \"${TMPDIR:-/tmp}/review.diff\"` (add `git diff` of uncommitted work if any).\n   Check its size: over ~3,000 lines, review per directory instead.\n2. **Write the prompt** from `references/review-prompt.md`: goal, test command, focus areas. No reasoning, no secrets.\n3. **Run the reviewer**, read-only, from the repository root:\n   - From Claude Code, ask Codex:\n     `codex exec --ephemeral -o \"${TMPDIR:-/tmp}/review.md\" \"$(cat \"${TMPDIR:-/tmp}/review-prompt.txt\")\" < \"${TMPDIR:-/tmp}/review.diff\"`\n     (`codex exec` is read-only unless you pass `--sandbox`; do not pass it.) `codex review` is an alternative for the current branch.\n   - From Codex or another agent, ask Claude Code:\n     `claude -p --permission-mode dontAsk --allowedTools \"Read,Grep,Glob,Bash(git diff *),Bash(git log *)\" \"$(cat \"${TMPDIR:-/tmp}/review-prompt.txt\")\" < \"${TMPDIR:-/tmp}/review.diff\" > \"${TMPDIR:-/tmp}/review.md\"`\n   If the reviewer CLI is not installed or not logged in, stop and tell the human; do not substitute a different tool silently.\n4. **Triage.** For each finding: open the cited code, decide valid / invalid / unsure. Fix valid ones. Write a reason for invalid ones.\n5. **Round two** only if you changed code because of blocking findings. Same prompt plus \"Previously reported: …\". Never a third round.\n6. **Report** a table: finding, verdict, action. Delete the temporary files.\n"
    },
    {
      "path": "skills/cross-model-review/references/review-prompt.md",
      "role": "reference",
      "description": "Reviewer prompt template.",
      "skill": "cross-model-review",
      "agent": null,
      "install_to": {
        "claude-code": ".claude/skills/cross-model-review/references/review-prompt.md",
        "codex": ".agents/skills/cross-model-review/references/review-prompt.md",
        "cursor": ".agents/skills/cross-model-review/references/review-prompt.md",
        "gemini-cli": ".agents/skills/cross-model-review/references/review-prompt.md",
        "antigravity-cli": ".agents/skills/cross-model-review/references/review-prompt.md",
        "copilot": ".agents/skills/cross-model-review/references/review-prompt.md"
      },
      "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/skills/cross-model-review/references/review-prompt.md",
      "raw_latest_url": "https://loadout.jnw-it.com/raw/second-opinion-review/latest/skills/cross-model-review/references/review-prompt.md",
      "bytes": 809,
      "lang": "markdown",
      "content": "# Review prompt template\n\nSave as review-prompt.txt, fill the angle brackets, keep it under 40 lines.\n\n```\nYou are reviewing a diff you did not write. You cannot edit files. The diff is on stdin.\n\nGoal of the change: <one or two sentences>.\nHow it is tested: <command>, which <passes / was not run because …>.\nFocus on: <for example: error handling in the API client, the migration's down step, race conditions in the cache>.\n\nReport only problems that would cause wrong behaviour, security issues, data loss, broken callers or missing tests\nfor changed behaviour. Ignore style and naming unless they hide a bug.\n\nFormat, most severe first, at most 10 items:\n<blocking|should-fix|nit> — <path>:<line> — <problem> — <suggested fix>\n\nIf you find nothing blocking, say \"No blocking issues\" and stop.\n```\n"
    }
  ],
  "requires": {
    "tools": [
      "git"
    ],
    "env": [],
    "mcp": []
  },
  "tested": {
    "status": "untested",
    "last_run": null,
    "fixture": null,
    "per_agent": {
      "claude-code": "untested",
      "codex": "untested",
      "cursor": "untested",
      "gemini-cli": "untested",
      "antigravity-cli": "untested",
      "copilot": "untested"
    }
  },
  "security": {
    "scanned": true,
    "scanner": "intake-precheck/1",
    "verdict": "clean",
    "network": false,
    "scripts": []
  },
  "featured": false,
  "deprecated": false,
  "last_checked": "2026-10-17",
  "published": "2026-10-17",
  "updated": "2026-10-17",
  "compatibility": {
    "claude-code": "native",
    "codex": "native",
    "cursor": "native",
    "gemini-cli": "native",
    "antigravity-cli": "native",
    "copilot": "native"
  },
  "counts": {
    "rules": 1,
    "skills": 1,
    "mcp": 0
  },
  "url": "https://loadout.jnw-it.com/loadouts/second-opinion-review/",
  "api_url": "https://loadout.jnw-it.com/api/loadouts/second-opinion-review.json",
  "verification": {
    "level": "verified-install",
    "status": "verified",
    "label": "Verified install",
    "verified": true,
    "checked_at": "2026-10-17T07:47:06Z",
    "commit": "316f4bcae9d3c1f64f8f5e32a12e27e0c36f13b5",
    "content_current": true,
    "agent_tests": "not-run",
    "counts": {
      "pass": 8,
      "fail": 0,
      "skip": 0,
      "not_applicable": 2
    },
    "meaning": "Level 1: automated checks on the files (parse, install paths, MCP config, safety scan, references, size, licence, starter build). No AI agent was run.",
    "checks": [
      {
        "id": "listing",
        "name": "Listing",
        "status": "pass",
        "summary": "Schema valid; 5 files declared, none missing or extra",
        "details": [
          "tested.status: untested (agent tests are separate from Level 1)"
        ]
      },
      {
        "id": "parse",
        "name": "Files parse",
        "status": "pass",
        "summary": "All 5 files parse; front matter valid",
        "details": []
      },
      {
        "id": "adapters",
        "name": "Adapters",
        "status": "pass",
        "summary": "CLAUDE.md and GEMINI.md import AGENTS.md and are up to date",
        "details": [
          "CLAUDE.md: matches the generator",
          "GEMINI.md: matches the generator"
        ]
      },
      {
        "id": "install-paths",
        "name": "Install paths",
        "status": "pass",
        "summary": "Correct paths for all 6 agents; layouts re-discovered",
        "details": [
          "Claude Code: 4 files, 1 skill in .claude/skills/",
          "Codex CLI: 3 files, 1 skill in .agents/skills/",
          "Cursor: 3 files, 1 skill in .agents/skills/",
          "Gemini CLI: 4 files, 1 skill in .agents/skills/",
          "Antigravity CLI: 3 files, 1 skill in .agents/skills/",
          "GitHub Copilot: 3 files, 1 skill in .agents/skills/"
        ]
      },
      {
        "id": "mcp",
        "name": "MCP config",
        "status": "n/a",
        "summary": "No MCP servers in this loadout",
        "details": []
      },
      {
        "id": "safety",
        "name": "Safety scan",
        "status": "pass",
        "summary": "Clean: no credentials, risky shell or hidden text",
        "details": [
          "Scanner intake-precheck/1: verdict clean; network no (listing says no)"
        ]
      },
      {
        "id": "references",
        "name": "References",
        "status": "pass",
        "summary": "2 references between files resolve for every agent",
        "details": []
      },
      {
        "id": "size",
        "name": "Size limits",
        "status": "pass",
        "summary": "5 files, 4.6 KB total; largest skills/cross-model-review/SKILL.md 1.8 KB",
        "details": [
          "Limits: 30 files, 32 KB per file, 128 KB total, 500 lines per skill or rule"
        ]
      },
      {
        "id": "licence",
        "name": "Licence",
        "status": "pass",
        "summary": "MIT, by Agent Loadout; text in the repository LICENSE",
        "details": []
      },
      {
        "id": "starter-build",
        "name": "Starter build",
        "status": "n/a",
        "summary": "Not applicable: a review procedure that needs two signed-in agent CLIs",
        "details": [
          "The skill runs codex exec or claude -p against a real diff, which needs paid model access and logged-in CLIs, so it can't run free in CI.",
          "Every other Level 1 check still runs on this loadout."
        ]
      }
    ]
  },
  "install": {
    "claude-code": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "CLAUDE.md",
          "target": "CLAUDE.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/CLAUDE.md",
          "role": "adapter"
        },
        {
          "path": "skills/cross-model-review/SKILL.md",
          "target": ".claude/skills/cross-model-review/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/skills/cross-model-review/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/cross-model-review/references/review-prompt.md",
          "target": ".claude/skills/cross-model-review/references/review-prompt.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/skills/cross-model-review/references/review-prompt.md",
          "role": "reference"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/second-opinion-review/claude-code.zip"
    },
    "codex": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/cross-model-review/SKILL.md",
          "target": ".agents/skills/cross-model-review/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/skills/cross-model-review/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/cross-model-review/references/review-prompt.md",
          "target": ".agents/skills/cross-model-review/references/review-prompt.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/skills/cross-model-review/references/review-prompt.md",
          "role": "reference"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/second-opinion-review/codex.zip"
    },
    "cursor": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/cross-model-review/SKILL.md",
          "target": ".agents/skills/cross-model-review/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/skills/cross-model-review/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/cross-model-review/references/review-prompt.md",
          "target": ".agents/skills/cross-model-review/references/review-prompt.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/skills/cross-model-review/references/review-prompt.md",
          "role": "reference"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/second-opinion-review/cursor.zip"
    },
    "gemini-cli": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "GEMINI.md",
          "target": "GEMINI.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/GEMINI.md",
          "role": "adapter"
        },
        {
          "path": "skills/cross-model-review/SKILL.md",
          "target": ".agents/skills/cross-model-review/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/skills/cross-model-review/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/cross-model-review/references/review-prompt.md",
          "target": ".agents/skills/cross-model-review/references/review-prompt.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/skills/cross-model-review/references/review-prompt.md",
          "role": "reference"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/second-opinion-review/gemini-cli.zip"
    },
    "antigravity-cli": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/cross-model-review/SKILL.md",
          "target": ".agents/skills/cross-model-review/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/skills/cross-model-review/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/cross-model-review/references/review-prompt.md",
          "target": ".agents/skills/cross-model-review/references/review-prompt.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/skills/cross-model-review/references/review-prompt.md",
          "role": "reference"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/second-opinion-review/antigravity-cli.zip"
    },
    "copilot": {
      "files": [
        {
          "path": "AGENTS.md",
          "target": "AGENTS.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/AGENTS.md",
          "role": "instructions"
        },
        {
          "path": "skills/cross-model-review/SKILL.md",
          "target": ".agents/skills/cross-model-review/SKILL.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/skills/cross-model-review/SKILL.md",
          "role": "skill"
        },
        {
          "path": "skills/cross-model-review/references/review-prompt.md",
          "target": ".agents/skills/cross-model-review/references/review-prompt.md",
          "raw_url": "https://loadout.jnw-it.com/raw/second-opinion-review/1.0.0/skills/cross-model-review/references/review-prompt.md",
          "role": "reference"
        }
      ],
      "manual_steps": [],
      "zip_url": "https://loadout.jnw-it.com/download/second-opinion-review/copilot.zip"
    }
  },
  "source_zip_url": "https://loadout.jnw-it.com/download/second-opinion-review/source.zip"
}