如何被約束為“最小改動(dòng) + 回歸證明”)
Caveman 的 surgical-patch 技能bugfix 任務(wù)如何被約束為“最小改動(dòng) 回歸證明”【免費(fèi)下載鏈接】caveman why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman項(xiàng)目地址: https://gitcode.com/GitHub_Trending/caveman1/cavemansurgical-patch 是 caveman 倉(cāng)庫(kù)內(nèi)置的六個(gè)“原生工作模式”native work patterns之一專門用于 bug 修復(fù)類任務(wù)它不改變模型說(shuō)話的方式而是約束模型改代碼的方式——先復(fù)現(xiàn)、再定位到最小責(zé)任層、只做修復(fù)本身的改動(dòng)、并留下與任務(wù)相關(guān)的回歸證明。讀完本文你將理解這條技能在 caveman 的 registry 元數(shù)據(jù)、編譯管線、native pack 運(yùn)行時(shí)選擇機(jī)制中的完整位置以及它如何在 Claude、Codex、Gemini、Hermes、OpenCode、Aider 六類宿主中按需注入。技能本體16 行指令的全部規(guī)則技能正文位于 skills/surgical-patch/SKILL.md。它由 YAML frontmattername與description加正文兩部分組成正文就是會(huì)進(jìn)入提示詞的“指令體”# Surgical patch Reproduce failure first when economical; otherwise capture strongest available evidence. - Trace symptom to responsible mechanism. - Change narrowest layer that owns incorrect behavior. - Preserve unrelated behavior and user changes. - Avoid cleanup, renaming, and abstraction outside fix. - Add only regression proof relevant to task. Run focused proof plus nearest affected gate. Stop when failure is fixed and regression proof passes.frontmatter 的description字段說(shuō)明了技能的觸發(fā)畫像Fix bugs and small behavior changes at the narrowest responsible layer. Use when regression proof, preserved surrounding behavior, and task-relevant tests matter.正文按“證據(jù) → 定位 → 改動(dòng)邊界 → 驗(yàn)證”的順序給出六條硬規(guī)則逐條拆解如下先復(fù)現(xiàn)失敗但只在“經(jīng)濟(jì)上合理”時(shí)。Reproduce failure first when economical; otherwise capture strongest available evidence.這條規(guī)則刻意留了口子復(fù)現(xiàn)成本過(guò)高比如需要完整生產(chǎn)環(huán)境、長(zhǎng)周期壓測(cè)時(shí)不強(qiáng)迫復(fù)現(xiàn)轉(zhuǎn)而采集“當(dāng)前能拿到的最強(qiáng)證據(jù)”日志、堆棧、失敗截圖等避免為了儀式感復(fù)現(xiàn)而浪費(fèi)整輪上下文。把癥狀追到責(zé)任機(jī)制。Trace symptom to responsible mechanism.不滿足于“錯(cuò)誤出現(xiàn)在哪一行”要求解釋是哪一層、哪個(gè)機(jī)制產(chǎn)生了錯(cuò)誤行為這是后續(xù)“最小層”判定的前提。只改擁有錯(cuò)誤行為的最小層。Change narrowest layer that owns incorrect behavior.責(zé)任歸屬是核心判據(jù)錯(cuò)誤在誰(shuí)手里就改誰(shuí)不允許“順手”改到上游或下游。保留無(wú)關(guān)行為與用戶的未提交改動(dòng)。Preserve unrelated behavior and user changes.修復(fù)不得破壞鄰近功能也不得吞掉開(kāi)發(fā)者本地的在途修改。修復(fù)之外不做清理、重命名和抽象。Avoid cleanup, renaming, and abstraction outside fix.這是對(duì) agent 常見(jiàn)的“擴(kuò)散式重構(gòu)”沖動(dòng)的直接攔截——diff 里不該出現(xiàn)與修復(fù)無(wú)關(guān)的行。只加與任務(wù)相關(guān)的回歸證明。Add only regression proof relevant to task.測(cè)試是證明這次失敗不會(huì)復(fù)發(fā)的工具不是順手?jǐn)U建測(cè)試套件的理由。結(jié)尾的收尾指令規(guī)定了驗(yàn)證與停止條件Run focused proof plus nearest affected gate. Stop when failure is fixed and regression proof passes.——運(yùn)行聚焦證明加“最近一層受影響的門禁”對(duì)應(yīng)倉(cāng)庫(kù)中最貼近該改動(dòng)的測(cè)試/lint/構(gòu)建關(guān)卡當(dāng)“失敗已修復(fù)且回歸證明通過(guò)”時(shí)停止不多做一步。同目錄下還有 skills/surgical-patch/agents/openai.yaml提供展示名與默認(rèn)調(diào)用話術(shù)Use $surgical-patch to fix this bug with a narrow verified change.用于宿主側(cè)的技能列表展示不參與提示詞注入。registry 元數(shù)據(jù)surgical-patch 的機(jī)器可讀契約技能正文本身很短但它的行為契約由 skills/registry.json 中surgical-patch條目完整定義#L129-L142{ id: surgical-patch, summary: Fix the narrowest responsible layer with regression proof., delivery: [native], suites: [], activation: classified, task_types: [bugfix], evidence_status: structural-test-only, prompt_byte_budget: 850, conflicts: [], precedence: 100, guardrails: [avoid_unrelated_cleanup, preserve_surrounding_behavior], entry_condition: task fixes incorrect behavior, stop_condition: failure is fixed and regression proof passes }各字段與正文規(guī)則的對(duì)應(yīng)關(guān)系值得逐條說(shuō)明delivery: [native]該技能只通過(guò) native pack 交付不進(jìn)入 CLI 技能表或 Web 端即它作為宿主 agent 的原生策略層注入而不是作為可顯式調(diào)用的 CLI 命令。activation: classified編譯管線強(qiáng)制 native 技能只能聲明classified激活方式skills/compile.mjs 中if (meta.activation ! classified) die(...)即技能在任務(wù)類型被分類為bugfix之后才激活而非無(wú)條件常駐。task_types: [bugfix]它是bugfix任務(wù)類型的唯一屬主。同一任務(wù)類型若被多個(gè)技能聲明編譯期要求它們必須互相聲明沖突且 precedence 不同否則構(gòu)建直接失敗skills/compile.mjssurgical-patch 的conflicts: []說(shuō)明bugfix域當(dāng)前沒(méi)有競(jìng)爭(zhēng)者。prompt_byte_budget: 850正文指令體的 UTF-8 字節(jié)數(shù)上限。編譯期以Buffer.byteLength(instructions) meta.prompt_byte_budget做硬校驗(yàn)skills/compile.mjs。實(shí)測(cè)該技能正文指令體約 470 余字節(jié)遠(yuǎn)小于 850 上限留有余量。guardrailsavoid_unrelated_cleanup與preserve_surrounding_behavior兩條護(hù)欄恰好是正文第 4、5 條規(guī)則不做修復(fù)外清理、保留無(wú)關(guān)行為的機(jī)器可讀形式。entry_condition/stop_condition入口條件“任務(wù)修復(fù)錯(cuò)誤行為”、停止條件“失敗已修復(fù)且回歸證明通過(guò)”與正文結(jié)尾的停止指令完全一致構(gòu)成“進(jìn)入—退出”閉環(huán)。這些元數(shù)據(jù)同時(shí)受到嚴(yán)格的結(jié)構(gòu)校驗(yàn)skills/compile.mjs 白名單SKILL_KEYS限定條目只能出現(xiàn)這 12 個(gè)鍵任何未知鍵都會(huì)讓agent-skill compile failed終止構(gòu)建正文必須帶 YAML frontmatter、name必須與目錄同名、且不能包含TODO/FIXME/not implemented等占位標(biāo)記skills/compile.mjs。也就是說(shuō)surgical-patch 的正文在“進(jìn)包”之前就通過(guò)了完整性與預(yù)算兩道門禁。從源文件到六類宿主編譯與注入鏈路SKILL.md是唯一權(quán)威來(lái)源。skills/compile.mjs 文件頭注釋寫明Every skill body lives once at skills/ /SKILL.md. registry.json decides which delivery surfaces receive it and which install suites include it. The CLI and web import generated TypeScript; neither hand-copies prompts.編譯產(chǎn)物有三條線skills/id/SKILL.md skills/registry.json → CLI 端生成packages/cli/src/agent-skills.generated.ts與 packages/cli/src/native-pack.generated.ts六個(gè) native 目標(biāo)claude、codex、hermes、gemini、opencode、aider各自生成一份 skills/generated/ 下的pack.json匯總寫入 proxy/internal/nativepack/native-pack.generated.json被 Go 端以//go:embed內(nèi)嵌進(jìn)二進(jìn)制。surgical-patch 在生成文件 proxy/internal/nativepack/native-pack.generated.json 中的完整形態(tài)含instructions字段與 SKILL.md 正文逐字一致可作查證。pack 頂層還攜帶強(qiáng)制 Coreschema為caveman.native-pack.v1version2.2.0core.prompt_token_budget560、estimated_tokens556估算基準(zhǔn)ceil_utf8_bytes_divided_by_3。Core 全文來(lái)自 skills/native-core.md其中兩條與 surgical-patch 直接咬合Run smallest sufficient proof.最小充分證明呼應(yīng)“focused proof plus nearest affected gate”與Fix root cause.呼應(yīng)“trace symptom to responsible mechanism”。六類宿主的注入掛載點(diǎn)由 skills/compile.mjs 的NATIVE_ACTIVATION表定義并原樣進(jìn)入 pack 的targets字段native-pack.generated.json宿主Core 掛載任務(wù)策略掛載claudeSessionStartUserPromptSubmitcodexdeveloper_instructionsSessionStartUserPromptSubmithermespre_llm_callpre_llm_callgeminiBeforeAgentBeforeAgentopencodeexperimental.chat.system.transformchat.messageaiderread_only_conventionsnative_repository_map_authoritativeCore 在會(huì)話開(kāi)始時(shí)注入而 surgical-patch 這類任務(wù)策略則在任務(wù)被分類為bugfix后經(jīng)任務(wù)掛載點(diǎn)追加為“動(dòng)態(tài)尾”。CLI 端測(cè)試 packages/cli/tests/hooks.runtime.mjs 驗(yàn)證了這一形態(tài)prompt.submit事件攜帶context: Caveman task contract (dynamic tail): policysurgical-patch說(shuō)明運(yùn)行時(shí)確實(shí)按任務(wù)策略名把 surgical-patch 掛接到本次提示上同文件 L385 還斷言 Gemini 宿主的hookSpecificOutput.additionalContext得到同樣的策略尾。運(yùn)行時(shí)選擇Select(bugfix) 如何命中 surgical-patchproxy 側(cè)的加載與選擇邏輯在 proxy/internal/nativepack/pack.go。要點(diǎn)Load()用sync.Once單次反序列化內(nèi)嵌 JSON并跑validate()校驗(yàn) schema 標(biāo)識(shí)、Core 預(yù)算、每個(gè)技能的activation classified、指令體字節(jié)數(shù)不超預(yù)算、conflicts 必須指向已知技能且同一任務(wù)類型的競(jìng)爭(zhēng)者必須互相聲明沖突、precedence 不得相同pack.go——與編譯期的同構(gòu)約束在運(yùn)行時(shí)再查一遍屬于“雙保險(xiǎn)”。Select(taskType)對(duì)任務(wù)類型做小寫化與裁剪后線性匹配各技能的task_types多候選時(shí)取precedence更高者pack.go。未登記的任務(wù)類型 fail-closedSelect(review)返回okfalse即不注入任何任務(wù)策略只保留強(qiáng)制 Core。測(cè)試 proxy/internal/nativepack/pack_test.go 把這張映射表固化下來(lái)#L16-L19wants : map[string]string{ feature: lean-build, bugfix: surgical-patch, investigation: investigate-first, refactor: safe-refactor, migration: migration, verification: verify-and-stop, }斷言要求bugfix選擇結(jié)果必須是 surgical-patch、evidence_status必須是structural-test-only、指令體長(zhǎng)度不得超過(guò)字節(jié)預(yù)算且 pack 形狀為 6 技能 × 6 宿主#L13-L15。六個(gè) native 技能恰好覆蓋六種任務(wù)類型一對(duì)一、無(wú)沖突因此全部conflicts: []、precedence: 100即可通過(guò)校驗(yàn)。與其他工作模式的邊界README.md 將這六個(gè)技能統(tǒng)一描述為Work patterns that write less code, so the agent bills fewer tokens. Your agent picks these up on its own when a task fits.CLAUDE.md 進(jìn)一步說(shuō)明它們與 caveman 的“省 token”主線目標(biāo)一致只是把紀(jì)律從輸出措辭轉(zhuǎn)移到代碼量上并且Deliberately un-branded so they read as generic patterns to the model——刻意不帶品牌詞讓模型讀到的是通用工程紀(jì)律而非項(xiàng)目話術(shù)。這也是 surgical-patch 正文通篇沒(méi)有任何 “caveman” 字樣、只有中性工程語(yǔ)言的深層原因。對(duì)照 registry 中各技能的入口條件可以看清 surgical-patch 的分工邊界原因不明、入口條件是“cause is ambiguous”的調(diào)查任務(wù)歸 investigate-first護(hù)欄no_edit_before_credible_hypothesis甚至禁止先改代碼結(jié)構(gòu)變更、行為不變的任務(wù)歸 safe-refactor停止條件是“前后證明一致”只有“任務(wù)修復(fù)錯(cuò)誤行為”才進(jìn)入 surgical-patch修復(fù)完成后的驗(yàn)證階段若單獨(dú)提出則命中 verify-and-stop 的“最小充分證明集”。換句話說(shuō)surgical-patch 解決的是“bug 已經(jīng)定位或易于定位”區(qū)間內(nèi)的改動(dòng)紀(jì)律它的上游是 investigate-first 的證據(jù)下游是 verify-and-stop 的收口。預(yù)算與門禁為什么正文必須只有 16 行這套技能體系的約束哲學(xué)是“提示詞本身也是被審計(jì)的代碼”。對(duì) surgical-patch 而言可驗(yàn)證的門禁有字節(jié)預(yù)算硬校驗(yàn)正文指令體 850 字節(jié)即構(gòu)建失敗保證任何單條任務(wù)策略的注入成本有上界skills/compile.mjs、pack.go 雙重檢查。表面一致性門禁skills-verbs gate編譯前會(huì)用loadSurfacesscanSkillBody掃描技能正文若正文引用了 CLI/MCP/SDK 并不存在的命令或工具構(gòu)建“fail closed”skills/compile.mjs。surgical-patch 正文不引用任何具體命令天然通過(guò)。Core 預(yù)算聯(lián)動(dòng)Core 估算 token 超 560 即失敗skills/compile.mjs運(yùn)行時(shí)再核對(duì)EstimatedTokens PromptTokenBudgetpack.go。占位內(nèi)容封禁TODO、FIXME、not implemented標(biāo)記直接讓技能出包失敗防止草稿狀態(tài)混入生產(chǎn)包。復(fù)現(xiàn)與驗(yàn)證方式只讀操作在本地倉(cāng)庫(kù)中可按以下只讀路徑走查 surgical-patch 的完整生命周期閱讀源文件skills/surgical-patch/SKILL.md、skills/surgical-patch/agents/openai.yaml核對(duì)元數(shù)據(jù)skills/registry.json運(yùn)行技能編譯管線觀察校驗(yàn)輸出與生成文件刷新node skills/compile.mjs需要 Node.js 運(yùn)行環(huán)境該腳本會(huì)重新校驗(yàn)預(yù)算、frontmatter、verbs gate 并覆寫生成產(chǎn)物查看編譯產(chǎn)物proxy/internal/nativepack/native-pack.generated.json、skills/generated/claude/pack.json其余五類宿主同構(gòu)運(yùn)行選擇邏輯測(cè)試在proxy/下執(zhí)行g(shù)o test ./internal/nativepack/驗(yàn)證bugfix → surgical-patch映射與 fail-closed 行為查看注入形態(tài)的測(cè)試證據(jù)packages/cli/tests/hooks.runtime.mjs、packages/cli/tests/hooks.runtime.mjs。小結(jié)surgical-patch 的價(jià)值不在文字量——16 行正文、約 470 字節(jié)——而在它把“修 bug”這一高頻 agent 場(chǎng)景壓縮成一份可編譯、可校驗(yàn)、可注入的契約入口條件修復(fù)錯(cuò)誤行為、護(hù)欄不擴(kuò)散清理、保留周圍行為、停止條件失敗修復(fù)且回歸證明通過(guò)三者在 SKILL.md 正文、registry 元數(shù)據(jù)、編譯產(chǎn)物與 Go 運(yùn)行時(shí)測(cè)試之間四處互證。對(duì)使用方而言只需讓宿主接入 native packbugfix 類任務(wù)即自動(dòng)獲得這層最小改動(dòng)紀(jì)律對(duì)擴(kuò)展者而言task_types、prompt_byte_budget、guardrails、entry/stop_condition這組字段加上 compile 門禁就是新增一個(gè)原生工作模式的完整模板?!久赓M(fèi)下載鏈接】caveman why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman項(xiàng)目地址: https://gitcode.com/GitHub_Trending/caveman1/caveman創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考