Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/chang-alan-l_grill-me-external.json

1 line
28 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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"}}}}