先講結論
- Skill 就是一個資料夾,裡面放一個
SKILL.md,寫著某件事你希望它怎麼做。它需要的時候會自己拿來用。 - 觸發有兩種:打
/技能名稱直接叫,或者照平常講話,它自己判斷要不要用。兩種我都試過,都成功。 - 最重要的是
description那一行。它靠這行決定什麼時候該用,所以要把你平常會講的關鍵字寫進去。
用 Claude Code 一陣子之後,你會發現自己一直在重複交代同樣的事。
「月報要照這個格式。」「提交訊息要這樣寫。」「改完記得先跑測試。」每開一次新對話就要再講一遍。
Skill 就是用來解決這個的。把那套交代寫成一個檔案,以後它自己會拿來用。
我自己寫過一個,是教它怎麼用固定的瀏覽器設定去登入網站。沒寫之前,它常常叫我重新登入一次,我就乾脆把做法寫成技能。
這篇從頭做一個簡單的給你看。
Skill 長什麼樣子
很單純:一個資料夾,裡面有一個叫 SKILL.md 的檔案。
這個檔案分上下兩段。上面是幾行設定,講這個技能是做什麼的、什麼時候該用。下面是內容,就是你希望它照著做的步驟。
它有一個很實際的特性:內容只有在被用到的時候才會載入。所以你寫得再長、寫了再多個,平常幾乎不佔用量。
動手做一個「月報」技能
我的練習資料夾裡有一份 sales.csv,是七到九月咖啡用品的銷售金額。我希望每次做月報,格式都一樣。
先建資料夾
在專案資料夾裡跑:
mkdir -p .claude/skills/monthly-report
monthly-report 這個名字,之後就是你要打的指令。
再寫 SKILL.md
在那個資料夾裡建一個 SKILL.md,內容是這樣:
---
description: 把銷售資料整理成月報。使用者提到「月報」「每月總結」「整理銷售數字」時使用。
---
請依下列格式產生月報,存成 report.md:
1. 第一行是標題「銷售月報」,下一行寫資料涵蓋的月份範圍。
2. 用表格列出每個月的總金額,由新到舊排序。
3. 表格下方寫「賣最好的品項」,列出合計金額最高的品項與金額。
4. 最後一行寫「資料來源:」加上你讀取的檔名。
不要加任何其他說明文字。
兩條 --- 中間那段是設定。description 是整個檔案最重要的一行,Claude Code 就是靠它判斷「現在這件事,該不該用這個技能」。所以我把自己平常會講的詞都塞進去了:月報、每月總結、整理銷售數字。
叫它出來
第一種叫法,直接點名:
/monthly-report
16 秒後,它生出一個 report.md:
銷售月報
資料涵蓋範圍:7月至9月
| 月份 | 總金額 |
| --- | --- |
| 9月 | 20500 |
| 8月 | 17000 |
| 7月 | 14300 |
賣最好的品項:咖啡豆,合計 42100
資料來源:sales.csv
跟我要求的一模一樣:新的月份排前面、有最暢銷品項、最後一行標來源。數字我驗算過,沒錯。
第二種叫法比較有意思。我把剛才的結果刪掉,這次不提技能,只講人話:
幫我做一份月報
19 秒後,它交出同樣格式的月報。
我完全沒提到技能的名字。是它自己讀了 description,判斷這件事該用 monthly-report。這就是寫好 description 的價值。
(這兩次我用的是 claude -p 這種問完就結束的模式,並且允許它寫檔,指定 Sonnet 模型,只載入專案裡的設定。在對話裡直接打字也一樣。)
技能要放哪裡
放的位置決定哪裡用得到。
放在專案資料夾的 .claude/skills/ 底下,只有這個專案能用。好處是它會跟著專案走,你把專案交給同事,他也用得到。上面的月報就是這樣放。
放在你家目錄的 ~/.claude/skills/ 底下,這台電腦上所有專案都能用。每個專案都用得到的技能,就適合放這裡。
另外還有透過外掛安裝的技能,指令會長成 /外掛名稱:技能名稱。外掛怎麼裝、裝了每次對話多吃多少 token,在 Claude Code 外掛教學。
設定那一段還能寫什麼
設定欄位全部都是選填的,官方只建議一定要有 description。我覺得值得認識的是這幾個:
| 欄位 | 用途 |
|---|---|
description |
這個技能做什麼、什麼時候用 |
name |
指令名稱。沒寫就用資料夾名稱 |
disable-model-invocation |
設成 true,它就不會自己拿來用,只有你打 /名稱 才執行 |
allowed-tools |
執行這個技能時,哪些工具可以不用問你 |
disable-model-invocation 很適合用在「部署」這種你不希望它自作主張的事情上。
寫的時候有兩個地雷,官方文件特別提醒過:
第一,檔案的第一行一定要是 ---。前面多一個空行,整段設定就會被當成普通內容。
第二,欄位名稱要一字不差,連字號也是。打錯的欄位會被直接忽略,而且不會跳任何錯誤。你會以為設好了,其實沒有。
讓技能吃參數
內容裡寫 $ARGUMENTS,你叫它的時候接在名稱後面的字就會被填進去。官方的例子是修問題單:
---
name: fix-issue
description: Fix a GitHub issue
disable-model-invocation: true
---
Fix GitHub issue $ARGUMENTS following our coding standards.
打 /fix-issue 123,它收到的就是「Fix GitHub issue 123 following our coding standards.」
它本來就附了一些
不用自己寫,Claude Code 一裝好就有幾個內建的技能,官方舉的例子有 /doctor、/code-review、/debug、/loop。
想知道現在有哪些能用,在對話裡只打一個 /,清單就出來了。
跟 CLAUDE.md 怎麼分工
這兩個很容易搞混。我的分法是:
CLAUDE.md 每次啟動都會整份讀進來,所以只放「不管做什麼都要遵守」的事,例如回答一律用繁體中文。
Skill 是用到才讀,所以放「做某件事的時候才需要」的做法,例如月報格式。
官方的建議也差不多:當 CLAUDE.md 裡某一段已經長成一套流程,就把它搬出去變成 Skill。
如果是「每次都一定要做、不能靠它記得」的事,例如改完檔案一定要跑格式化、絕對不能動 .env,那要用 hooks,在固定的時間點直接執行指令。我實測過擋下改檔,也測出一個漏洞,在 Claude Code Hooks 教學。
至於以前放在 .claude/commands/ 的自訂指令,現在已經併進 Skills 了。舊的照樣能用,新的就直接寫成 Skill。
另一個常跟 Skill 搞混的是子代理(subagent)。Skill 是教主對話怎麼做一件事;子代理是把一件事整個交給另一個 Claude,在它自己的空間裡做完,只把結果帶回來,還可以限制它能用的工具、指定比較便宜的模型。我做了一個核對收據的子代理實際跑過,在 Claude Code 子代理教學。
技能不聽話的時候
它不用我的技能。 先看 description 裡有沒有你平常會講的字。再問它「你有哪些技能可以用」,確認它有被載入。換個說法試試。都不行就直接打 /技能名稱。
它太愛用了,不該用的時候也用。 把 description 寫具體一點。或者加上 disable-model-invocation: true,改成只能你手動叫。
一開始有照做,做到後面就走樣。 這個比較隱晦。技能的內容是在被叫出來的那一刻加進對話的,之後不會重讀。對話一長、被自動濃縮過之後,可能只剩下技能的前半段。所以最重要的要求要寫在 SKILL.md 最上面,必要時再叫它一次。
技能寫多了會不會拖慢它?平常只會載入每個技能的名稱和描述,內容用到才讀。真的很多的時候,打 /doctor 可以看技能清單佔了多少空間。
常見問題
Skill 和 CLAUDE.md 差在哪?
CLAUDE.md 每次啟動都整份載入,適合放永遠要遵守的規矩。Skill 用到才載入,適合放某件特定工作的做法。
以前的自訂指令(.claude/commands)還能用嗎?
可以,舊檔案照常運作。官方已經把自訂指令併進 Skills,新的建議直接寫成 Skill。
技能沒有被觸發怎麼辦?
先看 description 有沒有你平常會講的字,再問它「你有哪些技能可以用」確認有載入。都不行就直接打 /技能名稱。
技能名稱可以用中文嗎?
我測的是英文小寫加連字號。內容和 description 寫中文沒問題,用中文句子也觸發得了。資料夾名稱會變成你要打的指令,建議用英文。
這篇怎麼查證的
文中的指令在 2026/10/12 實際執行過(macOS 27.0、Claude Code 2.1.280;欄位說明與疑難排解依官方文件)。價格與方案以官方頁面為準,工具改版後內容可能過期。