大家好,我是程序員魚(yú)皮。
最近 Anthropic 官方發(fā)了一篇博文,標(biāo)題叫《Steering Claude Code》,把 Claude Code 的整套配置體系從底層邏輯到使用場(chǎng)景講了個(gè)透。
由于是官方團(tuán)隊(duì)親自寫的,相當(dāng)于出題人告訴你標(biāo)準(zhǔn)答案,因此整篇文章的干貨價(jià)值非常高。
今天我結(jié)合官方內(nèi)容加上我自己使用 Claude Code 的經(jīng)驗(yàn),給大家做一個(gè)完整的中文解讀。
原文指路:https://claude.com/blog/steering-claude-code-skills-hooks-rules-subagents-and-more
Claude Code 的調(diào)教方式共有 7 種:CLAUDE.md 文件、Rules 規(guī)則、Skills 技能、Subagents 子智能體、Hooks 鉤子、Output Styles 輸出風(fēng)格,以及 Append System Prompt 系統(tǒng)提示詞追加。
每種方式的核心區(qū)別在于 3 點(diǎn):
什么時(shí)候加載到上下文
長(zhǎng)對(duì)話壓縮時(shí)會(huì)不會(huì)被丟掉
占用多少 token
如果你把指令放錯(cuò)了地方,AI 可能直接忽略掉你的指令,白白浪費(fèi) tokens。
接下來(lái)咱們挨個(gè)兒學(xué)習(xí)。
![]()
Claude Code 七種調(diào)教方式總覽 1、CLAUDE.md - AI 的項(xiàng)目手冊(cè)
CLAUDE.md 是放在項(xiàng)目根目錄的 Markdown 文件,會(huì)話一開(kāi)始就加載,全程常駐在上下文中。
那 CLAUDE.md 里適合放什么內(nèi)容呢?
像構(gòu)建命令、目錄結(jié)構(gòu)、代碼規(guī)范、團(tuán)隊(duì)約定這些 AI 需要 時(shí)刻記住 的事實(shí)性信息。
我在自己的 中多次強(qiáng)調(diào),CLAUDE.md 就像給新同事寫的項(xiàng)目文檔。你不需要每次都跟 AI 解釋項(xiàng)目用的是什么技術(shù)、有什么規(guī)矩,只要寫一次,之后都會(huì)生效。
CLAUDE.md 的加載分兩種方式。
根目錄的 CLAUDE.md 是始終加載的,壓縮對(duì)話時(shí)也會(huì)重新讀取,不會(huì)丟失。
子目錄的 CLAUDE.md 比如 app/api/CLAUDE.md,只有當(dāng) Claude 讀取該目錄下的文件時(shí)才會(huì)加載,適合放只跟特定模塊相關(guān)的約定。
![]()
CLAUDE.md 加載機(jī)制
官方明確建議,CLAUDE.md 盡量控制在 200 行以內(nèi)。
原因很簡(jiǎn)單,CLAUDE.md 的每一行都占 token,不管當(dāng)前任務(wù)會(huì)不會(huì)用到。
如果你塞了 500 行進(jìn)去,哪怕做一個(gè)簡(jiǎn)單的前端樣式調(diào)整,也得帶著那些后端部署規(guī)范一起加載,純屬浪費(fèi)。
我自己就踩過(guò)這個(gè)坑,之前把所有東西都往 CLAUDE.md 里堆,后來(lái)發(fā)現(xiàn) AI 的指令遵循度明顯下降了,特別是在長(zhǎng)對(duì)話里。后來(lái)精簡(jiǎn)了一波,把流程性的內(nèi)容移到了 Skills 里,效果立竿見(jiàn)影。
所以記住一個(gè)原則就好:CLAUDE.md 只放「事實(shí)」,不放「流程」。
![]()
事實(shí)和流程對(duì)比
構(gòu)建命令、技術(shù)棧、目錄結(jié)構(gòu)、命名規(guī)范是事實(shí)。部署流程、代碼審查清單、發(fā)布步驟是流程,應(yīng)該封裝為 Skills。
2、Rules 規(guī)則 - 路徑級(jí)的精準(zhǔn)約束
Rules 是放在 .claude/rules/ 目錄下的 Markdown 文件,用來(lái)給 Claude 設(shè)定具體的約束或編碼規(guī)范。
它最強(qiáng)大的地方在于支持路徑作用域。你在規(guī)則文件的頭部加一個(gè) paths 字段,就能讓這條規(guī)則只在 Claude 讀取特定路徑下的文件時(shí)才生效。
比如我有一條規(guī)則是「所有 API 處理器必須使用 Zod 進(jìn)行輸入驗(yàn)證」,我把它的作用域設(shè)為 src/api/**。這樣當(dāng)我只是在改前端頁(yè)面的時(shí)候,這條規(guī)則壓根不會(huì)加載,也就不浪費(fèi) token。
---
paths:
- "src/api/**"
- "**/*.handler.ts"
---
所有 API 處理器必須使用 Zod 進(jìn)行輸入驗(yàn)證。
我自己在項(xiàng)目中就是這么用的,把數(shù)據(jù)庫(kù)相關(guān)的規(guī)范限定在 src/db/** 下面,前端相關(guān)的限定在 src/components/** 下面,各管各的。
什么時(shí)候該用 Rule,而不是子目錄 CLAUDE.md 呢?
答案是:當(dāng)一條規(guī)范需要跨目錄生效的時(shí)候。
比如所有 .test.ts 文件都要遵守某個(gè)測(cè)試規(guī)則,用路徑作用域的 Rule 更合適。子目錄 CLAUDE.md 只能管它所在那個(gè)目錄下面的文件。
3、Skills 技能 - 按需加載的工作流
Skills 放在 .claude/skills/ 目錄下,每個(gè)技能是一個(gè)文件夾,核心是一個(gè) SKILL.md 描述文件。
Skills 的漸進(jìn)式加載設(shè)計(jì)非常優(yōu)雅。會(huì)話開(kāi)始時(shí),Claude 只會(huì)讀取每個(gè) Skill 的名稱和簡(jiǎn)短描述,完整的技能內(nèi)容只有在被觸發(fā)時(shí)才加載到上下文中。
![]()
Skills漸進(jìn)式加載設(shè)計(jì)
這意味著你可以定義幾十個(gè) Skills,但平時(shí)它們幾乎不占 token。只有當(dāng)你主動(dòng)調(diào)用(比如輸入 /code-review),或者 AI 自動(dòng)匹配到當(dāng)前任務(wù)需要某個(gè)技能時(shí),完整的指令內(nèi)容才會(huì)加載進(jìn)來(lái)。
我在 .claude/skills/ 下面放了部署流程、代碼審查清單、創(chuàng)建新組件的標(biāo)準(zhǔn)步驟等等。這些流程性的東西如果全寫在 CLAUDE.md 里,哪怕你只是說(shuō)個(gè)「你好」,就得白白浪費(fèi)不知道多少 tokens。放在 Skills 里就不一樣了,需要時(shí)才加載。
還有個(gè)很重要的細(xì)節(jié)。壓縮對(duì)話時(shí),已觸發(fā)的 Skills 會(huì)按總預(yù)算重新注入,如果預(yù)算不夠,最早觸發(fā)的技能會(huì)被優(yōu)先丟棄。所以一次會(huì)話里別觸發(fā)太多 Skills,聚焦當(dāng)前任務(wù)最重要。
4、Subagents 子智能體 - 隔離的獨(dú)立助手
Subagents 放在 .claude/agents/ 目錄下,每個(gè)文件定義一個(gè)獨(dú)立的 AI 助手。
跟 Skills 最大的區(qū)別在于,Subagent 運(yùn)行在自己獨(dú)立的上下文窗口里,只有最終結(jié)果會(huì)返回給主會(huì)話。所有中間過(guò)程完全不占用你主對(duì)話的上下文空間。
![]()
Subagents 隔離上下文運(yùn)行機(jī)制
什么場(chǎng)景適合用 Subagent 呢?
比如深度搜索代碼庫(kù)找某個(gè) Bug 的根因、分析日志文件定位性能瓶頸、做依賴審計(jì)檢查哪些包有安全漏洞。這類任務(wù)的中間過(guò)程可能產(chǎn)生幾萬(wàn) token 的內(nèi)容,如果都堆在主對(duì)話里,很快就會(huì)把上下文撐爆。
Subagent 還支持嵌套,最多可以嵌套 5 層深,配合動(dòng)態(tài)工作流可以編排幾十甚至上百個(gè)后臺(tái) Agent 并行工作。
我之前用 Claude Code 的 /batch 命令批量遷移 API 版本,本質(zhì)上就是在用 Subagent。它會(huì)自動(dòng)把任務(wù)拆成十幾個(gè)子任務(wù),每個(gè)在獨(dú)立工作樹(shù)中運(yùn)行,互不干擾。
那 Skills 和 Subagents 怎么選呢?
很簡(jiǎn)單,如果你想看到 AI 的執(zhí)行過(guò)程并隨時(shí)干預(yù),用 Skill。如果你只關(guān)心最終結(jié)果、不想被中間信息干擾,用 Subagent。
5、Hooks 鉤子 - 確定性的自動(dòng)化
Hooks 是 7 種方式里最特殊的一個(gè)。
前面講的 CLAUDE.md、Rules、Skills 本質(zhì)上都是給 AI 的「建議」,AI 可能遵循也可能不遵循,特別是在長(zhǎng)會(huì)話或復(fù)雜場(chǎng)景下。
但 Hooks 不一樣,它不是指令,而是自動(dòng)化代碼。到了觸發(fā)條件就一定會(huì)執(zhí)行,不需要 AI 來(lái)決定要不要做。
Hooks 通過(guò) settings.json 注冊(cè),綁定到 Claude Code 生命周期中的特定事件,比如工具調(diào)用前(PreToolUse)、工具調(diào)用后(PostToolUse)、壓縮對(duì)話前(PreCompact)等等。
![]()
Hooks生命周期事件觸發(fā)
最經(jīng)典的用法就是:每次編輯文件后自動(dòng)跑 Prettier 格式化。
這件事如果寫在 CLAUDE.md 里,AI 大概率會(huì)遵循,但也可能會(huì)忘掉。
用 Hook 就不存在這個(gè)問(wèn)題,文件一編輯,Prettier 就自動(dòng)執(zhí)行,跟 AI 模型本身無(wú)關(guān)。
而且 Hook 的上下文成本幾乎為零,因?yàn)榕渲眯畔焊辉谥魃舷挛睦铩?/p>
「永遠(yuǎn)不要做 X」靠指令是不夠的
這是官方博文里我覺(jué)得最值得記住的一個(gè)觀點(diǎn)。
你在 CLAUDE.md 里寫「永遠(yuǎn)不要?jiǎng)h除數(shù)據(jù)庫(kù)遷移文件」,Claude 大部分時(shí)候確實(shí)會(huì)遵守。但是在長(zhǎng)會(huì)話、上下文壓縮、或者遇到某個(gè)文件里的 prompt 注入時(shí),AI 是有可能違反這條指令的。
真正的安全防線需要 Hook + 權(quán)限 雙重保障。你可以用 PreToolUse Hook 檢查每一次工具調(diào)用,一旦發(fā)現(xiàn)要?jiǎng)h除數(shù)據(jù)庫(kù)遷移文件,就直接 exit code 2 攔截掉。再配合 Managed Settings 從組織層面強(qiáng)制禁止某些操作,這樣才能真正做到萬(wàn)無(wú)一失。
這個(gè)思路跟我之前分析 Claude Code 源碼時(shí)看到的 fail-closed 設(shè)計(jì)是類似的。Claude Code 內(nèi)部的工具系統(tǒng)默認(rèn)把所有工具當(dāng)作「危險(xiǎn)操作」處理,除非工具明確聲明自己是只讀的。
安全這件事,不能指望 AI 的自覺(jué)性。
![]()
指令和鉤子-安全防線對(duì)比 6、Output Styles 和 Append System Prompt
最后兩種方式我用的相對(duì)較少,所以放在一起講。
Output Styles 是用來(lái)定義 Claude 輸出風(fēng)格和行為模式的。它放在 .claude/output-styles/ 目錄下,會(huì)被注入到系統(tǒng)提示詞中,永遠(yuǎn)不會(huì)被壓縮丟掉。
但有一點(diǎn)要特別注意,自定義輸出風(fēng)格會(huì)替換掉 Claude Code 的默認(rèn)系統(tǒng)提示詞。
也就是說(shuō),Claude Code 原本內(nèi)置的那些關(guān)鍵行為,比如怎么確定修改范圍、什么時(shí)候加注釋、遇到安全問(wèn)題怎么處理,自定義之后就全沒(méi)了。
所以官方的建議是先看看內(nèi)置的幾種風(fēng)格夠不夠用,別輕易去自定義。目前內(nèi)置了 Proactive 主動(dòng)執(zhí)行、Explanatory 詳細(xì)解釋、Learning 協(xié)作學(xué)習(xí)這 3 種模式,基本覆蓋了大多數(shù)使用場(chǎng)景。
![]()
Append System Prompt 是另一種調(diào)整 Claude 行為的方式,它允許你在不修改任何文件的情況下,臨時(shí)給 Claude 追加一段指令。
具體用法是通過(guò) CLI 的 --append-system-prompt 參數(shù)傳入,只對(duì)當(dāng)次調(diào)用生效。
跟 Output Style 的區(qū)別在于,它是追加而非替換,不會(huì)影響 Claude Code 的默認(rèn)行為。適合臨時(shí)調(diào)整語(yǔ)氣、輸出格式這些輕量需求。
![]()
不過(guò)官方也提到了一個(gè)限制,追加的指令越多,AI 對(duì)每條指令的遵循度就越低,特別是指令之間有沖突的時(shí)候。
什么時(shí)候該用什么?
一口氣看完 7 種方式,你可能會(huì)有點(diǎn)蒙。
沒(méi)關(guān)系,官方給了幾條判斷標(biāo)準(zhǔn),有個(gè)印象就行。
![]()
配置方式選擇決策流程
第一,CLAUDE.md 放「事實(shí)」,Skills 放「流程」。
如果你的 CLAUDE.md 里有超過(guò) 30 行的步驟性內(nèi)容,比如部署 runbook、安全審查清單,就應(yīng)該把它移到 .claude/skills/ 里面去。
第二,「每次 X 后做 Y」這類需求應(yīng)該用 Hook,不要寫在指令里。
比如每次編輯后跑 Prettier、提交前檢查 lint、完成任務(wù)后發(fā) Slack 通知,這些都不應(yīng)該依賴 AI 的記憶力。模型選擇做某件事,和某件事自動(dòng)發(fā)生,這完全是兩回事。
第三,「絕對(duì)不能做 X」這種硬性要求需要 Hook + 權(quán)限雙保險(xiǎn)。
光靠指令只能做到 AI 大部分時(shí)候遵守,真正的安全邊界必須用確定性機(jī)制來(lái)保證。這跟寫代碼一個(gè)道理,你不會(huì)靠注釋來(lái)防止某個(gè)函數(shù)被錯(cuò)誤調(diào)用,你會(huì)用類型系統(tǒng)和權(quán)限檢查來(lái)兜底。
我的實(shí)踐經(jīng)驗(yàn)
再分享幾個(gè)我自己配置 Claude Code 的心得。
首先是 CLAUDE.md 要有「索引」思維。不要把它當(dāng)百科全書(shū),把它當(dāng)目錄就好。告訴 Claude 項(xiàng)目的基本信息,然后用指針指向更詳細(xì)的文件。
比如寫上:前端組件規(guī)范見(jiàn) docs/FRONTEND.md、部署流程用 /deploy 技能。
這樣 CLAUDE.md 保持精簡(jiǎn),Claude 需要詳細(xì)信息的時(shí)候會(huì)自己去讀對(duì)應(yīng)文件。
![]()
漸進(jìn)式披露按需加載
然后是 Skills,我覺(jué)得這是目前最被低估的功能。我現(xiàn)在把很多重復(fù)性的工作流程都封裝成了 Skill,什么 AI 熱點(diǎn)搜集、視頻動(dòng)畫制作、圖文創(chuàng)作工作流等等。
Subagent 我主要用來(lái)做調(diào)研型任務(wù)。比如:幫我調(diào)研一下這個(gè)庫(kù)有沒(méi)有替代方案、搜集信息、分析一下這個(gè) Bug 的原因,這類任務(wù)中間過(guò)程很長(zhǎng),但最終只需要一個(gè)結(jié)論,用 Subagent 可以讓主對(duì)話保持干凈。不過(guò)很多 AI 工具現(xiàn)在都能自動(dòng)創(chuàng)建和管理 Subagent 了。
最后嗶嗶
OK 就分享到這里,你會(huì)發(fā)現(xiàn) Claude Code 的配置體系設(shè)計(jì)得很講究。事實(shí)和流程分離、按需加載降低成本、確定性保障優(yōu)于概率性指令、隔離執(zhí)行避免上下文污染。這些設(shè)計(jì)思想不管你是想深度使用 Claude Code,還是想自己搭建 AI Agent 系統(tǒng),都值得好好學(xué)一學(xué)。
本文會(huì)收錄到我免費(fèi)開(kāi)源的 ,上千張圖、幾十萬(wàn)字,帶你從 0 開(kāi)始快速學(xué)會(huì) AI 編程,做出自己的產(chǎn)品、跑通變現(xiàn)全流程,一次拿捏。
![]()
我是魚(yú)皮,持續(xù)分享 AI 編程干貨。覺(jué)得有用的話記得點(diǎn)贊收藏和關(guān)注~
也歡迎在評(píng)論區(qū)聊聊:你的 Claude Code 配置是怎么組織的?有沒(méi)有什么好用的 Skills 或 Hooks 推薦?
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.