全部技能

diagnosing-bugs (Matt Pocock)

對疑難缺陷與效能回歸執行診斷循環,再提出修正方案。

mattpocock diagnosing-bugs:把「先建立回饋迴路」這條規則濃縮成一句話,效果和完整技能一樣好,成本卻只有技能的 0.95 倍

視情況推薦安全

Codex CLI · gpt-6-astra

22.9 / 30

相對未使用技能的提升:+0.28 · 視情況推薦 · 18 次執行

視情況推薦:提升幅度 +0.28 低於 +1.0。推薦條件為總分至少 22/30、產出品質至少 3.5、提升幅度至少 +1.0。

SOTA

透過

使用 Codex 測試。

涵蓋 Codex, Claude Code

Codex CLI 0.166(SOTA 等級):18 次評分執行。依我們的等級規則,在這裡通過也涵蓋 Claude Code;但這不代表第二等級的結果。

分數

每個維度為 0 到 5 分,六個維度相加即為滿分 30 的總分。每個維度都是 5 分最好。成本 5 分代表便宜又快速;安裝 5 分代表容易安裝。

觸發可靠性
5.0
相對未使用技能的提升
2.3
產出品質
4.6
Token 與時間成本
2.0
安裝與可攜性
4.0
安全性
5.0

安全審查

安全

靜態掃描:0 CRITICAL / 0 HIGH / 0 MEDIUM。人工審查:可在無網路沙箱中安全執行(未發現問題)。掃描結果乾淨,不代表技能一定安全。

安裝

npx skills@latest add mattpocock/skills --skill diagnosing-bugs

來源

固定 Commit: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d

測試日期: 2026-11-02

我們測了什麼

  • 小型函式中的差一錯誤 — movavg.py 裡的 moving_average 回傳的數字不對:moving_average([2, 4, 6, 8, 10], 3) 應該是 [2, 3, 4, 6, 8],但後面的值算錯了。找出原因並修正。測試:python3 -m unittest。
  • 跨檔案的日期錯誤 — 我們的週報表頭在跨年附近顯示錯誤日期,例如 header('2026-W01') 應該是 'Week 2026-W01: Dec 29 - Jan 04, 2026'。找出原因並修正。
  • 依執行順序出現的測試失敗 — tests/test_settings.py 裡的測試單獨執行會通過,但整份檔案一起跑時 test_b 會失敗,而且 configs 似乎會帶著先前呼叫留下的 tags。診斷並修正。

優點

  • 技能即使未被點名也會被採用:6/6 次實驗組執行都讀取了技能檔案。
  • 使用技能後的絕對品質很高:4.58 / 5。

缺點

  • 相較未使用技能,沒有可測量的提升(+0.28,落在雜訊範圍內)。
  • 一句話提示得分 4.72,使用技能則為 4.58(-0.14)。
  • Token 用量是未使用技能的 1.71 倍。
  • 每個任務的每個組別 n=2;約 1 分以內的差異屬於雜訊。

評測

在 Mac 測試機上使用 Codex CLI 0.166(gpt-6-astra,低推理),每次執行都建立全新的暫存專案與暫存的 HOME/TMPDIR/快取,分別安裝技能(實驗組)、未安裝技能(對照組),或未安裝技能但把技能的核心要求濃縮成一句話附在提示詞後(一句話提示組);每個任務的每個組別執行 2 次,關閉網路,封鎖 /tmp 寫入。提示詞從未提到技能。評分以程式化方式進行(隱藏單元測試/植入問題召回率/限制條件檢查/視情況進行渲染與 OCR 檢查),每次執行 0–5 分。沒有任何分數是由 LLM 評審決定的。

三組對照

組別平均分數(0-5)每次執行 Token 用量
未使用技能4.3177k
一句話提示4.72126k
使用技能4.58133k

以 Codex CLI 執行 18 次,採規則式檢查評分,不經 LLM 評審。總分 22.9 / 30,評級為 視情況推薦。

評定:視情況(22.9 / 30)。 來源:mattpocock/skills,skills/engineering/diagnosing-bugs,固定於 commit 4ae2317。安裝:npx skills@latest add mattpocock/skills --skill diagnosing-bugs。授權: MIT(儲存庫 LICENSE)。

這是什麼

Matt Pocock 技能儲存庫(engineering)中的 diagnosing-bugs 技能。一套對付難解 bug 的紀律:第 1 階段是「建立緊湊的通過/失敗回饋迴路」(失敗的測試、curl 腳本、CLI diff、無頭瀏覽器、重播的追蹤記錄),接著一次測試一個依優先順序排列的假設、加入量測、補上回歸測試並清理。約 1,000 字的 Markdown、一份 hitl-loop.template.sh 輔助範本,以及一項規則:顯示輸出前先遮蔽機密。它會在「diagnose」、「debug this」或「something is broken/failing」時觸發。

我們如何測試

在 Mac 測試機上使用 Codex CLI 0.166(gpt-6-astra、低推理),每次執行都使用全新的臨時專案與臨時 HOME/TMPDIR/快取,安裝技能(使用技能組)、不安裝(對照組),或是不安裝但把技能核心要求濃縮成一句話附加在提示詞後(一句話組);每個任務的每組各執行 2 次,關閉網路、封鎖 /tmp 寫入。提示詞完全沒有提到技能名稱。

  1. 小函式中的差一錯誤 — movavg.py 裡的 moving_average 回傳錯誤的數字:moving_average([2, 4, 6, 8, 10], 3) 應該是 [2, 3, 4, 6, 8],但後面的值算錯了。找出原因並修正。測試:python3 -m unittest。
  2. 跨檔案日期 bug — 我們的週報表頭在跨年附近顯示錯誤日期,例如 header('2026-W01') 應該要是 'Week 2026-W01: Dec 29 - Jan 04, 2026'。找出原因並修正。
  3. 依執行順序出現的測試失敗 — tests/test_settings.py 的測試單獨執行會通過,但整個檔案一起跑時 test_b 會失敗,而且設定似乎會帶著先前呼叫的標籤。診斷並修正。

評分採程式化方式(隱藏測試/植入問題召回/限制條件檢查/視情況搭配渲染+OCR),每次執行 0–5 分。所有分數都不是由 LLM 評審決定。

結果

給第三組的一句話提示:"先建立快速、確定性的通過/失敗回饋迴路,讓它在這個具體 bug 上變紅(失敗的測試最好),然後提出依序排列的假設,逐一以證據測試後再修正,最後重跑迴路確認修正。"

任務對照組分數一句話提示使用技能對照組 token一句話組 token使用技能 token技能讀取
t1-moving-average4.174.584.1760k102k87k2/2
t2-weekly-dates4.174.585.086k120k136k2/2
t3-shared-state4.585.04.5884k154k173k2/2

平均分數:未使用技能 4.31,使用技能 4.58(差異 +0.28)。每次執行 token:77k 對 133k(1.71x);時間 38 秒對 51 秒。一句話組:4.72(技能相對一句話提示的增益:-0.14;一句話提示相對未使用技能的增益:+0.42);一句話組每次執行 126k token,因此技能成本是一句話提示的 1.05 倍。

實際情況

  • 三組的最終正確性相同:隱藏測試在 18/18 次執行都通過,每個 diff 也都維持在小幅變更的限制內。這三個植入 bug(差一錯誤、跨檔案日期邏輯、依執行順序的測試污染)都簡單到一般 Codex 就能修好。
  • 唯一有變化的是流程檢查「在修改程式碼前先跑測試」,也就是先重現問題。沒有技能時 1/6 次執行做到;使用技能第一條規則的一句話版本時 4/6 次;安裝技能時 4/6 次。所以那一句話就重現了整個效果。
  • 技能在 6/6 次使用技能組執行中都被讀取,儘管沒有提示提到它(它會在「debug this」時觸發)。它讓 agent 做更多工作:每次執行 18 個指令,未使用技能時 8 個,使用一句話提示時 13 個。
  • 成本:使用技能每次執行 133k token,未使用技能 77k(1.71x),使用一句話提示 126k(1.05x)。一句話組本身是對照組的 1.64 倍,因為要求 agent 先建立迴路會讓它多跑一些步驟。
  • 有一次使用技能組執行(共享狀態任務)修好了 bug 並通過隱藏測試,但答案不符我們的根因檢查(檢查是否指出原因),這是各組中唯一漏掉的一次。

面向分數

面向分數原因
1_output_quality4.58

使用技能時平均 4.58/5(程式化檢查,見各任務表)。

2_lift_vs_no_skill2.2800000000000002

相對未使用技能的 4.31 提升 +0.28 分(每個任務 n=2;約 1 分以下屬雜訊)。

3_trigger5.0使用技能組 6/6 次執行都讀取技能檔案。
4_instructions_portability4

純 Markdown;若存在會讀取選用的 GLOSSARY.md/ADR;HTTP/瀏覽器迴路選項需要沙盒可能沒有的工具。

5_efficiency2token 1.71x(每次執行 133k 對 77k)、時間 1.35x(51 秒對 38 秒)。
6_safety_hygiene5

Markdown 加上一份本機 shell 範本(提示輸入、列印;沒有網路、不寫入)。技能要求 agent 在顯示輸出前先遮蔽機密。

這項測試的限制

  • 三個小型單檔 Python bug,只要讀程式碼就能找到。技能是為難解的 bug 而設計(不穩定、效能退步、需要測試載具的 bug);這些都沒有測到。
  • 技能的其他工具(HTTP/瀏覽器迴路、追蹤重播、二分搜尋、量測標記)無法在沒有網路、也沒有應用程式可驅動的沙盒中運行。
  • 「修改前先跑測試」檢查只比較事件記錄中第一個測試指令與第一次寫入的順序,並不評斷重現的品質。
  • 每組每任務 n = 2:約 1 分以下的差異屬雜訊。
  • 規則式評分只能衡量檢查項目看得到的部分,無法判斷品味,也無法判斷結果是否為最佳。

安全性

請見 security.md。掃描:CRITICAL 0 / HIGH 0 / MEDIUM 0。評定:可安全執行(無網路沙盒)。掃描乾淨並不代表技能安全。

總結

技能的核心概念是好習慣,而且只要告訴 Codex,它就會照做;但把這個概念寫成一句話,也能得到相同的先重現行為與相同的通過率,成本也差不多,而遇到簡單 bug 時,agent 不管怎樣都能修好。如果你要除錯難解、不穩定的 bug,想要完整紀律,就留著它;遇到小 bug,把第一條規則放進提示詞就能獲得同樣的好處。

完整紀錄

執行日誌:diagnosing-bugs (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.)
欄位:任務、組-輪次、得分(0-5)、token、秒、通過的檢查、代理開啟的 skill 檔案。

t1-moving-average control-1: 得分 4.17, token 60541, 秒 27.1, 檢查 3/4, 未開啟
t1-moving-average control-2: 得分 4.17, token 60464, 秒 29.1, 檢查 3/4, 未開啟
t1-moving-average oneliner-1: 得分 5.0, token 93708, 秒 49.0, 檢查 4/4, 未開啟
t1-moving-average oneliner-2: 得分 4.17, token 111338, 秒 39.8, 檢查 3/4, 未開啟
t1-moving-average treatment-1: 得分 4.17, token 87669, 秒 36.8, 檢查 3/4, 開啟 diagnosing-bugs
t1-moving-average treatment-2: 得分 4.17, token 87501, 秒 36.0, 檢查 3/4, 開啟 diagnosing-bugs
t2-weekly-dates control-1: 得分 4.17, token 95094, 秒 43.4, 檢查 3/4, 未開啟
t2-weekly-dates control-2: 得分 4.17, token 78531, 秒 38.2, 檢查 3/4, 未開啟
t2-weekly-dates oneliner-1: 得分 4.17, token 129649, 秒 49.4, 檢查 3/4, 未開啟

18 次執行、3 個產出檔案

範例產出

SOTA · 装了 skill:movavg.py(t1-moving-average,第 1 次,Codex)

def moving_average(values, window): """Trailing moving average. Output i is the mean of the last `window` values ending at index i. For i < window - 1 only the values available so far are used. Raises ValueError if window < 1. """ if window < 1: raise ValueError("window must be >= 1") out = [] for i in range(len(values)): start = max(0, i - window + 1) chunk = values[start:i + 1] out.append(sum(chunk) / len(chunk)) return out

檢視 Pro