2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
3> Use this file to discover all available pages before exploring further.3> Use this file to discover all available pages before exploring further.
4 4
5# SDK 中的 Agent Skills5# 使用 Skills 擴展 Agent
6 6
7> 使用 Claude Agent SDK 中的 Agent Skills 擴展 Claude 的專門功能7> 控制 Claude 在 Claude Agent SDK 會話中可以調用的 Skills,按名稱分派命令,以及編寫會話發現的 Skills
8 8
9<h2 id="overview">9Agent Skills 使用專門功能擴展 Claude,Claude 會在相關時自動調用這些功能。Skills 被打包為 `SKILL.md` 文件,包含說明、描述和可選的支持資源。本頁面也涵蓋了 [Agent SDK 會話中的命令](#commands-in-agent-sdk-sessions)。
10 概述
11</h2>
12
13Agent Skills 使用專門功能擴展 Claude,Claude 會在相關時自動調用這些功能。Skills 被打包為 `SKILL.md` 文件,包含說明、描述和可選的支持資源。
14 10
15有關 Skills 的全面信息,包括優勢、架構和編寫指南,請參閱 [Agent Skills 概述](https://platform.claude.com/docs/zh-TW/agents-and-tools/agent-skills/overview)。11有關 Skills 的全面資訊,包括優勢、架構和編寫指南,請參閱 [Agent Skills 概述](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview)。
16 12
17<h2 id="how-skills-work-with-the-sdk">13<h2 id="how-skills-work-with-the-agent-sdk">
18 Skills 如何與 SDK 配合使用14 Skills 如何與 Agent SDK 搭配運作
19</h2>15</h2>
20 16
21使用 Claude Agent SDK 時,Skills 的特點是:17使用 Claude Agent SDK 時,skills 具有以下特性:
22 18
231. **定義為文件系統工件**:在特定目錄(`.claude/skills/`)中創建為 `SKILL.md` 文件19* **定義為檔案系統成品**:你在自己的目錄中建立每個 skill 作為 `SKILL.md` 檔案,例如 `.claude/skills/<name>/SKILL.md`
242. **從文件系統加載**:Skills 從由 `settingSources`(TypeScript)或 `setting_sources`(Python)控制的文件系統位置加載20* **從檔案系統載入**:SDK 從由 `settingSources`(TypeScript)或 `setting_sources`(Python)控制的檔案系統位置載入 skills
253. **自動發現**:加載文件系統設置後,在啟動時從用戶和項目目錄發現 Skill 元數據;觸發時加載完整內容21* **自動探索**:一旦檔案系統設定載入,SDK 會在啟動時從使用者和專案目錄探索 skill 中繼資料,並在 Claude 叫用 skill 時載入完整內容
264. **由模型調用**:Claude 根據上下文自動選擇何時使用它們22* **由模型叫用**:Claude 根據上下文自主選擇何時使用它們
275. **通過 `skills` 選項進行篩選**:發現的 Skills 默認啟用。傳遞 Skill 名稱列表、`"all"` 或 `[]` 來控制會話中可用的 Skills23* **由使用者叫用**:你可以在提示中傳送 `/<name>` 來直接分派 skill。請參閱 [Agent SDK 工作階段中的命令](#commands-in-agent-sdk-sessions)
24* **透過 `skills` 選項進行範圍設定**:探索到的 skills 預設為啟用。傳遞 skill 名稱清單、`"all"` 或 `[]` 來控制 Claude 可以叫用哪些 skills
28 25
29與子代理不同(可以以編程方式定義),Skills 必須創建為文件系統工件。SDK 不提供用於註冊 Skills 的編程 API。26與你可以在 [`agents` 選項](/docs/zh-TW/agent-sdk/subagents#programmatic-definition-recommended)中定義的 subagents 不同,你將 skills 建立為磁碟上的檔案。SDK 不提供用於註冊它們的程式設計 API。
30 27
31<Note>28<Note>
32 Skills 通過文件系統設置源發現。使用默認 `query()` 選項時,SDK 加載用戶和項目源,因此 `~/.claude/skills/`、`<cwd>/.claude/skills/` 和 `<cwd>` 的任何父目錄(直到存儲庫根目錄)中的 `.claude/skills/` 中的 Skills 可用。如果您明確設置 `settingSources`,請包含 `'user'` 或 `'project'` 以保持 Skill 發現,或使用 [`plugins` 選項](/zh-TW/agent-sdk/plugins) 從特定路徑加載 Skills。29 Skills 透過檔案系統設定來源進行探索。使用預設 `query()` 選項時,SDK 會載入使用者和專案來源,因此 `~/.claude/skills/`、`<cwd>/.claude/skills/` 和 `.claude/skills/` 中的 skills(位於 `<cwd>` 的任何父目錄中,直到儲存庫根目錄)都可用。專案來源也涵蓋 `<dir>/.claude/skills/`(位於你透過 `additionalDirectories`(TypeScript)或 `add_dirs`(Python)傳遞的每個目錄中),因為 SDK 會將這些目錄作為 [`--add-dir`](/docs/zh-TW/skills#skills-from-additional-directories) 傳遞給 Claude Code。如果你明確設定 `settingSources`,請包含 `'project'` 以保留專案和新增目錄 skills,以及 `'user'` 以保留你的個人 skills,或使用 [`plugins` 選項](/docs/zh-TW/agent-sdk/plugins)從特定路徑載入 skills。
33</Note>30</Note>
34 31
35<h2 id="using-skills-with-the-sdk">32<h2 id="use-skills-with-the-agent-sdk">
36 在 SDK 中使用 Skills33 在 Agent SDK 中使用 Skills
37</h2>34</h2>
38 35
39在 `query()` 上設置 `skills` 選項以控制會話中可用的 Skills。省略時,發現的 Skills 啟用且 Skill 工具可用,與 CLI 行為匹配。傳遞 `"all"` 以啟用每個發現的 Skill,傳遞 Skill 名稱列表以僅啟用那些,或傳遞 `[]` 以禁用全部。設置 `skills` 時,SDK 會自動將 Skill 工具新增至 `allowedTools`。如果您也傳遞明確的 `tools` 列表,請在該列表中包含 `"Skill"`,以便 Claude 可以叫用 skills。36在 `query()` 上設置 `skills` 選項以控制會話中 Claude 可以調用的 Skills。省略時,發現的 Skills 啟用且 Skill 工具可用,與 CLI 行為匹配。傳遞 `"all"` 以讓 Claude 調用每個發現的 Skill,傳遞 Skill 名稱列表以僅允許那些,或傳遞 `[]` 以讓 Claude 不調用任何 Skill。
40 37
41配置後,Claude 自動從檔案系統發現 Skills 並在與使用者請求相關時叫用它們。38例如,要讓 Claude 僅調用兩個命名的 Skills:
39
40<CodeGroup>
41 ```python Python theme={null}
42 options = ClaudeAgentOptions(skills=["pdf", "docx"])
43 ```
44
45 ```typescript TypeScript theme={null}
46 const options = { skills: ["pdf", "docx"] };
47 ```
48</CodeGroup>
49
50<h3 id="set-up-skills-in-a-session">
51 在會話中設置 Skills
52</h3>
53
54當您設置 `skills` 時,SDK 會自動將 Skill 工具添加到 `allowedTools`。如果您也傳遞明確的 `tools` 列表,請在該列表中包含 `"Skill"`,以便 Claude 可以調用 Skills。
55
56配置後,Claude 自動從文件系統發現 Skills 並在與使用者請求相關時調用它們。
57
58以下示例在會話中啟用每個發現的 Skill,並預先批准 Skills 通常需要的工具。該示例將 `cwd` 設置為進程的當前工作目錄,因此請從具有當前目錄或任何父目錄(直到存儲庫根目錄)中的 `.claude/skills/` 目錄的項目內運行它:
42 59
43<CodeGroup>60<CodeGroup>
44 ```python Python theme={null}61 ```python Python theme={null}
45 import asyncio62 import asyncio
63 import os
64
46 from claude_agent_sdk import query, ClaudeAgentOptions65 from claude_agent_sdk import query, ClaudeAgentOptions
47 66
48 67
49 async def main():68 async def main():
50 options = ClaudeAgentOptions(69 options = ClaudeAgentOptions(
51 cwd="/path/to/project", # Project with .claude/skills/70 cwd=os.getcwd(), # .claude/skills/ here or in a parent directory
52 setting_sources=["user", "project"], # Load Skills from filesystem71 setting_sources=["user", "project"], # Load skills from filesystem
53 skills="all", # Enable every discovered Skill72 skills="all", # Let Claude invoke every discovered skill
54 allowed_tools=["Read", "Write", "Bash"],73 allowed_tools=["Read", "Write", "Bash"],
55 )74 )
56 75
69 for await (const message of query({88 for await (const message of query({
70 prompt: "Help me process this PDF document",89 prompt: "Help me process this PDF document",
71 options: {90 options: {
72 cwd: "/path/to/project", // Project with .claude/skills/91 cwd: process.cwd(), // .claude/skills/ here or in a parent directory
73 settingSources: ["user", "project"], // Load Skills from filesystem92 settingSources: ["user", "project"], // Load skills from filesystem
74 skills: "all", // Enable every discovered Skill93 skills: "all", // Let Claude invoke every discovered skill
75 allowedTools: ["Read", "Write", "Bash"]94 allowedTools: ["Read", "Write", "Bash"]
76 }95 }
77 })) {96 })) {
80 ```99 ```
81</CodeGroup>100</CodeGroup>
82 101
83要僅啟用特定 Skills,請傳遞它們的名稱。名稱與 `SKILL.md` 中的 `name` 欄位或 Skill 的目錄名稱匹配。對於外掛提供的 Skills,使用 `plugin:skill`。102<h3 id="confirm-skills-loaded">
103 確認 Skills 已加載
104</h3>
105
106在流的開始附近,SDK 會產生一個子類型為 `init` 的系統消息。檢查其 `skills` 陣列以確認您的 Skills 在 Claude 開始工作之前已加載。該陣列包括您已定義的使用者可調用 Skills,以及 [Claude Code 包含的捆綁 Skills](/docs/zh-TW/skills#bundled-skills)。
107
108該陣列僅列出使用者可調用的 Skills。具有 frontmatter 中 [`user-invocable: false`](/docs/zh-TW/skills#control-who-invokes-a-skill) 的 Skill 會加載並保持對 Claude 可用,但不會出現在陣列中。該陣列反映會話發現的內容,並列出相同的 Skills,無論它們是否在您的 `skills` 列表中。
109
110<h3 id="allow-only-specific-skills">
111 僅允許特定 Skills
112</h3>
113
114要讓 Claude 僅調用特定 Skills,請在 `skills` 列表中傳遞它們的名稱。名稱與 `SKILL.md` 中的 `name` 欄位或 Skill 的目錄名稱匹配。對於外掛提供的 Skills,使用 `plugin:skill`。
115
116該列表僅接受確切的 Skill 名稱。如果一個條目不能作為確切名稱工作,`query()` 會在會話開始前拒絕該列表。請參閱 [無效的 Skill 名稱錯誤](#invalid-skill-name-error) 以了解名稱規則和每個 SDK 引發的錯誤。
117
118模型看不到未列出的 Skills,Skill 工具會拒絕它們,而它們的文件仍保留在磁碟上,並可通過 Read 和 Bash 訪問。限制列表不會限制 [按名稱分派](#dispatch-commands-by-name)。
119
120要讓 Claude 調用每個發現的 Skill,請傳遞 `skills: "all"` 而不是通配符。
121
122<h2 id="commands-in-agent-sdk-sessions">
123 Agent SDK 工作階段中的命令
124</h2>
125
126本節是 SDK 的命令文件。命令是您透過在提示中傳送 `/<name>` 來執行的任何操作。命令表面上的項目在其支援方式上有所不同:
127
128* **內建命令**:執行編碼到 Claude Code 程序中的邏輯,例如 `/compact`
129* **捆綁技能**:隨 Claude Code 一起提供的提示工件,例如 `/code-review`
130* **您的技能**:您編寫的提示工件,每個都是包含 `SKILL.md` 檔案的目錄。使用者可呼叫的技能名稱會自動加入表面,因此分派您自己的 `/security-check` 和執行內建命令的方式相同
131* **自訂命令檔案**:一種較舊的工件形式,具有相同的行為,位於 `.claude/commands/` 中的平面 Markdown 檔案,其檔案名稱會變成命令名稱。技能是其推薦的後繼者
132
133根據預設,您和 Claude 都可以呼叫任何技能。您可以透過技能的[前置資料](/docs/zh-TW/skills#control-who-invokes-a-skill)限制任一路徑。如需這兩個術語的定義,請參閱詞彙表的[命令](/docs/zh-TW/glossary#command)和[技能](/docs/zh-TW/glossary#skill)項目。請參閱[Claude Code 中的命令](/docs/zh-TW/commands)以了解每個內建命令,以及[使用技能擴展 Claude](/docs/zh-TW/skills) 以了解兩種工件形式的完整指南。
134
135<h3 id="discover-available-commands">
136 探索可用命令
137</h3>
138
139您可以透過 SDK 分派無需互動式終端機的命令。`system/init` 訊息在其 `slash_commands` 欄位中列出工作階段中可用的命令。需要互動式終端機的命令(例如 `/theme` 和 `/terminal-setup`)不會出現在清單中。在工作階段開始時存取該欄位:
84 140
85<CodeGroup>141<CodeGroup>
142 ```typescript TypeScript theme={null}
143 import { query } from "@anthropic-ai/claude-agent-sdk";
144
145 for await (const message of query({
146 prompt: "Hello Claude",
147 options: { maxTurns: 1 }
148 })) {
149 if (message.type === "system" && message.subtype === "init") {
150 console.log("Available commands:", message.slash_commands);
151 }
152 }
153 ```
154
86 ```python Python theme={null}155 ```python Python theme={null}
87 options = ClaudeAgentOptions(skills=["pdf", "docx"])156 import asyncio
157 from claude_agent_sdk import query, ClaudeAgentOptions, SystemMessage
158
159
160 async def main():
161 async for message in query(prompt="Hello Claude", options=ClaudeAgentOptions(max_turns=1)):
162 if isinstance(message, SystemMessage) and message.subtype == "init":
163 print("Available commands:", message.data["slash_commands"])
164
165
166 asyncio.run(main())
88 ```167 ```
168</CodeGroup>
169
170列印的清單混合了內建命令、捆綁技能、您的使用者可呼叫技能和 `.claude/commands/` 檔案:
171
172```text theme={null}
173Available commands: ["clear", "compact", "context", "usage", "code-review", "verify", "security-check", ...]
174```
175
176您的使用者可呼叫技能會出現在此清單和[確認技能已載入](#confirm-skills-loaded)中的 `skills` 陣列中。`slash_commands` 清單新增了工作階段中可用的其餘命令。在其前置資料中具有 [`user-invocable: false`](/docs/zh-TW/skills#control-who-invokes-a-skill) 的技能不會出現在任一個中。設定[MCP 伺服器](/docs/zh-TW/agent-sdk/mcp)的工作階段也可以公開 [MCP 提示作為命令](/docs/zh-TW/mcp#use-mcp-prompts-as-commands)。
177
178<h3 id="dispatch-commands-by-name">
179 按名稱分派命令
180</h3>
181
182透過將命令包含在提示字串中來傳送命令,就像傳送一般文字一樣。分派不取決於 `skills` 選項。傳送 `/<name>` 會執行使用者可呼叫的技能,即使您的 `skills` 清單省略了它。作用於對話歷史記錄的命令(例如 `/compact`)需要先前的訊息才能使用。
183
184<Note>
185 命令可以像任何其他提示一樣達到 `maxTurns` / `max_turns` 限制,以錯誤結果而不是 `success` 結束查詢。如需錯誤結果合約,請參閱[處理結果](/docs/zh-TW/agent-sdk/agent-loop#handle-the-result)。如果您的命令可能達到限制,請在 TypeScript 中用 `try`/`catch` 或在 Python 中用 `try`/`except` 包裝迴圈,如[單一訊息輸入](/docs/zh-TW/agent-sdk/streaming-vs-single-mode#single-message-input)中所示,或設定 `maxTurns` 足夠高以完成工作。
186</Note>
187
188<h3 id="compact-history-with-/compact">
189 使用 `/compact` 壓縮歷史記錄
190</h3>
191
192`/compact` 命令透過總結較舊的訊息同時保留重要內容來減少對話歷史記錄的大小。壓縮需要現有的對話,其中有足夠的先前訊息要總結。此範例首先有一個對話,然後壓縮它並讀取報告結果的 `compact_boundary` 系統訊息:
89 193
194<CodeGroup>
90 ```typescript TypeScript theme={null}195 ```typescript TypeScript theme={null}
91 const options = { skills: ["pdf", "docx"] };196 import { query } from "@anthropic-ai/claude-agent-sdk";
197
198 // Compaction needs existing history, so have a conversation first
199 try {
200 for await (const message of query({
201 prompt: "Explain what this project does",
202 options: { maxTurns: 2 }
203 })) {
204 if (message.type === "result" && message.subtype === "success") {
205 console.log(message.result);
206 }
207 }
208 } catch (error) {
209 // A single-shot query() throws after yielding an error result,
210 // so the follow-up query below still runs.
211 console.error(`Session ended with an error: ${error}`);
212 }
213
214 // Compact the same conversation
215 for await (const message of query({
216 prompt: "/compact",
217 options: { continue: true, maxTurns: 1 }
218 })) {
219 if (message.type === "system" && message.subtype === "compact_boundary") {
220 console.log("Compaction completed");
221 console.log("Pre-compaction tokens:", message.compact_metadata.pre_tokens);
222 console.log("Trigger:", message.compact_metadata.trigger);
223 // Example output:
224 // Compaction completed
225 // Pre-compaction tokens: 1842
226 // Trigger: manual
227 }
228 }
229 ```
230
231 ```python Python theme={null}
232 import asyncio
233 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage, SystemMessage
234
235
236 async def main():
237 # Compaction needs existing history, so have a conversation first
238 try:
239 async for message in query(
240 prompt="Explain what this project does",
241 options=ClaudeAgentOptions(max_turns=2),
242 ):
243 if isinstance(message, ResultMessage) and message.subtype == "success":
244 print(message.result)
245 except Exception as error:
246 # A single-shot query() raises after yielding an error result,
247 # so the follow-up query below still runs.
248 print(f"Session ended with an error: {error}")
249
250 # Compact the same conversation
251 async for message in query(
252 prompt="/compact",
253 options=ClaudeAgentOptions(continue_conversation=True, max_turns=1),
254 ):
255 if isinstance(message, SystemMessage) and message.subtype == "compact_boundary":
256 print("Compaction completed")
257 print("Pre-compaction tokens:", message.data["compact_metadata"]["pre_tokens"])
258 print("Trigger:", message.data["compact_metadata"]["trigger"])
259 # Example output:
260 # Compaction completed
261 # Pre-compaction tokens: 1842
262 # Trigger: manual
263
264
265 asyncio.run(main())
92 ```266 ```
93</CodeGroup>267</CodeGroup>
94 268
95`skills` 選項是內容篩選器,不是沙箱。未列出的 Skills 對模型隱藏並被 Skill 工具拒絕,但它們的檔案仍在磁碟上,可透過 Read 和 Bash 存取。269<Note>
270 `compact_boundary` 訊息只在壓縮執行時到達。如果沒有要總結的內容,`/compact` 會報告原因而不是引發。執行仍以 `success` 結果結束,沒有 `compact_boundary` 訊息,結果文字會帶有原因,例如在單一簡短交換後的 `Not enough messages to compact.`。全新的單一查詢 `query()` 呼叫以空內容開始,因此請在具有先前輪次的工作階段中使用此模式,例如在[串流輸入模式](/docs/zh-TW/agent-sdk/streaming-vs-single-mode)中或恢復工作階段時。
271</Note>
96 272
97<h2 id="skill-locations">273<h3 id="reset-context-with-/clear">
98 Skill 位置274 使用 `/clear` 重設內容
99</h2>275</h3>
100 276
101Skills 根據您的 `settingSources`/`setting_sources` 配置從文件系統目錄加載:277`/clear` 命令將對話重設為空內容,因此後續提示以沒有先前對話歷史記錄開始。先前的對話保留在磁碟上。您可以透過將其工作階段 ID 傳遞給[`resume` 選項](/docs/zh-TW/agent-sdk/sessions#resume-by-id)來返回該對話。
102 278
103* **項目 Skills**(`.claude/skills/`):通過 git 與您的團隊共享 - 當 `setting_sources` 包含 `"project"` 時加載279`/clear` 在[串流輸入模式](/docs/zh-TW/agent-sdk/streaming-vs-single-mode)中很有用,您可以在單一連線上傳送多個提示。對於單一查詢 `query()` 呼叫,每個呼叫已經以空內容開始,因此傳送 `/clear` 沒有實際效果。改為啟動新的 `query()`。
104* **用戶 Skills**(`~/.claude/skills/`):跨所有項目的個人 Skills - 當 `setting_sources` 包含 `"user"` 時加載
105* **Plugin Skills**:與已安裝的 Claude Code plugins 捆綁
106 280
107<h2 id="creating-skills">281<h2 id="create-skills">
108 創建 Skills282 創建 Skills
109</h2>283</h2>
110 284
111Skills 定義為包含具有 YAML frontmatter 和 Markdown 內容的 `SKILL.md` 文件的目錄。`description` 字段確定 Claude 何時調用您的 Skill。285將每個 Skill 創建為包含具有 YAML frontmatter 和 Markdown 內容的 `SKILL.md` 文件的目錄。`description` 欄位確定 Claude 何時調用您的 Skill。
112 286
113**示例目錄結構**:287**示例目錄結構**:
114 288
115```bash theme={null}289```text theme={null}
116.claude/skills/processing-pdfs/290.claude/skills/security-check/
117└── SKILL.md291└── SKILL.md
118```292```
119 293
120有關創建 Skills 的完整指導,包括 SKILL.md 結構、多文件 Skills 和示例,請參閱:294<h3 id="choose-a-discovery-level">
295 選擇發現級別
296</h3>
121 297
122* [Claude Code 中的 Agent Skills](/zh-TW/skills):包含示例的完整指南298在兩個最常見的 [發現級別](/docs/zh-TW/skills#where-skills-live) 中保存 Skills:
123* [Agent Skills 最佳實踐](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices):編寫指南和命名約定
124 299
125<h2 id="tool-restrictions">300* **項目 Skills**:`.claude/skills/`,僅在當前項目中可用
126 工具限制301* **個人 Skills**:`~/.claude/skills/`,在所有項目中可用
127</h2>
128 302
129<Note>303如果您在 `.claude/commands/` 中有現有的自定義命令文件,它們會繼續工作。`.claude/commands/deploy.md` 中的命令文件創建 `/deploy` 並以與 `.claude/skills/deploy/SKILL.md` 中的 Skill 相同的方式工作。如果命令文件和 Skill 共享名稱,請參閱 [解決共享名稱的 Skills](/docs/zh-TW/skills#resolve-skills-that-share-a-name) 以了解哪一個運行。SDK 從與 Skills 相同的兩個範圍加載 `.claude/commands/` 和 `~/.claude/commands/` 文件。請參閱 [使用 Skills 擴展 Claude](/docs/zh-TW/skills) 以了解兩種工件形式的完整指南。
130 SKILL.md 中的 `allowed-tools` frontmatter 欄位僅在直接使用 Claude Code CLI 時受支持。**通過 SDK 使用 Skills 時不適用**。
131 304
132 使用 SDK 時,通過查詢配置中的主 `allowedTools` 選項控制工具存取。305<h3 id="create-and-dispatch-your-first-skill">
133</Note>306 創建並分派您的第一個 Skill
307</h3>
134 308
135要在 SDK 應用程式中控制 Skills 的工具存取,使用 `allowedTools` 預先批准特定工具。沒有 `canUseTool` 回呼時,列表中沒有的任何內容都被拒絕:309要查看完整流程,請創建 `.claude/skills/security-check/SKILL.md`:
136 310
137<Note>311```markdown theme={null}
138 假設第一個範例中的匯入陳述式在以下程式碼片段中。312---
139</Note>313name: security-check
314description: Run a security vulnerability scan
315---
140 316
141<CodeGroup>317Analyze the codebase for security vulnerabilities including:
142 ```python Python theme={null}318- SQL injection risks
143 options = ClaudeAgentOptions(319- XSS vulnerabilities
144 setting_sources=["user", "project"], # Load Skills from filesystem320- Exposed credentials
145 skills="all",321- Insecure configurations
146 allowed_tools=["Read", "Grep", "Glob"],322```
147 )
148 323
149 async for message in query(prompt="Analyze the codebase structure", options=options):324文件存在後,Skill 可通過 SDK 使用。Claude 在請求與其描述匹配時調用它,您可以直接分派它:
150 print(message)
151 ```
152 325
326<CodeGroup>
153 ```typescript TypeScript theme={null}327 ```typescript TypeScript theme={null}
328 import { query } from "@anthropic-ai/claude-agent-sdk";
329
154 for await (const message of query({330 for await (const message of query({
155 prompt: "Analyze the codebase structure",331 prompt: "/security-check",
156 options: {332 options: { maxTurns: 10 }
157 settingSources: ["user", "project"], // Load Skills from filesystem
158 skills: "all",
159 allowedTools: ["Read", "Grep", "Glob"],
160 permissionMode: "dontAsk" // Deny anything not in allowedTools
161 }
162 })) {333 })) {
163 console.log(message);334 if (message.type === "result" && message.subtype === "success") {
335 console.log(message.result);
336 }
164 }337 }
165 ```338 ```
166</CodeGroup>
167 339
168<h2 id="discovering-available-skills">340 ```python Python theme={null}
169 發現可用的 Skills341 import asyncio
170</h2>342 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
171 343
172要查看 SDK 應用程序中可用的 Skills,只需詢問 Claude:
173 344
174<CodeGroup>345 async def main():
175 ```python Python theme={null}346 async for message in query(
176 options = ClaudeAgentOptions(347 prompt="/security-check", options=ClaudeAgentOptions(max_turns=10)
177 setting_sources=["user", "project"], # Load Skills from filesystem348 ):
178 skills="all",349 if isinstance(message, ResultMessage) and message.subtype == "success":
179 )350 print(message.result)
180 351
181 async for message in query(prompt="What Skills are available?", options=options):
182 print(message)
183 ```
184 352
185 ```typescript TypeScript theme={null}353 asyncio.run(main())
186 for await (const message of query({
187 prompt: "What Skills are available?",
188 options: {
189 settingSources: ["user", "project"], // Load Skills from filesystem
190 skills: "all"
191 }
192 })) {
193 console.log(message);
194 }
195 ```354 ```
196</CodeGroup>355</CodeGroup>
197 356
198Claude 將根據您當前的工作目錄和已安裝的插件列出可用的 Skills。357成功的運行以 `success` 結果結束,其文本包含掃描發現。針對具有植入問題的小型 Express 應用程式,結果文本開始於:
358
359```text theme={null}
360**Security scan of `app.js` — 4 findings (most severe first):**
361
3621. **SQL Injection** (line 8) — `req.query.name` is concatenated directly into the SQL string. Trivially exploitable (`' OR '1'='1`, `'; DROP TABLE users;--`). **Fix:** use parameterized queries, e.g. `db.query("SELECT * FROM users WHERE name = ?", [req.query.name], cb)`.
363...
364```
365
366Skill 的名稱也出現在初始化消息的 `slash_commands` 陣列中。
367
368<Note>
369 Claude Code 包括捆綁的 `code-review` 和 `verify` Skills。如果您以其中之一命名 `.claude/commands/` 文件,例如 `.claude/commands/code-review.md`,該文件的命令會遮蔽捆綁的 Skill,`slash_commands` 列出名稱一次。
370</Note>
199 371
200<h2 id="testing-skills">372<h2 id="pre-approve-tools-for-skills">
201 測試 Skills373 為 Skills 預先批准工具
202</h2>374</h2>
203 375
204通過提出與其描述相匹配的問題來測試 Skills:376<Note>
377 對於項目和個人 Skills,Claude Code 在 SDK 會話中應用 [`allowed-tools`](/docs/zh-TW/skills#pre-approve-tools-for-a-skill) frontmatter 欄位。您也可以通過查詢配置中的 `allowedTools` 選項(Python 中的 `allowed_tools`)為這些 Skills 預先批准工具。從 claude.ai [同步的 Skills](/docs/zh-TW/skills#how-claude-code-handles-the-frontmatter-of-a-synced-skill) 遵循它們自己的 frontmatter 規則。
378</Note>
379
380Skills 使用會話的工具運行。下面的示例使用 `allowedTools`(Python 中的 `allowed_tools`)預先批准 `Read`、`Grep` 和 `Glob`,因此 Claude 可以在運行 [security-check Skill](#create-and-dispatch-your-first-skill) 時檢查文件,而無需停止以獲得批准:
205 381
206<CodeGroup>382<CodeGroup>
207 ```python Python theme={null}383 ```python Python theme={null}
384 import asyncio
385
386 from claude_agent_sdk import query, ClaudeAgentOptions
387
208 options = ClaudeAgentOptions(388 options = ClaudeAgentOptions(
209 cwd="/path/to/project",389 setting_sources=["user", "project"], # Load skills from filesystem
210 setting_sources=["user", "project"], # Load Skills from filesystem
211 skills="all",390 skills="all",
212 allowed_tools=["Read", "Bash"],391 allowed_tools=["Read", "Grep", "Glob"],
213 )392 )
214 393
215 async for message in query(prompt="Extract text from invoice.pdf", options=options):394
395 async def main():
396 async for message in query(prompt="Check this project for security issues", options=options):
216 print(message)397 print(message)
398
399
400 asyncio.run(main())
217 ```401 ```
218 402
219 ```typescript TypeScript theme={null}403 ```typescript TypeScript theme={null}
404 import { query } from "@anthropic-ai/claude-agent-sdk";
405
220 for await (const message of query({406 for await (const message of query({
221 prompt: "Extract text from invoice.pdf",407 prompt: "Check this project for security issues",
222 options: {408 options: {
223 cwd: "/path/to/project",409 settingSources: ["user", "project"], // Load skills from filesystem
224 settingSources: ["user", "project"], // Load Skills from filesystem
225 skills: "all",410 skills: "all",
226 allowedTools: ["Read", "Bash"]411 allowedTools: ["Read", "Grep", "Glob"]
227 }412 }
228 })) {413 })) {
229 console.log(message);414 console.log(message);
231 ```416 ```
232</CodeGroup>417</CodeGroup>
233 418
234如果描述與您的請求相匹配,Claude 會自動調用相關的 Skill。419在流中,Skill 調用顯示為 Skill 工具使用,後跟對項目文件的 Read 調用。運行以 `success` 結果結束,其文本包含發現。
420
421該列表預先批准命名的工具,而不是限制其他工具。有關完整的權限流程,包括權限模式和 `canUseTool` 回調,請參閱 [權限](/docs/zh-TW/agent-sdk/permissions)。
235 422
236<h2 id="troubleshooting">423<h2 id="troubleshooting">
237 故障排除424 疑難排解
238</h2>425</h2>
239 426
240<h3 id="skills-not-found">427<h3 id="skills-not-found">
241 找不到 Skills428 找不到 Skills
242</h3>429</h3>
243 430
244**檢查 settingSources 配置**:Skills 通過 `user` 和 `project` 設置源發現。如果您明確設置 `settingSources`/`setting_sources` 並省略這些源,Skills 不會加載:431**檢查 settingSources 設定**:SDK 透過 `user` 和 `project` 設定來源探索 skills。如果您明確設定 `settingSources`/`setting_sources` 並省略這些來源,SDK 不會載入 skills:
245 432
246<CodeGroup>433<CodeGroup>
247 ```python Python theme={null}434 ```python Python theme={null}
248 # Skills not loaded: setting_sources excludes user and project435 # Skills 未載入:setting_sources 排除了 user 和 project
249 options = ClaudeAgentOptions(setting_sources=[], skills="all")436 options = ClaudeAgentOptions(setting_sources=[], skills="all")
250 437
251 # Skills loaded: user and project sources included438 # Skills 已載入:user 和 project 來源已包含
252 options = ClaudeAgentOptions(439 options = ClaudeAgentOptions(
253 setting_sources=["user", "project"],440 setting_sources=["user", "project"],
254 skills="all",441 skills="all",
256 ```443 ```
257 444
258 ```typescript TypeScript theme={null}445 ```typescript TypeScript theme={null}
259 // Skills not loaded: settingSources excludes user and project446 // Skills 未載入:settingSources 排除了 user 和 project
260 const options = {447 const optionsWithoutSkills = {
261 settingSources: [],448 settingSources: [],
262 skills: "all"449 skills: "all"
263 };450 };
264 451
265 // Skills loaded: user and project sources included452 // Skills 已載入:user 和 project 來源已包含
266 const options = {453 const optionsWithSkills = {
267 settingSources: ["user", "project"],454 settingSources: ["user", "project"],
268 skills: "all"455 skills: "all"
269 };456 };
270 ```457 ```
271</CodeGroup>458</CodeGroup>
272 459
273有關 `settingSources`/`setting_sources` 的更多詳細信息,請參閱 [TypeScript SDK 參考](/zh-TW/agent-sdk/typescript#settingsource) 或 [Python SDK 參考](/zh-TW/agent-sdk/python#settingsource)。460如需了解每個來源載入的 skill 目錄,請參閱[檔案系統來源表](/docs/zh-TW/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources)。如需更多關於 `settingSources`/`setting_sources` 的詳細資訊,請參閱 [TypeScript SDK 參考](/docs/zh-TW/agent-sdk/typescript#settingsource)或 [Python SDK 參考](/docs/zh-TW/agent-sdk/python#settingsource)。
274 461
275**檢查工作目錄**:SDK 從 `cwd` 選項中的 `.claude/skills/` 以及每個父目錄直到存儲庫根目錄加載 Skills。確保 `cwd` 指向包含 `.claude/skills/` 的目錄或其下方,在同一存儲庫內:462**檢查工作目錄**:SDK 從 `cwd` 選項中的 `.claude/skills/` 以及每個父目錄(直到儲存庫根目錄)載入 skills。確保 `cwd` 指向包含 `.claude/skills/` 的目錄或其下方目錄,且在同一個儲存庫內:
276 463
277<CodeGroup>464<CodeGroup>
278 ```python Python theme={null}465 ```python Python theme={null}
279 # Ensure your cwd points to the directory containing .claude/skills/466 # 確保您的 cwd 指向包含 .claude/skills/ 的目錄
280 options = ClaudeAgentOptions(467 options = ClaudeAgentOptions(
281 cwd="/path/to/project", # .claude/skills/ here or in a parent directory468 cwd="/path/to/project", # .claude/skills/ 在此或在父目錄中
282 setting_sources=["user", "project"], # Loads skills from these sources469 setting_sources=["user", "project"], # 從這些來源載入 skills
283 skills="all",470 skills="all",
284 )471 )
285 ```472 ```
286 473
287 ```typescript TypeScript theme={null}474 ```typescript TypeScript theme={null}
288 // Ensure your cwd points to the directory containing .claude/skills/475 // 確保您的 cwd 指向包含 .claude/skills/ 的目錄
289 const options = {476 const options = {
290 cwd: "/path/to/project", // .claude/skills/ here or in a parent directory477 cwd: "/path/to/project", // .claude/skills/ 在此或在父目錄中
291 settingSources: ["user", "project"], // Loads skills from these sources478 settingSources: ["user", "project"], // 從這些來源載入 skills
292 skills: "all"479 skills: "all"
293 };480 };
294 ```481 ```
295</CodeGroup>482</CodeGroup>
296 483
297有關完整模式,請參閱上面的「在 SDK 中使用 Skills」部分。484請參閱[使用 Agent SDK 的 Skills](#use-skills-with-the-agent-sdk) 以了解完整的模式。
298 485
299**驗證文件系統位置**:486**驗證檔案系統位置**:
300 487
301```bash theme={null}488```bash theme={null}
302# Check project Skills489# 檢查專案 skills
303ls .claude/skills/*/SKILL.md490ls .claude/skills/*/SKILL.md
304 491
305# Check personal Skills492# 檢查個人 skills
306ls ~/.claude/skills/*/SKILL.md493ls ~/.claude/skills/*/SKILL.md
307```494```
308 495
310 Skill 未被使用497 Skill 未被使用
311</h3>498</h3>
312 499
313**檢查 `skills` 選項**:如果您傳遞了 `skills` 列表,確認 Skill 的名稱已包含。傳遞 `[]` 會禁用所有 Skills。500**檢查 `skills` 選項**:如果您傳遞了 `skills` 清單,請確認 skill 的名稱已包含在內。當 Claude 嘗試叫用未列出的 skill 時,Skill 工具會傳回 `Skill <name> is not in this session's skills allowlist`。將名稱新增到您的清單中,或透過在提示中傳送 `/<name>` 直接分派 skill,這樣無需列出即可運作。
501
502**檢查描述**:確保它具體且包含相關關鍵字。請參閱 [Agent Skills 最佳實踐](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices#writing-effective-descriptions)以取得有關撰寫有效描述的指導。
503
504<h3 id="invalid-skill-name-error">
505 無效的 skill 名稱錯誤
506</h3>
507
508當您 `skills` 清單中的名稱無法作為確切的 skill 名稱時,`query()` 會在啟動 Claude Code 程序之前拒絕該清單。觸發拒絕的名稱包括:
509
510* 空名稱
511* 包含括號、逗號或控制字元的名稱
512* 用空白字元填充的名稱
513* 萬用字元形式,例如裸露的 `*` 或 `:*` 後綴
514
515每個 SDK 以不同的方式呈現拒絕:
516
517<Tabs>
518 <Tab title="TypeScript">
519 TypeScript SDK 會擲出 `Error`,說明項目違反的規則。例如,`skills: ["docs:*"]` 會擲出:
520
521 ```text theme={null}
522 Invalid skill name "docs:*": wildcard-suffix names are not allowed; list each skill by its exact name.
523 ```
524
525 空名稱會報告 `Skill names must be non-empty strings.`
314 526
315**檢查描述**:確保它具體且包含相關關鍵字。有關編寫有效描述的指導,請參閱 [Agent Skills 最佳實踐](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices#writing-effective-descriptions)。527 在 TypeScript Agent SDK 0.3.221 之前,SDK 未執行此檢查。
528 </Tab>
529
530 <Tab title="Python">
531 Python SDK 會引發 `ValueError`,說明項目違反的規則。例如,`skills=["docs:*"]` 會引發:
532
533 ```text theme={null}
534 ValueError: Invalid skill name 'docs:*': wildcard-suffix names are not allowed; list each skill by its exact name.
535 ```
536
537 空名稱會報告 `Skill names must be non-empty strings`。
538
539 在 Python Agent SDK 0.2.129 之前,SDK 未執行此檢查。
540 </Tab>
541</Tabs>
316 542
317<h3 id="additional-troubleshooting">543<h3 id="additional-troubleshooting">
318 其他故障排除544 其他疑難排解
319</h3>545</h3>
320 546
321有關一般 Skills 故障排除(YAML 語法、調試等),請參閱 [Claude Code Skills 故障排除部分](/zh-TW/skills#troubleshooting)。547如需一般 skills 疑難排解,例如 YAML 語法錯誤和偵錯,請參閱 [Claude Code skills 疑難排解部分](/docs/zh-TW/skills#troubleshooting)。
322 548
323<h2 id="related-documentation">549<h2 id="next-steps">
324 相關文檔550 後續步驟
325</h2>551</h2>
326 552
327<h3 id="skills-guides">553[Claude Code Skills 指南](/docs/zh-TW/skills) 涵蓋了深入的編寫。其指導適用於 SDK 會話。從這些部分開始:
328 Skills 指南
329</h3>
330 554
331* [Claude Code 中的 Agent Skills](/zh-TW/skills):包含創建、示例和故障排除的完整 Skills 指南555* [Frontmatter 參考](/docs/zh-TW/skills#frontmatter-reference):每個支持的欄位
556* [將參數傳遞給 Skills](/docs/zh-TW/skills#pass-arguments-to-skills):`$ARGUMENTS`、`$0`、`$1` 和 Skill 堆疊。[完整替換表](/docs/zh-TW/skills#available-string-substitutions) 添加命名參數和 `${CLAUDE_*}` 變數
557* [注入動態上下文](/docs/zh-TW/skills#inject-dynamic-context):`` !`command` `` 行在 Claude 看到 Skill 內容之前運行
558* [選擇 Skills 加載的位置](/docs/zh-TW/skills#where-skills-live):每個 Skill 位置、外掛命名空間以及兩個共享名稱時哪個 Skill 運行
559
560<h2 id="related-resources">
561 相關資源
562</h2>
563
564* [Claude Code 中的命令](/docs/zh-TW/commands):完整的命令表面,包括每個內置命令
332* [Agent Skills 概述](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview):概念概述、優勢和架構565* [Agent Skills 概述](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview):概念概述、優勢和架構
333* [Agent Skills 最佳實踐](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices):有效 Skills 的編寫指南566* [Agent Skills 最佳實踐](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices):有效 Skills 的編寫指南
334* [Agent Skills Cookbook](https://platform.claude.com/cookbook/skills-notebooks-01-skills-introduction):示例 Skills 和模板567* [Agent Skills Cookbook](https://platform.claude.com/cookbook/skills-notebooks-01-skills-introduction):示例 Skills 和模板
335 568* [SDK 中的子代理](/docs/zh-TW/agent-sdk/subagents):類似的基於文件系統的代理,具有編程選項
336<h3 id="sdk-resources">569* [SDK 概述](/docs/zh-TW/agent-sdk/overview):一般 SDK 概念
337 SDK 資源570* [TypeScript SDK 參考](/docs/zh-TW/agent-sdk/typescript):完整 API 文件
338</h3>571* [Python SDK 參考](/docs/zh-TW/agent-sdk/python):完整 API 文件
339
340* [SDK 中的子代理](/zh-TW/agent-sdk/subagents):類似的基於文件系統的代理,具有編程選項
341* [SDK 中的斜杠命令](/zh-TW/agent-sdk/slash-commands):用戶調用的命令
342* [SDK 概述](/zh-TW/agent-sdk/overview):一般 SDK 概念
343* [TypeScript SDK 參考](/zh-TW/agent-sdk/typescript):完整 API 文檔
344* [Python SDK 參考](/zh-TW/agent-sdk/python):完整 API 文檔