setup-pre-commit (mattpocock/skills)
在目前儲存庫設定 Husky 提交前掛鉤,串接 lint-staged、Prettier、型別檢查與測試。
setup-pre-commit:面對含糊的「新增 commit hooks」需求,單純使用 Codex 會建出不同的做法(原生 git hook),甚至曾在一次執行中於 pnpm 儲存庫裡呼叫 npm;技能與一句話提示都能給出 Husky + lint-staged 的設定(5.0 對 1.4)
Codex CLI · gpt-6-astra
29.0 / 30
相對未使用技能的提升:+3.59 · 推薦 · 18 次執行
推薦:總分 29.0/30 至少 22,產出品質 5.0 至少 3.5,提升幅度 +3.59 至少 +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 setup-pre-commit
固定 Commit: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d
測試日期: 2026-11-02
我們測了什麼
- 有 typecheck 和 test 腳本的 npm 專案 — 新增 commit hooks。為這個儲存庫設定 pre-commit hooks(沒有網路可用,所以請自行寫入檔案與 package.json 變更,不要進行安裝)。
- 沒有 typecheck 腳本的 pnpm 專案 — 新增 commit hooks。為這個儲存庫設定 pre-commit hooks(沒有網路可用,所以請自行寫入檔案與 package.json 變更,不要進行安裝)。
- 既有的 Prettier 設定必須保留 — 新增 commit hooks。為這個儲存庫設定 pre-commit hooks(沒有網路可用,所以請自行寫入檔案與 package.json 變更,不要進行安裝)。
優點
- 相對未使用技能,平均分數從 1.41 提升到 5.0(+3.59)。
- 技能即使未被點名也會被採用:6/6 次實驗組執行都讀取了技能檔案。
- 沒有額外 Token 負擔:Token 用量是未使用技能的 0.99 倍。
- 使用技能後的絕對品質很高:5.0 / 5。
缺點
- 一句話提示得分 5.0,使用技能則為 5.0(+0.00)。
- 測試注意事項:第一次評分後修正了一項檢查(未修改的檔案必須通過),並且所有執行都重新評分。
- 每個任務的每個組別 n=2;約 1 分以內的差異屬於雜訊。
評測
在專用的 Windows 測試電腦上執行 Codex CLI 0.166(gpt-6-astra,低推理),每次執行都使用全新的暫存專案與暫存的 HOME/TMPDIR/快取,技能分為已安裝(實驗組)、未安裝(對照組),以及未安裝但把技能核心要求濃縮成一句話附加在提示詞後(一句話提示組),每個任務的每個組別執行 2 次,關閉網路,封鎖 /tmp 寫入。提示詞從未提到技能(除了下方註明的措辭)。三個小型儲存庫,全都使用相同的提示詞「新增 commit hooks。為這個儲存庫設定 pre-commit hooks(沒有網路可用,所以請自行寫入檔案與 package.json 變更,不要進行安裝)」:一個含有 typecheck 與 test 腳本的 npm 儲存庫、一個沒有 typecheck 腳本的 pnpm 儲存庫(pnpm-lock.yaml),以及一個已經有 .prettierrc 的 npm 儲存庫。一句話提示組=把技能的做法濃縮成一句話。
三組對照
| 組別 | 平均分數(0-5) | 每次執行 Token 用量 |
|---|---|---|
| 未使用技能 | 1.41 | 82k |
| 一句話提示 | 5.0 | 75k |
| 使用技能 | 5.0 | 82k |
以 Codex CLI 執行 18 次,採規則式檢查評分,不經 LLM 評審。總分 29.0 / 30,評級為 推薦。
揭露事項: 第一次評分後修正了一項檢查(未修改的檔案必須通過),並且所有執行都重新評分。
判定:推薦(29.0 / 30)。 來源:mattpocock/skills,skills/misc/setup-pre-commit,固定於提交 4ae2317。安裝:npx skills@latest add mattpocock/skills --skill setup-pre-commit。授權條款: MIT(儲存庫 LICENSE)。
這是什麼
setup-pre-commit 技能(mattpocock/skills):以 lint-staged 與 Prettier 設定 Husky v9 的 pre-commit 掛鉤:從鎖定檔偵測套件管理器、撰寫 .husky/pre-commit(不含 shebang),透過該套件管理器執行 lint-staged,再執行儲存庫的 typecheck 與 test 指令碼(不存在則略過並回報)、加入含 prettier --ignore-unknown --write 的 .lintstagedrc、加入 prepare: husky,並只在沒有 .prettierrc 時建立它。
我們如何測試
在專用 Windows 測試 PC 上使用 Codex CLI 0.166(gpt-6-astra,低推理),每次執行都使用全新的暫存專案與暫存 HOME/TMPDIR/快取,安裝技能(實驗組)、未安裝(對照組),或未安裝但將技能核心要求濃縮成一句話附加在提示詞後(一句話提示組),每個任務每組執行 2 次,網路關閉,/tmp 寫入封鎖。提示詞從未提及技能(以下註明的措辭除外)。
三個小型儲存庫,全都使用相同提示詞「加入提交掛鉤。為這個儲存庫設定 pre-commit 掛鉤(沒有網路可用,因此請自行撰寫檔案與 package.json 變更,不要安裝)」:一個含 typecheck 與 test 指令碼的 npm 儲存庫、一個沒有 typecheck 指令碼的 pnpm 儲存庫(pnpm-lock.yaml),以及一個已有 .prettierrc 的 npm 儲存庫。一句話提示=把技能的配方寫成一句話。
- 含 typecheck 與 test 指令碼的 npm 專案 — 加入提交掛鉤。為這個儲存庫設定 pre-commit 掛鉤(沒有網路可用,因此請自行撰寫檔案與 package.json 變更,不要安裝)。
- 沒有 typecheck 指令碼的 pnpm 專案 — 加入提交掛鉤。為這個儲存庫設定 pre-commit 掛鉤(沒有網路可用,因此請自行撰寫檔案與 package.json 變更,不要安裝)。
- 既有的 Prettier 設定必須保留 — 加入提交掛鉤。為這個儲存庫設定 pre-commit 掛鉤(沒有網路可用,因此請自行撰寫檔案與 package.json 變更,不要安裝)。
評分方式為程式化檢查(隱藏測試/植入問題召回/限制條件檢查/視情況進行渲染與 OCR),每次執行 0–5 分。沒有任何 LLM 評審決定分數。
結果
提供給第三組的一句話提示:「以 lint-staged 設定 Husky v9:從鎖定檔偵測套件管理器、撰寫 .husky/pre-commit(不含 shebang),依序執行 npx lint-staged,再透過該套件管理器執行儲存庫的 typecheck 與 test 指令碼(不存在的指令碼請略過並告訴我)、加入含 prettier --ignore-unknown --write 的 .lintstagedrc、加入 prepare: husky 指令碼,並只在沒有 .prettierrc 時建立它。」
| 任務 | 對照組分數 | 一句話提示 | 使用技能 | 對照組 Token 數 | 一句話提示 Token 數 | 使用技能 Token 數 | 技能讀取 |
|---|---|---|---|---|---|---|---|
| t1-npm | 0.0 | 5.0 | 5.0 | 76k | 75k | 78k | 2/2 |
| t2-pnpm | 0.0 | 5.0 | 5.0 | 103k | 66k | 87k | 2/2 |
| t3-existing-prettier | 4.23 | 5.0 | 5.0 | 66k | 83k | 78k | 2/2 |
平均分數:未使用技能 1.41,使用技能 5.0(差異 +3.59)。每次執行 Token 數:82k 對 82k(0.99 倍);時間 58 秒對 43 秒。一句話提示組:5.0(技能相較一句話提示的增益:+0.0;一句話提示相較無技能的增益:+3.59);一句話提示每次執行 75k Token,因此技能的成本是一句話提示的 1.09 倍。
實際發生了什麼
- 對照組 1.41、一句話提示 5.00、技能 5.00(各 n=6)。在沒有指定工具的情況下,對照組選擇了自己的設計:在 npm 與 pnpm 儲存庫(4 次執行)中,它寫了原生的 git 掛鉤資料夾(.githooks/pre-commit,加上 README 與 prepare 指令碼),沒有 Husky、沒有 lint-staged、也沒有 Prettier;而在 pnpm 儲存庫中,掛鉤執行
npm test(第 1 次執行中發現),儘管該儲存庫使用 pnpm。只有已有 .prettierrc 的儲存庫得到 Husky(2 次執行)。 - 技能與一句話提示的執行在細節上全都正確:pnpm 儲存庫使用
pnpm exec lint-staged與pnpm run test、略過不存在的 typecheck 並加以說明、既有的 .prettierrc 未被改寫、加上了prepare: husky與三個開發相依套件。技能的重要性在於它的主張(Husky + lint-staged + Prettier),而非困難的工程。 - 沒有成本:技能每次執行 82k Token、對照組 82k、一句話提示 75k。技能在 6/6 次實驗組執行中被讀取,且未被指名。
- 代理在離線環境中無法安裝或執行任何東西,因此產生的掛鉤都沒有被執行;兩組都表示掛鉤會保持未啟用,直到
npm install。
各面向分數
| 面向 | 分數 | 原因 |
|---|---|---|
| 1_輸出品質 | 5.0 | 使用技能時平均分數 5.00/5(程式化檢查,見各任務 表格)。 |
| 2_相較無技能的提升 | 5 | 相較未使用技能的 1.41,+3.59 分(每項任務 n=2;約 1 分以下 屬於雜訊)。 |
| 3_觸發 | 5.0 | 技能檔案在 6/6 次實驗組執行中被讀取。 |
| 4_指令可攜性 | 4 | 一份簡短的 SKILL.md,沒有指令碼。 |
| 5_效率 | 5 | 0.99 倍 Token(每次執行 82k 對 82k)與 0.73 倍時間(43 秒對 58 秒)。 |
| 6_安全性與衛生 | 5 | 僅有文字;要求代理編輯 package.json 並加入掛鉤, 這些掛鉤會在每次提交時執行。 |
這項測試的限制
- 以規則檢查所撰寫的檔案;掛鉤從未被執行(沒有網路,Husky 未安裝)。
- 對照組的原生掛鉤方案是有效的設計;檢查衡量的是是否產出所要求的 Husky/lint-staged 配方,而對照組無從得知這個要求。
- 有一項檢查(保留既有 .prettierrc)最初在每次執行都失敗,因為未變更的檔案不會被複製出來;後來改為檔案未更動即通過,並以相同規則重新評分全部 18 次執行。
- 每項任務每組 n = 2:約 1 分以下的差異屬於雜訊。
- 規則式評分只能衡量檢查看得到的部分;無法評判品味,也無法判斷結果是否為最佳可能。
安全性
見 security.md。掃描:CRITICAL 0 / HIGH 0 / MEDIUM 0。判定:可安全執行(網路關閉的沙箱)。乾淨的掃描結果不能證明技能安全。
總結
如果你想要 Husky + lint-staged + Prettier 的設定,這項技能在三種儲存庫形態(pnpm 偵測、缺少 typecheck、既有 Prettier 設定)上都能正確完成,且不增加 Token;一句話的配方也有相同效果。安裝它是為了不必反覆解釋配方,除此之外不要期待品質提升。
完整紀錄
執行日誌:setup-pre-commit (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 欄位:任務、組-輪次、得分(0-5)、token、秒、通過的檢查、代理開啟的 skill 檔案。 t1-npm control-1: 得分 0.0, token 84825, 秒 49.0, 檢查 0/7, 未開啟 t1-npm control-2: 得分 0.0, token 67687, 秒 62.1, 檢查 0/7, 未開啟 t1-npm oneliner-1: 得分 5.0, token 66754, 秒 38.4, 檢查 7/7, 未開啟 t1-npm oneliner-2: 得分 5.0, token 83997, 秒 38.6, 檢查 7/7, 未開啟 t1-npm treatment-1: 得分 5.0, token 69607, 秒 37.3, 檢查 7/7, 開啟 setup-pre-commit t1-npm treatment-2: 得分 5.0, token 87911, 秒 42.1, 檢查 7/7, 開啟 setup-pre-commit t2-pnpm control-1: 得分 0.0, token 102203, 秒 77.9, 檢查 0/8, 未開啟 t2-pnpm control-2: 得分 0.0, token 104460, 秒 67.1, 檢查 0/8, 未開啟 t2-pnpm oneliner-1: 得分 5.0, token 66597, 秒 34.4, 檢查 8/8, 未開啟
18 次執行、3 個產出檔案
範例產出
SOTA · 装了 skill:package.json(t1-npm,第 1 次,Codex)
{ "name": "app", "version": "1.0.0", "private": true, "scripts": { "prepare": "husky", "test": "vitest run", "typecheck": "tsc --noEmit" }, "devDependencies": { "husky": "^9.1.7", "lint-staged": "^15.5.2", "prettier": "^3.5.3", "typescript": "^5.4.0" } }