Skip to content

更新技能:保持技能與來源倉庫同步

學完你能做什麼

本課教你如何讓 OpenSkills 技能始終保持最新版本。透過 OpenSkills update 指令,你能夠:

  • 一鍵更新所有已安裝技能
  • 只更新指定的幾個技能
  • 理解不同安裝來源的更新差異
  • 排查更新失敗的原因

你現在的困境

技能倉庫在不斷更新——作者可能修復了 bug、新增了新功能、改進了文件。但你安裝的技能還是舊版本。

你可能已經遇到過這些情況:

  • 技能文件說「支援某個功能」,但你的 AI 代理說不知道
  • 技能更新了更好的錯誤提示,但你看到的還是舊的
  • 安裝時的 bug 已經修復,但你還在受影響

每次刪除再重新安裝太麻煩了——你需要一個高效的更新方式。

什麼時候用這一招

使用 update 指令的典型場景:

場景操作
發現技能有更新執行 openskills update
只更新幾個技能openskills update skill1,skill2
本機開發的技能測試從本機路徑更新
從 GitHub 倉庫更新自動 git clone 最新程式碼

更新頻率建議

  • 社群技能:每月更新一次,取得最新改進
  • 自己開發的技能:每次修改後手動更新
  • 本機路徑技能:每次改完程式碼後更新

🎒 開始前的準備

在開始之前,確認已完成:

核心思路

OpenSkills 的更新機制很簡單:

每次安裝時記錄來源資訊 → 更新時從原始來源重新複製

為什麼需要重新安裝?

舊版本的技能(安裝時未記錄來源)無法更新。這時需要重新安裝一次,OpenSkills 會記住來源,之後就能自動更新了。

三種安裝來源的更新方式

來源類型更新方式適用場景
本機路徑直接從本機路徑複製開發自己的技能
git 倉庫複製最新程式碼到暫存目錄從 GitHub/GitLab 安裝
GitHub shorthand轉換為完整 URL 後複製從 GitHub 官方倉庫安裝

更新時會跳過沒有來源元資料的技能,並列出需要重新安裝的技能名。

跟我做

第 1 步:檢視已安裝技能

先確認有哪些技能可以更新:

bash
npx openskills list

你應該看到:已安裝技能清單,包括名稱、描述和安裝位置標籤(project/global)

第 2 步:更新所有技能

最簡單的方式是更新所有已安裝技能:

bash
npx openskills update

你應該看到:逐個更新技能,每個技能顯示更新結果

✅ Updated: git-workflow
✅ Updated: check-branch-first
Skipped: my-old-skill (no source metadata; re-install once to enable updates)
Summary: 2 updated, 1 skipped (3 total)
跳過的技能含義

如果看到 Skipped: xxx (no source metadata),說明這個技能是在更新功能加入之前安裝的。需要重新安裝一次才能啟用自動更新。

第 3 步:更新指定技能

如果你只想更新特定的幾個技能,傳入技能名(逗號分隔):

bash
npx openskills update git-workflow,check-branch-first

你應該看到:只更新了指定的兩個技能

✅ Updated: git-workflow
✅ Updated: check-branch-first
Summary: 2 updated, 0 skipped (2 total)

第 4 步:更新本機開發的技能

如果你正在本機開發技能,可以從本機路徑更新:

bash
npx openskills update my-skill

你應該看到:技能從你安裝時的本機路徑重新複製

✅ Updated: my-skill
Summary: 1 updated, 0 skipped (1 total)

本機開發工作流程

開發流程:

  1. 安裝技能:openskills install ./my-skill
  2. 修改程式碼
  3. 更新技能:openskills update my-skill
  4. 同步到 AGENTS.md:openskills sync

第 5 步:處理更新失敗

如果某些技能更新失敗,OpenSkills 會顯示詳細原因:

bash
npx openskills update

可能看到的情況

Skipped: git-workflow (git clone failed)
Skipped: my-skill (local source missing)
Missing source metadata (1): old-skill
Clone failed (1): git-workflow

對應解決方法

錯誤資訊原因解決方法
no source metadata舊版本安裝重新安裝:openskills install <source>
local source missing本機路徑被刪除恢復本機路徑或重新安裝
SKILL.md missing at local source本機檔案被刪除恢復 SKILL.md 檔案
git clone failed網路問題或倉庫不存在檢查網路或倉庫位址
SKILL.md not found in repo倉庫結構變化聯繫技能作者或更新 subpath

檢查點 ✅

確認你已經學會了:

  • [ ] 能使用 openskills update 更新所有技能
  • [ ] 能使用逗號分隔更新指定技能
  • [ ] 理解「跳過」技能的含義和解決方法
  • [ ] 知道本機開發技能的更新流程

踩坑提醒

❌ 常見錯誤

錯誤正確做法
看到跳過就不管了根據提示重新安裝或修復問題
每次都刪除再安裝使用 update 指令更高效
不知道技能從哪裝的openskills list 檢視來源

⚠️ 注意事項

更新會覆蓋本機修改

如果你直接修改了安裝目錄下的技能檔案,更新時這些修改會被覆蓋。正確做法是:

  1. 修改來源檔案(本機路徑或倉庫)
  2. 然後執行 openskills update

符號連結技能需要特殊處理

如果技能是透過符號連結安裝的(見 符號連結支援),更新會重新建立連結,不會破壞符號連結關係。

全域和專案技能需要分別更新

bash
# 只更新專案技能(預設)
openskills update

# 更新全域技能需要單獨處理
# 或使用 --universal 模式統一管理

本課小結

本課學習了 OpenSkills 的更新功能:

  • 批次更新openskills update 一鍵更新所有技能
  • 指定更新openskills update skill1,skill2 更新特定技能
  • 來源感知:自動識別本機路徑和 git 倉庫
  • 錯誤提示:詳細說明跳過的原因和解決方法

更新功能讓技能保持最新版本,確保你使用的技能總是包含最新的改進和修復。

下一課預告

下一課我們學習 刪除技能

你會學到:

  • 如何使用互動式 manage 指令刪除技能
  • 如何使用 remove 指令腳本化刪除
  • 刪除技能後的注意事項

附錄:原始碼參考

點擊展開查看原始碼位置

更新時間:2026-01-24

功能檔案路徑行號
更新技能主邏輯src/commands/update.ts14-150
本機路徑更新src/commands/update.ts64-82
Git 倉庫更新src/commands/update.ts85-125
從目錄複製技能src/commands/update.ts152-163
路徑安全驗證src/commands/update.ts165-172
元資料結構定義src/utils/skill-metadata.ts8-15
讀取技能元資料src/utils/skill-metadata.ts17-27
寫入技能元資料src/utils/skill-metadata.ts29-36
CLI 指令定義src/cli.ts58-62

關鍵常數

  • SKILL_METADATA_FILE = '.openskills.json':元資料檔名,記錄技能安裝來源

關鍵函式

  • updateSkills(skillNames):更新指定或所有技能的主函式
  • updateSkillFromDir(targetPath, sourceDir):從來源目錄複製技能到目標目錄
  • isPathInside(targetPath, targetDir):驗證安裝路徑安全性(防止路徑遍歷)
  • readSkillMetadata(skillDir):讀取技能的元資料
  • writeSkillMetadata(skillDir, metadata):寫入/更新技能的元資料

業務規則

  • BR-5-1:預設更新所有已安裝技能(update.ts:37-38)
  • BR-5-2:支援逗號分隔的技能名清單(update.ts:15)
  • BR-5-3:跳過無來源元資料的技能(update.ts:56-62)
  • BR-5-4:支援本機路徑更新(update.ts:64-82)
  • BR-5-5:支援從 git 倉庫更新(update.ts:85-125)
  • BR-5-6:驗證路徑安全(update.ts:156-162)