Skip to main content
Agent SDK 建立在與 Claude Code 相同的基礎上,這意味著您的 SDK 代理可以存取相同的基於檔案系統的功能:專案指令(CLAUDE.md 和規則)、skills、hooks 等。 當您省略 settingSources 時,query() 會讀取與 Claude Code CLI 相同的檔案系統設定:使用者、專案和本機設定、CLAUDE.md 檔案以及 .claude/ skills、代理和命令。若要在沒有這些的情況下執行,請傳遞 settingSources: [],這會將代理限制為您以程式設計方式設定的內容。無論此選項如何,都會讀取受管原則設定和全域 ~/.claude.json 設定。請參閱 settingSources 不控制的內容。

使用 settingSources 控制檔案系統設定

設定來源選項(Python 中的 setting_sources、TypeScript 中的 settingSources)控制 SDK 載入哪些基於檔案系統的設定。傳遞明確清單以選擇加入特定來源,或傳遞空陣列以停用使用者、專案和本機設定。 此範例透過將 settingSources 設定為 ["user", "project"] 來載入使用者層級和專案層級設定:
當此程式執行時,助理的回應會列印到標準輸出,然後在執行完成後列印最終結果行。 每個來源都會從特定位置載入設定,其中 <cwd> 是您透過 cwd 選項傳遞的工作目錄,或如果未設定則為程序的目前目錄。如需完整的型別定義,請參閱 SettingSource(TypeScript)或 SettingSource(Python)。 省略 settingSources 等同於 ["user", "project", "local"]。 cwd 選項決定 SDK 在何處尋找專案層級輸入。專案 settings.json 和 hooks 僅從 <cwd>/.claude/ 載入,沒有父目錄回退。

settingSources 不控制的內容

settingSources 涵蓋使用者、專案和本機設定。無論其值如何,都會讀取一些輸入:
不要依賴預設 query() 選項進行多租戶隔離。因為上述輸入無論 settingSources 如何都會被讀取,SDK 程序可能會拾取主機層級設定和每個目錄的記憶體。對於多租戶部署,在其自己的檔案系統中執行每個租戶,並設定 settingSources: [] 加上在 env 中設定 CLAUDE_CODE_DISABLE_AUTO_MEMORY=1。伺服器管理的設定在程序使用組織認證進行驗證時擷取;檔案系統隔離不會移除它們。請參閱安全部署。

專案指令(CLAUDE.md 和規則)

CLAUDE.md 檔案和 .claude/rules/*.md 檔案為您的 agent 提供有關您的專案的持久上下文:編碼慣例、建置命令、架構決策和指令。當 settingSources 包含 "project"(如 settingSources 範例所示)時,SDK 在工作階段開始時將這些檔案載入到上下文中。agent 隨後會遵循您的專案慣例,而無需您在每個提示詞中重複它們。

CLAUDE.md 載入位置

所有層級都是累加的:如果專案和使用者 CLAUDE.md 檔案都存在,agent 會看到兩者。層級之間沒有硬性優先順序規則;如果指令衝突,結果取決於 Claude 如何解釋它們。編寫不衝突的規則,或在更具體的檔案中明確說明優先順序(「這些專案指令會覆寫任何衝突的使用者層級預設值」)。
您也可以透過 systemPrompt 直接注入上下文,而無需使用 CLAUDE.md 檔案。請參閱 修改系統提示詞。當您想要在互動式 Claude Code 工作階段和 SDK agent 之間共享相同上下文時,請使用 CLAUDE.md。
如需如何結構化和組織 CLAUDE.md 內容的資訊,請參閱 管理 Claude 的記憶。

Skills

Skills 是 markdown 檔案,為您的代理提供專門知識和可呼叫的工作流程。與 CLAUDE.md(每個工作階段都載入)不同,skills 按需載入。代理在啟動時接收 skill 描述,並在相關時載入完整內容。 Skills 透過 settingSources 從檔案系統中發現。當 query() 上的 skills 選項被省略時,已發現的使用者和專案 skills 會被啟用,且 Skill 工具可用,符合 CLI 行為。若要控制啟用哪些 skills,請將 skills 傳遞為 "all"、skill 名稱清單或 [] 以停用全部。當 skills 被設定時,SDK 會自動將 Skill 工具新增至 allowedTools。如果您也傳遞明確的 tools 清單,請在該清單中包含 "Skill",以便 Claude 可以呼叫 skills。
Skills 必須建立為檔案系統成品(.claude/skills/<name>/SKILL.md)。SDK 沒有用於註冊 skills 的程式設計 API。請參閱 SDK 中的代理 Skills 以取得完整詳細資訊。

Hooks

SDK 支援兩種定義 hooks 的方式,它們並行執行:
  • 檔案系統 hooks: 在 settings.json 中定義的 shell 命令,當 settingSources 包含相關來源時載入。這些是您為 互動式 Claude Code 工作階段 設定的相同 hooks。
  • 程式設計 hooks: 直接傳遞給 query() 的回呼函式。這些在您的應用程式程序中執行,可以返回結構化決策。請參閱 使用 hooks 控制執行。
Hook 回呼接收工具輸入並返回決策字典。返回 {} 表示允許工具繼續。若要阻止執行,請返回一個 hookSpecificOutput 物件,其中包含 permissionDecision: "deny" 和 permissionDecisionReason。原因會作為工具結果發送給 Claude。請參閱 hooks 指南 以取得完整的回呼簽名和返回型別。

何時使用哪種 hook 類型

TypeScript SDK 支援超出 Python 的其他 hook 事件,包括 SessionStart、SessionEnd、TeammateIdle 和 TaskCompleted。請參閱 hooks 指南 以取得完整的事件相容性表。
如需程式設計 hooks 的完整詳細資訊,請參閱 使用 hooks 控制執行。如需檔案系統 hook 語法,請參閱 Hooks。

選擇正確的功能

Agent SDK 為您提供了多種方式來擴展代理的行為。如果您不確定要使用哪一種,此表將常見目標對應到正確的方法。 您啟用的每項功能都會增加代理的上下文視窗。如需每項功能的成本以及這些功能如何分層組合,請參閱 擴展 Claude Code。
  • 擴展 Claude Code:所有擴展功能的概念概述,包含比較表和上下文成本分析
  • SDK 中的 Skills:以程式設計方式使用 skills 的完整指南
  • 子代理:為隔離的子任務定義和呼叫子代理
  • Hooks:在關鍵執行點攔截和控制代理行為
  • 權限:使用模式、規則和回呼控制工具存取
  • 系統提示:在不使用 CLAUDE.md 檔案的情況下注入上下文