如何寫一個自己的 skill

1. 前言

為什麼同樣用 Claude,你的效率差這麼多,本文將帶大家了解 Skill。不管你是什麼語言,沒寫過的情況下,你都可以學會它

  1. 背景

如果你用過 Claude Code,大概率遇過這樣的情境:每次讓 Claude Code 寫程式、想讓部分程式碼風格保持一致時,你會告訴它專案的編碼風格,或者提供一段範例程式碼,或者指定某個檔案;

也就是重複描述某一個具體流程。為了解決這個問題,就要引出今天要說的 Skill

核心速覽: Skill 的本質,就是在一個資料夾裡放一個 SKILL.md 檔案。透過編寫重複的指令,Claude 就會辨識這個檔案,執行特定功能

  1. 初始 Skill

在開始討論 Skill 之前,我們要先區分一件事:它和 CLAUDE.md 的差別是什麼。CLAUDE.md 裡的內容每次對話都會載入,而 Skill 只有在需要時才載入,不用的時候幾乎不佔用上下文。

Skill 遵循的規範:(Specification - Agent Skills)。

3.1 Skill 的存放位置

位置路徑適用範圍

個人 ~/.claude/skills/<name>/SKILL.md 你所有的專案
專案 .claude/skills/<name>/SKILL.md 僅目前專案
外掛 <plugin>/skills/<name>/SKILL.md 啟用了該外掛的地方

3.2 一個最小的 Skill

接下來我們就以專案層級的 Skill 來說明如何實作。這也是你看完本文後能快速落地的方案。聰明的你,應該已經知道如何萃取 Skill,節省自己的 token,還能在履歷上大吹特吹,自研 xxxSkill。

這是我的路徑:.claude\skills\my-skill\SKILL.md

my-skill/
└── SKILL.md

SKILL.md 由兩部分組成——YAML 頭部(frontmatter)和 Markdown 內文:


name: hello-world
description: 一個範例 skill,用於示範基本結構

當使用者打招呼時,用中文回覆,並附上一個冷笑話。

建立之後,你可以透過 /hello-world 手動呼叫,也可以讓 Claude 在匹配到 description 時自動呼叫。

你執行時,在對話框輸入 /,就可以看到下圖:

image.png

注意: 如果沒有出現,記得先完成上面的步驟,然後重新啟動你的 Claude

最終執行後,我們會得到:

image.png

常用 frontmatter 欄位速查:

欄位|作用
name|名稱,也是 /hello-world 的名字
description最重要的欄位,Claude 會根據它決定是否載入
disable-model-invocation|設為 true 則只能手動呼叫,Claude 不會自動觸發
allowed-tools|該 skill 啟用時允許 Claude 免確認使用的工具
context|設為 fork 可在子代理中隔離執行

具體內容可以到上面的規範中查詢。值得注意的是,description 盡量要寫得通俗易懂;上圖的內容,你可以再回頭看看,就知道指的是哪裡。

  1. 如何高效寫出一個 Skill

掌握基本結構之後,關鍵在於寫得「好用」。以下是從官方文件和實作中整理出的核心要點:

第一,description 是觸發器,不是摘要。

Claude 判斷是否載入一個 Skill,完全依賴 name + description。不要寫「這是一個幫助生成程式碼的工具」,而要寫「生成 Vue 3 元件。當使用者要求建立元件、頁面或 Vue 檔案時使用」。把觸發詞和使用情境寫進去,Claude 才能準確匹配。說白了,把 Claude 當成你的合夥人,他要讀懂這份說明書,才能理解你的意思。

第二,指令用命令語氣,並按步驟編號。

寫「提取顏色主題」,不要寫「你應該提取顏色主題」。

第三,SKILL.md 控制在 500 行以內。

當你的專案特別龐大時,內容也會越來越多,我們可以把詳細的參考資料、模板、範例拆到同目錄下的獨立檔案裡,再在 SKILL.md 中引用它們:

my-skill/
├── SKILL.md # 主指令(必須)
├── template.vue # 元件模板
├── examples/
│ └── sample.vue # 範例輸出
└── scripts/
└── validate.sh # 輔助腳本

SKILL.md 中這樣引用:

參考資料

第四,善用動態注入。

!command 語法可以在 skill 載入前執行 shell 命令,並把輸出注入到提示詞中:


name: pr-review
description: 審查目前 PR 的程式碼變更

目前變更

!git diff --stat

變更詳情

!git diff

請審查以上程式碼變更,關注潛在的 bug 和規範問題。

Claude 看到的不是命令本身,而是命令的輸出結果。

第五,使用 $ARGUMENTS 接收參數。


name: fix-issue
description: 修復 GitHub issue
disable-model-invocation: true

修復 GitHub issue #$ARGUMENTS:

  1. 閱讀 issue 描述
  2. 實作修復
  3. 撰寫測試
  4. 建立 commit

呼叫 /fix-issue 42 時,$ARGUMENTS 會被替換成 42。也支援 $0$1 依位置取參數。

編號可以讓 Claude 按順序執行,減少遺漏。

第六,區分「誰來呼叫」。

有副作用的操作(部署、發送訊息)加上 disable-model-invocation: true,避免 Claude 自作主張。

  1. 總結

建議從你日常最重複的流程開始,把它封裝成第一個 Skill。寫好之後提交到專案的 .claude/skills/ 裡,這樣團隊成員都能受益。(前提不是古法程式設計)

注意:description 要寫成觸發條件而非摘要;指令要用命令語氣並編號;大檔案拆分引用;善用動態注入和參數傳遞。


原文出處:https://juejin.cn/post/7629641479674478642


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝3   💬3   ❤️1
198
🥈
我愛JS
💬2  
7
🥉
Gigi
2
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登