superpowers 是個強勢房客
superpowers 用最高音量宣告自己該被觸發,弱模型每次都聽它的。反制的方式不是對抗,是引用它自己承認的優先權順序。
同一個屋簷下的音量戰爭#
少即是多,我連砍了三刀的結尾提到,屋裡還有一位嗓門很大的房客。介紹一下:superpowers,一個提供流程 skill 的 plugin。brainstorming、TDD、寫 plan,都是好東西,kit 的規劃與執行流程正是信任它主導的。問題不在它做什麼,在它怎麼推銷自己。
superpowers 在每個 session 開頭,以 EXTREMELY_IMPORTANT 級別注入這段話(skill 檔原文節錄):
If you think there is even a 1% chance a skill might apply to what you
are doing, you ABSOLUTELY MUST invoke the skill.
IF A SKILL APPLIES TO YOUR TASK, YOU DO NOT HAVE A CHOICE. YOU MUST USE IT.
This is not negotiable. You cannot rationalize your way out of this.
三句話、兩處全大寫,門檻設在「1% 的可能」。而它的 brainstorming 觸發描述是 creating features、building components、modifying behavior。你找找看,有哪個改 code 的任務不命中這三項?1% 條款乘上全命中的觸發面,等於永遠觸發。
kit 自己也有任務分級:小任務直接做,大任務才走完整流程。但那段分級規則只有四行、語氣平鋪直敘。兩份指令同場競爭的結果毫無懸念:單檔小 feature 這種灰色地帶,被一路拉進 brainstorm → spec → TDD 的全套流程。一個加欄位的需求,先陪模型開一場需求訪談。
這裡有個殘酷的力學:弱模型比強模型更容易被最大聲的指令拉走。強模型讀得出「這個情境下該聽任務分級的」;弱模型夾在兩份矛盾指令之間,傾向服從音量大的那份。而 kit 的運營假設正是輕量模型做日常執行。也就是說,紀律的主要使用者,恰好是最容易被帶跑的那群。
反制:引用對方的法源#
我在 7 月 4 日下午拍板的修法很克制:不把 superpowers 拆掉,也不寫一段更大聲的反宣告來對吼,因為跟 plugin 比音量是軍備競賽,而且比輸的機率很高。修法只做兩件事。
第一,把模糊地帶變成可操作的判準。 小任務的定義寫死進工作流規則,當時的條文長這樣(規則原文節錄):
- Small (trivial / mechanical / docs, or a code change meeting ALL of:
≤2 files, roughly ≤50 changed lines, no new dependency, no schema/data
migration, no auth/payment/security surface, ...)
→ just do it, verify yourself (run the tests), brief summary.
判準的每一項都是模型能機械檢查的條件,不是「視情況而定」這種等於沒說的話。對弱模型,可執行的四行勝過有智慧的四段。那真的判不出來怎麼辦?規則要求它回頭問我一句。「問一句」的成本是幾秒,「默默走全流程」的成本是一小時起跳。
第二,也是漂亮的一手:引用對方自己承認的優先權。 superpowers 的說明文件白紙黑字寫著「專案指示優先於 skills」。修法把這句話直接引進規則,緊接在小任務判準後面(規則原文節錄):
Do NOT invoke superpowers brainstorming / writing-plans / TDD for these:
this section is a project instruction and, by superpowers' own precedence
rule (project instructions > skills), it overrides those skills'
auto-trigger descriptions for small tasks.
小任務判準之所以能壓過 brainstorming 的強制觸發,法源是 superpowers 自己給的,「by superpowers’ own precedence rule」就是引用出處。不對抗、不繞過,用對方的憲法條文解除對方的動員令。修辭學上這叫以子之矛;工程上這叫把授權文字放進模型會讀、優先權最高的位置。
這不是 bug,是持續的力學#
交接文件後來把這件事升格成一個標題級的警告:superpowers 是強力但強勢的房客,每次大版本更新都要重新測邊界。配套的觀察更狠:「每個 plugin 都是在跟 kit 搶弱模型的注意力」。
這句話值得抄在牆上。plugin 生態的每個成員都想確保自己被用上,於是每個都把觸發條件寫到最寬、音量調到最大。單獨看都合理,疊在一起就是注意力的公地悲劇。而仲裁者是一個 context 有限、意志力隨 session 長度衰減的語言模型。
所以這不是修一次就好的 bug,是要例行巡邏的邊界。superpowers 每次升版,都要用一個真實的小任務實測:任務分級是否還被尊重?brainstorming 是否又開始攔截?同樣的警覺適用於任何新裝的 plugin。邊界不是劃一次就存在的東西,是每次對方擴張後都要重新確認的東西。
一根伏筆:那個「不超過兩個檔案」#
先埋一根線。上面那條小任務判準裡的「≤2 個檔案」,幾天之後會被一張真實的收據推翻:一次 19 行的樣式調整,因為連動了測試檔而變成 6 檔 55 行,把門檻撞得粉碎,還暴露出一個「越認真補測試、越容易被懲罰」的反向誘因。判準怎麼被自己的收據修理,是最終那篇的主菜。
判準會過期不是醜聞,是常態。立的時候有收據,改的時候也有收據,這才是重點。
下一篇#
這一篇處理的是 plugin 同居的注意力戰爭。解法不是比大聲,而是兩步棋:把小任務判準寫成可機械檢查的條件、放進優先權最高的位置,然後引用對方自己承認的優先權條款,合法解除它的動員令。附帶提出一個要長期巡邏的觀念:每個 plugin 都在跟你搶弱模型的注意力。
房客的邊界劃好了,該檢查守門員了。這套 kit 最核心的紀律機制是一個收工閘門:session 結束前有未審查的變更,就物理擋下不准走。聽起來很威風,直到你發現它出生時檢查的,是一顆沒有任何流程會寫入的記號。下一篇:我的守門員親手教模型造假。