AI Engineer Europe 2026 · 工作坊 · 2026-05-04 · 79 分
替 agent 寫 skill 再用評估驗證
Skill Issue: How We Used AI to Make Agents Actually Good at Supabase · Pedro Rodrigues,Supabase
Pedro Rodrigues 以 Supabase 的資料庫安全問題為例,帶著大家手動寫一份 skill、看 agent 行為怎麼改變,最後用有無 skill 的對照評估自動重跑,也談上線維護。
概要
- Skill 不只是一份 SKILL.mdPedro 說 skill 是放指令、參考檔與腳本的資料夾,SKILL.md 先只載入 description,其餘內容等 agent 需要再讀,也就是 progressive disclosure。
- Skill 與 MCP 互補做整合、或 agent 沒有 bash 時用 MCP;工作流程和工具描述放不下的背景放在 skill。Pedro 建議用 MCP 工具取資料、用 skill 說明怎麼用。
- 示範的坑是 view 繞過 RLS沒有 skill 時,Claude 建的 view 回報成功,但經理能看到別部門的資料;原因是 Postgres 的 view 預設繞過 row level security,要加 security invoker 旗標。
- 載入 skill 後行為確實改變Pedro 的 skill 把這類安全重點寫進去,重跑同一個 prompt 時 agent 就在 view 加上了該旗標。至於怎麼讓 skill 容易被載入,建議 description 用 use 開頭,或在 prompt 直接點名 skill。
- 評估是第一條自動化管線Pedro 照 Agent Skills 開放標準的 eval.json 結構,用有無 skill 兩種條件跑 Claude Code,再比較結果;示範中斷言寫錯導致結果顛倒,說明 eval 本身也要小心設計。
- 上線後把 skill 當文件維護Q&A 中 Pedro 建議把更新流程寫進 CLAUDE.md 或 AGENTS.md,並定期檢查 skill 還有沒有人載入。
原話
▶ 47:14“six months ago, and now it's fairly it's fair to say that it's one of the north stars of agent development”
六個月前沒人在談 progressive disclosure,現在可以說是 agent 開發的指北星之一
▶ 52:29“you can think of the skill that mds as a prompt template to your agent”
可以把 SKILL.md 當成給 agent 的 prompt 模板
▶ 59:53“It's the tool to enable this connection, this integration, and the skill to describe how to use it.”
工具負責建立連接與整合,skill 負責說明怎麼用
▶ 1:11:06“As like normal tests, the results will depend on how you implement them, right? It's just code.”
跟一般測試一樣,結果取決於你怎麼實作,畢竟那只是程式碼
▶ 1:16:34“treat skills that you put into production as actual document as you would read documentation”
把上線的 skill 當成真正的文件來對待
延伸
- Pedro 提醒 skill 跟 MCP 一樣還在很早期:progressive disclosure 半年前沒人在談、現在成了 agent 開發的指北星,再過半年可能又換成別的東西。
- 評估驅動開發的流程,Pedro 引的是 OpenAI 今年一、二月的部落格文章〈systematically evaluate agent skills〉。
章節
點時碼直接跳到原片的那一段。
- 改名與 Pedro 自介工作坊從原訂的 Skill Issue 改名為 level up your skills;Pedro 在 Supabase 擔任 AI tooling engineer,工作是讓 Supabase 對 agent 更友善。
- Skill 的結構skill 是放指令與檔案的資料夾,必填的只有 SKILL.md 的 name 與 description;Pedro 用「書的目錄與章節」比喻 progressive disclosure。
- Skills 與 MCP 的分工Pedro 認為兩者是蘋果比橘子:做整合就用 MCP,沒有 bash 也只能用 MCP;skill 補的是工具描述放不下的工作流程與背景。
- 怎麼測一份 markdown測 skill 就是測 LLM 在迴圈裡的行為,也就是 evals;比起比對最終輸出,評估 agent 走了哪些步驟、呼叫哪些工具更實用。
- 評估驅動的開發循環Pedro 介紹 OpenAI 部落格提出的流程:先定義指標、寫 skill、跑評估、評分,再回頭迭代;並提到 Braintrust 這類平台。
- 示範專案與 Supabase 簡介示範用一個績效考核的 Next.js 應用,目標是先手動修資料庫端的問題,最後再用 evals 自動重跑;也簡介 Supabase 是 Postgres 為底的 backend as a service。
- Repo 與示範應用Pedro 帶大家看 GitHub repo 與 demo 應用,任務是新增一個顯示各部門薪資與平均評分的 reports 頁。
- 沒有 skill:agent 建 view接上本地版 Supabase MCP server,Claude 列出資料表、套用 migration 建出 department stats view,並回報一切正常。
- 驗收:經理看得到別部門用 HR 帳號看報表沒問題,換成經理 Bob 卻看得到其他部門的資訊,Pedro 認為這是 agent 沒說出口的漏洞。
- 原因:view 繞過 RLS資料表開了 row level security,但 Postgres 的 view 預設用建立者的權限,會繞過 RLS;要加 security invoker 旗標才會套用。
- 寫 supabase-security skillPedro 寫了涵蓋三個安全重點的 skill,description 以動詞 use 開頭,據自己的實驗這樣更容易被載入;內容也包含 public schema 要開 RLS 的檢查項。
- 用 skills 套件安裝用 Vercel 的 skills npm 套件把 skill 裝進專案,放在 .agents 並以 symlink 連到 .claude/skills,Pedro 說這樣兩邊的 agent 都找得到。
- 怎麼讓 skill 被載入只靠 description 要碰運氣;在 prompt 寫 use 加上 skill 名稱幾乎都會載入,Claude Code 的 slash 指令則保證載入。
- 提問:skill 該怎麼自動觸發有聽眾問 skill 由 agent 決定要不要載入的問題;Pedro 建議自己設計該載入與不該載入的情境,反覆調 description,並說這個領域仍在標準化。
- 有 skill 後的結果重置資料庫再跑同一個 prompt,這次 agent 載入 skill 並在 view 加上 security invoker,行為確實改變,但後續排錯沒有完全成功。
- Context 占用與 tool searchPedro 對比載入 skill 前後的 context,並說明 Claude Code 的 tool search tool 是替 MCP 工具做的 progressive disclosure,不像 skill 是內建設計。
- 提問:大型 schema 的逐步載入有聽眾問怎麼讓 agent 逐步載入大資料庫的 schema;Pedro 建議取資料用 MCP 工具,使用方式寫在 skill 裡,兩者搭配而不是對立。
- 為什麼要自動化測試在自己機器上能跑不代表換環境也行;要能在改 skill 後確認既有流程沒壞,就要評估,而最難的是想出有代表性的情境。
- eval.json 與 LLM 評審Pedro 照 Agent Skills 開放標準的結構,用 eval.json 放 prompt、預期輸出與斷言,可用工具呼叫檢查或讓另一個 LLM 當評審評分。
- 有無 skill 兩種條件跑 eval用 Python 腳本重置資料庫,以 headless 的 Claude Code 分別跑有 skill 與沒有 skill 兩種條件,有 skill 那組把 SKILL.md 附加到 system prompt。
- Eval 自己寫錯的示範結果顯示有 skill 那組失敗、沒有的反而通過,原因是斷言檢查的位置寫錯;Pedro 藉此說明 eval 跟一般測試一樣會因為寫法而出錯,LLM 評審還可能幻覺。
- 總結:第一條評估管線兩種條件、同一個 harness、比較結果,就是最簡單的起點;之後可以改到 Docker 或 sandbox 取得乾淨環境。
- Q&A:skill 數量與上線維護有聽眾問 skill 能裝多少;Pedro 說本機不必太擔心,上線則把 skill 當文件維護,在 CLAUDE.md 或 AGENTS.md 寫更新流程,並定期檢查有沒有被用到。
名詞
- Supabase
- Pedro 任職的公司,以 Postgres 為底的 backend as a service,提供資料庫、驗證、儲存與 edge functions
- Pedro Rodrigues
- Supabase 的 AI tooling engineer,過去兩個月在替 Supabase 寫自家的 skill
- SKILL.md
- skill 的主檔,frontmatter 必填 name 與 description
- progressive disclosure
- 不一次把資訊全塞進 context,只載入足以讓 agent 判斷是否要再讀的內容
- RLS(row level security)
- 在資料庫層限制誰能看到哪些資料列,不必靠應用程式過濾
- security invoker
- 讓 Postgres view 套用 RLS 政策的旗標,沒加時 view 會繞過 RLS
- skills(npm 套件)
- Vercel 出的套件,可把 skill 裝進專案並連結到不同 agent 的資料夾
- Agent Skills 開放標準
- Pedro 採用其 eval.json 結構來設計測試案例的標準網站
- LLM as a judge
- 把執行結果交給另一個 LLM,依成功標準評分
- Braintrust
- Pedro 提到的評估平台,可系統化跑 evals 並觀察 agent 行為
- database advisors
- Supabase 提供的檢查工具,用來提早發現暴露的 schema 與潛在漏洞
- tool search tool
- Claude Code 依需求載入 MCP 工具的機制,Pedro 視為 MCP 版的 progressive disclosure







