second-opinion

second-opinion

熱門

對尚未提交的變更、分支差異或特定提交執行外部 LLM 程式碼審查(OpenAI Codex 或 Google Gemini CLI)。當使用者要求第二意見、外部審查、codex review、gemini review 或提及 /second-opinion 時使用。

6336星標
545分支
更新於 2026/7/30
SKILL.md
readonlyread-only
name
second-opinion
description

對尚未提交的變更、分支差異或特定提交執行外部 LLM 程式碼審查(OpenAI Codex 或 Google Gemini CLI)。當使用者要求第二意見、外部審查、codex review、gemini review 或提及 /second-opinion 時使用。

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(無頭模式搭配 diff — 完整模式請參閱 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.mdAGENTS.md 都不存在則跳過):

先檢查 CLAUDE.md,再檢查專案根目錄的 AGENTS.md。僅當至少一個存在時才顯示此問題。

header: "專案背景"
question: "是否包含專案慣例檔案,讓審查依據您的標準進行檢查?"
options:
  - "是,包含它"
  - "否,標準審查"

問題 4 — 審查重點(總是詢問):

header: "審查重點"
question: "審查是否有特定的重點領域?"
options:
  - "一般審查"    → 無自訂提示
  - "安全性與驗證"   → 安全性重點提示
  - "效能"       → 效能重點提示
  - "錯誤處理"    → 錯誤處理重點提示

2. 直接執行工具

不要預先檢查工具是否可用。立即執行所選工具。如果命令失敗並顯示「command not found」或缺少擴充功能,請回報下方錯誤處理表格中的安裝命令,並跳過該工具(如果選擇了「兩者」,則僅執行可用的工具)。

Diff 預覽

收集答案後,顯示 diff 統計資料:

# 未提交(已追蹤 + 未追蹤):
git diff --stat HEAD
git ls-files --others --exclude-standard

# 分支差異:
git diff --stat <branch>...HEAD

# 特定提交:
git diff --stat <sha>~1..<sha>

如果 diff 為空,則停止並告知使用者。

如果 diff 非常大(超過 2000 行變更),警告使用者並詢問是否繼續或縮小範圍。

跳過不適用的檢查

確定 diff 範圍後,跳過不適用於實際變更檔案的檢查。

相依性掃描

僅當 diff 涉及相依性清單檔案時才執行 /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)'

如果 diff 中沒有相依性檔案,即使選擇了安全性重點也跳過掃描。掃描會分析整個專案的相依性樹,無論 diff 範圍為何,因此在未觸及相依性時會增加大量時間而無價值。

自動偵測預設分支

對於分支差異範圍,偵測預設分支名稱:

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 發布的程式碼審查提示(已微調至模型中)
  • diff 手動產生並透過 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 搭配安全性提示
  • 僅當選擇安全性重點且 diff 涉及相依性清單檔案時才執行 /security:scan-deps(請參閱 Diff 感知最佳化)
  • 在 Bash 呼叫上設定 timeout: 600000

git diff 的範圍對應(Gemini 沒有內建的範圍旗標):

範圍 Diff 命令
未提交 git diff HEAD + 未追蹤(請參閱 codex-invocation.md
分支差異 git diff <branch>...HEAD
特定提交 git diff <sha>~1..<sha>

同時執行兩者

當使用者選擇「兩者」(預設)時:

  1. 同時執行 Codex 和 Gemini — 在單一回應中發出兩個 Bash 工具呼叫。兩個命令都是唯讀的(它們透過外部 API 審查 diff),因此沒有共享狀態或 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 重試
空的 diff 告知使用者沒有變更需要審查
逾時 告知使用者並建議縮小 diff 範圍
工具部分不可用 僅執行可用的工具,並註明跳過

範例

兩個工具(預設):

使用者:/second-opinion
Claude:[詢問 4 個問題:工具、範圍、背景、重點]
使用者:選擇「兩者」、「分支差異」、「是,包含 CLAUDE.md」、「安全性」
Claude:[偵測預設分支 = main]
Claude:[顯示 diff --stat:6 個檔案,+103 -15]
Claude:[組合提示,包含審查指示 + CLAUDE.md + 安全性重點 + diff]
Claude:[同時執行 codex exec 和 gemini]
Claude:[讀取 codex 輸出檔案,解析結構化發現]
Claude:[呈現兩個審查,標示一致與差異之處]

僅 Codex 搭配內嵌參數:

使用者:/second-opinion check uncommitted changes for bugs
Claude:[範圍已知:未提交,重點已知:自訂]
Claude:[詢問 2 個問題:工具、專案背景]
使用者:選擇「僅 Codex」、「無背景」
Claude:[顯示 diff --stat:3 個檔案,+45 -10]
Claude:[撰寫提示檔案,包含審查指示 + diff]
Claude:[執行 codex exec,讀取結構化 JSON 輸出]
Claude:[按優先順序呈現發現,附帶檔案:行號參考]

僅 Gemini:

使用者:/second-opinion
Claude:[詢問 4 個問題]
使用者:選擇「僅 Gemini」、「未提交」、「否」、「一般」
Claude:[顯示 diff --stat:2 個檔案,+20 -5]
Claude:[執行 gemini -p "/code-review" --yolo -e code-review]
Claude:[呈現審查]

大型 diff 警告:

使用者:/second-opinion
Claude:[詢問問題] → 使用者選擇「兩者」、「未提交」、「一般」
Claude:[顯示 diff --stat:45 個檔案,+3200 -890]
Claude:「大型 diff(3200+ 行)。是否繼續,或縮小範圍?」
使用者:「繼續」
Claude:[執行兩個審查]