caveman-commit (JuliusBrussee/caveman)
依 Conventional Commits 規範寫出精簡的提交訊息,只說意圖與原因,不複述改了什麼。
caveman-commit:能寫出帶 breaking-change footer 的 Conventional Commits 訊息(對照組 4.0、技能 5.0、一句話提示 4.95),Token 用量差不多;對照組只寫一句白話,而把格式寫成一句話提示的效果也一樣好
Codex CLI · gpt-6-astra
26.0 / 30
相對未使用技能的提升:+0.98 · 視情況推薦 · 18 次執行
視情況推薦:提升幅度 +0.98 低於 +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
- 相對未使用技能的提升
- 3.0
- 產出品質
- 5.0
- Token 與時間成本
- 5.0
- 安裝與可攜性
- 4.0
- 安全性
- 4.0
安全審查
安全靜態掃描:0 CRITICAL / 0 HIGH / 0 MEDIUM。人工審查:可在無網路沙箱中安全執行(未發現問題)。掃描結果乾淨,不代表技能一定安全。
安裝
npx skills@latest add JuliusBrussee/caveman --skill caveman-commit
固定 Commit: 9b68f7ed12b05e7efaff18e65c5a3fc2849fd0a4
測試日期: 2026-11-02
我們測了什麼
- 小型修正的 Commit 訊息 — 我需要一則 Commit 訊息。請為 change.diff 中的變更撰寫 Commit 訊息,並存到 COMMIT_MSG.txt(只要訊息本身)。
- 新增端點的 Commit 訊息 — 請幫我寫一則 Commit。請為 change.diff 中的變更撰寫 Commit 訊息,並存到 COMMIT_MSG.txt(只要訊息本身)。
- 破壞性變更的 Commit 訊息 — 寫一則 Commit 訊息。請為 change.diff 中的變更撰寫 Commit 訊息,並存到 COMMIT_MSG.txt(只要訊息本身)。
優點
- 相對未使用技能,平均分數從 4.02 提升到 5.0(+0.98)。
- 技能即使未被點名也會被採用:6/6 次實驗組執行都讀取了技能檔案。
- 沒有 Token 額外負擔:Token 用量是未使用技能的 1.09 倍。
- 使用技能後的絕對品質很高:5.0 / 5。
缺點
- 一句話提示得分 4.95,使用技能則為 5.0(+0.05)。
- 每個任務的每個組別 n=2;約 1 分以內的差異屬於雜訊。
評測
Codex CLI 0.166(gpt-6-astra,低推理)在專用的 Windows 測試電腦上執行,每次執行都使用全新的暫存專案與暫存 HOME/TMPDIR/快取;技能已安裝(實驗組)、未安裝(對照組),或未安裝但把技能的核心要求壓縮成一句話附加到提示詞(一句話提示組)。每個任務的每個組別執行 2 次,關閉網路,封鎖 /tmp 寫入。提示詞從未提及技能(除下方註明的措辭外)。三個 diff(修正分頁、新增 /health 端點、把設定鍵從 timeout 改名為 timeout_ms)。提示詞只要求把 Commit 訊息存到 COMMIT_MSG.txt,沒有指定格式。一句話提示組用一句話說明 Conventional Commits 格式及其規則。
三組對照
| 組別 | 平均分數(0-5) | 每次執行 Token 用量 |
|---|---|---|
| 未使用技能 | 4.02 | 53k |
| 一句話提示 | 4.95 | 48k |
| 使用技能 | 5.0 | 58k |
以 Codex CLI 執行 18 次,採規則式檢查評分,不經 LLM 評審。總分 26.0 / 30,評級為 視情況推薦。
評定:視情況而定(26.0 / 30)。 來源:JuliusBrussee/caveman,skills/caveman-commit,固定於提交 9b68f7e。安裝:npx skills@latest add JuliusBrussee/caveman --skill caveman-commit。授權: MIT(儲存庫 LICENSE)。
這是什麼
caveman-commit 技能(JuliusBrussee/caveman)是一份提交訊息風格指南:採用 Conventional Commits 格式 type(scope): imperative summary,最多 50 個字元且結尾不加句號;只有在變更原因不夠明顯時才撰寫內文;發生破壞性變更時加上 BREAKING CHANGE 註記;並且不得出現 'this commit'、'I'、'we'、'now'、表情符號或 AI 署名。
測試方式
在專用的 Windows 測試電腦上使用 Codex CLI 0.166(gpt-6-astra,低推理),每次執行都建立全新的臨時專案,並使用臨時的 HOME/TMPDIR/快取;分別為安裝技能(技能組)、未安裝(對照組),以及未安裝但把技能核心要求濃縮成一句話附加在提示詞後(一句話組);每項任務的每組執行 2 次;關閉網路,並封鎖對 /tmp 的寫入。提示詞完全不會提到技能名稱(以下註明的措辭除外)。
共有三份 diff(修正分頁、新增 /health 端點、將設定鍵從 timeout 改名為 timeout_ms)。提示詞只要求把提交訊息存到 COMMIT_MSG.txt,並未指定格式。一句話版本則用一句話說明 Conventional Commits 格式及其規則。
- 小型修正的提交訊息 — 我需要一則提交訊息。請為 change.diff 中的變更撰寫提交訊息,並存到 COMMIT_MSG.txt(只存訊息本身)。
- 新增端點的提交訊息 — 請寫一則提交訊息。請為 change.diff 中的變更撰寫提交訊息,並存到 COMMIT_MSG.txt(只存訊息本身)。
- 破壞性變更的提交訊息 — 請寫一則提交訊息。請為 change.diff 中的變更撰寫提交訊息,並存到 COMMIT_MSG.txt(只存訊息本身)。
計分採程式化方式(隱藏測試/預埋問題召回/限制條件檢查/視情況搭配渲染與 OCR),每次執行 0–5 分。分數並非由任何 LLM 評審決定。
結果
提供給第三組的一句話版本:「請撰寫一則 Conventional Commits 訊息:type(scope): imperative summary,最多 50 個字元且結尾不加句號;只有在原因不夠明顯時才寫內文(破壞性變更一定要有內文,並加上 BREAKING CHANGE 註記);不得出現 'this commit'、'I'、'we'、'now'、表情符號或 AI 署名。」
| 任務 | 對照組分數 | 一句話版本 | 技能組 | 對照組 token 數 | 一句話版本 token 數 | 技能組 token 數 | 技能讀取 |
|---|---|---|---|---|---|---|---|
| t1-fix | 4.49 | 5.0 | 5.0 | 47k | 48k | 49k | 2/2 |
| t2-feature | 4.49 | 5.0 | 5.0 | 54k | 48k | 55k | 2/2 |
| t3-breaking | 3.07 | 4.86 | 5.0 | 56k | 48k | 67k | 2/2 |
平均分數:無技能 4.02,技能組 5.0(差異 +0.98)。每次執行 token 數:53k 對 58k(1.09 倍);時間 42 秒對 40 秒。一句話組:4.95(技能相較一句話版本的增益:+0.05;一句話版本相較無技能的增益:+0.93);一句話版本每次執行 48k token,因此技能的 token 成本是一句話版本的 1.19 倍。
實際表現
- 對照組 4.02、技能組 5.0、一句話版本 4.95(各 n=6)。對照組在 6/6 次執行中都只寫出直述的命令句('Fix pagination offset for one-based page numbers'),沒有
type(scope):前綴,因此每次都未通過「慣例類型」規則;其他規則大多通過(其中一次執行的主旨超過 50 個字元)。 - 破壞性變更任務:對照組在 2/2 次執行中都未標示破壞性變更(沒有 BREAKING CHANGE 註記,也沒有
!);不過內文確實提到移轉事宜。技能組兩次執行都拿到 5.0:使用feat(config)!:並附上 BREAKING CHANGE 頁腳。一句話版本在 2/2 次執行中也做到相同結果,但其中一次執行的訊息未通過慣例類型檢查。 - Token:技能組每次執行 58k、一句話版本 48k、對照組 53k(為對照組的 1.09 倍)。技能組 6/6 次執行都有讀取技能。
各面向分數
| 面向 | 分數 | 原因 |
|---|---|---|
| 1_output_quality | 5.0 | 技能組平均分數 5.00/5(程式化檢查,詳見各任務 表格)。 |
| 2_lift_vs_no_skill | 2.98 | 相較無技能的 4.02 高出 +0.98 分(每項任務 n=2;約 1 分 以下的差異屬於雜訊)。 |
| 3_trigger | 5.0 | 技能組 6/6 次執行都讀取了技能檔案。 |
| 4_instructions_portability | 4 | 僅 SKILL.md。 |
| 5_efficiency | 5 | token 為 1.09 倍(每次執行 58k 對 53k),時間為 0.96 倍(40 秒對 42 秒)。 |
| 6_safety_hygiene | 4 | 僅文字內容;詳見 security.md。 |
本測試的限制
- 檢查是針對 COMMIT_MSG.txt 的規則式判斷(類型前綴、長度、時態、語氣、禁用詞、破壞性變更註記);除了關鍵詞檢查之外,並未評判訊息是否妥善描述 diff。
- 對照組因為沒有猜出提示詞未要求的 Conventional Commits 慣例而被扣分。
- 每格 n=2;共三份小型 diff。
- 每項任務的每組 n = 2:約 1 分以下的差異屬於雜訊。
- 規則式計分只能衡量檢查項目看得見的部分,無法評判品味,也無法判斷結果是否為最佳解。
安全性
詳見 security.md。掃描:0 CRITICAL / 0 HIGH / 0 MEDIUM。評定:可在無網路沙箱中安全執行。掃描結果乾淨並不代表技能一定安全。
總結
只要一句「寫一則提交訊息」的簡單提示,就能穩定取得帶有破壞性變更標記的 Conventional Commits 訊息。只要用一句話點明格式,也能得到相同結果,因此這項技能主要省下的是自己撰寫格式說明的功夫。
完整紀錄
執行日誌:caveman-commit (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 欄位:任務、組-輪次、得分(0-5)、token、秒、通過的檢查、代理開啟的 skill 檔案。 t1-fix control-1: 得分 4.49, token 47722, 秒 20.0, 檢查 2/3, 未開啟 t1-fix control-2: 得分 4.49, token 47848, 秒 20.8, 檢查 2/3, 未開啟 t1-fix oneliner-1: 得分 5.0, token 47948, 秒 29.4, 檢查 3/3, 未開啟 t1-fix oneliner-2: 得分 5.0, token 48277, 秒 21.1, 檢查 3/3, 未開啟 t1-fix treatment-1: 得分 5.0, token 49540, 秒 24.8, 檢查 3/3, 開啟 caveman-commit t1-fix treatment-2: 得分 5.0, token 49614, 秒 16.5, 檢查 3/3, 開啟 caveman-commit t2-feature control-1: 得分 4.49, token 48133, 秒 31.0, 檢查 2/3, 未開啟 t2-feature control-2: 得分 4.49, token 60402, 秒 101.3, 檢查 2/3, 未開啟 t2-feature oneliner-1: 得分 5.0, token 48035, 秒 107.1, 檢查 3/3, 未開啟
18 次執行、3 個產出檔案
範例產出
SOTA · 装了 skill:COMMIT_MSG.txt(t1-fix,第 1 次,Codex)
fix(api): correct offset for one-based pagination