pr (mattpocock/skills)
撰寫向審查者說明變更的 PR 說明。
pr:一個純粹的格式技能:對照組從未產出三段式 PR 內容(1.7/5),技能與一句話提示都做到了(5.0 與 4.95),且沒有額外 Token 成本
Codex CLI · gpt-6-astra
29.0 / 30
相對未使用技能的提升:+3.33 · 推薦 · 18 次執行
推薦:總分 29.0/30 至少 22,產出品質 5.0 至少 3.5,提升幅度 +3.33 至少 +1.0。
SOTA
透過使用 Codex 測試。
涵蓋 Codex, Claude Code
Codex CLI 0.166(SOTA 等級):18 次評分執行。依我們的等級規則,在這裡通過也涵蓋 Claude Code;但這不代表第二等級的結果。
分數
每個維度為 0 到 5 分,六個維度相加即為滿分 30 的總分。每個維度都是 5 分最好。成本 5 分代表便宜又快速;安裝 5 分代表容易安裝。
- 觸發可靠性
- 5.0
- 相對未使用技能的提升
- 5.0
- 產出品質
- 5.0
- Token 與時間成本
- 5.0
- 安裝與可攜性
- 4.0
- 安全性
- 5.0
安全審查
安全靜態掃描:0 CRITICAL / 0 HIGH / 0 MEDIUM。人工審查:可在無網路沙箱中安全執行(未發現問題)。掃描結果乾淨,不代表技能一定安全。
安裝
npx skills@latest add mattpocock/skills --skill pr
固定 Commit: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d
測試日期: 2026-11-02
我們測了什麼
- 快取變更的 PR 內容 — 我要開一個 pull request。請為 change.diff 中的變更撰寫 PR 內容並寫到 PR.md。測試前後的輸出分別在 tests_before.txt 與 tests_after.txt。
- 刪除資料行的 PR 內容 — 請幫我撰寫 pull request。請為 change.diff 中的變更撰寫 PR 內容並寫到 PR.md。測試前後的輸出分別在 tests_before.txt 與 tests_after.txt。
- 文案變更的 PR 內容 — 撰寫一份 PR 說明。請為 change.diff 中的變更撰寫 PR 內容並寫到 PR.md。測試前後的輸出分別在 tests_before.txt 與 tests_after.txt。
優點
- 相對未使用技能,平均分數從 1.67 提升到 5.0(+3.33)。
- 技能即使未被點名也會被採用:6/6 次實驗組執行都讀取了技能檔案。
- 沒有額外 Token 成本:Token 用量是未使用技能的 1.0 倍。
- 使用技能後的絕對品質很高:5.0 / 5。
缺點
- 一句話提示得分 4.95,使用技能則為 5.0(+0.05)。
- 每個任務的每個組別 n=2;約 1 分以內的差異屬於雜訊。
評測
在專用的 Windows 測試電腦上使用 Codex CLI 0.166(gpt-6-astra,低推理),每次執行都建立全新的暫存專案與暫存的 HOME/TMPDIR/快取,分別安裝技能(實驗組)、未安裝技能(對照組),或未安裝技能但把技能的核心要求濃縮成一句話附在提示詞後(一句話提示組);每個任務的每個組別執行 2 次,關閉網路,封鎖 /tmp 寫入。提示詞從未提到技能(下方註明的措辭除外)。三個任務,每個都是「為 change.diff 的變更撰寫 PR 內容到 PR.md」,旁邊附有 tests_before.txt/tests_after.txt:一個快取變更(雙向門)、一個會刪除資料行的遷移(單向門),以及一個文案變更。對照組只收到那句話。一句話提示組會多收到一句話,完整說明整個範本。實驗組也沒有被告知格式。
三組對照
| 組別 | 平均分數(0-5) | 每次執行 Token 用量 |
|---|---|---|
| 未使用技能 | 1.67 | 82k |
| 一句話提示 | 4.95 | 89k |
| 使用技能 | 5.0 | 82k |
以 Codex CLI 執行 18 次,採規則式檢查評分,不經 LLM 評審。總分 29.0 / 30,評級為 推薦。
評定:推薦(29.0 / 30)。 來源:mattpocock/skills,skills/engineering/pr,固定於提交 4ae2317。安裝:npx skills@latest add mattpocock/skills --skill pr。授權: MIT(儲存庫 LICENSE)。
這是什麼
pr 技能(mattpocock/skills):把 diff 轉成固定三段結構的 PR 內文:摘要(最小但有用的圖示、虛擬碼或呼叫樹)、證據(Before:/After: 加上測試輸出)與合併風險(門: 單向或雙向,外加以單詞表示的 影響半徑:),並使用專案詞彙表中的用語。只有一份簡短的 SKILL.md。
測試方式
在專用的 Windows 測試電腦上使用 Codex CLI 0.166(gpt-6-astra,低推理),每次執行都建立全新的臨時專案,並使用臨時的 HOME/TMPDIR/快取;分別為安裝技能(技能組)、未安裝(對照組),以及未安裝但把技能核心要求濃縮成一句話附加在提示詞後(一句話組);每項任務的每組執行 2 次;關閉網路,並封鎖對 /tmp 的寫入。提示詞完全不會提到技能名稱(以下註明的措辭除外)。
共有三項任務,每項都是「把 change.diff 的 PR 內文寫到 PR.md」,旁邊附有 tests_before.txt 與 tests_after.txt:快取變更(雙向門)、刪除欄位的遷移(單向門),以及文案變更。對照組只會收到那句話。一句話組會多收到一句話,完整說明整個範本。技能組同樣不會被告知格式。
- 快取變更的 PR 內文 — 我要開一個 pull request。請把 change.diff 中變更的 PR 內文寫到 PR.md。修改前後的測試輸出分別在 tests_before.txt 與 tests_after.txt。
- 刪除欄位的 PR 內文 — 請幫我整理 pull request。請把 change.diff 中變更的 PR 內文寫到 PR.md。修改前後的測試輸出分別在 tests_before.txt 與 tests_after.txt。
- 文案變更的 PR 內文 — 請寫一份 PR 說明。請把 change.diff 中變更的 PR 內文寫到 PR.md。修改前後的測試輸出分別在 tests_before.txt 與 tests_after.txt。
計分採程式化方式(隱藏測試/預埋問題召回/限制條件檢查/視情況搭配渲染與 OCR),每次執行 0–5 分。分數並非由任何 LLM 評審決定。
結果
提供給第三組的一句話版本:「將 PR 內文寫成三個簡短段落:摘要(最小但有用的圖示、虛擬碼或呼叫樹,不要開場白)、證據(Before: 與 After: 加上測試輸出),以及合併風險(門: 單向或雙向,並附上一個詞的 影響半徑:);使用詞彙表中的用語。」
| 任務 | 對照組分數 | 一句話版本 | 技能組 | 對照組 token 數 | 一句話版本 token 數 | 技能組 token 數 | 技能讀取 |
|---|---|---|---|---|---|---|---|
| t1-cache | 1.67 | 5.0 | 5.0 | 82k | 83k | 79k | 2/2 |
| t2-migration | 1.67 | 4.83 | 5.0 | 82k | 91k | 79k | 2/2 |
| t3-copy | 1.67 | 5.0 | 5.0 | 81k | 91k | 87k | 2/2 |
平均分數:無技能 1.67,技能組 5.0(差異 +3.33)。每次執行 token 數:82k 對 82k(1.00 倍);時間 37 秒對 34 秒。一句話組:4.95(技能相較一句話版本的增益:+0.05;一句話版本相較無技能的增益:+3.28);一句話版本每次執行 89k token,因此技能的 token 成本是一句話版本的 0.92 倍。
實際表現
- 對照組 1.67、一句話版本 4.95、技能組 5.00(各 n=6)。對照組寫出的 PR 文字清楚且準確,但 6 次執行中沒有任何一次使用三個段落、圖示或虛擬碼區塊、Before/After 標籤、門或影響半徑。這是模型無法自行猜到的格式,因此任何被告知格式的組都會拿高分;這套檢查衡量的是格式遵循度,而非寫作品質。
- 技能在未被指名的情況下也會觸發(6/6 次讀取),而一句話提示承載了相同資訊:兩者相差 0.05 分(其中一次執行未通過範本段落的正規表達式檢查:遷移任務的一句話組只匹配到 3 個段落中的 2 個)。每次執行 token 數:對照組 82k、一句話版本 89k、技能組 82k,沒有額外負擔。
- 判斷內容在關鍵處看起來正確:在遷移任務中,技能組的執行把門判定為單向,並指出還原程式碼也無法讓已刪除的欄位復原,同時標明了影響半徑;快取與文案任務則是雙向。對照組的遷移 PR 也警告要先套用 0041,但沒有標出門或影響半徑,因此審查者光掃過去看不出來。
- 技能非常小(只有幾行),因此載入成本為零;它的價值在於大家不必每次都貼上範本。
各面向分數
| 面向 | 分數 | 原因 |
|---|---|---|
| 1_output_quality | 5.0 | 技能組平均分數 5.00/5(程式化檢查,詳見各任務 表格)。 |
| 2_lift_vs_no_skill | 5 | 相較無技能的 1.67 高出 +3.33 分(每項任務 n=2;約 1 分 以下的差異屬於雜訊)。 |
| 3_trigger | 5.0 | 技能組 6/6 次執行都讀取了技能檔案。 |
| 4_instructions_portability | 4 | 一份附範本的簡短 SKILL.md,沒有腳本。 |
| 5_efficiency | 5 | token 為 1.00 倍(每次執行 82k 對 82k),時間為 0.93 倍(34 秒對 37 秒)。 |
| 6_safety_hygiene | 5 | 僅文字內容;沒有發現問題。 |
本測試的限制
- 只有規則式的格式檢查(段落是否存在、Before/After、門的判定是否正確、影響半徑、圖示/虛擬碼區塊);並不評判圖示是否為「最小但有用」,也不評判寫作是否優良。
- 對照組在設計上必然無法通過格式檢查:結果顯示技能免去重述團隊格式的需要,而不是讓模型寫出更好的 PR。
- 只有三個小型測試樣本;沒有真實儲存庫或 git 歷史。
- 每項任務的每組 n = 2:約 1 分以下的差異屬於雜訊。
- 規則式計分只能衡量檢查項目看得見的部分,無法評判品味,也無法判斷結果是否為最佳解。
安全性
詳見 security.md。掃描:0 CRITICAL / 0 HIGH / 0 MEDIUM。評定:可在無網路沙箱中安全執行。掃描結果乾淨並不代表技能一定安全。
總結
如果你想要這種 PR 格式,技能第一次就能免費達成(82k token,與無技能相同),效果等同於把範本貼成一句話提示。想讓團隊維持一致就安裝它;不要期待文筆會更好。
完整紀錄
執行日誌:pr (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 欄位:任務、組-輪次、得分(0-5)、token、秒、通過的檢查、代理開啟的 skill 檔案。 t1-cache control-1: 得分 1.67, token 82698, 秒 35.7, 檢查 4/9, 未開啟 t1-cache control-2: 得分 1.67, token 82765, 秒 30.9, 檢查 4/9, 未開啟 t1-cache oneliner-1: 得分 5.0, token 83654, 秒 32.5, 檢查 9/9, 未開啟 t1-cache oneliner-2: 得分 5.0, token 84007, 秒 38.4, 檢查 9/9, 未開啟 t1-cache treatment-1: 得分 5.0, token 70378, 秒 33.8, 檢查 9/9, 開啟 pr t1-cache treatment-2: 得分 5.0, token 88915, 秒 35.0, 檢查 9/9, 開啟 pr t2-migration control-1: 得分 1.67, token 81748, 秒 33.8, 檢查 4/9, 未開啟 t2-migration control-2: 得分 1.67, token 82290, 秒 36.5, 檢查 4/9, 未開啟 t2-migration oneliner-1: 得分 5.0, token 100647, 秒 37.7, 檢查 9/9, 未開啟
18 次執行、3 個產出檔案
範例產出
SOTA · 装了 skill:PR.md(t1-cache,第 1 次,Codex)
## Summary Cache free slots by Room and day to avoid repeated database queries. Creating a Reservation invalidates the matching cache entry. ```text free_slots(Room, day) cache hit → return cached free slots cache miss → query Reservations → compute and cache free slots create Reservation insert Reservation → invalidate cache for Room and day ``` ## Evidence - **Before:** `tests/test_availability.py::test_free_slots_not_queried_twice` failed: `db.query called 2 times, expected 1`. Suite: 1 failed, 14 passed in 0.9s. **After:** Supplied test output reports 15 passed in 0.8s. ## Merge Danger **Door:** two-way Reverting restores a database query on each availability request; no schema or stored-data changes. **Blast Radius:** availability Cached free slots affect Members checking Room availability. Invalidation covers Reservation creation in the current process; other mutation paths or processes can leave cached results stale. The cache has no size limit or expiry.