跳至內容

安裝別人寫好的 Skill,再自己寫一個

第 9 篇解釋了 Skill 是什麼,這篇是動手的一半:不寫程式安裝一個公開發布的 Skill、學會那條幾乎每個人都會踩到的命名規則,再自己寫一個——一個裝在單一檔案裡的冰箱盤點 Skill。
2026年9月12日
安裝別人寫好的 Skill,再自己寫一個
OdooBot
borrow one, then build one
Pi Agent 指南 · 第 10 篇

安裝別人寫好的 Skill,再自己寫一個

第 9 篇解釋了 Skill 是什麼。這篇是動手的一半:不寫程式安裝一個公開發布的 Skill、學會那條幾乎每個人都會踩到的命名規則,再自己寫一個——一個裝在單一檔案裡的冰箱盤點 Skill。最後會講你最可能撞上的失敗情況。

1 個檔案
一個 Skill 就是一個裡面有 SKILL.md 的資料夾。不需要別的
4 種格式
命名一個套件的方式。單獨的 owner/repo 不是其中之一
3-7 個 Skill
有經驗的使用者建議保持安裝的數量
先借用,再自己蓋

就算你打算自己寫,也先從別人的開始

先安裝一個的三個理由。 不需要寫程式 ——一個 Skill 就是一個裡面裝著 SKILL.md 指示檔案的資料夾;作者已經打包好了,你只要提供來源、按 Install 就好。 你可以先試用,不用先投入時間 ——大概三分鐘,比花一小時研究範例快多了。而且 你會拿到一個能用的範例:打開安裝好的 SKILL.md ,看看別人是怎麼寫的。

講白一點

Skill 不會讓模型變聰明。它給模型的是你家的規則。一個能幹的清潔工本來就知道怎麼打掃——他們不知道的是你家的木地板不能碰水。Skill 就是流理台上那張紙條。

Skill 是 Pi Agent 運作方式的核心,不是可有可無的東西。同一個模型——比如 GLM-4.6——裝了 Skill,結果可能有很大的差異。裝了 home-assistant-best-practices 之後,模型可能會告訴你,某個特定的自動化用 helper 比用 template sensor 好。沒裝的話,它就會回到自己那套可能已經過時的習慣。熟悉的比喻是 HACS:內建的東西能用,而社群有時候會提供更適合你需求的東西。

打開 Settings ,選 Skills 分頁——頂部五個分頁中的第三個,在 Models 跟 Sub-agents 之間。

Pi Web 的 Settings 對話框,在 General、Models、Skills、Sub-agents、Plugins 這些分頁裡選在 Skills。左欄寫著 No skills found,最下面有個 + Add skill 控制項;寬闊的右側面板寫著 Select a skill。
Skill 住在哪裡Settings 的 Skills 分頁,什麼都還沒裝之前的樣子。
  • No skills found 填滿了左欄。這一欄是已安裝的清單,所以空的正是一開始正確的狀態。
  • + Add skill 在那一欄的最下面——這個畫面上唯一的控制項,也是每一次安裝的起點。
  • Select a skill 是右側面板的預留文字,之後會被 Skill 的細節,或 Add skill 表單填滿。
怎麼命名

四種命名套件的方式,加一種會被拒絕的方式

搜尋找到的是有人列在目錄裡的東西。其他所有的——沒列出的倉庫、npm 套件、你主機上已經有的資料夾——都是靠 套件規格來安裝,也就是面板前台代理的那個指令的參數: pi install <package-spec>。Pi Agent 建立在 @earendil-works/pi-coding-agent之上,它的命令列介面是 pi。套件規格有明確定義的語法;一個你認得出來的倉庫名稱不算數。有四種來源類型是合法的。

來源類型範例實際跑的指令檔案落在哪裡
npm 套件npm:@scope/[email protected]
npm:my-pi-skill
npm install~/.pi/agent/npm/
Git,帶著 git: 前綴git:github.com/user/repo@v1
git:[email protected]:user/repo
git clone,允許簡寫~/.pi/agent/git/<host>/<path>
Git,完整協議 URLhttps://github.com/user/repo
ssh://[email protected]/user/repo
git clone跟上面一樣
本機路徑/absolute/path
./relative/path
把路徑記錄在設定裡哪裡都不放——來源留在原地,就地讀取
會被拒絕的那一種: 單獨一個 owner/repo。看起來很像對的,因為 gh repo clone 接受這種寫法。但 Pi Agent 不接受。GitHub 的簡寫必須帶著前綴—— git:github.com/owner/repo。沒有前綴的話,只有開頭是 https://http://ssh://git:// 的網址才會被接受。
講白一點

mattpocock/skills 就像遞給快遞員一張紙條寫著「陳家」。對你來說再清楚不過。但快遞員不知道是哪個城鎮的陳家。Pi 不願意去猜 foo/bar 指的是 npm 還是 GitHub,所以它要你把城鎮名寫在信封上。

還有一條容易漏掉的規則: 引用會被釘住。 @v1 一直指的都是 v1;一次更新只會重新整理那個版本的內容,不會把你帶到 v2。要換版本引用得重新安裝,下面會講。

這裡沒有預設一定是 GitHub。換掉主機—— git:gitlab.com/user/repogit:codeberg.org/user/repo,或你自己的伺服器 git:git.your-domain.tw/user/repo

如果你要把這寫成腳本: 在非互動環境裡設定 GIT_TERMINAL_PROMPT=0GIT_SSH_COMMAND="ssh -o BatchMode=yes" ,這樣缺少憑證時會立刻失敗,而不是卡在一個沒人會回答的提示上。

四種寫法最後都走到同一個發現步驟。Pi 會掃描三個目錄,找裡面有 SKILL.md的資料夾: ~/.pi/agent/npm/~/.pi/agent/git/,且 ~/.pi/agent/skills/。最後那個是一個符號連結,指向 /data/pi-agent/skills/,手寫的 Skill 放這裡——不要在這裡找已安裝的 Git 套件。因為 $HOME 被釘在附加元件的資料磁區裡,面板跟命令列看到的是同一批 Skill,Home Assistant 的 snapshot 也會把整個收藏帶回來: skills/npm/git/,以及 ~/.pi/agent/settings.json

一個來源通不通得過,主要看驗證方式。

來源能用嗎?為什麼該怎麼做
公開的 GitHub,走 HTTPS可以,馬上就行公開倉庫走 git clone https://…直接用就好。這涵蓋了大約 90% 的情況
公開的 npm 套件可以,透過 npm install作者把它打包發布到 npm registry 了用這個釘住版本 @version。npm 這條路還很新;大部分 Skill 是透過 Git 流通的
私有的 GitHub,走 HTTPS不行,光靠面板不夠面板沒有個人存取權杖的欄位,而非互動式的 clone 也沒辦法跳出密碼提示改用公開的 fork;用下面的 SSH 方式;或連上終端機設定 git config --global credential.helper store 來快取憑證
私有的 GitHub,走 SSH可以,官方支援openssh-client 內建在附加元件的映像檔裡,會讀取 ~/.ssh/config;SSH 網址會自動用你設定好的金鑰在主機上產生一支金鑰,把公鑰那一半加進 GitHub 的 Settings → SSH Keys,存進 /data/pi-agent/home/.ssh/,並執行一次 ssh -T [email protected] 來記錄主機金鑰
另一個 Git 主機可以Pi 的 Git 簡寫不預設是哪個主機輸入 git:host/user/repo 或完整的 https://… 網址,跟 GitHub 的寫法一樣
本機路徑可以Pi 會把絕對路徑記在 settings.json ,啟動時去掃描它,而不是複製檔案把資料夾放到 /data/pi-agent/ ,用 scp 或 Samba,再輸入路徑
SSH 是支援的,但不是一鍵搞定的。 除了表格裡的關鍵步驟,你還得先信任這個主機,在 known_hosts 裡,並把金鑰存在 /data/pi-agent/home/.ssh/ —— 不是/root/.ssh/,因為 HOME 是釘在資料磁區的。第一次抓大概 30 分鐘;之後就能重複用。如果你原本就不是用 SSH 管理 Git,用公開的 fork 在家裡通常簡單得多:大概五分鐘,前提是授權跟權限允許。
安裝一個

安裝一個真實的 Skill,再證明 agent 看得到它

+ Add skill ,右側面板就會填滿。

同一個 Settings 對話框,右側面板現在標題是 Add skill。裡面有個搜尋欄,提示文字是 e.g. react, testing, deploy,旁邊是藍色的 Search 按鈕。下面是兩個小按鈕 global 跟 project,選在 global,箭頭指著路徑 ~/.pi/agent/skills。下面一行寫著 Search skills.sh to discover and install skills for your agent,skills.sh 是個連結。左欄還是寫著 No skills found。
Add skill一個搜尋欄、一個範圍切換鈕、一個連到目錄的連結。
  • 那個 欄位要的是關鍵字,不是網址。它的提示文字寫著 e.g. react, testing, deploy,藍色的 Search 按鈕會查詢 skills.sh 目錄。
  • global / project 決定哪個設定檔會記錄這次安裝。Global 寫進 ~/.pi/agent/settings.json,project 寫進 .pi/settings.json ,就在你的工作目錄旁邊。箭頭標的是你選的範圍的路徑, ~/.pi/agent/skills/。除非你需要一個只給特定專案用的 Skill,不然就留在 global。
  • skills.sh 是最後一行的連結——社群整理的目錄,是最接近官方 Skill 商店的東西。
文件跟實際版本對不上的一個地方。 上游文件描述的 Add Skill 對話框,也接受手動輸入套件規格,提示文字是 npm:@scope/package。上面這個版本只有搜尋欄。如果你的面板沒有規格輸入欄,目錄裡沒有的東西就用命令列——兩邊共用同一份狀態,所以結果最後都會出現在面板裡。
  1. 步驟 1

    搜尋它,或用規格安裝

    + Add skill,輸入 mattpocock ,點 Search。這篇教學用的是 mattpocock/skills:在家用不太到,但安裝起來很穩定。面板呼叫的是 /api/skills/search;符合的卡片會各自帶著自己的 Install 按鈕回來。如果目錄裡沒有你要的,打開連到附加元件的終端機,跑下面其中一個:

    pi install git:github.com/mattpocock/skills
    pi install https://github.com/mattpocock/skills
    pi install git:github.com/mattpocock/skills@main

    第三種寫法釘住一個標籤或 commit。不要輸入單獨的 mattpocock/skills

  2. 步驟 2

    點 Install,然後不要管它

    按鈕顯示 Installing… ,這段期間它在運作。背後面板送出的是 /api/skills/install ,用 {cwd, package, scope} ,後端跑的是 pi install。通常 5-30 秒,看倉庫大小跟你的網路。不要取消或重新整理頁面。最後會跳出一個 Package installed. 提示。

  3. 步驟 3

    檢查出現的項目

    新的 Skill 會出現在左欄。點它:面板上會有一個啟用/停用開關、 Check UpdatesRemove,且 Installed Path ——在 ~/.pi/agent/npm/ ,給 npm 套件用, ~/.pi/agent/git/<host>/<path>/ ,給 Git 套件用。

  4. 步驟 4

    重新載入 session,不是重新整理頁面

    Reload Session 通常在右上角;點它應該會看到 Session reloaded. 開新 session 也行。F5 不行——system prompt 是 session 開始時組出來的,中途不會重讀,這也是新裝的 Skill 看起來憑空消失最常見的原因。

  5. 步驟 5

    在 system prompt 裡找到它,用一次看看

    打開唯讀的 System Prompt 面板,捲到 <available_skills> 區塊;你的 Skill 名字應該在裡面。這證明了 Pi 找到它——但不證明 agent 會用得好。所以也試著在測試請求裡點名它:「請用 Skill name 幫我做某件事。」如果回覆有反應、正確的工具也出現了,就代表能用。

  6. 步驟 6

    在依賴它之前先讀懂它的 SKILL.md

    SKILL.md 是 Pi 會讀的檔案,不是 README.md:它裝著 namedescriptionallowed-tools 這些 frontmatter 欄位,應該會寫清楚什麼會觸發它、它需要哪些工具、期望哪些環境變數。照著 Installed Path 找過去—— /data/pi-agent/home/.pi/agent/git/<host>/<user>/<repo>/SKILL.md 給 Git 套件用,對應的 …/npm/… 路徑給 npm 套件用。花五分鐘讀,比花半小時瞎猜划算得多。

一個你可能不知道的捷徑:enableSkillCommands 開啟時,每個 Skill 也會被登記成一個斜線指令, /skill:name。在對話欄輸入 /skill: 就能列出有哪些可用。

每個已安裝的 Skill 都會釘在每次對話的最前面,不管相不相關,所以用不到的就移除。有兩種方式,對應兩種情況。

從面板,大概 99% 的情況都對:選那個 Skill,點 Remove,確認。後端跑的是 pi remove <spec>,從 settings.json,刪除 ~/.pi/agent/git/…~/.pi/agent/npm/…,並顯示 Package removed. 提示。它不會留下過時的設定,也不會刪錯路徑。

從連到附加元件的終端機,適用於面板用不了、套件壞到列不出來,或你要一次清好幾個的情況。在使用任何主機層級的 exec 指令之前,先確認你部署環境專屬的容器名稱,接著:

pi list
pi remove npm:@foo/bar
pi remove git:github.com/user/repo
不要自己動手刪資料夾。 rm -rf 會刪掉檔案,但會把登記資訊留在 ~/.pi/agent/settings.json裡。下次啟動時 Pi 可能會嘗試重新安裝那個不見的套件,或者直接回報錯誤。永遠優先用 pi remove;如果真的不得不手動清理,就去改 settings.json 讓內容對得上。不管哪種方式,之後都要重新載入 session。既有的 session 不受影響——它們的 Skill 文字在開始時就已經固定進 system prompt 裡了。
關於更新: 沒有東西會自己更新。安裝時複製的是某個引用點的快照,這是刻意的——作者的破壞性改動,不該在一夜之間悄悄弄壞你的自動化。點 Check Updates 在那個 Skill 那一列,Pi 會呼叫 /api/skills/check 去比對本機跟上游的 versionHash;有更新版本的話,會出現 Update 按鈕,呼叫 /api/skills/update。從命令列, pi update --extensions 會檢查所有的, pi update npm:@foo/bar 只檢查一個。釘住的引用會一直釘住——要換版本,跑 pi install git:host/user/repo@new-ref
自己寫一個

一個資料夾、一個檔案,不寫程式

公開發布的 Skill 處理的是通用需求——管理檔案、建網站。它們對你家一無所知。你自己的 Skill 才是你把重複又具體的工作交出去的方式:拍冰箱照片拿回一份盤點清單,或者從你放進資料夾的說明書裡回答洗碗機的錯誤代碼。

整個結構就是一個資料夾、一個檔案:

fridge-check/
└── SKILL.md

裡面裝三個元素,只有兩個是必要的。

元素是什麼做什麼必要嗎?
YAML frontmatter兩條 --- 之間的鍵值對,寫在最上面,包括 namedescription告訴 Pi 這個 Skill 叫什麼、什麼時候適用可以
主要指示frontmatter 底下的 Markdown 內容,通常有幾個 ## 小節告訴 agent 該做什麼、該問什麼,輸出該長什麼樣可以
輔助檔案資料夾裡其他任何東西——範例圖片、範本、PDF 說明書agent 可以參考的素材,例如要遵循的格式不是必要,但有用

檔名要精確: SKILL 大寫, .md 小寫。大小寫寫錯,Pi 就找不到。Markdown 就是你在 GitHub 跟 Obsidian 上看過的那種純文字格式—— # 做標題, - 做條列項目——就算你沒用過,agent 照樣看得懂普通的段落。

關於 frontmatter 的兩個要點。 name 是識別碼:小寫字母加連字號,例如 fridge-check,最好跟資料夾名稱一致。非 ASCII 的名稱可能能用,但用 ASCII 能避開跨作業系統的路徑編碼問題。 description 最重要——agent 靠它來判斷這個 Skill 到底適不適用。

這是完整的檔案內容。複製進 SKILL.md的資料夾:

---
name: fridge-check
description: 當使用者分享冰箱照片或問要煮什麼的時候使用。盤點看得到的食物,找出可能快過期的項目,並建議晚餐菜色。
---
# 冰箱盤點 Skill
幫使用者盤點冰箱、評估看得到的新鮮度線索,並規劃餐點,不編造細節。
## 什麼時候用這個
當使用者符合以下情況時,使用這個 Skill:
- 分享冰箱或冷凍庫的照片
- 問冰箱裡有什麼,或要煮什麼
- 提到食材、儲藏室物品、剩菜,或快過期的食物
## 步驟
1. **先描述看得到的東西** ——用位置、品項、大概數量描述。標籤或包裝看不清楚就直說,不要用猜的。
2. **找出需要盡快檢查的項目** ——注意看得到的跡象,例如葉菜變黃、包裝破損、滲漏或變色。說明照片沒辦法確認食品安全。
3. **建議一到兩道晚餐菜色** ——優先用看起來還能吃、該盡快吃完的食材。避免需要額外採買太多東西。
4. **列一份簡短的優先使用清單** ——整理出使用者該優先檢查或使用哪些項目。
## 安全
- **不要編造看不到的品項。**
- **不要診斷中毒風險,也不要提供醫療建議。** 如果某項東西看起來壞掉了,建議使用者自己檢查,有疑慮就丟掉。
- **先問清楚有哪些廚房設備跟飲食限制**,再假設烹調方式。
- **物品部分被擋住時,用大概的數量描述。**
- **用繁體中文回覆**,除非使用者明確要求其他語言。
## 輸出範例
【冰箱盤點】
- 上層:一盒牛奶、大約四顆蛋、一碗剩菜
- 中層:半顆高麗菜、兩根紅蘿蔔、一盒豆腐
- 蔬果抽屜:一把菠菜;部分葉子看起來變黃了
【晚餐建議】
1. 菠菜炒蛋——用掉菠菜跟兩顆蛋
2. 豆腐炒高麗菜——用掉豆腐跟部分高麗菜
【接下來該檢查或優先使用】
- 檢查牛奶的日期跟保存方式
- 檢查剩菜,如果保存得當就盡快用掉

輸出範例 這個區塊當成範本,下一次重新填寫:名字、描述、什麼時候用、步驟、安全事項、輸出格式。

frontmatter 是最脆弱的部分。 兩條 --- 都必須各自獨佔一行、精確三個連字號,而且第一條必須是檔案裡的第一個東西——上面不能有空行,也不能有位元組順序標記。 name:description: 必須拼字正確,冒號後面要有空格。存成不帶 BOM 的 UTF-8;frontmatter 格式錯誤會讓整個 Skill 載入不了。

接下來把資料夾放到主機上。 比較快的路 ——大概兩分鐘——是用 scp,或 FileZilla、Cyberduck 這類 SFTP 客戶端,傳到 /data/pi-agent/skills/。把主機位址換成你自己的:

scp -r ~/Desktop/fridge-check [email protected]:/data/pi-agent/skills/

比較慢的路 是用 GitHub,換來版本歷史跟分享的能力:

cd ~/Desktop/fridge-check
git init
git add SKILL.md
git commit -m "Initial fridge check skill"
# 在 GitHub 建一個叫 fridge-check 的公開倉庫
git remote add origin https://github.com/your-account/fridge-check.git
git branch -M main
git push -u origin main

接著把它裝回來:在面板裡點 Add from URL,貼上倉庫網址,點 Install ——或用套件規格, pi install https://github.com/your-account/fridge-check。兩條路最後都會把資料夾放在 /data/pi-agent/skills/。改動的時候,先在本機用 scp 反覆調整,等 Skill 穩定了再推上 GitHub。

最後開一個新 session,檢查 <available_skills> 有沒有 fridge-check,再附上一張你冰箱的照片——先看過照片有沒有隱私內容。回覆應該依序描述看得到的東西、標出該檢查的項目、建議晚餐、列出接下來要檢查什麼,而且不能有沒根據的安全宣稱。

改了檔案卻沒有任何變化? Skill 是 session 開始時載入的,所以一個已經開著的 session 用的還是它開始時的版本。改動一定要在新 session 裡測試。
什麼讓它真的被觸發

三件決定 agent 到底會不會用它的事

裝了幾個之後,寫得好不好幾乎決定了一切。三個原則做了大部分的工作。

原則弱的寫法好的寫法
把 description 寫具體,帶真實的觸發條件 description: 幫助使用者處理家事 description: 當使用者分享冰箱照片、提到食材、儲藏室物品、剩菜,或問「今天該煮什麼」時觸發
把步驟編號,順序就不用用猜的 「看看冰箱裡有什麼,提供一些建議。」 「1. 描述看得到的東西。2. 標出該檢查的項目。3. 建議晚餐。4. 列出接下來要檢查什麼。」
把禁止事項直接講清楚 (沒有講任何禁止事項。) 「不要編造食材、不要診斷食物中毒、不要單憑照片就宣稱食物安全,也不要推薦要花超過 30 分鐘、你不熟悉的菜色。」

禁止事項是大家最容易漏掉的部分,而它們很重要,因為這些系統本來就很急著幫忙。不把界線講清楚,一份盤點清單就可能漂移成編造出來的營養報告,或關於細菌跟疾病的宣稱。直白的指示——「不要診斷」、「不要單憑一張圖就推斷安不安全」——能讓輸出維持有用,並保持適當的限制。但也不要矯枉過正:滿篇的「必須」跟「絕對不要」會讓回覆聽起來很像照本宣科,所以真的該由判斷力決定的地方,用「優先」、「通常」或「避免」,只有真正的禁止事項才寫得堅定。

有草稿之後,跑一次失敗模式的檢查。 想像這個 Skill 可能產出最誤導或最有害的回覆——編造出藏在牛奶後面的食材,或診斷食物中毒——加一條簡短的禁止事項去防範它,同時不削弱你真正需要的安全指引。
flowchart TD
  A["agent 沒理我的 Skill"] --> B{"Is it listed in the
available_skills block?"} B -->|"no"| C["Pi 從沒載入過它。
檢查資料夾位置
跟 frontmatter"] B -->|"yes"| D{"Does the description name
the words you actually used?"} D -->|"no"| E["用具體的觸發條件
重寫 description"] D -->|"yes"| F["換一個指令遵循能力更強的
模型試試,並且讀它的
工具呼叫,不只讀回覆"]
照這個順序做三項檢查由上往下走,不要橫向跳。大部分情況第一個分支就能解決,先換模型會白白浪費一個下午。

還有一個習慣:讓每個 Skill 只做一件事。單一用途的描述更容易對上、衝突更容易診斷,而且一次改動影響的範圍更小——冰箱盤點、晚餐建議、採買規劃拆成三個 Skill,會比合成一個好用,就算它們彼此會互相參照也一樣。

再來七個構想,以及發布

同一個範本,重複七次

下面每一項填的都是同樣的空格:要外包出去的重複工作、agent 必須遵守的規則,以及旁邊核准的參考素材 SKILL.md。七個構想,包括你已經做好的那個。

Skill什麼時候適用該做什麼輔助檔案
fridge-check一張冰箱照片,或「今天該煮什麼?」盤點看得到的東西,標出該檢查的,建議菜色(無)
chore-rotation「這禮拜誰倒垃圾?」從家庭成員清單跟輪值週期算出輪到誰family.md
dinner-suggest「今晚吃什麼?」或「完全沒頭緒要煮什麼」根據喜好、時間、預算跟剩菜,提供三個選項preferences.md
grocery-list提到這週要買菜或菜單從菜單推算出需要的食材 dinner-suggest 生成的staples.md
appliance-manual家電的錯誤代碼或操作問題從資料夾裡的 PDF 說明書回答,保留文件記載的警告washer.pdfac.pdfdryer.pdf
ha-automation「幫我寫一個 Home Assistant 自動化並解釋它」用 Home Assistant 的 trigger/condition/action 結構產出 YAMLentity_map.md
video-script要求一份影片腳本或 YouTube Short產出 30 或 60 秒的腳本、分鏡表跟字幕voice.md
家電那個需要比其他 Skill 更緊的韁繩。 它的答案必須緊扣你提供的說明書。遇到故障代碼跟安全警告,要精確引用文件記載的指引,任何要聯絡合格維修人員的指示都要照說明書原樣保留。不要讓它把安全警告總結成聽起來比較和善的版本。

如果你的某個 Skill 在你家以外也安全又有用,就發布到一個公開的 GitHub 倉庫,讓其他人在安裝前能先讀過。發布前先做四件事。

  1. 步驟 1

    確認倉庫真的是公開的

    在 GitHub 打開倉庫,去 Settings ,捲到 Danger Zone 確認它的可見度。私有倉庫沒有驗證是抓不到的,所以別人的安裝一定會失敗。

  2. 步驟 2

    第一次推送之前,先去掉任何私密內容

    憑證、個人資訊、內部主機名稱、entity 名稱、路徑、家庭細節。一旦推上公開倉庫就會留在歷史紀錄裡,所以這件事要在推送之前做,不是之後。

  3. 步驟 3

    分享一個大家真的貼得上去的規格

    不要叫任何人輸入 your-account/fridge-check ——Pi 會拒絕單獨的簡寫。給他們 git: 這種格式,或完整的 https://github.com/… 網址。

  4. 步驟 4

    加一份給人看的 README.md

    解釋這個 Skill 做什麼、怎麼用,還有一段範例對話長什麼樣,讓人在安裝前就能判斷合不合用。 SKILL.md 是寫給 agent 看的; README.md 是給人看的。

沒有一個可以提交的官方索引。 Pi Agent 生態系沒有中央 Skill 登記處;有的只是各個社群自己維護的、零散的 awesome-list 式收藏。要提高能見度,試試 Home Assistant 社群、Reddit 的 r/homeassistant,或 #pi-agent#homeassistant 社群平台上的標籤。特別要注意,不要把「提交到 skills.sh」當成官方 Pi Agent 的指引——那不是。
先為你自己家寫。 跑得夠久,摸清楚它的觸發條件、失敗模式跟安全限制——一兩個月是個合理的標準——之後再發布。
不管用的時候

你最可能撞上的失敗情況

先從機械性的開始。

症狀該怎麼做
clone 卡在大約一半的地方 通常是網路,或者是個很大的倉庫——有些帶著幾十 MB 的素材。等 3-5 分鐘。還是沒完成的話,取消,在附加元件的終端機裡跑 pi install git:github.com/xxx/yyy :它每一步都顯示得比進度條清楚得多,而且面板認得出結果,因為兩邊共用同一個 Skills 路徑。
安裝失敗留下一個壞掉的目錄,擋住重試 在 0.83.0 版修好了,那之後失敗的 Git 安裝就不會再留下不完整的目錄。更舊的版本,用 rm -rf 先移除那個目錄再重試。
Skill 的目錄大到離譜 一般的 Skill 大概幾百 KB 到幾 MB。如果 du -sh /data/pi-agent/git/github.com/<user>/<repo> 顯示幾百 MB,這個倉庫大概帶著範例影片或預訓練模型;去看它的 README。想留下 Skill 但不要那些龐大的東西,就複製 SKILL.md 跟它需要的最少檔案到 /data/pi-agent/skills/<name>/,移除那個 Git 套件,再從那個本機路徑重新安裝。
新的 Skill 跟既有的名字一樣 Pi 用 name 這個 frontmatter 欄位當 Skill 的鍵值,不是資料夾名稱,也不要求兩者一致。重複的會被去重——每個範圍留一個,project 範圍優先於 global。改資料夾名稱沒有用。從 packages 陣列裡移除一個套件,在 ~/.pi/agent/settings.json,或在面板裡停用衝突的那個 Skill。
有時候會觸發,有時候不會 description 涵蓋的觸發條件不夠。「當使用者上傳冰箱照片時使用」對不上一個純文字問晚餐的問題。用大家實際會問的方式寫,加上周邊的詞——冰箱、儲藏室、剩菜、食材。
回覆變得僵硬、像照本宣科 命令式的口氣太多了。把真正該靠判斷力的地方軟化成「優先」、「通常」或「避免」,只有真正必須堅定的地方才保持堅定:不要編造事實、不要洩漏私密資料、沒核准不要做有破壞性的動作、不要給沒根據的醫療建議。
你用不了 git push 有兩種繞過的方法。把資料夾拖進 /data/pi-agent/skills/ 用 FileZilla 這類 SFTP 客戶端。或連上你的 SKILL.md ,請 agent 準備好指令——「解釋並準備好把這個 Skill 推到我 GitHub 上 fridge-check 倉庫的指令。沒有我的核准不要執行。」如果它要用 bash 工具,在核准之前把工具卡上每一個指令跟目標都讀過。
絕對不要 git clone 直接放進 ~/.pi/agent/git/ 檔案是進去了,但沒有任何東西把它們登記進 settings.json,所以面板看不到這個套件,下一個 session 也看不到。要透過面板或 pi install安裝,永遠都是。
我給了它一個來源,什麼都沒發生
四個常見原因。單獨的 owner/repo,Pi 會拒絕——用 git:github.com/owner/repo。網址打錯字,通常是漏了 https:// ,或擁有者名字拼錯;開一個新分頁檢查看看。倉庫是私有的或已被刪除——用無痕視窗打開,確認它真的是公開的。或者你根本沒等夠:找 Installing… 這個狀態,讓它跑完。
失敗訊息是 "fatal: 401" 或 "Authentication failed"
這是走 HTTPS 的私有倉庫的典型症狀:面板沒有權杖欄位,非互動式的 clone 也沒辦法跳出密碼提示。在家最簡單的解法是公開的 fork——點 Fork 在 GitHub 上,把 fork 的可見度設成 Public,改裝這個 fork——前提是授權跟你的權限允許。大概五分鐘。SSH 這條路也行,用上面來源表格裡的設定。
clone 完成了,但面板裡沒有這個 Skill
Reload Session 先試——發現機制是在 session 開啟時執行的,所以 F5 不會觸發重新掃描。還是沒出現的話,按 F12,看 Console 有沒有錯誤,再檢查 Network 分頁裡的 /api/skills?cwd=… 請求。應該要回 200;4xx 或 5xx 指向後端有問題。特別注意 403:目前的工作目錄既不是信任的專案,也不是預設的 pi-cwd-YYYYMMDD/ 目錄。
裝好了,但 agent 看起來沒理它
先確認它有出現在 System Prompt 面板裡,在 <available_skills>。如果有,問題通常出在觸發條件不夠具體—— description 太模糊,agent 認不出什麼時候該用它。臨時的補救辦法是直接開口:「請用 Skill name 幫我。」真正的修法,是讀那個 Skill 的 README,看作者原本設想的觸發語句,或用具體的詞重寫 description。如果 description 已經夠具體了,問題可能出在模型本身:像 GLM-4-Flash 這種輕量模型,處理複雜指示的方式可能不太一樣,有機會的話比較一下目前有推理能力的模型,例如 GLM-4.6、Claude Sonnet 4 或 DeepSeek-R1。不要只憑模型系列的名字就推斷指令遵循能力——用同一個提示實測那個精確的模型,並且讀它的工具呼叫,不只是讀它的回覆。
System prompt 面板裡完全沒有顯示
Pi 沒有載入這個檔案,通常是 frontmatter 的問題。檢查三件事:兩條 --- 分隔線都各自獨佔一行、精確三個連字號,第一條前面沒有空行; name:description: 拼字正確,冒號後面有空格;檔名精確是 SKILL.md,大寫 SKILL,小寫 .md。用 VS Code 或 Notepad++ 這類文字編輯器打開它,確認編碼是不帶 BOM 的 UTF-8。
兩個 Skill 看起來互相打架
如果 Skill A 說自動化要用 helper,Skill B 說要用 template sensor,agent 可能會各打五十大板,或選一個、忽略另一個。讀過每個已安裝的 description,檢查有沒有兩個涵蓋了同樣的觸發條件;如果有,就留一個。這也是為什麼建議從一兩個 Skill 開始、慢慢加的原因。
出了完全不同的問題
先看這個系列第 16 篇的疑難排解指南,裡面依症狀跟解法整理好,也有一段專門講 Skill 安裝失敗。還是解不開的話,把你輸入的套件規格、錯誤截圖,跟你的 Pi Web 版本,貼到 GitHub issue 或 Discord 社群。不要只回報「安裝失敗」——要說你選了什麼、出現了什麼,以及那個 Skill 有沒有出現在 system prompt 裡。
大家常問的問題

剩下的部分

怎麼找值得安裝的 Skill?有目錄嗎?
沒有官方的 Pi Agent Skill 商店;Skill 分散在各個 GitHub 倉庫裡。有三個地方可以找: skills.sh,面板連結過去的、社群整理的目錄,依主題分類;在 GitHub 搜尋 topic:claude-skilltopic:pi-agent-skill;還有 r/ClaudeAI 跟 r/homeassistant 社群,或 #skills 在 X 上的話題。優先選 Home Assistant、智慧家庭跟家事類的 Skill——一個通用的寫程式或 Markdown 排版 Skill,在家裡的價值遠比在辦公室低。
裝了 Skill 會讓對話整體變好嗎?
只有在它涵蓋的情境裡才會。Skill 在對的時機提供相關的規則;它不是一個能全面提升品質的開關。 home-assistant-best-practices 在你寫自動化的時候可能幫很大的忙,問會不會下雨的時候完全沒用,而一大堆 Skill 只會讓選擇變得更難。一把好菜刀不會讓你變成更好的廚師。
能裝幾個?有上限嗎?
沒有硬性的技術上限——你的儲存空間容得下多少目錄就能裝多少。實際上問題大概從 5-10 個開始出現:system prompt 變大、耗費更多 token、agent 選擇起來更困難,規則也開始互相衝突。有經驗的使用者建議裝 3-7 個、任務明確分開的 Skill。三個你幾乎天天用的,勝過十個你「可能哪天會用到」的。
多花的 API 成本值得嗎?
沒有另外收費——Skill 就是包在 system prompt 裡的 Markdown。成本是提示變長:每次對話多出幾百到幾千個輸入 token,看是哪個 Skill 而定。用 GLM-4.6 這種便宜的模型,每次對話不到 0.001 美元;一天問一百輪,一個月最多大概 3 美元。要控制成本:只留你真的在用的 Skill、避免異常冗長的(超過大約 5,000 字通常是寫得太細了),日常簡單問題用不會思考的模型。
檔案存在哪裡?能編輯嗎?
npm 套件放在 /data/pi-agent/home/.pi/agent/npm/<pkg>/底下,Git 套件放在 /data/pi-agent/home/.pi/agent/git/<host>/<user>/<repo>/底下,手寫的 Skill 放在 /data/pi-agent/skills/<name>/底下。最後那個路徑是符號連結,指向 $HOME/.pi/agent/skills/,所以兩個名字指的是同一批檔案,面板的 Installed Path 會準確顯示是哪一個。你可以編輯它們——但 pi update 會重置 Git 套件的本機改動,所以要讓改動保留下來,就 fork 那個倉庫,改裝你自己的 fork。
能把我的 Skill 複製到另一個 Pi Agent 上嗎?
可以,這是官方支援的離線搬遷方式——但不要只複製 skills/。要把整個 /data/pi-agent/ 目錄從主機 A 打包起來,包括 skills/home/.pi/agent/npm/home/.pi/agent/git/home/.pi/agent/settings.json,解壓縮到主機 B 的同一個路徑,再重新載入 session。 settings.json 是最關鍵的一塊:它記錄了裝了哪些 npm 跟 Git 套件、釘住的版本引用,跟它們的範圍。沒有它,這些套件都不會被登記。一般備份用 Home Assistant 的 snapshot 更簡單,因為它會完整帶走 /data/pi-agent/
Skill 一定要用英文寫嗎?
不用——用你的模型支援的任何語言寫指示都行。如果是中文 Skill,就把每一條指示、觸發範例跟嵌入的提示都用中文寫,需要的地方明確要求用中文回覆。 name 欄位跟資料夾名稱不管怎樣都保持小寫 ASCII,路徑才能到處通用。如果使用的人可能用不只一種語言,就在 description 裡放上每種語言各自的觸發詞。
YAML 到底是什麼?
一種人類看得懂、用縮排表示結構的鍵值格式——跟 Home Assistant 那種 alias: 日落開燈。這裡的 frontmatter 只需要 name:description:,各自冒號後面有空格。這個範例不需要更進階的東西。
Skill 能叫 agent 用工具嗎?
可以,前提是你的部署有提供那些工具,而且你的核准政策允許。一個 SKILL.md 能叫 agent 讀 /config/automations.yaml ,或動用 bash,但 bashread_filewrite_file 有沒有可用,取決於你的部署——而且 Skill 本身不會授予任何權限。要控制 Home Assistant,需要另外設定一個 MCP 伺服器,例如 ha-mcp,提供像 ha_get_stateha_call_service。核准之前,把每張工具卡都檢查過。
寫得爛的 Skill 會不會弄壞 Pi Agent?
格式錯誤的 frontmatter 通常只會讓那一個 Skill 載入不了;其他的照樣會載入。但不要把這解讀成「格式正確的 Skill 就安全」。一個格式完全正確的 SKILL.md 照樣可能要求破壞性的動作、要求洩漏資料,或要求你放寬核准機制。測試第三方 Skill 時,先在本機開著核准機制,盯著 log 跟工具請求看,沒讀過的東西不要發布或推薦。
Skill 沒經過我核准就能讀我的檔案嗎?
Skill 只是文字——但 agent 可能透過已提供的工具,照那段文字去動作,所以實際的存取權限取決於你的工具設定、路徑權限跟核准政策。讀懂工具卡,拒絕你沒預期到的存取。安裝別人的 SKILL.md之前,讀一遍找這五件值得你停下來的事:大範圍讀取檔案、對外傳輸資料、要求刪除、存取憑證,以及任何想放寬核准機制的企圖。
新 session 裡 Skill 還在嗎?
在。Skill 是裝在 Pi Agent 裡,不是存在模型的記憶裡,所以只要它還裝著,每個新 session 都能載入它。真正 不是 會延續下去的,是你在一個 session 裡講過的話——「這次用素食版本」只適用於那場對話。持久、不是機密的規則屬於 SKILL.md;一次性的例外屬於對話本身。
能給 Skill 做版本控管、回溯改動嗎?
可以。如果它放在 GitHub 上,每次改動都 commit 到 SKILL.md,接著用 git log 找到你要的版本,再用 git checkout ——或你自己 Git 工作流程用的還原指令——回到那個版本。任何你依賴的東西都放進版本控管。驗證過的 Home Assistant 備份是第二層保障,因為它也涵蓋 /data/pi-agent/skills/
接下來

接下來往哪走

繼續

你現在能教它一項手藝了。第 11 篇要給它一條生產線。

下一篇要架一條影片流程——這是本系列第一個真正讓 agent 在你主機上跑一連串真實工具的任務,而不只是回答問題。

打開完整教學手冊

Pi Agent 入住指南》系列第 10 篇,由 WoowTech 渥屋科技 製作。

內容出自 Woow HA Pi Agent 入住指南,依 CC BY 4.0 釋出。

The Smart Space Solution · 智慧空間解決方案 · © 2026 WOOW Technology Co., Ltd.

網誌: Pi Agent 指南
分享這個貼文