对未提交的更改、分支差异或特定提交运行外部LLM代码审查(OpenAI Codex或Google Gemini CLI)。当用户要求第二意见、外部审查、codex审查、gemini审查或提及/second-opinion时使用。
第二意见
调用外部LLM CLI进行独立的代码审查,由不同的模型驱动。支持OpenAI Codex CLI和Google Gemini CLI。
使用时机
- 从不同模型获取代码更改的第二意见
- 在打开PR前审查分支差异
- 在提交前检查未提交的工作是否存在问题
- 运行针对性审查(安全、性能、错误处理)
- 比较多个模型的审查输出
不适用场景
- 未安装Codex CLI或Gemini CLI
- 未配置任一工具的API密钥或订阅
- 审查非代码文件(文档、配置)
- 您希望Claude自己审查(直接询问Claude即可)
安全说明
Gemini CLI使用--yolo参数调用,该参数自动批准所有工具调用而无需确认。这是无头(非交互)操作所必需的,但意味着Gemini将执行其扩展请求的任何工具操作而无需提示。
快速参考
# Codex(无头执行,结构化JSON输出)
codex exec --sandbox read-only --ephemeral \
--output-schema codex-review-schema.json \
-o "$output_file" - < "$prompt_file"
# Gemini(代码审查扩展)
gemini -p "/code-review" --yolo -e code-review
# Gemini(无头模式,带差异——完整模式见references/)
git diff HEAD > /tmp/review-diff.txt
{ printf '%s\n\n' 'Review this diff for issues.'; cat /tmp/review-diff.txt; } \
| gemini -p - --yolo -m gemini-3.1-pro-preview
调用
1. 交互式收集上下文
使用AskUserQuestion一次性收集审查参数。根据用户已在调用中提供的内容调整问题(跳过他们已经回答的问题)。
将所有适用的问题合并到单个AskUserQuestion调用中(最多4个问题)。
问题1 — 工具(如果用户已指定则跳过):
header: "审查工具"
question: "使用哪个工具运行审查?"
options:
- "同时使用Codex和Gemini(推荐)" → 并行运行两者
- "仅Codex" → codex exec
- "仅Gemini" → gemini CLI
问题2 — 范围(如果用户已指定则跳过):
header: "审查范围"
question: "审查哪些内容?"
options:
- "未提交的更改" → git diff HEAD + 未跟踪文件
- "与主分支的差异" → git diff <branch>...HEAD(自动检测默认分支)
- "特定提交" → git diff <sha>~1..<sha>(后续询问SHA)
问题3 — 项目上下文(如果CLAUDE.md和AGENTS.md都不存在则跳过):
首先检查CLAUDE.md,然后检查仓库根目录下的AGENTS.md。仅当至少存在一个时才显示此问题。
header: "项目上下文"
question: "是否包含项目约定文件,以便审查对照您的标准进行检查?"
options:
- "是,包含它"
- "否,标准审查"
问题4 — 审查重点(始终询问):
header: "审查重点"
question: "审查是否有特定的关注领域?"
options:
- "通用审查" → 无自定义提示
- "安全与认证" → 安全重点提示
- "性能" → 性能重点提示
- "错误处理" → 错误处理重点提示
2. 直接运行工具
不要预先检查工具可用性。立即运行所选工具。如果命令失败并显示"command not found"或缺少扩展,请报告下方错误处理表中的安装命令,并跳过该工具(如果选择了"Both",则仅运行可用的工具)。
差异预览
收集答案后,显示差异统计信息:
# 对于未提交(已跟踪+未跟踪):
git diff --stat HEAD
git ls-files --others --exclude-standard
# 对于分支差异:
git diff --stat <branch>...HEAD
# 对于特定提交:
git diff --stat <sha>~1..<sha>
如果差异为空,则停止并告知用户。
如果差异非常大(更改超过2000行),则警告用户并询问是否继续或缩小范围。
跳过不适用的检查
确定差异范围后,跳过不适用于实际更改文件的检查。
依赖扫描
仅当差异涉及依赖清单文件时,才运行/security:scan-deps。使用以下命令检查:
git diff --name-only <scope> \
| grep -qiE '(package\.json|package-lock|yarn\.lock|pnpm-lock|Gemfile|\.gemspec|requirements\.txt|setup\.py|setup\.cfg|pyproject\.toml|poetry\.lock|uv\.lock|Cargo\.toml|Cargo\.lock|go\.mod|go\.sum|composer\.json|composer\.lock|Pipfile)'
如果差异中没有依赖文件,即使选择了安全重点也跳过扫描。扫描会分析整个项目的依赖树,与差异范围无关,因此在未触及依赖项时会增加大量时间而毫无价值。
自动检测默认分支
对于分支差异范围,检测默认分支名称:
git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null \
| sed 's@^refs/remotes/origin/@@' || echo main
Codex调用
有关命令语法、提示组装和结构化输出模式的完整详细信息,请参阅references/codex-invocation.md。
摘要:
- 使用
codex exec(而非codex review)进行无头操作 - 模型:
gpt-5.5,推理:xhigh - 使用OpenAI发布的代码审查提示(已微调到模型中)
- 差异手动生成并通过stdin与提示一起管道传输
--output-schema产生结构化的JSON发现-o仅捕获最终消息(无思考/执行噪音)- 所有三种范围(未提交、分支、提交)都支持项目上下文和重点指令(无限制)
- 在认证错误时回退到
gpt-5.4 - 输出为干净的JSON——解析并按优先级呈现发现
- 在Bash调用上设置
timeout: 600000
Gemini调用
有关标志、范围映射和扩展使用的完整详细信息,请参阅references/gemini-invocation.md。
摘要:
- 模型:
gemini-3.1-pro-preview,标志:--yolo,-e,-m - 对于未提交的通用审查:
gemini -p "/code-review" --yolo -e code-review - 对于分支/提交差异:将
git diff管道传输到gemini -p - 安全扩展名称为
gemini-cli-security(而非security) /security:analyze仅限交互式——改用-p配合安全提示- 仅当选择了安全重点且差异涉及依赖清单文件时,才运行
/security:scan-deps(请参阅差异感知优化) - 在Bash调用上设置
timeout: 600000
git diff的范围映射(Gemini没有内置范围标志):
| 范围 | Diff命令 |
|---|---|
| 未提交 | git diff HEAD + 未跟踪(见codex-invocation.md) |
| 分支差异 | git diff <branch>...HEAD |
| 特定提交 | git diff <sha>~1..<sha> |
同时运行两者
当用户选择"Both"(默认)时:
- 并行运行Codex和Gemini——在单个响应中发出两个Bash工具调用。两个命令都是只读的(它们通过外部API审查差异),因此没有共享状态或git锁争用。
- 收集两个结果,然后使用清晰的标题呈现:
## Codex审查(gpt-5.5)
<codex输出>
## Gemini审查(gemini-3.1-pro-preview)
<gemini输出>
总结两个审查的一致和不同之处。
错误处理
| 错误 | 操作 |
|---|---|
codex: command not found |
告知用户:npm i -g @openai/codex |
gemini: command not found |
告知用户:npm i -g @google/gemini-cli |
Gemini code-review扩展缺失 |
告知用户:gemini extensions install https://github.com/gemini-cli-extensions/code-review |
Gemini gemini-cli-security扩展缺失 |
告知用户:gemini extensions install https://github.com/gemini-cli-extensions/security |
| 模型认证错误(Codex) | 使用gpt-5.4重试 |
| 差异为空 | 告知用户没有更改需要审查 |
| 超时 | 告知用户并建议缩小差异范围 |
| 工具部分不可用 | 仅运行可用工具,并注明跳过 |
示例
同时使用两个工具(默认):
用户:/second-opinion
Claude:[询问4个问题:工具、范围、上下文、重点]
用户:选择"Both"、"Branch diff"、"Yes include CLAUDE.md"、"Security"
Claude:[检测默认分支 = main]
Claude:[显示diff --stat:6个文件,+103 -15]
Claude:[组装提示,包含审查说明 + CLAUDE.md + 安全重点 + 差异]
Claude:[并行运行codex exec和gemini]
Claude:[读取codex输出文件,解析结构化发现]
Claude:[呈现两个审查,突出一致和不同之处]
仅Codex,带内联参数:
用户:/second-opinion check uncommitted changes for bugs
Claude:[范围已知:未提交,重点已知:自定义]
Claude:[询问2个问题:工具、项目上下文]
用户:选择"Codex only"、"No context"
Claude:[显示diff --stat:3个文件,+45 -10]
Claude:[编写提示文件,包含审查说明 + 差异]
Claude:[运行codex exec,读取结构化JSON输出]
Claude:[按优先级呈现发现,附带文件:行引用]
仅Gemini:
用户:/second-opinion
Claude:[询问4个问题]
用户:选择"Gemini only"、"Uncommitted"、"No"、"General"
Claude:[显示diff --stat:2个文件,+20 -5]
Claude:[运行gemini -p "/code-review" --yolo -e code-review]
Claude:[呈现审查]
大差异警告:
用户:/second-opinion
Claude:[询问问题] → 用户选择"Both"、"Uncommitted"、"General"
Claude:[显示diff --stat:45个文件,+3200 -890]
Claude:"差异很大(3200+行)。继续还是缩小范围?"
用户:"proceed"
Claude:[运行两个审查]






