A VS Code extension prototype: instead of having the model that wrote a piece of code also review it, this routes the review to a different model — because models tend to miss the exact mistakes they're prone to making themselves.
How it decides who reviews what
-
Detect the author. It looks for a marker comment near the top of the file/selection:
// Generated-By: claude # generated-by: gpt-4oThis is deliberately simple — trying to fingerprint unmarked code by writing style alone is unreliable and gives false confidence. If your AI coding tool can drop a one-line comment like this when it generates code, detection becomes trivial and trustworthy.
-
Fall back to a default, if you set
crossModelReview.defaultAuthorModeltoclaudeorgptinstead ofauto. -
If still unknown, it either runs both reviewers (default) or asks you once via a quick pick, depending on
crossModelReview.dualReviewWhenUnknown. -
Pick the reviewer(s). Claude-written code → reviewed by GPT. GPT-written code → reviewed by Claude. Unknown → both (or your choice).
-
Distinct reasoning styles per reviewer, not just a generic "review this" prompt:
- Claude's prompt: understand intent and trace data flow end-to-end first, then do a correctness pass.
- GPT's prompt: line-by-line / function-by-function checks first, then zoom out to design-level issues.
These are starting points in
src/reviewPrompts.ts— tune them based on what actually catches bugs in your codebase.
Setup
npm install
npm run compile
Then in VS Code: press F5 (or use "Run Extension" in the Debug panel) to
launch an Extension Development Host with this extension loaded.
Set your API keys (stored via VS Code's encrypted SecretStorage, not in settings.json):
Cross-Model Review: Set Anthropic API KeyCross-Model Review: Set OpenAI API Key
(Command Palette: Cmd/Ctrl+Shift+P)
Usage
Cross-Model Review: Review Active File— reviews the whole open file.Cross-Model Review: Review Selection— reviews just the selected code (also available by right-clicking a selection).
Results open in a panel beside your editor, one section per reviewer.
Settings
| Setting | Default | Description |
|---|---|---|
crossModelReview.defaultAuthorModel |
auto |
auto, claude, or gpt — used when no marker comment is found |
crossModelReview.dualReviewWhenUnknown |
true |
Run both reviewers when the author can't be determined |
crossModelReview.claudeModel |
claude-sonnet-4-6 |
Anthropic model ID used as reviewer |
crossModelReview.gptModel |
gpt-4o |
OpenAI model ID used as reviewer |
What this is (and isn't)
This is a working prototype, not a polished product. Things worth doing before relying on it day-to-day:
- Add real markdown rendering in the webview (currently a minimal hand-rolled renderer — headings, bold, code fences, paragraphs only).
- Add caching/diffing so re-reviewing an unchanged file doesn't re-spend tokens.
- Add a third "arbiter" pass when both reviewers disagree — disagreement between reviewers is itself a useful signal that something's ambiguous or risky.
- Wire generator-detection into your actual pipeline (e.g. have your AI
coding agent auto-insert the
Generated-By:marker comment when it writes code, rather than relying on it existing by convention). - Handle very large files (chunking / only reviewing diffs against git HEAD).
Packaging
To produce an installable .vsix:
npm install -g @vscode/vsce
vsce package