Skill Creator Advanced
此 skill 的目標是把「做 skill」變成可重複執行的工程流程,而不是一次性的 prompt 雜談。
它同時提供:
- 可操作的流程:從組合定位、命名、metadata、驗證、evals、benchmark、打包到迭代
- 可重用的腳本:初始化、格式檢查、驗證、測試計畫產生、workspace 準備、benchmark 彙整、regression gate 檢查、打包
- 可拆分的參考文件:把長內容放到 references/,維持 progressive disclosure
- 輕量 review viewer:把 with-skill / baseline 結果整理成可檢閱的 HTML
快速開始(你只要做一個新 skill)
- 先從現有對話、repo、範例任務整理 2-3 個 use cases,不夠再補問。
- 先確認它是否真的是「一個主要工作」;若同時包含研究、分析、寫作、發信、排版等多種交付物,先拆 skill 或定義 handoff。
- 為每個 use case 寫 trigger 語句、必要輸入、成功輸出與 done looks like。
- 建立 skill 資料夾:
python scripts/init_skill_advanced.py <skill-name> --path <output-dir>
- 先決定這個 skill 是
router、executor、ops還是utility,再補完SKILL.md的決策邊界、output contract、default follow-through policy、few-shot 與 metadata surface。 - 若 skill 會包工具、MCP 或 function calling,先檢查 tool/function 名稱、參數描述、enum 與 active tool set 是否足夠清楚。
- 做格式、相容性與引用檢查:
python scripts/format_check.py <path/to/skill>
python scripts/quick_validate.py <path/to/skill>
python scripts/audit_openclaw_frontmatter.py
python scripts/audit_skill_references.py
- 規劃真實測試案例,必要時產生測試計畫:
python scripts/generate_test_plan.py <path/to/skill> --out references/test_plan.md
- 準備 eval workspace,讓 with-skill / baseline 能沿用固定目錄結構:
python scripts/prepare_eval_workspace.py <path/to/skill>
- 打包成
.skill:
python scripts/package_skill.py <path/to/skill> <output-dir>
- 若要優化 description 的觸發品質,另外準備 trigger eval set,再跑:
python scripts/run_eval.py --eval-set <path/to/trigger-evals.json> --skill-path <path/to/skill> --model <model-id>
python scripts/run_loop.py --eval-set <path/to/trigger-evals.json> --skill-path <path/to/skill> --model <model-id> --apply-best
操作方式
當使用者要建立或改版 skill 時,請用下列順序推進;可以跳步,但要明確說明原因。
- Phase -1:Portfolio & competition
- 先做 portfolio architecture audit:判斷它是
router、executor、ops還是utility,不要在命名之前跳過 archetype。 - 先問清楚這個 skill 的 primary job 是什麼;一個 skill 預設只負責一件主要工作,避免同時承擔多種不相干的交付物。
- 列出上游與下游 handoff skill,確認它不會和既有 repo 自己打架。
- 再做 competitive positioning audit:列出 repo 內最相近的 3 個技能與 repo 外最相近的公開技能,說清楚它為什麼不會被取代。
- 若只是一次性流程、明顯被現有 skill 覆蓋,或其實應拆成多個 skill,直接指出不值得新增或應先重切 scope。
- Phase 0:Task extraction
- 先看對話歷史、現有檔案、既有流程,再決定要不要追問。
- 用使用者熟悉的術語溝通;如果對方不熟技術名詞,不要把 jargon 當前提。
- Phase 1:Use cases & boundaries
- 先拿到 2-3 個具體 use cases。
- 每個 use case 至少要有:trigger 語句、必要輸入、主要步驟、輸出、done looks like。
- 先定義 neighboring skills、negative triggers 與 handoff 規則,避免公開後互搶 query。
- 若 2-3 個 use cases 的輸入、步驟、輸出差異過大,優先拆 skill,而不是用一份超寬 description 硬包。
- 若規則來自事故復盤或踩坑心得,先抽出它依賴的條件:實體載體、受眾、工具鏈、輸入成熟度與失敗模式;不要把單次經驗直接寫成無條件真理。
- Phase 2:Naming / description / metadata surface
- 先做 discoverability-first naming audit:檢查 slug 長度、slash command 長度、description 長度、trigger phrase、boundary 與內部名詞比例。
name優先服務 discoverability,不要把內部實作細節放進主名稱。description要寫成 decision boundary,不要寫成能力介紹;固定回答:做什麼、何時用、何時不用、成功輸出是什麼。description優先放真實 trigger phrases、場景、檔案類型與 deliverable 名稱;不要把 marketing 式優點當主要內容。metadata、homepage、license、OpenClaw 欄位與安裝敘事要一致,不能 repo 內部通過但公開頁面失真。
- Phase 3:SKILL.md architecture
- 決定哪些內容要放
scripts/、references/、assets/。 - 核心流程留在
SKILL.md,細節與變體移到references/。 - 優先寫會改變行為的指令,不要解釋模型本來就知道的常識。
- 步驟預設用祈使句撰寫,並明寫每一步的 input、action、output 與驗證點;不要只寫空泛原則。
- 內文優先分成語意區塊,例如
<role>、<decision_boundary>、<workflow>、<output_contract>、<tool_rules>、<default_follow_through_policy>、<examples>。 output contract要明訂段落順序、欄位、格式、長度、是否允許自由加段,以及「什麼算完成」。- 當輸出品質依賴格式或風格時,把模板與 worked examples / few-shot 放進 skill 或 references,不要全部塞進 system prompt。
default follow-through policy要明寫:哪些低風險動作可直接做、哪些有外部副作用的行為必須先問、哪些情況要停止並回報。- 把 postmortem 萃取出的規則寫成「條件 -> 預設動作 -> 例外 -> 驗證點」;凡是依賴投影環境、列印需求、既有 API 或狀態機的規則,都要把觸發條件寫明。
- Phase 4:Compatibility / trust / install audit
- 先跑
format_check.py與quick_validate.py修掉結構問題。 - 再跑
audit_openclaw_frontmatter.py與audit_skill_references.py,確認 frontmatter surface 與單獨打包後的本地路徑都可用。 - 抽查安裝、憑證、環境變數、持久化與權限敘事是否一致,避免公開頁的 trust signal 掉分。
- 把
SKILL.md、scripts/、references/中提到的 binary、env、config path、install path、secret、persistence 行為都抽出來比對。 - 若 skill 依賴 tools / MCP / function calling,額外檢查 function 名稱、參數描述、enum、required 欄位與 active tool set;tool schema 本身也是 routing signal,不只是技術介面。
- Phase 5:Trigger & overlap evals
- Triggering tests:應觸發、近義改寫、near-miss、不應觸發。
- Multilingual tests:至少考慮
zh、en、mixed、縮寫/俗稱。 - Skill overlap tests:列出容易混淆的鄰近 skill 與 negative triggers。
- 額外測同義改寫、錯誤競品、跨語言、縮寫、檔案型態詞與上下游 handoff。
- 測試用語要接近真實使用者會講的話,不要只測教科書式 prompt。
- 若 skill 內有「預設採用某種設計/工具路線」的規則,必測例外情境,例如高亮 LED 導致暗色可行、只有列印 handout、或工具不足必須停止;避免把預設值誤用成硬編碼。
- 最後輸出
hit@1、hit@3、false positive與 neighbor confusion matrix。
- Phase 6:Functional benchmark / ROI
- Functional tests:Given/When/Then,至少含 happy path、edge case、failure mode。
- 把核准過的測試 prompt 寫進
assets/evals/evals.json。 - 先建立
<skill-name>-workspace/iteration-N/,每個 eval 各自有with_skill/與 baseline 目錄。 - 若環境支援 subagents 或平行 workers,應在同一輪啟動 with-skill 與 baseline/old-skill;不支援時可序列執行,但保留相同目錄結構。
- 若 workflow 很長或包含不同性質的工作,優先拆成多回合或多階段:先分析缺口,再蒐集資料,再產出草稿,最後做 QA / 格式化;不要把所有要求壓成單一巨型 prompt。
- Performance comparison:和 baseline 比較輪次、tool calls、失敗率、結果品質。
- ROI comparison:確認提升是否值得額外的 token、時間與維護成本。
- 執行後用
scripts/aggregate_benchmark.py彙整 benchmark,再用scripts/generate_review.py產生 review viewer。 - 用
scripts/check_regression_gates.py檢查是否達到發版門檻。
- Phase 7:Publish surface / registry readiness
- 用
package_skill.py產生.skill。 - 做 publish surface audit:檢查 README、GitHub About、topics、homepage、license、release notes、registry 說明是否一致。
- 分享時,README、安裝說明、release notes 應放在 skill folder 外。
- Phase 8:Post-publish telemetry loop
- Under-trigger:補真實 trigger phrases、專有名詞、檔案類型。
- Over-trigger:加入 negative triggers、縮小範圍、移除模糊字眼。
- 執行不穩:補 validation、把脆弱步驟搬到 scripts。
- 內容過大:縮短 SKILL.md,把細節下放到 references。
- 迭代時優先收集具體失敗案例、使用率訊號與使用者回饋,不要只憑感覺改 wording。
完整細節見:
references/authoring-patterns.mdreferences/lifecycle.mdreferences/testing-playbook.mdreferences/description-optimization.mdreferences/eval-workflow.mdreferences/eval-schemas.mdreferences/multilingual-trigger-strategy.mdreferences/skill-boundary-management.mdreferences/regression-gates.mdreferences/skill-roi-model.mdreferences/distribution-playbook.mdreferences/output-patterns.mdreferences/workflows.mdreferences/patterns-troubleshooting.md
核心規則(請強制遵守)
- 先把 description 寫對
- 這是 skill 是否會被載入的主要因素。
- description 內要包含真實 trigger phrases、工作情境、必要時的檔案類型。
- description 至少要交代何時用、何時不用、成功輸出長什麼樣;不要只寫能力介紹。
- description 預設控制在 1-3 句,避免把完整產品說明塞進常駐 metadata surface。
- 優先讓明顯 query 穩定命中,再處理邊角案例;不要為了少數怪句子把 description 寫得過寬。
- 先從上下文學會,再提最少的問題
- 先讀對話、檔案與現有 skill。
- 只有在高風險假設會害結果偏掉時,才追問使用者。
- 把脆弱步驟移到 scripts
- 只要是重複、易出錯、或需要 deterministic 的檢查/轉換,就寫成腳本。
- 避免 context 膨脹
SKILL.md放流程與導航。- 細節放
references/,必要時再讀。
- 測試要真實,不要只測漂亮案例
- 用接近實際對話的 prompt。
- 比較 baseline,確認 skill 真的有幫助,而不是只是多了一堆指令。
- with-skill 與 baseline 要用同一批 evals 比
- 盡量同一輪啟動,避免時間與上下文條件差太多。
- 若是改版既有 skill,baseline 應是舊版 skill snapshot,而不是「完全不用 skill」。
- 先處理 skill 邊界,再處理 wording
- 若多個 skill 搶同一類 query,先做 overlap matrix 與 in-scope / out-of-scope。
- 不要只靠把 description 寫得更長來硬解衝突。
- 公開相容性與信任訊號不能最後才補
- frontmatter、homepage、license、安裝路徑、權限與憑證敘事必須在公開前就對齊。
- repo README、registry 描述與 skill metadata 若互相矛盾,應先停下來修正再發佈。
- ROI 不成立的 skill 不值得硬留
- 若提升太小、成本太高、維護太重,要直接考慮縮 scope、拆 skill,或退回一般 prompt。
- 不要在 skill folder 放 README.md
- README 是給人看的,應放在 repo root 或其他 skill folder 外的位置。
- 把事故心得寫成有條件的規則,不要寫成審美偏好
- 規則至少要交代:什麼情境觸發、預設怎麼做、何時可以例外、怎麼驗證。
- 尤其是投影、列印、螢幕尺寸、既有模板、工具 API、狀態流這類會改變結果的環境因素,必須明寫,不能只留一句「通常比較好」。
- 系統設計模式優先於臨時繞路
- 若問題根因涉及工具鏈、狀態管理或既有 API,skill 應優先要求順應框架,而不是鼓勵直接改中間檔或臨時腳本硬繞。
- 需要繞路時,必須同時寫出風險、停止條件與回退方式。
內文品質與路由補強
- 一個 skill 只做一件主要工作
- 若 use cases 的輸入、工具、驗收產物明顯分裂,應拆 skill 或建立 handoff,而不是把 description 寫得越來越寬。
- 步驟用祈使句,且每步要有 I/O
- 每一步至少回答:要讀什麼、要做什麼、要輸出什麼、怎麼驗證。
- 把 output contract 寫死
- 指定段落順序、欄位、格式、長度、允許/禁止的自由度;若必須只輸出 JSON、Markdown、SQL 或固定欄位,直接明寫。
- few-shot / worked examples 要跟 skill 走
- 對摘要、報告、轉換、分類、格式化這類任務,應把高品質範例放進
SKILL.md或references/,只在 skill 真正載入時使用。
- 語意區塊要分清楚
- 規則預設分成角色、路由、流程、格式、工具政策、主動執行政策與範例,不要把所有要求揉成一段說明文。
- 主動執行邊界要明文化
- 低風險、可逆、無外部副作用的動作可以直接做;刪除、付款、寄信、寫正式環境、對外發布等高風險行為,必須先取得明確同意。
- tool schema 也是 prompt
- skill 若包工具,名稱、參數描述、enum 與 required 欄位都會直接影響 routing 與填參正確率;工具集太多時,應優先縮小 active tool set。
- 長流程預設拆成多回合
- 將分析、蒐集、起草、QA 拆開通常比單次巨型 prompt 更穩,尤其在多工具或高不確定任務。
- 依模型類型調整寫法
- GPT 類模型通常更吃明確步驟與精準指令;reasoning 類模型則更適合給清楚目標、強約束與
output contract,不要把中間推理寫死。
寫作與設計準則
- 用使用者懂的語言描述,不要預設對方知道你的內部名詞。
- 指令優先用明確動詞開頭,例如「先檢查」「若失敗就停止並回報」。
- 若步驟不是純線性流程,請明寫 decision tree、handoff 或多回合拆分點。
- 重要步驟要標註 input / output;沒有 I/O 的規則通常不夠可執行。
- 當某一步驟的理由能防止錯誤時,把理由寫出來;否則保持精簡。
- 技能不該偷偷改任務。若 workflow 需要做取捨,應明示取捨原則。
- 若某個任務其實不該做成 skill,要直接指出原因,而不是硬湊內容。
- 若規則依賴觀看距離、投影設備、列印需求或工具能力,直接把前提寫在規則裡,不要期待模型自己補完。
你可以用的腳本
scripts/init_skill_advanced.py:建立帶測試/發布欄位的 SKILL.md 骨架。scripts/format_check.py:格式與結構檢查器(含--fix)。scripts/quick_validate.py:最小合規驗證。scripts/audit_openclaw_frontmatter.py:檢查 OpenClaw frontmatter surface,例如單行 JSONmetadata。scripts/audit_skill_references.py:檢查SKILL.md中引用的本地路徑在單獨打包後仍然存在。scripts/check_skill_name_surface.py:檢查 slug、slash command、description surface 與命名衝突風險。scripts/audit_skill_overlap.py:建立 overlap matrix,找出 repo 內互搶 query 的鄰近 skill。scripts/audit_repo_discovery.py:檢查 README、About、topics、代表 skills 與安裝入口是否一致。scripts/generate_catalog.py:輸出 repo 級catalog/skills.yaml,整理 archetype、category、triggers 與 negative boundaries。scripts/generate_test_plan.py:產生測試計畫模板。scripts/prepare_eval_workspace.py:從assets/evals/evals.json建立 iteration workspace。scripts/aggregate_benchmark.py:彙整 with-skill / baseline run 結果,輸出benchmark.json與benchmark.md。scripts/check_regression_gates.py:依 benchmark 與門檻設定判斷是否可發版。scripts/run_eval.py:跑 description trigger eval,輸出 query-level 與 run-level 診斷結果。scripts/improve_description.py:依 trigger eval 失敗型態重寫 description,保留 transcript。scripts/run_loop.py:把 eval 與 description 改寫串成多輪迭代,可選擇直接套用最佳 description。scripts/generate_report.py:產生 description optimization 的 HTML 報告。scripts/utils.py:共用的SKILL.md/ JSON 讀寫輔助。scripts/package_skill.py:驗證後打包成.skill。
你可以用的 viewer / eval 結構
assets/evals/evals.json:保存真實測試 prompt、預期輸出與 expectations。assets/evals/regression_gates.json:保存 benchmark 的發版門檻設定。scripts/generate_review.py:把 workspace 結果輸出成 review HTML。<skill-name>-workspace/iteration-N/:保存每輪 with-skill / baseline 的輸出、grading 與 benchmark。
常見交付物
交付給使用者時,通常包含:
- skill folder(
SKILL.md+scripts/+references/+assets/) assets/evals/evals.json<skill-name>-workspace/iteration-N/的 benchmark 與 review 輸出.skill打包檔- 放在 skill folder 外的 README、示例、release notes、安裝說明