每次開新的 Claude Code session,我都在重複同樣的說明:「寫完跑 lint、commit 格式用這個、deploy 的步驟是這樣」。寫在 CLAUDE.md 可以,但每個專案的流程不同,CLAUDE.md 很快就變成一大篇。
Skills 解決的就是這個問題。把每個工作流程寫成一個獨立的檔案,只有用到的時候才載入。就像給 Claude 一本工作手冊,但只翻到需要的那一頁。
這篇你會學到
- Skills 是什麼、跟 CLAUDE.md 有什麼不同
- 怎麼寫你的第一個 Skill
- 可以排列組合的四種模式
- 控制誰可以觸發:你、Claude、或兩者都可以
Skills vs CLAUDE.md
CLAUDE.md 的內容每次對話都會載入。寫得越多,Claude 每次啟動要讀的越多,你的 token 就花得越多。
Skills 只有被觸發時才載入。你可以寫二十個 Skill,如果這次對話只用到兩個,就只載入兩個。
簡單判斷規則:
- 全專案永遠適用的規則(命名慣例、架構決定)→ 寫 CLAUDE.md
- 特定情境才需要的流程(deploy、commit、code review)→ 寫 Skill
寫你的第一個 Skill
建一個資料夾和一個檔案:
mkdir -p .claude/skills/deploy && touch .claude/skills/deploy/SKILL.md
寫入內容:--- name: deploy description: Deploy to production disable-model-invocation: true --- Deploy 步驟: 1. 跑 test suite 2. Build 專案 3. Push 到 production 4. 確認 deploy 成功
現在你可以輸入 /deploy 來觸發它。disable-model-invocation: true 代表只有你可以觸發,Claude 不會自己決定要不要 deploy。
💡 默認情況下你和 Claude 都能觸發 Skill。有副作用的操作(deploy、發訊息、刪除)建議加
disable-model-invocation: true。
四種實用模式
參考型: 把知識教給 Claude,它自己決定什麼時候用。
API 設計慣例、錆誤處理樣式、編碼風格。寫在 description 裡讓 Claude 知道什麼時候適用。
任務型: 你手動觸發,給 Claude 明確步驟。
deploy、commit、code review、建新元件。加disable-model-invocation: true。
動態注入: Skill 裡嵌 shell 指令,執行前先跑指令拿即時資料。!`git status --short`會在 Skill 載入前執行,輸出替換進 prompt。Claude 看到的是結果不是指令。
子 agent 執行: 加context: fork讓 Skill 在獨立環境跑,不影響你的對話。
適合耗時的研究任務。加agent: Explore讓它用唯讀工具探索 codebase。
Skill 放哪裡
~/.claude/skills/— 你所有專案都能用.claude/skills/— 只有這個專案能用,可以 commit 進 git 讓團隊共用
同名時個人版覆蓋專案版。修改檔案後不用重啟 Claude Code,它會自動偵測變更。
給工具開權限
在 frontmatter 加 allowed-tools 可以讓 Claude 執行特定工具時不用問你:
--- name: commit description: Stage and commit changes disable-model-invocation: true allowed-tools: Bash(git add *) Bash(git commit *) Bash(git status *) ---
這不是限制工具,是免確認。其他工具仍然可用,只是會問你。
每次你發現自己在重複貼同一段指示給 Claude,那就該寫成一個 Skill 了。