second-opinion

second-opinion

热门

对未提交的更改、分支差异或特定提交运行外部LLM代码审查(OpenAI Codex或Google Gemini CLI)。当用户要求第二意见、外部审查、codex审查、gemini审查或提及/second-opinion时使用。

6336Star
545Fork
更新于 2026/7/30
SKILL.md
readonly只读
name
second-opinion
description

对未提交的更改、分支差异或特定提交运行外部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"(默认)时:

  1. 并行运行Codex和Gemini——在单个响应中发出两个Bash工具调用。两个命令都是只读的(它们通过外部API审查差异),因此没有共享状态或git锁争用。
  2. 收集两个结果,然后使用清晰的标题呈现:
## 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:[运行两个审查]