把你剛調通的一套流程做成 DeepSeek Harness 技能
七張實測截圖:從你終於跑順的那個操作,到一個會出現在工作階段技能目錄裡的 SKILL.md——檔案裡該寫什麼、不該寫什麼,以及怎麼證明它真的攔得住東西。
最近更新: 2026-09-22

技能是 DeepSeek Harness 裡最便宜的可重用物件:專案裡一個 Markdown 檔案,情境對上了 agent 就去讀它。你不用編譯、不用接線、不用重啟任何東西。也正因為門檻這麼低,難的從來不是把它建立出來,而是知道什麼該寫進這個檔案,以及怎麼判斷它到底有沒有在起作用。
本頁跟著一支實錄影片裡的技能章節走(出處見上方與文末署名),整條創作回路都在鏡頭前發生:用白話要一個 commit 技能、開啟產生的 SKILL.md 逐行讀、把其中唯一一句靠判斷的步驟改寫成指令碼,最後拿一個故意埋進 repo 的假金鑰驗收。所有截圖都出自這一章。安裝別人寫好的技能、以及該裝哪幾個,是另外兩件事,文末都有連結。
記住這三點
- ▸不用先手寫檔案。在工作階段裡把流程描述清楚,agent 會寫出 .agents/skills/<name>/SKILL.md,而且立刻出現在這個工作階段的技能目錄裡——不需要重啟。
- ▸一個技能就是 frontmatter 加內文:name、description、whenToUse 決定模型會不會去讀後面那部分,內文應該是帶確切指令的編號步驟,最後再來一段 Rules 寫明絕對不行的事。
- ▸任何寫成判斷句的步驟——看起來不安全就攔下來——都該換成帶結束碼的指令碼,讓同一個 repo 狀態永遠給出同一個結論。
七個步驟
技能檔案在哪
- 1
先看專案樹——.agents 就在 repo 根目錄
動手之前先看清楚一個專案層級的技能會落在哪裡。harness 的檔案樹在 repo 根目錄列出 .agents/、.obsidian/、vault/、spec.md、AGENTS.md 和 README.md,內建編輯器開啟其中任何一個檔案時,右邊就是即時的 Markdown 預覽。技能就是這棵樹裡的一個檔案:跟著 repo 一起走版本,你隨時能改——它不是藏在某層選單裡的一個開關。
$.agents/skills/<skill-name>/SKILL.md
技能就是 repo 裡的檔案——用的就是你平常已經在改的那棵樹。看影片 17:06 - 2
先開口要這個技能,再開啟它寫出的 SKILL.md
實錄裡那段需求就一段話:做一個提交用的技能,不要出現任何 AI 署名的痕跡,commit message 用簡潔的條列,快速檢查有沒有不該提交的東西,但預設把所有工作檔都提交、目標是讓工作目錄乾淨,而且不准 push 也不准部署。於是 agent 寫出 .agents/skills/commit/SKILL.md。開啟它就能看到所有技能共有的形狀:一個 name,一句說明它做什麼、也說明它拒絕做什麼的 description,還有一行 whenToUse,寫的是使用者真的會說出來的那些說法。
$name: commit$description: Make a git commit of all working changes with a concise bulleted message; never pushes or deploys.$whenToUse: Use when the user asks to commit changes, make a commit, check in work, or wrap up a task.
三個 frontmatter 欄位決定了模型會不會去讀檔案剩下的部分。看影片 17:14
裡面該寫什麼
- 3
內文寫成編號步驟,後面再補一段 Rules
產生的檔案是六個步驟——查狀態、快速體檢、全部暫存、寫訊息、提交、覆核——每個步驟一個粗體小標題,並把指令原樣寫出來(git status、git add -A、git commit -m、git log -1 --oneline),後面跟著一段 Rules 收住那些絕對不行的事:不署名、只用簡潔條列、不准 push 也不准部署。正是這個結構讓技能可以被審閱。而第二個步驟值得盯一下:掃一遍 status,把明顯不該提交的東西挑出來,看起來不安全就回報給使用者——這是一句用英文寫成的判斷。

編號步驟是契約;被選取的那一行仍然交給判斷。看影片 18:18 - 4
把含糊的英文改寫成確定性指令碼
解法是再發一則訊息,把那句有問題的步驟原話引用出來,然後要求把它轉換成確定性指令碼。agent 會在同一個技能資料夾裡加上 scripts/check-commit-safety.sh,並修改 SKILL.md,讓第二個步驟變成執行指令碼而不是自己拿主意——同一個 repo 狀態進去,同一個結論出來。機器能決定的事,不該留給模型對一句話的理解。
$please convert to deterministic script
先把那句寫壞的話引用出來,再要求用程式碼取代觀點。看影片 18:34
先驗證再依賴
- 5
埋一個壞檔案進去,順便看看目錄樹
要測一條安全規則,就得給它一個它必須拒絕的東西。於是在專案根目錄新建 .env,第一行打一個假密碼,此時檔案樹裡同時能看到技能自己的 scripts/ 資料夾和這個新的 .env——這也是你會用來修改它們的同一個視圖。順帶一提,指令碼一旦進了技能資料夾,這也是最省事的一種確認它究竟裝了什麼的方法。
$password=secret
測安全規則的方法,就是餵給它一個必須拒絕的東西。看影片 19:26 - 6
讀結論,別讀氣氛
指令碼會把它查到的東西印出來:Safety check FLAGGED 2 item(s) among 7 would-be-committed file(s),其中 .env 被列了兩次——一次命中排除清單的模式,一次被辨識為內容裡疑似金鑰。決定權在人:.env 被寫進新建的 .gitignore,複檢結束碼歸 0,提交落下來,帶著四個動詞開頭的條列和零 AI 署名。它下面那份 Verified 清單,就是這個技能的驗收標準:工作目錄乾淨、訊息裡沒有 AI 署名、沒有 push。

結論會點名檔案和命中的規則,だからこそ、レビューに耐える。看影片 19:44 - 7
把你這次做的決定寫回技能
agent 注意到自己停下來等人拍板,於是提議把這種處理變成預設行為:以後你說 ignore it,它就把被標記的檔案自動寫進 .gitignore 並提交其餘部分。回答是 yes do this。這是最後一個創作步驟,也是最常被跳過的一個——你這次臨時做的決定進了檔案,下一個工作階段就不需要你在場。
$yes do this
最後一個創作步驟,是把你這次的決定寫回技能。看影片 20:00
技能不是外掛
兩者都能靠一句話產生,也都會改變 agent 的行為,但它們是不同的東西,保證程度也完全不同。技能是一段 Markdown,模型覺得情境相關時才會去讀——它永遠只能給建議,可能被誤讀,也可能被跳過。外掛是安裝進 harness 的一個套件,鉤在執行期上:它能加工具、改介面,也能不管模型同不同意都把某條規則執行到底。如果這條規則每一次都必須成立,去做外掛;如果這只是你每個工作階段都要重新解釋一遍的流程,那就寫技能。同一個 commit 範例的逐項對照,單獨寫在 外掛與技能的差別.
自己寫 DeepSeek Harness 技能:常見問題
第一次動手寫 SKILL.md 的人會問到的那些問題。
DeepSeek Harness 的技能檔案放在哪裡?
放在專案裡:.agents/skills/<skill-name>/SKILL.md。實錄裡那句是直接唸出來的——技能從專案根目錄的這個路徑被發現,層級是專案範圍——那次產生的 commit 技能落在 .agents/skills/commit/SKILL.md,它的輔助指令碼就在旁邊,.agents/skills/commit/scripts/check-commit-safety.sh。
新增技能之後要重啟 harness 嗎?
不用。工作階段裡它自己的回報就是技能已生效、立刻出現在這次工作階段的技能目錄中,而回覆流裡在那次寫檔之後緊跟著一條 Context injection · skill-catalog——檔案一落地,目錄就重讀了一次。這正好和安裝外掛相反:外掛要重啟服務並強制重新整理頁面。
name、description、whenToUse 分別該寫什麼?
name 是你呼叫它用的識別碼——commit。description 用一句話說清楚它做什麼、拒絕做什麼:Make a git commit of all working changes with a concise bulleted message; never pushes or deploys. whenToUse 是觸發句,寫的是使用者真的會打的那些措辭:asks to commit changes、make a commit、check in work、wrap up a task。這三個欄位是用來判斷相關性的,所以寫給模型看,而不是寫給翻目錄的人看。
我可以自己手寫 SKILL.md,而不是叫 agent 產生嗎?
可以——實錄裡的原話就是技能一點都不神秘,它們本質就是 Markdown 檔案,repo 裡已有的技能資料夾只要格式對得上就能直接讀,格式不同就給點指示或轉換一下。叫 agent 寫比較快,而且通常更周全:出來的東西自帶編號步驟、原樣引用的指令和一段規則區塊。不管哪種方式,事後都要把檔案開啟讀一遍,因為那個檔案就是契約。
什麼樣的步驟應該改成指令碼?
凡是機器能判是/否的:金鑰、檔案大小、路徑模式,任何布林性質的判斷。那次實錄裡,體檢這一步從掃一遍 status 看有沒有不安全的東西,變成一個 exit 0 代表安全、exit 1 代表命中、exit 2 代表環境錯誤的指令碼;SKILL.md 同時被改成以指令碼結論為準,只有使用者可以推翻某一條命中。判斷標準就一句:同樣的輸入必須永遠給出同樣的輸出。
我怎麼確認技能真的被觸發了?
看工作階段裡兩處。目錄變化時回覆流裡會出現一行 Context injection · skill-catalog;agent 寫入或讀取檔案時,那則回覆底部的產物標籤會點名 SKILL.md。至於行為對不對——餵一個應該踩雷的輸入進去,例如帶假金鑰的 .env——然後確認輸出裡既點到檔案,也點到命中它的那條規則。只會說「我已經遵守了」的技能,什麼都沒證明。
相關教學
安裝別人寫的技能、挑值得裝的技能,以及那個最容易被和技能混為一談的東西。
出處與署名
本頁所有截圖都取自上方與文末連結那支影片的技能章節,為移除講者的攝影鏡像浮窗做過裁切,並註明出處。每個步驟都深鏈回它來源的精確秒數;結構劃分、風險提示與結論都是本頁自己寫的。
