| name | cross-review |
| description | Multi-perspective cross review for product, design, and technical proposals. Reviews proposals from user, system, and cost perspectives using isolated reviewer roles. Works out of the box with zero configuration (single-model with sub-agent isolation). Optionally configure a second model (GPT, Claude, Gemini, DeepSeek, GLM, Qwen, Kimi, MiniMax) for higher quality independent review. Use this skill whenever the user asks for cross review, second opinion, multi-perspective review, or wants their proposal challenged from different angles. Also triggers on: 交叉评审, 第二意见, 评审一下, quick review, full debate.
|
Cross Review
Run multi-perspective cross reviews on any proposal. The AI reviews your proposal
from different expert perspectives (user experience, system design, cost/complexity)
using isolated reviewer roles, then synthesizes the results into actionable output.
Two operating modes:
- Zero-config (default): Uses sub-agent isolation or role-play to simulate
independent reviewers. Works immediately, no API keys needed.
- Multi-model (enhanced): Calls a second AI model for truly independent review.
Higher quality, requires one external API key.
Prerequisites
Zero-config mode (default): No setup needed. The skill uses sub-agent
isolation or role-play to simulate independent reviewers.
Multi-model mode (enhanced): A config file at ~/.cross-review-config.json
with at least one external model's API key. See the Configuration section below.
First-Time Setup (Multi-Model Mode Only)
If the user wants to use a second model and no config file exists, guide them:
- Ask which AI product they are currently using (claude / gpt / gemini / etc.)
- Ask which reviewer model(s) they have API keys for
- Collect the API key(s) and base URL if non-default
- Run the setup script to create the config:
python3 {SKILL_DIR}/scripts/setup.py \
--current-model claude \
--add-model gpt --api-key "sk-..." \
--add-model deepseek --api-key "sk-..." --base-url "https://api.deepseek.com/v1"
If python3 is not available, tell the user to install Python 3.8+ first.
If {SKILL_DIR} does not resolve on the current platform, use the installed
skill path directly (e.g. ~/.claude/skills/cross-review/scripts/setup.py).
Trigger Phrases
- cross review, second opinion, multi-model review
- 交叉评审, 第二意见, 让另一个模型看看
- quick review, full debate, deep review
Entry Flow
Step 1: Detect Model Environment
python3 {SKILL_DIR}/scripts/reviewer.py --list-models
Parse the returned JSON:
has_reviewer: true → multi-model mode, continue to Step 2
has_reviewer: false → single-model mode, jump to modes/solo-review.md
If the command fails (config file missing, python3 not found, etc.), use
single-model mode — jump to modes/solo-review.md. This is the default
experience and works without any configuration.
Step 2: Select Review Mode (multi-model mode)
Check the trigger phrase or user input for an explicit mode:
- Contains "quick review" or "quick" → use Quick Review, skip asking
- Contains "full debate" or "full" or "deep" → use Full Debate, skip asking
- No explicit mode → check
default_mode in config:
- Has value (
quick or full) → use that default, tell user they can switch
- No value (first use) → ask the user:
This is your first time using cross-review. Pick a default mode:
- Quick Review: Primary model proposes → reviewer model critiques → synthesis.
~3 steps, good when you already have a draft and want fast validation.
- Full Debate: Both models propose independently → cross-critique → rebuttals
→ synthesis. ~7 steps, good for early-stage ideas that need thorough challenge.
I'll remember your choice. Say "quick review" or "full debate" anytime to switch.
After the user confirms, save their choice:
python3 -c "
import json, pathlib
p = pathlib.Path.home() / '.cross-review-config.json'
c = json.loads(p.read_text())
c['default_mode'] = 'quick'
p.write_text(json.dumps(c, ensure_ascii=False, indent=2))
"
Replace 'quick' with 'full' if the user chose Full Debate.
Step 3: Execute
- Quick Review → follow
modes/quick-review.md
- Full Debate → follow
modes/full-debate.md
Unified Output Schema
All modes MUST produce output in this exact structure:
**Final Proposal**
(Recommended proposal incorporating review feedback, complete and actionable)
**Resolved Disagreements**
(Points where reviewers initially disagreed but reached consensus. Write "None" if empty)
**Decisions Needed From You**
(Each in this format, or "None" if empty)
> **Disagreement N: [one-line summary of the decision]**
> - Context: [1-2 sentences on why this is a disagreement]
> - Option A: [approach] → Pros: ... / Cons: ...
> - Option B: [approach] → Pros: ... / Cons: ...
> - My recommendation: A/B, because [one-line reason]
**Suggestions to Ignore for Now**
(Each: [suggestion] → Reason to skip: [no current need / complexity not worth it / future optimization])
Configuration File Format
Create ~/.cross-review-config.json:
{
"current_model": "claude",
"default_mode": "quick",
"reviewer_priority": ["gpt", "deepseek", "glm", "gemini", "qwen", "kimi", "minimax", "claude"],
"models": {
"gpt": {
"api_key": "sk-...",
"base_url": "https://api.openai.com/v1",
"model": "gpt-5.4"
}
}
}
Field reference:
| Field | Required | Description |
|---|
current_model | Yes | The AI product you are using now (claude / gpt / gemini / etc.). The reviewer will skip this model. |
default_mode | No | Default review mode (quick or full). Set automatically on first use. |
reviewer_priority | No | Order of preference for selecting the reviewer model. Defaults to all configured models. |
models | Yes | At least one model with an api_key. |
models.*.api_key | Yes | API key for the model. Can also use env var CROSS_REVIEW_{MODEL}_KEY (e.g. CROSS_REVIEW_GPT_KEY). |
models.*.base_url | No | API endpoint. Required for non-default providers (DeepSeek, GLM, Qwen, Kimi, MiniMax). |
models.*.model | No | Model name to use. Defaults vary by provider. |
models.*.max_tokens | No | Max response tokens. Default: 4096. |
models.*.temperature | No | Sampling temperature. Default: 0.3. |
models.*.wire_api | No | API protocol: chat (default, OpenAI-compatible), anthropic, gemini, responses (OpenAI Responses API). |
models.*.ssl_verify | No | Set to false to skip SSL verification. Default: true. |
Minimal config (one reviewer model is enough):
{
"current_model": "claude",
"models": {
"gpt": {
"api_key": "sk-...",
"model": "gpt-5.4"
}
}
}
Full config with all supported models:
{
"current_model": "claude",
"default_mode": "quick",
"reviewer_priority": ["gpt", "deepseek", "glm", "gemini", "qwen", "kimi", "minimax", "claude"],
"models": {
"gpt": {
"api_key": "sk-...",
"base_url": "https://api.openai.com/v1",
"model": "gpt-5.4"
},
"claude": {
"api_key": "sk-ant-...",
"model": "claude-sonnet-4-20250514"
},
"gemini": {
"api_key": "AIza...",
"model": "gemini-2.5-pro"
},
"deepseek": {
"api_key": "sk-...",
"base_url": "https://api.deepseek.com/v1",
"model": "deepseek-chat"
},
"glm": {
"api_key": "...",
"base_url": "https://open.bigmodel.cn/api/paas/v4",
"model": "glm-5.1"
},
"qwen": {
"api_key": "sk-...",
"base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
"model": "qwen-max"
},
"kimi": {
"api_key": "sk-...",
"base_url": "https://api.moonshot.cn/v1",
"model": "kimi-k2.6"
},
"minimax": {
"api_key": "...",
"base_url": "https://api.minimax.chat/v1",
"model": "MiniMax-M2.7"
}
}
}