{"repo": "chang-alan-l/grill-me-external", "files": {"README.md": {"f6205387d4a5db626ffbaf6e49204b46a7a0302f": {"t": 1785747239.604492, "n": 12057, "h": "e2d28da3e260db44", "c": "# grill-me-external\n\n**Two AI models — from two different providers — harden your plan before you write a line of code.** A family of Claude Code skills that close the two gaps in AI-assisted coding: the gap between *you and Claude* (do we agree on what to build?) and the gap between *Claude and the quality of what it produces* (is the plan actually correct — and how would you even know?).\n\nAct 1 grills **you** to lock the plan. Act 2 hands that plan to **a different-provider model** — a rival, cross-provider critic that is *never Claude* — which adversarially tears it apart over several rounds until both models sign off. Only then does code get written.\n\n> Why a second model from another provider? Because the same model that plans the build and writes the build can't be trusted to *grade its own work* — it's an echo chamber. A different provider catches what Claude structurally can't see in itself. Claude Code is always the builder/orchestrator, so the reviewer is always non-Claude.\n\nIt began as [`chaseai-yt/grill-me-codex`](https://github.com/chaseai-yt/grill-me-codex) — a single-provider, Codex-only version — and has since been reworked so the adversarial Act 2 reviewer is **pluggable**: OpenRouter (any OpenAI-compatible model), OpenAI Codex, Gemini (the Gemini CLI or the Antigravity `agy`), GLM-5.2, Amp's Oracle, or open-weight models via Hermes, selected with one `REVIEWER` env var. The default is OpenRouter with `openai/gpt-5.5`. This is a personal adaptation reshaped to suit my own workflow — **not a fork**; see [Credits](#credits).\n\nBuilt on [Matt Pocock's `grill-me` / `grill-with-docs`](https://github.com/mattpocock/skills) skills (MIT) — Act 1 is his work; the iterative cross-provider review (Act 2) is the addition.\n\n## The skills\n\n| Skill | Act 1 | Act 2 | Use when |\n|-------|-------|-------|----------|\n| **`grill-me-external`** | Claude interrogates you one question at a time until the decision tree is resolved | Cross-provider adversarial review loop | Planning from scratch + want alignment AND a second-model check |\n| **`grill-with-docs-external`** | Same, but challenges your plan against your project's `CONTEXT.md` glossary + writes ADRs inline | Cross-provider review loop | Same, in a project with established terminology / architecture decisions |\n| **`external-review`** | — (you already have a plan) | Cross-provider review loop | You have a plan and just want the cross-model stress-test |\n\n## Install\n\nCopy the skill folders into your Claude Code skills directory:\n\n```bash\n# macOS / Linux\ncp -r skills/* ~/.claude/skills/\n\n# Windows (PowerShell)\nCopy-Item -Recurse skills\\* $env:USERPROFILE\\.claude\\skills\\\n```\n\nThen invoke in Claude Code: `/grill-me-external`, `/grill-with-docs-external`, or `/external-review`.\n\n> Each skill bundles its own copy of `grill-review.sh` so it works standalone; the three copies are kept byte-identical. If you edit the adapter, update all three.\n\n## Prerequisites\n\n- **Default (`openai-compat`):** an OpenRouter API key — `export OPENAI_COMPAT_KEY=sk-or-...` (or `OPENROUTER_API_KEY`). Optionally override `OPENAI_COMPAT_URL` / `OPENAI_COMPAT_MODEL`. `jq` and `curl` must be installed.\n- **Other reviewers:** the chosen CLI installed and authenticated (`codex login`, `gemini` logged in, `ZAI_API_KEY` for glm, `amp` credits, `hermes` + Docker). On an auth/model error the adapter exits non-zero and writes nothing — surface it; don't silently retry.\n\n## Quick start\n\nYou drive everything from **inside Claude Code** — you never run `grill-review.sh` yourself; the skill calls it for you.\n\n1. **Install** the skills (see [Install](#install) above) and **set your key once** for the default reviewer:\n ```bash\n export OPENAI_COMPAT_KEY=sk-or-... # an OpenRouter key\n ```\n2. **Invoke a skill in Claude Code**, with the task on the same line:\n ```\n /grill-me-external add API-key auth with per-tenant rate limiting\n /external-review # when you already have a plan to stress-test\n /grill-with-docs-external # when your repo has a CONTEXT.md glossary / ADRs\n ```\n3. **Answer the grill** (Act 1), then let the loop run (Act 2): Claude writes `PLAN.md`, the cross-provider critic attacks it round by round until `VERDICT: APPROVED` or `MAX_ROUNDS`, producing `PLAN.md` (the final plan) and `PLAN-REVIEW-LOG.md` (the full argument).\n4. **Sign off.** No code is written until you approve the converged plan.\n\nOverride the critic or round cap inline, e.g. `/external-review reviewer=glm rounds=3`.\n\n## How Act 2 works\n\n1. Claude writes the locked plan to `PLAN.md` and starts a log at `PLAN-REVIEW-LOG.md`.\n2. **Round 1:** the chosen critic reviews the plan **read-only** and returns `VERDICT: APPROVED` or `VERDICT: REVISE`.\n3. **Rounds 2..N:** Claude revises; the critic re-reviews, remembering its prior critiques (via native session resume where available, else a replayed critique history) and only checking whether they're addressed.\n4. Bounded by `MAX_ROUNDS` (default 5). Terminates on `APPROVED` or the cap (a flagged deadlock beats a fake \"approved\").\n5. **You gate twice only:** kickoff, and final sign-off before any code. The critic is read-only every round and never writes a file.\n\nAll read-only enforcement, session handling, and verdict extraction live in one place — `grill-review.sh` — so the skills never type provider flags. Two artifacts result: `PLAN.md` (the clean final plan — the *what*) and `PLAN-REVIEW-LOG.md` (the full round-by-round argument — the *why*).\n\n## Provider matrix\n\nSet `REVIEWER` to choose the critic (default `openai-compat`). The reviewer is **always non-Claude**.\n\n| `REVIEWER` | Model | Read-only mechanism | Agentic? | Setup |\n|---|---|---|---|---|\n| `openai-compat` *(default)* | any OpenAI-compatible model (default `openai/gpt-5.5` via OpenRouter) | **read-only by construction** — a pure API call, no tools, no filesystem | No (plan is inlined) | `OPENAI_COMPAT_KEY` (an OpenRouter key) |\n| `codex` | GPT-5.5 | `-s read-only` (round 1) / `-c sandbox_mode=read-only` (resume) | Yes | `codex` CLI ≥ 0.130, `codex login` |\n| `gemini` | Gemini (Gemini CLI) | `--approval-mode plan` (documented read-only mode) | Yes | `gemini` CLI, logged in |\n| `agy` | Gemini 3.1 Pro (Antigravity `agy`) — **no per-call charge** *if* you already pay for an Antigravity/Google AI sub (~$20/mo) | **read-only by isolation** — plan inlined + run from a throwaway no-workspace dir, so any stray write lands in agy's scratch, never your repo | No (plan inlined) | `agy` CLI logged in (needs the sub); optional `AGY_MODEL` |\n| `glm` | GLM-5.2 | child `claude -p --permission-mode plan` against z.ai | Yes | `export ZAI_API_KEY=...` |\n| `amp` | **Oracle** (non-Claude reasoning model) | adapter grants *only* the `oracle` tool in an isolated `--settings-file` + inlines the plan, so write tools stay gated | No (plan inlined) | `amp` CLI + credits (~$0.3–0.5/round) |\n| `hermes` | any non-Claude open model | Docker terminal backend + repo mounted `:ro` | Yes | `hermes` CLI + Docker + `export HERMES_MODEL=...` |\n\n### Why `openai-compat` (OpenRouter) is the default\n\nIt's a single HTTPS POST with **no tools and no filesystem access**, so it's read-only *by construction* — nothing to sandbox, nothing that can deadlock, and the widest non-Claude model menu anywhere. Its one tradeoff: it's **non-agentic** — it sees the inlined `PLAN.md` but can't open other repo files. For a review that must read surrounding code (e.g. `grill-with-docs-external`'s glossary check), pick an agentic reviewer (`codex` / `gemini` / `glm`).\n\n### Choosing an `openai-compat` model\n\nDefault is `openai/gpt-5.5` (frontier, closest to Opus-4.8-class judgment). Swap via `OPENAI_COMPAT_MODEL`:\n\n| Model | Why |\n|---|---|\n| `openai/gpt-5.5` *(default)* | Max judgment quality. |\n| `google/gemini-3.1-pro-preview` | Frontier, a different provider, ~half the cost. |\n| `deepseek/deepseek-v4-pro` | Near-frontier, ~10× cheaper, 1M context. |\n| `z-ai/glm-5.2` | Strong open model; also reachable natively via `REVIEWER=glm`. |\n\n### Examples\n\n```bash\n# Default — OpenRouter + openai/gpt-5.5\nOPENAI_COMPAT_KEY=sk-or-... \"$HOME/.claude/skills/external-review/grill-review.sh\" 1\n\n# OpenRouter with a cheaper near-frontier model\nOPENAI_COMPAT_KEY=sk-or-... OPENAI_COMPAT_MODEL=deepseek/deepseek-v4-pro \\\n \"$HOME/.claude/skills/external-review/grill-review.sh\" 1\n\n# GLM-5.2 natively via z.ai\nZAI_API_KEY=sk-... REVIEWER=glm \"$HOME/.claude/skills/external-review/grill-review.sh\" 1\n\n# agy (Antigravity) — Gemini 3.1 Pro via your paid Antigravity sub (no per-call charge, but slow)\nREVIEWER=agy \"$HOME/.claude/skills/external-review/grill-review.sh\" 1\n\n# amp — Oracle (non-Claude), ~$0.3–0.5/round\nREVIEWER=amp \"$HOME/.claude/skills/external-review/grill-review.sh\" 1\n\n# Codex (the original)\nREVIEWER=codex \"$HOME/.claude/skills/external-review/grill-review.sh\" 1\n```\n\n## Tunables\n\n| Var | Default | Meaning |\n|-----|---------|---------|\n| `REVIEWER` | `openai-compat` | Which non-Claude model critiques the plan |\n| `OPENAI_COMPAT_MODEL` | `openai/gpt-5.5` | Model for the `openai-compat` reviewer |\n| `OPENAI_COMPAT_URL` | `https://openrouter.ai/api/v1` | Endpoint for the `openai-compat` reviewer |\n| `AGY_MODEL` | `Gemini 3.1 Pro (High)` | Model for the `agy` reviewer (must be non-Claude) |\n| `MAX_ROUNDS` | `5` | Hard cap on review rounds |\n| `PLAN_FILE` | `PLAN.md` | Where the plan lives |\n| `LOG_FILE` | `PLAN-REVIEW-LOG.md` | The argument transcript |\n\nPass e.g. `reviewer=glm rounds=3` when invoking to override.\n\n## Safety — read-only is the spine\n\nThe critic runs **read-only every round** — that guarantee is enforced per provider inside `grill-review.sh`, and it never moved, it just became per-provider:\n\n- `openai-compat` is read-only *by construction* (no tools, no filesystem).\n- `codex` uses `-s read-only` then `-c sandbox_mode=\"read-only\"` on resume (the `resume` subcommand rejects `-s` and would otherwise inherit a possibly-`danger-full-access` `config.toml`).\n- `gemini` uses `--approval-mode plan`; `glm` uses a child `claude --permission-mode plan`; `hermes` requires a Docker `:ro` backend (the adapter refuses the writable `local` backend).\n- **Echo-chamber guards:** `amp` and `hermes` are *harnesses* that can default to Claude. The adapter forces Amp's **Oracle** (GPT-5) and **rejects a Claude `HERMES_MODEL`**.\n- **`agy` (Antigravity) is read-only by *isolation*.** It has no headless read-only *flag* — its agent auto-approves writes — but a review task never needs to write, and the adapter runs it from a throwaway dir outside any trusted workspace, so even a stray write lands in agy's own scratch dir, never your repo. Pin a Gemini `AGY_MODEL` (it's a harness that can also run Claude). **Not free** — it draws on your paid Antigravity/Google AI sub (~$20/mo, no per-call charge). Given that, plus non-agentic + variable Gemini-3.1-Pro latency, `openai-compat` → `google/gemini-3.1-pro-preview` is usually the better way to get a Gemini critic; reach for `agy` mainly to avoid per-call cost on a sub you already pay for.\n- **`amp` headless, fixed:** `amp -x` would otherwise deadlock on the Oracle's tool-permission prompt (surfaced as \"Network timeout\", really a stdin timeout). The adapter handles it: it grants **only** the `oracle` tool in a throwaway `--settings-file` (your global amp config is untouched) and inlines the plan, so write tools stay gated. It's the priciest reviewer (~$0.3–0.5/round).\n\nNo code is ever written until you approve the final plan.\n\n## Credits\n\n- **Act 1** (`grill-me`, `grill-with-docs`) © Matt Pocock — https://github.com/mattpocock/skills (MIT). See each skill's `THIRD-PARTY-NOTICES.md`.\n- **Originally based on** [`chaseai-yt/grill-me-codex`](https://github.com/chaseai-yt/grill-me-codex) by Chase AI — the Codex-only predecessor whose Act 2 review loop and packaging this builds on. The cross-provider adapter and the rest of the rework here are my own modifications; this repo is an independent adaptation, not a fork.\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n"}, "879c8be37a7419595a49656c2031ddb026fa4046": {"t": 1785771628.665814, "n": 10709, "h": "74740eeeb35503ec", "c": "# grill-me-external\n\n**Two AI models — from two different providers — harden your plan before you write a line of code.** A family of Claude Code skills that close the two gaps in AI-assisted coding: the gap between *you and Claude* (do we agree on what to build?) and the gap between *Claude and the quality of what it produces* (is the plan actually correct — and how would you even know?).\n\nAct 1 grills **you** to lock the plan. Act 2 hands that plan to **a different-provider model** — a rival, cross-provider critic that is *never Claude* — which adversarially tears it apart over several rounds until both models sign off. Only then does code get written.\n\n> Why a second model from another provider? Because the same model that plans the build and writes the build can't be trusted to *grade its own work* — it's an echo chamber. A different provider catches what Claude structurally can't see in itself. Claude Code is always the builder/orchestrator, so the reviewer is always non-Claude.\n\nIt began as [`chaseai-yt/grill-me-codex`](https://github.com/chaseai-yt/grill-me-codex) — a single-provider, Codex-only version — and has since been reworked so the adversarial Act 2 reviewer is **pluggable**: OpenRouter (any OpenAI-compatible model), OpenAI Codex, Gemini, GLM-5.2, Amp's Oracle, or open-weight models via Hermes, selected with one `REVIEWER` env var. The default is OpenRouter with `openai/gpt-5.5`. This is a personal adaptation reshaped to suit my own workflow — **not a fork**; see [Credits](#credits).\n\nBuilt on [Matt Pocock's `grill-me` / `grill-with-docs`](https://github.com/mattpocock/skills) skills (MIT) — Act 1 is his work; the iterative cross-provider review (Act 2) is the addition.\n\n## The skills\n\n| Skill | Act 1 | Act 2 | Use when |\n|-------|-------|-------|----------|\n| **`grill-me-external`** | Claude interrogates you one question at a time until the decision tree is resolved | Cross-provider adversarial review loop | Planning from scratch + want alignment AND a second-model check |\n| **`grill-with-docs-external`** | Same, but challenges your plan against your project's `CONTEXT.md` glossary + writes ADRs inline | Cross-provider review loop | Same, in a project with established terminology / architecture decisions |\n| **`external-review`** | — (you already have a plan) | Cross-provider review loop | You have a plan and just want the cross-model stress-test |\n\n## Install\n\nCopy the skill folders into your Claude Code skills directory:\n\n```bash\n# macOS / Linux\ncp -r skills/* ~/.claude/skills/\n\n# Windows (PowerShell)\nCopy-Item -Recurse skills\\* $env:USERPROFILE\\.claude\\skills\\\n```\n\nThen invoke in Claude Code: `/grill-me-external`, `/grill-with-docs-external`, or `/external-review`.\n\n> Each skill bundles its own copy of `grill-review.sh` so it works standalone; the three copies are kept byte-identical. If you edit the adapter, update all three.\n\n## Prerequisites\n\n- **Default (`openai-compat`):** an OpenRouter API key — `export OPENAI_COMPAT_KEY=sk-or-...` (or `OPENROUTER_API_KEY`). Optionally override `OPENAI_COMPAT_URL` / `OPENAI_COMPAT_MODEL`. `jq` and `curl` must be installed.\n- **Other reviewers:** the chosen CLI installed and authenticated (`codex login`, `gemini` logged in, `ZAI_API_KEY` for glm, `amp` credits, `hermes` + Docker). On an auth/model error the adapter exits non-zero and writes nothing — surface it; don't silently retry.\n\n## Quick start\n\nYou drive everything from **inside Claude Code** — you never run `grill-review.sh` yourself; the skill calls it for you.\n\n1. **Install** the skills (see [Install](#install) above) and **set your key once** for the default reviewer:\n ```bash\n export OPENAI_COMPAT_KEY=sk-or-... # an OpenRouter key\n ```\n2. **Invoke a skill in Claude Code**, with the task on the same line:\n ```\n /grill-me-external add API-key auth with per-tenant rate limiting\n /external-review # when you already have a plan to stress-test\n /grill-with-docs-external # when your repo has a CONTEXT.md glossary / ADRs\n ```\n3. **Answer the grill** (Act 1), then let the loop run (Act 2): Claude writes `PLAN.md`, the cross-provider critic attacks it round by round until `VERDICT: APPROVED` or `MAX_ROUNDS`, producing `PLAN.md` (the final plan) and `PLAN-REVIEW-LOG.md` (the full argument).\n4. **Sign off.** No code is written until you approve the converged plan.\n\nOverride the critic or round cap inline, e.g. `/external-review reviewer=glm rounds=3`.\n\n## How Act 2 works\n\n1. Claude writes the locked plan to `PLAN.md` and starts a log at `PLAN-REVIEW-LOG.md`.\n2. **Round 1:** the chosen critic reviews the plan **read-only** and returns `VERDICT: APPROVED` or `VERDICT: REVISE`.\n3. **Rounds 2..N:** Claude revises; the critic re-reviews, remembering its prior critiques (via native session resume where available, else a replayed critique history) and only checking whether they're addressed.\n4. Bounded by `MAX_ROUNDS` (default 5). Terminates on `APPROVED` or the cap (a flagged deadlock beats a fake \"approved\").\n5. **You gate twice only:** kickoff, and final sign-off before any code. The critic is read-only every round and never writes a file.\n\nAll read-only enforcement, session handling, and verdict extraction live in one place — `grill-review.sh` — so the skills never type provider flags. Two artifacts result: `PLAN.md` (the clean final plan — the *what*) and `PLAN-REVIEW-LOG.md` (the full round-by-round argument — the *why*).\n\n## Provider matrix\n\nSet `REVIEWER` to choose the critic (default `openai-compat`). The reviewer is **always non-Claude**.\n\n| `REVIEWER` | Model | Read-only mechanism | Agentic? | Setup |\n|---|---|---|---|---|\n| `openai-compat` *(default)* | any OpenAI-compatible model (default `openai/gpt-5.5` via OpenRouter) | **read-only by construction** — a pure API call, no tools, no filesystem | No (plan is inlined) | `OPENAI_COMPAT_KEY` (an OpenRouter key) |\n| `codex` | GPT-5.5 | `-s read-only` (round 1) / `-c sandbox_mode=read-only` (resume) | Yes | `codex` CLI ≥ 0.130, `codex login` |\n| `gemini` | Gemini (Gemini CLI) | `--approval-mode plan` (documented read-only mode) | Yes | `gemini` CLI, logged in |\n| `glm` | GLM-5.2 | child `claude -p --permission-mode plan` against z.ai | Yes | `export ZAI_API_KEY=...` |\n| `amp` | **GPT-5 via Oracle** | execute mode without `--dangerously-allow-all` | Yes | `amp` CLI + credits (see gotcha) |\n| `hermes` | any non-Claude open model | Docker terminal backend + repo mounted `:ro` | Yes | `hermes` CLI + Docker + `export HERMES_MODEL=...` |\n\n### Why `openai-compat` (OpenRouter) is the default\n\nIt's a single HTTPS POST with **no tools and no filesystem access**, so it's read-only *by construction* — nothing to sandbox, nothing that can deadlock, and the widest non-Claude model menu anywhere. Its one tradeoff: it's **non-agentic** — it sees the inlined `PLAN.md` but can't open other repo files. For a review that must read surrounding code (e.g. `grill-with-docs-external`'s glossary check), pick an agentic reviewer (`codex` / `gemini` / `glm`).\n\n### Choosing an `openai-compat` model\n\nDefault is `openai/gpt-5.5` (frontier, closest to Opus-4.8-class judgment). Swap via `OPENAI_COMPAT_MODEL`:\n\n| Model | Why |\n|---|---|\n| `openai/gpt-5.5` *(default)* | Max judgment quality. |\n| `google/gemini-3.1-pro-preview` | Frontier, a different provider, ~half the cost. |\n| `deepseek/deepseek-v4-pro` | Near-frontier, ~10× cheaper, 1M context. |\n| `z-ai/glm-5.2` | Strong open model; also reachable natively via `REVIEWER=glm`. |\n\n### Examples\n\n```bash\n# Default — OpenRouter + openai/gpt-5.5\nOPENAI_COMPAT_KEY=sk-or-... \"$HOME/.claude/skills/external-review/grill-review.sh\" 1\n\n# OpenRouter with a cheaper near-frontier model\nOPENAI_COMPAT_KEY=sk-or-... OPENAI_COMPAT_MODEL=deepseek/deepseek-v4-pro \\\n \"$HOME/.claude/skills/external-review/grill-review.sh\" 1\n\n# GLM-5.2 natively via z.ai\nZAI_API_KEY=sk-... REVIEWER=glm \"$HOME/.claude/skills/external-review/grill-review.sh\" 1\n\n# Codex (the original)\nREVIEWER=codex \"$HOME/.claude/skills/external-review/grill-review.sh\" 1\n```\n\n## Tunables\n\n| Var | Default | Meaning |\n|-----|---------|---------|\n| `REVIEWER` | `openai-compat` | Which non-Claude model critiques the plan |\n| `OPENAI_COMPAT_MODEL` | `openai/gpt-5.5` | Model for the `openai-compat` reviewer |\n| `OPENAI_COMPAT_URL` | `https://openrouter.ai/api/v1` | Endpoint for the `openai-compat` reviewer |\n| `MAX_ROUNDS` | `5` | Hard cap on review rounds |\n| `PLAN_FILE` | `PLAN.md` | Where the plan lives |\n| `LOG_FILE` | `PLAN-REVIEW-LOG.md` | The argument transcript |\n\nPass e.g. `reviewer=glm rounds=3` when invoking to override.\n\n## Safety — read-only is the spine\n\nThe critic runs **read-only every round** — that guarantee is enforced per provider inside `grill-review.sh`, and it never moved, it just became per-provider:\n\n- `openai-compat` is read-only *by construction* (no tools, no filesystem).\n- `codex` uses `-s read-only` then `-c sandbox_mode=\"read-only\"` on resume (the `resume` subcommand rejects `-s` and would otherwise inherit a possibly-`danger-full-access` `config.toml`).\n- `gemini` uses `--approval-mode plan`; `glm` uses a child `claude --permission-mode plan`; `hermes` requires a Docker `:ro` backend (the adapter refuses the writable `local` backend).\n- **Echo-chamber guards:** `amp` and `hermes` are *harnesses* that can default to Claude. The adapter forces Amp's **Oracle** (GPT-5) and **rejects a Claude `HERMES_MODEL`**.\n- **`amp` headless gotcha:** `amp -x` can deadlock (~30s, surfaced as \"Network timeout\" but really a stdin/permission timeout) if the Oracle/read tools aren't pre-approved. The adapter pipes `< /dev/null` to avoid the hang; for reliable headless use, pre-approve the tools once with `amp permissions add`.\n- **Why not the Antigravity `agy` CLI?** It has no headless read-only mode — its `--print` mode auto-approves file writes even with `--sandbox` or `toolPermission: strict` — so it can't satisfy the invariant without external isolation. Use the `gemini` CLI for a read-only Gemini critic, or OpenRouter's Gemini model via `openai-compat`.\n\nNo code is ever written until you approve the final plan.\n\n## Credits\n\n- **Act 1** (`grill-me`, `grill-with-docs`) © Matt Pocock — https://github.com/mattpocock/skills (MIT). See each skill's `THIRD-PARTY-NOTICES.md`.\n- **Originally based on** [`chaseai-yt/grill-me-codex`](https://github.com/chaseai-yt/grill-me-codex) by Chase AI — the Codex-only predecessor whose Act 2 review loop and packaging this builds on. The cross-provider adapter and the rest of the rework here are my own modifications; this repo is an independent adaptation, not a fork.\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n"}, "9aca7a68d241561d9c76e07829c073b0aae2ea69": {"t": 1785771630.0810232, "n": 4391, "h": "95026ecf10db6903", "c": "# grill-me-codex\n\n**Two AI models harden your plan before you write a line of code.** A family of Claude Code skills that close the two gaps in AI-assisted coding: the gap between *you and Claude* (do we agree on what to build?) and the gap between *Claude and the quality of what it produces* (is the plan actually correct — and how would you even know?).\n\nAct 1 grills **you** to lock the plan. Act 2 hands that plan to **OpenAI Codex** — a rival, cross-provider model — which adversarially tears it apart over several rounds until both models sign off. Only then does code get written.\n\n> Why a second model? Because the same model that plans the build and writes the build can't be trusted to *grade its own work* — it's an echo chamber. A different provider catches what Claude structurally can't see in itself.\n\nBuilt on [Matt Pocock's `grill-me` / `grill-with-docs`](https://github.com/mattpocock/skills) skills (MIT) — Act 1 is his work; the iterative cross-model Codex review (Act 2) is the addition.\n\n> ### 🚀 Want to go deeper?\n> This skill is one piece of the full system. Get the **Claude Code Masterclass** and join builders going further with agentic AI inside **[Chase AI+](https://www.skool.com/chase-ai/about)**.\n\n## The skills\n\n| Skill | Act 1 | Act 2 | Use when |\n|-------|-------|-------|----------|\n| **`grill-me-codex`** | Claude interrogates you one question at a time until the decision tree is resolved | Codex adversarial review loop | Planning from scratch + want alignment AND a second-model check |\n| **`grill-with-docs-codex`** | Same, but challenges your plan against your project's `CONTEXT.md` glossary + writes ADRs inline | Codex review loop | Same, in a project with established terminology / architecture decisions |\n| **`codex-review`** | — (you already have a plan) | Codex review loop | You have a plan and just want the cross-model stress-test |\n\n## How Act 2 works\n\n1. Claude writes the locked plan to `PLAN.md` and starts a log at `PLAN-REVIEW-LOG.md`.\n2. **Round 1:** Codex reviews the plan in a **read-only sandbox** and returns `VERDICT: APPROVED` or `VERDICT: REVISE`.\n3. **Rounds 2..N:** Claude revises; the *same* Codex session is resumed so it remembers its prior critiques and only checks whether they're addressed.\n4. Bounded by `MAX_ROUNDS` (default 5). Terminates on `APPROVED` or the cap (a flagged deadlock beats a fake \"approved\").\n5. **You gate twice only:** kickoff, and final sign-off before any code. Codex is read-only every round and never writes a file.\n\nTwo artifacts: `PLAN.md` (the clean final plan — the *what*) and `PLAN-REVIEW-LOG.md` (the full round-by-round argument — the *why*).\n\n## Install\n\nCopy the skill folders into your Claude Code skills directory:\n\n```bash\n# macOS / Linux\ncp -r skills/* ~/.claude/skills/\n\n# Windows (PowerShell)\nCopy-Item -Recurse skills\\* $env:USERPROFILE\\.claude\\skills\\\n```\n\nThen invoke in Claude Code: `/grill-me-codex`, `/grill-with-docs-codex`, or `/codex-review`.\n\n## Prerequisites\n\n- **Codex CLI ≥ 0.130** — `npm install -g @openai/codex@latest` (older versions error on the default `gpt-5.5` model).\n- **Authenticated Codex** — run `codex login` once (a ChatGPT account works; Free/Plus/Pro/Max all fine).\n- **Don't pin a model** — ChatGPT-account auth rejects `gpt-5.x-codex` model variants; the skills use your config default.\n\n## Tunables\n\n| Var | Default | Meaning |\n|-----|---------|---------|\n| `MAX_ROUNDS` | `5` | Hard cap on review rounds |\n| `PLAN_FILE` | `PLAN.md` | Where the plan lives |\n| `LOG_FILE` | `PLAN-REVIEW-LOG.md` | The argument transcript |\n\nPass e.g. `rounds=3` when invoking to override.\n\n## Safety\n\nCodex runs **read-only every round** — `-s read-only` on the first call, `-c sandbox_mode=\"read-only\"` on every resume (the `resume` subcommand doesn't accept `-s`, and without forcing read-only it would inherit your `config.toml` sandbox default, which may be `danger-full-access`). The skills handle this for you. No code is ever written until you approve the final plan.\n\n## Credits\n\n- Act 1 (`grill-me`, `grill-with-docs`) © Matt Pocock — https://github.com/mattpocock/skills (MIT). See each skill's `THIRD-PARTY-NOTICES.md`.\n- Act 2 (iterative Codex review) and packaging by [Chase AI](https://youtube.com/@chaseai). Go deeper in [Chase AI+](https://www.skool.com/chase-ai/about) (Claude Code Masterclass).\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n"}}}}