Community程式設計與開發github.com

RIJUDEVx/interrogate

用於「詰問」、「對抗性審查」、「多模型審查」、「挑戰這個」、「第二意見」、「第二眼」、「第二意見」、「這會打破什麼」、「找出盲點」或「拆解這個」。多個 LLM 審查者從獨立角度挑戰變更;只有經運行證明的發現才算數。

interrogate 是什麼?

Interrogate 是一個 AI 代理技能,旨在對程式碼變更進行多模型、對抗性審查。其核心創新是,發現(finding)必須通過實際運行證明,而非僅基於模型意見。技能支援多種平台,如 OpenCode、Codex、Claude Code 和 T3 Code,並利用模型多樣性(而非指派角色)來產生對抗性訊號。工作流程包括界定審查範圍、明確陳述意圖、使用獨立子代理啟動多個審查者(每種模型一個),然後綜合結果。最終結果是綜合判斷,將發現分類為「立即行動」、「考慮」、「註記」或「駁回」,並包含一致性地圖。此技能也包含「爆炸半徑」模式,專門用於評估小型變更的潛在影響,重點在於透過執行程式碼而非理論分析來證明安全性事實。

相容平台✓Claude Code✓Codex CLI~Cursor✓OpenCode
npx skills add https://github.com/RIJUDEVx/agent-skills/tree/HEAD/interrogate

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

詰問 (Interrogate)

為每個設定的模型生成一個審查者,以對抗性方式審查程式碼變更。每個模型獲得相同的提示和評分標準。對抗性訊號來自模型的多樣性,而非指派的角色。

一個發現只有在運行證明它時才算數。

最終產出是一個綜合判斷。請勿自動套用變更。

步驟 1,界定範圍

從上下文確定要審查的內容:

  • 如果使用者指向特定檔案或差異,則使用該內容
  • 如果是在功能分支上,則執行 git diff main...HEAD(或適當的基底分支)以獲取完整的變更集
  • 如果使用者的訊息提及最近的工作,則收集相關檔案

將差異(或檔案內容)以及審查者理解程式碼所需的任何相關上下文檔案打包在一起。

步驟 2,陳述意圖

在生成審查者之前,明確陳述意圖。從以下內容推導:

  • 使用者的訊息
  • 提交訊息
  • PR 描述(如果存在的話)
  • 程式碼本身

撰寫一個清晰的段落。如果不確定意圖,請先詢問使用者再繼續。

步驟 3,生成審查者

在一則訊息中啟動所有審查者,每個槽位一個,使用工具組的子代理工具或 delegate_task。

目標是模型多樣性:不同的模型系列能發現不同的錯誤。在 T3 Code 中,從使用者的最愛中挑選 3-4 個來自不同系列的強大模型,並使用 delegate_task 啟動每個模型(t3-tools 技能包含相關步驟)。在其他地方,選擇工具組提供的 3-4 個不同的高能力模型。如果無法為每個子代理選擇模型,則在不覆蓋模型的情況下啟動審查者,並透過獨立的上下文來獲得多樣性。

子代理角色
審查者 A推理密集型審查者
審查者 B第二個,獨立的模型系列
審查者 C第三個,快速/不同的系列
審查者 D對抗性/嚴格的程式碼品質審查者

對於每個審查者,啟動一個通用目的子代理:

  • OpenCode / Codex:subagent_type: general(透過 task 工具)
  • Claude Code:subagent_type: general-purpose
  • 其他工具組:最接近的通用子代理,且能夠讀取儲存庫

讓審查者在精神上保持唯讀:他們不得編輯檔案。需要重現問題的審查者應在其自己的暫存副本或工作樹中執行,絕不直接在原地執行。

為每個審查者提供此簡報以及已填寫的範本:

打破這個變更。透過針對真實程式碼的運行來證明每個發現,例如失敗的測試、重現腳本,或顯示錯誤行為的命令輸出。對於設計或計劃,請執行原型或探查當前樹。將重現步驟保留在自己的工作樹中。報告每個發現時,請附上標題、確切命令、命令輸出的內容,以及意圖要求的輸出。省略任何你未執行的內容。這涵蓋了風格、命名、結構,以及需要未來變更才能解決的風險。沒有任何發現也是一個有效的結果。

如果某個模型標籤被拒絕為無法解析,請檢查 Task 工具錯誤訊息中的有效標籤,選擇最接近的等價物(偏好同一系列中最高推理層級的模型),並使用有效的標籤啟動。不要因為標籤問題而阻塞審查。

閱讀 references/reviewer-prompt.md 並使用以下內容填寫範本:

  1. 已陳述的意圖
  2. 差異或檔案內容
  3. references/rubric.md 中的審查評分標準
  4. references/code-quality-review.md 中的程式碼品質透鏡

相同的已填寫範本將提供給所有審查者,以便每個模型都應用程式碼品質透鏡。

步驟 4,綜合

當結果返回時,建立一個統一的圖景:

  1. 驗證每個發現:重新執行其命令。當輸出顯示失敗且該失敗違背意圖時,保留該發現。丟棄其餘的。合併具有相同根本原因的發現。
  2. 解析來自審查者的所有發現
  3. 識別共識。由 2 個以上模型獨立提出的發現具有最高信號強度。
  4. 識別單一模型發現。仍然值得閱讀,但需相應加權。
  5. 去重。不同模型可能以不同方式描述相同問題。合併這些發現,並註明哪些模型提出了它。
  6. 記錄分歧。如果一個模型標記了某件事,而另一個模型明確表示相反意見,這對於判斷來說是有用的背景資訊。

步驟 5,主導判斷

你是主導審查者,一位務實的資深工程師,而不是中立的彙總者。

閱讀 references/lead-judgment.md 以獲取完整框架。

使用以下類別對每個發現進行分類:

  • 立即行動 (Act on)。影響正確性、安全性或可維護性的真實問題,考量到實際目標。這些會阻止一個真實的 PR。
  • 考慮 (Consider)。合理的觀點,但你不確定它們目前是否值得花費成本來解決。值得使用者關注。
  • 註記 (Noted)。技術上有效但不可操作。依賴上下文、過早最佳化,或在當前階段影響較低。
  • 駁回 (Dismissed)。錯誤、吹毛求疵,或缺乏上下文。簡短說明原因。

對於每個發現,請包含:

  • 提出該發現的模型
  • 分類(立即行動 / 考慮 / 註記 / 駁回)
  • 分類原因的一行說明

輸出格式

以以下結構呈現判斷結果:

意圖

[步驟 2 中陳述的意圖段落]

審查者

  • 審查者 [標籤]: [模型名稱],[N 個發現](每位審查者一個項目符號)

立即行動

[應處理的發現。對於每個發現:描述、哪些模型提出、為何重要。]

考慮

[值得思考的發現。對於每個發現:描述、哪些模型提出、涉及的權衡。]

註記

[有效但優先級低。簡短列表。]

駁回

[被拒絕的發現,附簡短理由,包括未被運行證明的發現。]

一致性地圖

[模型在哪裡達成一致,在哪裡出現分歧,以及這種一致/分歧的模式告訴我們什麼?]

爆炸半徑 (Blast radius)

當變更很小但尚未被信任,且問題在於它會破壞差異之外的哪些內容時,使用此模式。列出呼叫者並非其工作。grep 可以瞬間找到那些。其工作是找出 grep 不會呈現的破壞。

不要相信你自己的論述

一份描述變更會破壞什麼且聽起來合理的論述,是毫無價值的。無論它是否屬實,讀起來都令人信服。因此,不要交回那份論述。找出整個事情所依賴的一兩個事實,並透過執行程式碼來證明它們。

你有多確定

對於變更安全所依賴的每個事實,請盡可能地沿著這個列表往下進行(以低成本的方式),並說明它停留在哪個步驟。

  1. 你這麼說。本身毫無價值。
  2. 你指出了這一行。一個真實的 file:line,或函式庫本身的原始碼。
  3. 你展示了壞情況不可能發生。你逐步分析了失敗步驟,而它並未觸及。
  4. 你執行了它。一個腳本或測試,會呼叫真實程式碼,如果你錯了就會大聲失敗。
  5. 你在運行的應用程式中重現了它。

任何你無法達到步驟 4 的安全事實,請說明。不要將其論述為已解決。步驟 4 通常是一個小腳本,匯入應用程式使用的同一個函式庫,並呼叫你擔心的確切函式。

步驟

  1. 閱讀變更。差異、它新增、變更和刪除的符號,以及它現在做的不同事情,包括差異未明確說明的部分。提取 PR 和提交訊息以了解其背後的原因。
  2. 找到它之所以安全的那一個事實。大多數看似有風險的變更之所以安全,是因為一個單一事實,例如「這個呼叫只會丟棄已死的快取條目,不做其他任何事情」。找到那個事實。如果它成立,大多數有風險的情況就會立即被清除。在此處花費你的時間,而不是列出一長串可能的情況。
  3. 查看 grep 停止的地方。閱讀你呼叫的函式庫的原始碼,並檢查其鎖定版本和任何本地修補程式。弄清楚事物何時執行:微任務、卸載和清理、Solid 與 React。追蹤符號搜尋遺漏的內容:API 返回的 JSON、資料庫欄位、有線格式、讀取相同位元組的另一種語言、功能標誌、下游三個跳躍的程式碼。
  4. 對每個風險誠實。給予它真正發生的可能性以及如果真的發生了的真實成本。保留你確認的風險。列出你檢查過並排除的風險,並分別說明。引用真實的 file:line,搜尋不到結果也是一個答案,絕不要捏造呼叫者或 API。
  5. 證明那一個事實。撰寫一個執行真實程式碼的腳本或測試,執行它,並貼上結果。如果你無法低成本地證明它,將其標記為未證明。不要誇大。
  6. 對於大型或廣泛的變更,使用上述審查流程並搭配多個模型來執行。不同的模型會捕捉不同的真實錯誤。

要交回的內容

  • 它的作用。 變更了什麼,包括不明顯的部分。
  • 它之所以安全的那一個事實。 陳述它,說明你將它推進到哪個步驟,並展示證明。如果你無法證明它,請寫「未證明」。
  • 風險。 僅限真實的風險。每個風險需說明它如何破壞、file:line、可能性和嚴重程度,以及如何檢查。對重要的風險貼上證明。
  • 已排除。 你檢查過的內容以及它為何沒問題。
  • 合併之前。 能夠捕捉真實錯誤的最便宜的測試或重現步驟,包括你撰寫的腳本。

透過 unslop 撰寫,引用真實程式碼,並在將其發布到任何公開場所之前,移除任何私人資訊。

回覆: 上述論述,其中一個安全性事實要嘛已證明,要嘛標記為未證明。

相關技能