安裝別人寫好的 Skill,再自己寫一個
第 9 篇解釋了 Skill 是什麼。這篇是動手的一半:不寫程式安裝一個公開發布的 Skill、學會那條幾乎每個人都會踩到的命名規則,再自己寫一個——一個裝在單一檔案裡的冰箱盤點 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 之間。
- 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@v1git:[email protected]:user/repo | git clone,允許簡寫 | ~/.pi/agent/git/<host>/<path> |
| Git,完整協議 URL | https://github.com/user/repossh://[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/repo、 git:codeberg.org/user/repo,或你自己的伺服器 git:git.your-domain.tw/user/repo。
GIT_TERMINAL_PROMPT=0 跟 GIT_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,再輸入路徑 |
known_hosts 裡,並把金鑰存在 /data/pi-agent/home/.ssh/ —— 不是 在 /root/.ssh/,因為 HOME 是釘在資料磁區的。第一次抓大概 30 分鐘;之後就能重複用。如果你原本就不是用 SSH 管理 Git,用公開的 fork 在家裡通常簡單得多:大概五分鐘,前提是授權跟權限允許。安裝一個真實的 Skill,再證明 agent 看得到它
按 + 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 商店的東西。
npm:@scope/package。上面這個版本只有搜尋欄。如果你的面板沒有規格輸入欄,目錄裡沒有的東西就用命令列——兩邊共用同一份狀態,所以結果最後都會出現在面板裡。-
步驟 1
搜尋它,或用規格安裝
點 + Add skill,輸入
mattpocock,點 Search。這篇教學用的是mattpocock/skills:在家用不太到,但安裝起來很穩定。面板呼叫的是/api/skills/search;符合的卡片會各自帶著自己的 Install 按鈕回來。如果目錄裡沒有你要的,打開連到附加元件的終端機,跑下面其中一個:pi install git:github.com/mattpocock/skillspi install https://github.com/mattpocock/skillspi install git:github.com/mattpocock/skills@main第三種寫法釘住一個標籤或 commit。不要輸入單獨的
mattpocock/skills。 -
步驟 2
點 Install,然後不要管它
按鈕顯示 Installing… ,這段期間它在運作。背後面板送出的是
/api/skills/install,用{cwd, package, scope},後端跑的是pi install。通常 5-30 秒,看倉庫大小跟你的網路。不要取消或重新整理頁面。最後會跳出一個 Package installed. 提示。 -
步驟 3
檢查出現的項目
新的 Skill 會出現在左欄。點它:面板上會有一個啟用/停用開關、 Check Updates、 Remove,且 Installed Path ——在
~/.pi/agent/npm/,給 npm 套件用,~/.pi/agent/git/<host>/<path>/,給 Git 套件用。 -
步驟 4
重新載入 session,不是重新整理頁面
Reload Session 通常在右上角;點它應該會看到 Session reloaded. 開新 session 也行。F5 不行——system prompt 是 session 開始時組出來的,中途不會重讀,這也是新裝的 Skill 看起來憑空消失最常見的原因。
-
步驟 5
在 system prompt 裡找到它,用一次看看
打開唯讀的 System Prompt 面板,捲到
<available_skills>區塊;你的 Skill 名字應該在裡面。這證明了 Pi 找到它——但不證明 agent 會用得好。所以也試著在測試請求裡點名它:「請用 Skill name 幫我做某件事。」如果回覆有反應、正確的工具也出現了,就代表能用。 -
步驟 6
在依賴它之前先讀懂它的 SKILL.md
SKILL.md是 Pi 會讀的檔案,不是README.md:它裝著name、description跟allowed-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 listpi remove npm:@foo/barpi remove git:github.com/user/reporm -rf 會刪掉檔案,但會把登記資訊留在 ~/.pi/agent/settings.json裡。下次啟動時 Pi 可能會嘗試重新安裝那個不見的套件,或者直接回報錯誤。永遠優先用 pi remove;如果真的不得不手動清理,就去改 settings.json 讓內容對得上。不管哪種方式,之後都要重新載入 session。既有的 session 不受影響——它們的 Skill 文字在開始時就已經固定進 system prompt 裡了。/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 | 兩條 --- 之間的鍵值對,寫在最上面,包括 name 跟 description | 告訴 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-checkdescription: 當使用者分享冰箱照片或問要煮什麼的時候使用。盤點看得到的食物,找出可能快過期的項目,並建議晚餐菜色。---# 冰箱盤點 Skill幫使用者盤點冰箱、評估看得到的新鮮度線索,並規劃餐點,不編造細節。## 什麼時候用這個當使用者符合以下情況時,使用這個 Skill:- 分享冰箱或冷凍庫的照片- 問冰箱裡有什麼,或要煮什麼- 提到食材、儲藏室物品、剩菜,或快過期的食物## 步驟1. **先描述看得到的東西** ——用位置、品項、大概數量描述。標籤或包裝看不清楚就直說,不要用猜的。2. **找出需要盡快檢查的項目** ——注意看得到的跡象,例如葉菜變黃、包裝破損、滲漏或變色。說明照片沒辦法確認食品安全。3. **建議一到兩道晚餐菜色** ——優先用看起來還能吃、該盡快吃完的食材。避免需要額外採買太多東西。4. **列一份簡短的優先使用清單** ——整理出使用者該優先檢查或使用哪些項目。## 安全- **不要編造看不到的品項。**- **不要診斷中毒風險,也不要提供醫療建議。** 如果某項東西看起來壞掉了,建議使用者自己檢查,有疑慮就丟掉。- **先問清楚有哪些廚房設備跟飲食限制**,再假設烹調方式。- **物品部分被擋住時,用大概的數量描述。**- **用繁體中文回覆**,除非使用者明確要求其他語言。## 輸出範例【冰箱盤點】- 上層:一盒牛奶、大約四顆蛋、一碗剩菜- 中層:半顆高麗菜、兩根紅蘿蔔、一盒豆腐- 蔬果抽屜:一把菠菜;部分葉子看起來變黃了【晚餐建議】1. 菠菜炒蛋——用掉菠菜跟兩顆蛋2. 豆腐炒高麗菜——用掉豆腐跟部分高麗菜【接下來該檢查或優先使用】- 檢查牛奶的日期跟保存方式- 檢查剩菜,如果保存得當就盡快用掉把 輸出範例 這個區塊當成範本,下一次重新填寫:名字、描述、什麼時候用、步驟、安全事項、輸出格式。
--- 都必須各自獨佔一行、精確三個連字號,而且第一條必須是檔案裡的第一個東西——上面不能有空行,也不能有位元組順序標記。 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-checkgit initgit add SKILL.mdgit commit -m "Initial fridge check skill"# 在 GitHub 建一個叫 fridge-check 的公開倉庫git remote add origin https://github.com/your-account/fridge-check.gitgit branch -M maingit 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,再附上一張你冰箱的照片——先看過照片有沒有隱私內容。回覆應該依序描述看得到的東西、標出該檢查的項目、建議晚餐、列出接下來要檢查什麼,而且不能有沒根據的安全宣稱。
三件決定 agent 到底會不會用它的事
裝了幾個之後,寫得好不好幾乎決定了一切。三個原則做了大部分的工作。
| 原則 | 弱的寫法 | 好的寫法 |
|---|---|---|
| 把 description 寫具體,帶真實的觸發條件 | description: 幫助使用者處理家事 |
description: 當使用者分享冰箱照片、提到食材、儲藏室物品、剩菜,或問「今天該煮什麼」時觸發 |
| 把步驟編號,順序就不用用猜的 | 「看看冰箱裡有什麼,提供一些建議。」 | 「1. 描述看得到的東西。2. 標出該檢查的項目。3. 建議晚餐。4. 列出接下來要檢查什麼。」 |
| 把禁止事項直接講清楚 | (沒有講任何禁止事項。) | 「不要編造食材、不要診斷食物中毒、不要單憑照片就宣稱食物安全,也不要推薦要花超過 30 分鐘、你不熟悉的菜色。」 |
禁止事項是大家最容易漏掉的部分,而它們很重要,因為這些系統本來就很急著幫忙。不把界線講清楚,一份盤點清單就可能漂移成編造出來的營養報告,或關於細菌跟疾病的宣稱。直白的指示——「不要診斷」、「不要單憑一張圖就推斷安不安全」——能讓輸出維持有用,並保持適當的限制。但也不要矯枉過正:滿篇的「必須」跟「絕對不要」會讓回覆聽起來很像照本宣科,所以真的該由判斷力決定的地方,用「優先」、「通常」或「避免」,只有真正的禁止事項才寫得堅定。
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.pdf、 ac.pdf、 dryer.pdf |
ha-automation | 「幫我寫一個 Home Assistant 自動化並解釋它」 | 用 Home Assistant 的 trigger/condition/action 結構產出 YAML | entity_map.md |
video-script | 要求一份影片腳本或 YouTube Short | 產出 30 或 60 秒的腳本、分鏡表跟字幕 | voice.md |
如果你的某個 Skill 在你家以外也安全又有用,就發布到一個公開的 GitHub 倉庫,讓其他人在安裝前能先讀過。發布前先做四件事。
-
步驟 1
確認倉庫真的是公開的
在 GitHub 打開倉庫,去 Settings ,捲到 Danger Zone 確認它的可見度。私有倉庫沒有驗證是抓不到的,所以別人的安裝一定會失敗。
-
步驟 2
第一次推送之前,先去掉任何私密內容
憑證、個人資訊、內部主機名稱、entity 名稱、路徑、家庭細節。一旦推上公開倉庫就會留在歷史紀錄裡,所以這件事要在推送之前做,不是之後。
-
步驟 3
分享一個大家真的貼得上去的規格
不要叫任何人輸入
your-account/fridge-check——Pi 會拒絕單獨的簡寫。給他們git:這種格式,或完整的https://github.com/…網址。 -
步驟 4
加一份給人看的 README.md
解釋這個 Skill 做什麼、怎麼用,還有一段範例對話長什麼樣,讓人在安裝前就能判斷合不合用。
SKILL.md是寫給 agent 看的;README.md是給人看的。
#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"
clone 完成了,但面板裡沒有這個 Skill
/api/skills?cwd=… 請求。應該要回 200;4xx 或 5xx 指向後端有問題。特別注意 403:目前的工作目錄既不是信任的專案,也不是預設的 pi-cwd-YYYYMMDD/ 目錄。裝好了,但 agent 看起來沒理它
<available_skills>。如果有,問題通常出在觸發條件不夠具體—— description 太模糊,agent 認不出什麼時候該用它。臨時的補救辦法是直接開口:「請用 Skill name 幫我。」真正的修法,是讀那個 Skill 的 README,看作者原本設想的觸發語句,或用具體的詞重寫 description。如果 description 已經夠具體了,問題可能出在模型本身:像 GLM-4-Flash 這種輕量模型,處理複雜指示的方式可能不太一樣,有機會的話比較一下目前有推理能力的模型,例如 GLM-4.6、Claude Sonnet 4 或 DeepSeek-R1。不要只憑模型系列的名字就推斷指令遵循能力——用同一個提示實測那個精確的模型,並且讀它的工具呼叫,不只是讀它的回覆。System prompt 面板裡完全沒有顯示
--- 分隔線都各自獨佔一行、精確三個連字號,第一條前面沒有空行; name: 跟 description: 拼字正確,冒號後面有空格;檔名精確是 SKILL.md,大寫 SKILL,小寫 .md。用 VS Code 或 Notepad++ 這類文字編輯器打開它,確認編碼是不帶 BOM 的 UTF-8。兩個 Skill 看起來互相打架
出了完全不同的問題
剩下的部分
怎麼找值得安裝的 Skill?有目錄嗎?
topic:claude-skill 或 topic:pi-agent-skill;還有 r/ClaudeAI 跟 r/homeassistant 社群,或 #skills 在 X 上的話題。優先選 Home Assistant、智慧家庭跟家事類的 Skill——一個通用的寫程式或 Markdown 排版 Skill,在家裡的價值遠比在辦公室低。裝了 Skill 會讓對話整體變好嗎?
home-assistant-best-practices 在你寫自動化的時候可能幫很大的忙,問會不會下雨的時候完全沒用,而一大堆 Skill 只會讓選擇變得更難。一把好菜刀不會讓你變成更好的廚師。能裝幾個?有上限嗎?
多花的 API 成本值得嗎?
檔案存在哪裡?能編輯嗎?
/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 一定要用英文寫嗎?
name 欄位跟資料夾名稱不管怎樣都保持小寫 ASCII,路徑才能到處通用。如果使用的人可能用不只一種語言,就在 description 裡放上每種語言各自的觸發詞。YAML 到底是什麼?
alias: 日落開燈。這裡的 frontmatter 只需要 name: 跟 description:,各自冒號後面有空格。這個範例不需要更進階的東西。Skill 能叫 agent 用工具嗎?
SKILL.md 能叫 agent 讀 /config/automations.yaml ,或動用 bash,但 bash、 read_file 跟 write_file 有沒有可用,取決於你的部署——而且 Skill 本身不會授予任何權限。要控制 Home Assistant,需要另外設定一個 MCP 伺服器,例如 ha-mcp,提供像 ha_get_state 跟 ha_call_service。核准之前,把每張工具卡都檢查過。寫得爛的 Skill 會不會弄壞 Pi Agent?
SKILL.md 照樣可能要求破壞性的動作、要求洩漏資料,或要求你放寬核准機制。測試第三方 Skill 時,先在本機開著核准機制,盯著 log 跟工具請求看,沒讀過的東西不要發布或推薦。Skill 沒經過我核准就能讀我的檔案嗎?
SKILL.md之前,讀一遍找這五件值得你停下來的事:大範圍讀取檔案、對外傳輸資料、要求刪除、存取憑證,以及任何想放寬核准機制的企圖。新 session 裡 Skill 還在嗎?
SKILL.md;一次性的例外屬於對話本身。能給 Skill 做版本控管、回溯改動嗎?
SKILL.md,接著用 git log 找到你要的版本,再用 git checkout ——或你自己 Git 工作流程用的還原指令——回到那個版本。任何你依賴的東西都放進版本控管。驗證過的 Home Assistant 備份是第二層保障,因為它也涵蓋 /data/pi-agent/skills/ 。接下來往哪走
《Pi Agent 入住指南》系列第 10 篇,由 WoowTech 渥屋科技 製作。
內容出自 Woow HA Pi Agent 入住指南,依 CC BY 4.0 釋出。
The Smart Space Solution · 智慧空間解決方案 · © 2026 WOOW Technology Co., Ltd.