← ClaudeAtlas

blind-reviewlisted

把剛寫好的改動交給一個「沒看過這段對話」的子代理攻擊(正確性與簡潔性兩軸),主代理再補上假設與設計決策,最後產出一份**給人看的導讀**:先看哪三處、當初為什麼這樣選、哪些沒驗。子代理只審不改,裁決 ship/fix-first/rethink 由人決定。⚠️ 換的是脈絡不是模型家族——要換模型請疊用 ai-review。當使用者說「對抗式審查」「攻擊這個改動」「幫我導讀這個 PR」「派一個沒看過對話的來審」「blind review」時觸發。 English triggers: "adversarially review this", "attack this change", "brief me on this PR", "blind review", "fresh-eyes review".
SanHsien/agent-astromech · ★ 0 · AI & Automation · score 62
Install: claude install-skill SanHsien/agent-astromech
# /blind-review — 對抗式審查與導讀 要人看一份 AI 寫的改動之前,先做兩件事: **找一雙沒有前情的眼睛去攻擊它**,再**把當初的取捨寫下來**, 最後交出去的不是裁決,是一份**導讀**——告訴人該把注意力放在哪。 > 🤖 Astromech 時刻:R2 插進 Death Star 的接口時,沒讀過任何作戰簡報。 > 也正因為沒有前情,它讀回來的是儀表上真的亮著的那盞燈,不是你以為應該亮的那盞。 ## 為什麼需要 - **自審的上限是脈絡,不只是模型。** 寫東西的那個代理,是沿著一串假設一路推過來的; 叫它「再檢查一次」,它會沿著同一串假設再走一遍,然後確認自己本來就相信的事。 這裡換掉的是**脈絡**——攻擊者拿不到對話,所以繼承不到那串假設。 (想換的是**模型家族**,那是 [`ai-review`](../ai-review/SKILL.md) 的工作。兩者可以疊。) - **人要看 diff 之前,缺的不是裁決是導讀。** 「通過/不通過」告訴你結果, 不會告訴你該盯哪三行。冷讀一份幾百行的 diff,人會平均分配注意力—— 而風險從來不是平均分布的。 - **當初為什麼這樣選,只有主代理知道。** 那些取捨活在對話裡,對話一關就蒸發, 然後半年後沒人答得出「這裡為什麼不用另一種寫法」。導讀是把它落檔的最後機會。 ## 步驟 ### 0. 界定範圍並凍結 先講清楚審的是什麼:某個 PR、某條分支對主線的差異,還是工作區當下的未提交改動。 **記下當下的版本識別碼(提交雜湊,或 diff 的雜湊)並寫進最後的導讀。** ⚠️ 這步是防 TOCTOU 的:送審之後又改了東西,審的就是舊版,而導讀不會自己知道。 沒有識別碼,事後誰也證明不了那份導讀對應的是哪一版。 ### 1. 派攻擊者(子代理,旗艦檔) 給它**只有兩樣東西**:改動本身,加上一句原始需求。 🚫 **不要把對話摘要餵進去**——那正是要隔離的東西。餵了就退化成自審。 工具給唯讀就好(讀檔/搜尋/跑測試),**不給寫入**。攻擊者的產出是意見,不是提交。 攻擊沿兩軸,各自有硬性收件標準: - **正確性** —— 只收「**具體輸入 → 錯誤輸出**」形式的失敗劇本。 🚫 「這裡可能有問題」「建議加強錯誤處理」一律退回:講不出怎麼觸發,就不是發現。 優先攻邊界值、空集合、併發、失敗路徑、以及「安靜失敗」(回報成功但實際沒做到)。 - **簡潔性** —— 重複的邏輯、可以整段刪掉的東西、為了想像中的未來寫的抽象層、 以及**早就存在卻沒複用的既有機制**。這一軸的價值在於:寫的人正忙著讓它跑起來, 沒有餘裕問「這段是不是根本不必存在」。 ### 2. 主代理補「假設與設計決策」 這段**只有主代理寫得出來**,因為只有它經歷過那些取捨。逐條寫,每條四行: ``` 決策:<做了什麼選擇> 當時的選項:<還有哪些做法> 選這個的理由:<為什麼> 什麼情況下這個選擇會錯:<失效條件> ``` 最後一行是重點,也是最容易被跳過的一行。寫不出失效條件,通常代表那不是個決策, 是個沒意識到自己在選的預設值——那本身就值得寫進導讀。 ### 3. 產出導讀(三段,就這三段) 1. **先看哪裡** —— 最多三處,每處給位置(檔案與行)+一句「為什麼是這裡」。 超過三處等於沒有重點。排序依據是「錯了傷害最大」,不是「改動行數最多」。 2. **假設與設計決策** —— 步驟