caveman (JuliusBrussee/caveman, SKILL.md only)
用精簡的穴居人語氣回答,去掉廢話但保留每個技術事實。
caveman:提示詞裡已經有「be brief」時,技能沒有省下任何字,還多花 2.2 倍的 Token
Codex CLI · gpt-6-astra
21.7 / 30
相對未使用技能的提升:+0.00 · 視情況推薦 · 18 次執行
視情況推薦:總分 21.7/30 低於 22,並且提升幅度 +0.00 低於 +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.0
- 產出品質
- 4.7
- Token 與時間成本
- 1.0
- 安裝與可攜性
- 4.0
- 安全性
- 5.0
安全審查
安全靜態掃描:0 CRITICAL / 0 HIGH / 0 MEDIUM。人工審查:可在無網路沙箱中安全執行(未發現問題;僅安裝 SKILL.md)。掃描結果乾淨,不代表技能一定安全。
安裝
npx skills@latest add JuliusBrussee/caveman --skill caveman
固定 Commit: 9b68f7ed12b05e7efaff18e65c5a3fc2849fd0a4
測試日期: 2026-11-02
我們測了什麼
- 解釋無限迴圈的 useEffect — 在 React 元件裡我有 const fetchData = async () => { const r = await fetch('/api/items'); setItems(await r.json()); } 和 useEffect(() => { fetchData(); }, [fetchData]);。元件陷入無止盡的重新抓取迴圈。為什麼會這樣,該怎麼修?Be brie…
- 修正緩慢的 Postgres 查詢 — Postgres:SELECT id, total FROM orders WHERE customer_id = 42 ORDER BY created_at DESC LIMIT 20; 在只有主鍵索引的 50M 列 orders 表上要花好幾秒。我該怎麼做?Be brief; I'm paying per token.
- 共用分支上該用 merge 還是 rebase — 我的團隊在一個共用功能分支上工作,其他人已經拉取過了。我想把最新的 main 帶進來。我該用 git merge 還是 git rebase,為什麼?Be brief; I'm paying per token.
優點
- 技能即使未被點名也會被採用:6/6 次實驗組執行都讀取了技能檔案。
- 使用技能後的絕對品質很高:4.67 / 5。
缺點
- 相較於未使用技能,沒有可測量的提升(+0.00,落在雜訊範圍內)。
- Token 用量是未使用技能的 2.2 倍。
- 測試注意事項:只安裝了 SKILL.md,沒有安裝 hooks 與安裝程式。測試提示詞中含有「be brief」觸發詞。
- 每個任務的每個組別 n=2;約 1 分以內的差異屬於雜訊。
評測
Codex CLI 0.166(gpt-6-astra,低推理)在 Mac 測試機上執行,每次執行都使用全新的暫存專案與暫存 HOME/TMPDIR/快取;技能已安裝(實驗組)、未安裝(對照組),或未安裝但把技能的核心要求壓縮成一句話附加到提示詞(一句話提示組)。每個任務的每個組別執行 2 次,關閉網路,封鎖 /tmp 寫入。提示詞從未提及技能(除下方註明的措辭外)。每個提示詞都是一個技術問題(useEffect 無限迴圈、緩慢的 Postgres 查詢、共用分支上該用 merge 還是 rebase),結尾是「Be brief; I'm paying per token.」。這句話本身就是技能的觸發詞之一,而對照組也會得到同一句話。因此這個測試要問的是:在單純要求「簡短」之上,技能還能多加什麼。
三組對照
| 組別 | 平均分數(0-5) | 每次執行 Token 用量 |
|---|---|---|
| 未使用技能 | 4.67 | 14k |
| 一句話提示 | 4.5 | 14k |
| 使用技能 | 4.67 | 31k |
以 Codex CLI 執行 18 次,採規則式檢查評分,不經 LLM 評審。總分 21.7 / 30,評級為 視情況推薦。
揭露事項:只安裝了 SKILL.md,沒有安裝 hooks 與安裝程式。測試提示詞中含有「be brief」觸發詞。
判定:視情況而定(21.7 / 30)。 來源:JuliusBrussee/caveman,skills/caveman,固定於提交 9b68f7e。安裝:npx skills@latest add JuliusBrussee/caveman --skill caveman。授權條款: MIT(儲存庫 LICENSE;儲存庫中的 hooks 與安裝程式並未安裝或執行)。
這是什麼
caveman 技能(僅 skills/caveman/SKILL.md;儲存庫的 hooks 與安裝程式未安裝)。這是一種精簡回覆風格:先講答案、刪掉問候與重述、使用簡短詞彙、省略冠詞但絕不省略否定詞、程式碼/路徑/數字與錯誤訊息保持原樣、警告與不可逆操作則用平實的文字說明。它會在「caveman mode」、「be brief」、「less tokens」時觸發。約 600 字的 Markdown,沒有指令碼。
我們如何測試
在 Mac 測試機上使用 Codex CLI 0.166(gpt-6-astra,低推理),每次執行都使用全新的暫存專案與暫存 HOME/TMPDIR/快取,安裝技能(實驗組)、未安裝(對照組),或未安裝但將技能核心要求濃縮成一句話附加在提示詞後(一句話提示組),每個任務每組執行 2 次,網路關閉,/tmp 寫入封鎖。提示詞從未提及技能(以下註明的措辭除外)。
每個提示詞都是一個技術問題(無限迴圈的 useEffect、緩慢的 Postgres 查詢、共享分支上的 merge 與 rebase 之爭),結尾都是「請簡短;我按 Token 付費。」這句話是技能自身的觸發語之一,對照組也會收到同一句話。因此這項測試要問的是:在單純要求簡短之外,技能還額外帶來什麼。
- 解釋無限迴圈的 useEffect — 在一個 React 元件中,我有
const fetchData = async () => { const r = await fetch('/api/items'); setItems(await r.json()); }以及useEffect(() => { fetchData(); }, [fetchData]);。元件會陷入無止境的重複抓取。為什麼,該怎麼修?請簡短… - 修正緩慢的 Postgres 查詢 — Postgres:
SELECT id, total FROM orders WHERE customer_id = 42 ORDER BY created_at DESC LIMIT 20;在只有主鍵索引的 5,000 萬列 orders 資料表上要花好幾秒。我該怎麼做?請簡短;我按 Token 付費。 - 共享分支上該 merge 還是 rebase — 我的團隊在一個共享功能分支上工作,其他人已經拉取過該分支。我想把最新的 main 帶進來。我該用 git merge 還是 git rebase,為什麼?請簡短;我按 Token 付費。
評分方式為程式化檢查(隱藏測試/植入問題召回/限制條件檢查/視情況進行渲染與 OCR),每次執行 0–5 分。沒有任何 LLM 評審決定分數。
結果
提供給第三組的一句話提示:「簡潔回答:先講答案,不要問候、填充語、模糊保留或重述,省略不必要的冠詞,每個技術事實、程式碼、數字與否定詞都要保持精確。」
| 任務 | 對照組分數 | 一句話提示 | 使用技能 | 對照組 Token 數 | 一句話提示 Token 數 | 使用技能 Token 數 | 技能讀取 |
|---|---|---|---|---|---|---|---|
| t1-react-loop | 4.75 | 4.5 | 4.5 | 14k | 14k | 30k | 2/2 |
| t2-pg-index | 5.0 | 5.0 | 5.0 | 14k | 14k | 34k | 2/2 |
| t3-merge-rebase | 4.25 | 4.0 | 4.5 | 14k | 14k | 30k | 2/2 |
平均分數:未使用技能 4.67,使用技能 4.67(差異 +0.0)。每次執行 Token 數:14k 對 31k(2.20 倍);時間 12 秒對 19 秒。一句話提示組:4.5(技能相較一句話提示的增益:+0.17;一句話提示相較無技能的增益:-0.17);一句話提示每次執行 14k Token,因此技能的成本是一句話提示的 2.20 倍。
實際發生了什麼
- 未使用技能時,代理在被要求簡短後就已經只回答約 59 個字(45-70);使用技能時為 52 個字(39-64),使用一句話版本時為 54 個字。7 個字的差距落在每次執行的變異範圍內。沒有任何一組使用填充式的開場或結尾;全部 18 則回答都保留了程式碼、指令與關鍵事實。
- 事實保留程度相同:每一組的每則回答都保留了 5 項必要技術事實中的 3-5 項(保留比例:對照組 87%、一句話提示 80%、技能組 87%)。代理經常漏掉的那一項事實(狀態更新會讓元件重新渲染並重新執行 effect),三組都同樣漏掉。「不要對共享分支 rebase」這一點,我們的檢查在對照組 2 則中匹配 1 則、一句話提示 2 則中匹配 0 則、技能組 2 則中匹配 1 則;在我們閱讀的回答中,全部都建議 merge,並將 rebase 保留給私人或尚未發布的工作,因此那些未匹配有一部分是措辭造成的。
- 技能在 6/6 次執行中被讀取,因為提示詞包含它的觸發語。每次執行花費 31k Token,對照組為 14k(2.2 倍),因為代理會先載入技能並執行兩個指令讀取它,才回答一個它原本就能直接回答的問題。一句話提示的成本與對照組相同。
- 閱讀回答後,風格如出一轍:先講答案、片段式語句、簡短的程式碼區塊。我們無法分辨技能組與對照組的回答。
各面向分數
| 面向 | 分數 | 原因 |
|---|---|---|
| 1_輸出品質 | 4.67 | 使用技能時平均分數 4.67/5(程式化檢查,見各任務 表格)。 |
| 2_相較無技能的提升 | 2.0 | 相較未使用技能的 4.67,+0.00 分(每項任務 n=2;約 1 分以下 屬於雜訊)。 |
| 3_觸發 | 5.0 | 技能檔案在 6/6 次實驗組執行中被讀取。 |
| 4_指令可攜性 | 4 | 平實的 Markdown 規則;部分規則提到 hooks 與狀態列(
|
| 5_效率 | 1 | 2.20 倍 Token(每次執行 31k 對 14k)與 1.53 倍時間(19 秒對 12 秒)。 |
| 6_安全性與衛生 | 5 | 單一 SKILL.md 的風格規則(已完整閱讀);儲存庫的 hooks/安裝程式未安裝也未審查。 |
這項測試的限制
- 這項測試衡量的是技能在明確「請簡短」要求之上額外帶來的效果。技能的真正用途是持續性的:它會在整個工作階段中保持開啟,讓你不必每次都重複要求,而這項只有三個問題的測試並未涵蓋這一點。
- 這裡計算的 Token 成本是每次對話一次性載入技能;在長時間的工作階段中,若每則回答能省下幾個字,長期下來可能回本;我們沒有測量這一點。
- 只檢查了三個技術問題的聊天回答;提交訊息、程式碼審查留言與長時間的代理工作階段(技能在其中還有其他規則)並未測試。
- 儲存庫的 hooks、狀態列與其他 caveman 技能並未安裝或執行。
- 每項任務每組 n = 2:約 1 分以下的差異屬於雜訊。
- 規則式評分只能衡量檢查看得到的部分;無法評判品味,也無法判斷結果是否為最佳可能。
安全性
見 security.md。掃描:CRITICAL 0 / HIGH 0 / MEDIUM 0。判定:可安全執行(網路關閉的沙箱)。乾淨的掃描結果不能證明技能安全。
總結
在單純的「請簡短」要求之上,caveman 並沒有以我們能測量的方式讓回答更短或更不準確,而載入它卻讓一則簡短回答的 Token 數翻倍。如果你希望代理在整個工作階段都保持精簡、不必每次要求,這項技能辦得到;如果你只是需要某個問題的回答簡短,直接在提示詞裡說就好。
完整紀錄
執行日誌:caveman (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 欄位:任務、組-輪次、得分(0-5)、token、秒、通過的檢查、代理開啟的 skill 檔案。 t1-react-loop control-1: 得分 5.0, token 14312, 秒 16.3, 檢查 3/3, 未開啟 t1-react-loop control-2: 得分 4.5, token 14318, 秒 10.7, 檢查 3/3, 未開啟 t1-react-loop oneliner-1: 得分 4.5, token 14348, 秒 16.9, 檢查 3/3, 未開啟 t1-react-loop oneliner-2: 得分 4.5, token 14341, 秒 8.7, 檢查 3/3, 未開啟 t1-react-loop treatment-1: 得分 4.5, token 30174, 秒 21.5, 檢查 3/3, 開啟 caveman t1-react-loop treatment-2: 得分 4.5, token 30067, 秒 26.2, 檢查 3/3, 開啟 caveman t2-pg-index control-1: 得分 5.0, token 14285, 秒 10.0, 檢查 3/3, 未開啟 t2-pg-index control-2: 得分 5.0, token 14301, 秒 10.5, 檢查 3/3, 未開啟 t2-pg-index oneliner-1: 得分 5.0, token 14362, 秒 12.3, 檢查 3/3, 未開啟
18 次執行、3 個產出檔案
範例產出
SOTA · 装了 skill:final message(t1-react-loop,第 1 次,Codex)
`fetchData` is a new function every render. The effect runs, `setItems` triggers another render, and the cycle repeats. Move the function inside the effect: ```jsx useEffect(() => { async function fetchData() { const r = await fetch('/api/items'); setItems(await r.json()); } fetchData(); }, []); ``` If needed elsewhere, stabilize `fetchData` with `useCallback` and its actual dependencies.