{"slug": "most-code-review-catches-bugs-i-shipped-one-that-argues-with-the-design", "title": "Most code review catches bugs. I shipped one that argues with the design.", "summary": "A developer shipped v0.4.0 of cursor-plugin-cc, a Claude Code plugin that integrates Claude and Cursor Composer. The new adversarial review command challenges the design and implementation choices rather than just hunting bugs, and is user-invoked only to prevent unwanted edits. The update also introduces a composer-prompting skill for better task decomposition.", "body_md": "The cheapest bug to catch is the one a reviewer circles on line 40. The expensive one never shows up as a bad line it ships as the *wrong approach*, clean and green. Your retry loop is correct and also retrying in the wrong layer. Your cache has no bug and invalidates on the wrong key. A normal review human or AI slides right past those, because it's anchored on *\"is this line right,\"* not *\"is this the right thing to build.\"*\n\nThis week I shipped **v0.4.0** of [cursor-plugin-cc](https://github.com/freema/cursor-plugin-cc), and the headline is a review command whose entire job is that second question.\n\nQuick context if you haven't seen the plugin: it's a Claude Code plugin that keeps one loop running **Claude plans, Cursor's Composer writes the code, Claude reviews the diff** without leaving the Claude Code TUI. Two tools, each doing the half it's best at. v0.4.0 sharpens the *review* half.\n\n`/cursor:adversarial-review`\n\nA read-only review that questions the chosen implementation and design instead of only hunting implementation defects. You point it at a diff (working tree by default, `--base <ref>`\n\nfor a branch, `--scope`\n\n, `--model`\n\nsame target selection as the normal `/cursor:review`\n\n) and it pressure-tests:\n\nIt's *steerable*: any trailing text is a focus. `\"is the retry/backoff design sound under load?\"`\n\naims the whole challenge at exactly the thing you're nervous about.\n\n```\n/cursor:adversarial-review\n/cursor:adversarial-review --base main\n/cursor:adversarial-review \"question the retry/backoff design under load\"\n/cursor:adversarial-review --background --model opus look for race conditions and question the approach\n```\n\nUnder the hood it's `/cursor:review --adversarial`\n\n, so it shows up as a normal job in `/cursor:status`\n\n, `/cursor:result`\n\nand `/cursor:cancel`\n\n. What used to be a `--adversarial`\n\nflag most people never found is now a first-class, discoverable command — and it's **user-invoked only** (`disable-model-invocation: true`\n\n), because a design challenge is something you reach for on purpose, not something an agent should fire off on its own.\n\nWhy split it out instead of just telling `/cursor:review`\n\nto \"try harder\"? Because a stricter bug pass and a design challenge are different jobs, and conflating them gets you neither. Naming the second one makes you actually run it — right before you ship a change you're *not fully sure about*, which is exactly when nobody bothers.\n\nBoth review commands are read-only **by construction**, not by good intentions. The run happens, then a post-flight check fails the job if the working tree changed. So a review can never quietly turn into an edit — even though the same plugin runs Composer elsewhere with auto-approve on. You can hand a fast model your diff and know the worst it can do is *talk*.\n\nThat guarantee is the whole reason I trust an adversarial pass. A reviewer that might also \"helpfully\" refactor while it argues is a reviewer you have to babysit.\n\nSmall ergonomics fix that removes a daily papercut. If you don't pass `--wait`\n\nor `--background`\n\n, the command now sizes the diff first — `git status`\n\n, `git diff --shortstat`\n\n, counting untracked files — and asks you *once* whether to wait or run it in the background, recommending background for anything beyond a tiny 1–2 file change. A multi-file review takes a while; you shouldn't have to guess up front whether it's going to block your terminal for the next two minutes.\n\nThe most *interesting* change isn't a command. For a while, the guidance for how to turn a task into a tight Cursor prompt ground it in the target repo's conventions, the five required sections (Goal / Repo context / Acceptance criteria / Files to touch / How to verify) plus a guardrails block, chunk anything over ~5 steps or ~10 files or 2 architectural layers, pick the smallest model that fits, resume vs. fresh — lived *inline* inside the `cursor-runner`\n\nsubagent's prompt.\n\nIn v0.4.0 that moved into a `composer-prompting`\n\n**skill**. The subagent now references it with a single `skills:`\n\nline and shrank down to its operational spine: *ground → invoke /cursor:delegate → return Cursor's output verbatim.*\n\nThe lesson generalises past this plugin, and it's the same thread running through everything I've been writing about MCP and agents: **an agent's prompt is context you pay for on every single run.** Reusable know-how doesn't belong restated inside each agent that needs it — it belongs in one referenced skill that loads when it's actually relevant. The agent gets leaner, the knowledge gets a single home instead of three drifting copies, and the thing you maintain shrinks. Same instinct as splitting tools from resources on an MCP server: put weight where it earns its place, and nowhere else.\n\nStill **zero runtime dependencies** — plain ESM, Node stdlib, no build step, no `dist/`\n\n. Still **MIT**. CI runs the tests and lint across Node 18.18 / 20 / 22 on Linux and macOS on every PR. And it's openly adapted from [ openai/codex-plugin-cc](https://github.com/openai/codex-plugin-cc) — the Codex/GPT original that pulls the same trick on OpenAI's side — ported to the Cursor CLI. Credit where it's due.\n\n```\n/plugin marketplace add freema/cursor-plugin-cc\n/plugin install cursor@tomas-cursor\n/reload-plugins\n/cursor:setup\n```\n\n👉 ** github.com/freema/cursor-plugin-cc** — v0.4.0, MIT.\n\n*When did a code review last change your **approach** instead of your lines? That's the review I actually want — and the one almost nobody runs. Curious whether you've found a way to make it a habit.*", "url": "https://wpnews.pro/news/most-code-review-catches-bugs-i-shipped-one-that-argues-with-the-design", "canonical_source": "https://dev.to/freema/most-code-review-catches-bugs-i-shipped-one-that-argues-with-the-design-1h0h", "published_at": "2026-07-14 18:00:00+00:00", "updated_at": "2026-07-14 18:29:32.526534+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "large-language-models", "ai-agents"], "entities": ["cursor-plugin-cc", "Claude Code", "Cursor Composer", "freema"], "alternates": {"html": "https://wpnews.pro/news/most-code-review-catches-bugs-i-shipped-one-that-argues-with-the-design", "markdown": "https://wpnews.pro/news/most-code-review-catches-bugs-i-shipped-one-that-argues-with-the-design.md", "text": "https://wpnews.pro/news/most-code-review-catches-bugs-i-shipped-one-that-argues-with-the-design.txt", "jsonld": "https://wpnews.pro/news/most-code-review-catches-bugs-i-shipped-one-that-argues-with-the-design.jsonld"}}