תיעוד 171
שימוש ביכולות Claude Code ב-SDK
טען הוראות פרויקט, מיומנויות, hooks ויכולות נוספות של Claude Code לסוכני ה-SDK שלך.
ה-Agent SDK בנוי על אותו בסיס כמו Claude Code, ולכן לסוכני ה-SDK שלך יש גישה לאותן יכולות מבוססות מערכת קבצים: הוראות פרויקט (CLAUDE.md וכללים), מיומנויות, hooks ועוד.
כשמשמיטים את settingSources, הפונקציה query() קוראת את אותן הגדרות מערכת קבצים כמו ה-CLI של Claude Code: הגדרות משתמש, פרויקט ומקומיות, קבצי CLAUDE.md, ומיומנויות, סוכנים ופקודות בתוך .claude/. כדי לרוץ בלי אלה, העבר settingSources: [], מה שמגביל את הסוכן למה שאתה מגדיר באופן תכנותי. הגדרות מדיניות מנוהלת והתצורה הגלובלית ~/.claude.json נקראות בלי קשר לאפשרות הזו. למידע נוסף, ראה מה ש-settingSources לא שולט בו.
#שליטה בהגדרות מערכת הקבצים באמצעות settingSources
אפשרות מקורות ההגדרות (setting_sources ב-Python, settingSources ב-TypeScript) שולטת באילו הגדרות מבוססות מערכת קבצים ה-SDK טוען. העבר רשימה מפורשת כדי לבחור מקורות ספציפיים, או העבר מערך ריק כדי להשבית הגדרות משתמש, פרויקט ומקומיות.
הדוגמה הזו טוענת גם הגדרות ברמת המשתמש וגם הגדרות ברמת הפרויקט על ידי הגדרת settingSources ל-["user", "project"]:
from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage
import asyncio
async def main():
async for message in query(
prompt="Help me refactor the auth module",
options=ClaudeAgentOptions(
# "user" loads from ~/.claude/, "project" loads from ./.claude/ in cwd.
# Together they give the agent access to CLAUDE.md, skills, hooks, and
# permissions from both locations.
setting_sources=["user", "project"],
allowed_tools=["Read", "Edit", "Bash"],
),
):
if isinstance(message, AssistantMessage):
for block in message.content:
if hasattr(block, "text"):
print(block.text)
if isinstance(message, ResultMessage) and message.subtype == "success":
print(f"\nResult: {message.result}")
asyncio.run(main())import { query } from "@anthropic-ai/claude-agent-sdk";
for await (const message of query({
prompt: "Help me refactor the auth module",
options: {
// "user" loads from ~/.claude/, "project" loads from ./.claude/ in cwd.
// Together they give the agent access to CLAUDE.md, skills, hooks, and
// permissions from both locations.
settingSources: ["user", "project"],
allowedTools: ["Read", "Edit", "Bash"]
}
})) {
if (message.type === "assistant") {
for (const block of message.message.content) {
if (block.type === "text") console.log(block.text);
}
}
if (message.type === "result" && message.subtype === "success") {
console.log(`\nResult: ${message.result}`);
}
}כשהקוד הזה רץ, תשובת העוזר מודפסת ל-stdout, ואחריה שורת תוצאה סופית כשהריצה מסתיימת.
כל מקור טוען הגדרות ממיקום מסוים, כאשר <cwd> היא תיקיית העבודה שאתה מעביר דרך האפשרות cwd, או התיקייה הנוכחית של התהליך אם לא הוגדרה. להגדרת הטיפוס המלאה, ראה SettingSource (TypeScript) או SettingSource (Python).
| מקור | מה הוא טוען | מיקום |
|---|---|---|
"project" | settings.json של הפרויקט ו-hooks. CLAUDE.md של הפרויקט ו-.claude/rules/*.md. מיומנויות, פקודות ותת-סוכנים של הפרויקט | <cwd>/.claude/ עבור settings.json ו-hooks. <cwd> וכל תיקיית אב עבור CLAUDE.md וכללים. <cwd> וכל תיקיית אב עד שורש המאגר עבור מיומנויות, פקודות ותת-סוכנים, ובנוסף תיקיות .claude/skills/, .claude/commands/ ו-.claude/agents/ של כל תיקייה שאתה מעביר דרך האפשרות additionalDirectories או add_dirs, שה-SDK מעביר ל-Claude Code בתור --add-dir |
"user" | settings.json של המשתמש. CLAUDE.md של המשתמש ו-~/.claude/rules/*.md. מיומנויות, פקודות ותת-סוכנים של המשתמש | ~/.claude/ עבור settings.json, CLAUDE.md וכללים. ~/.claude/skills/, ~/.claude/commands/ ו-~/.claude/agents/ עבור מיומנויות, פקודות ותת-סוכנים |
"local" | CLAUDE.local.md, .claude/settings.local.json | <cwd>/.claude/ עבור settings.local.json, שיכול להיטען גם משורש המאגר כאשר <cwd> נמצא בתוך מאגר git. <cwd> וכל תיקיית אב עבור CLAUDE.local.md |
השמטת settingSources שקולה ל-["user", "project", "local"].
האפשרות cwd קובעת איפה ה-SDK מחפש קלטים ברמת הפרויקט. settings.json של הפרויקט נטען מ-<cwd>/.claude/ בלי נסיגה לתיקיית אב.
#מה ש-settingSources לא שולט בו
settingSources מכסה הגדרות משתמש, פרויקט ומקומיות. כמה קלטים נקראים בלי קשר לערך שלו:
| קלט | התנהגות | כדי להשבית |
|---|---|---|
| הגדרות מדיניות מנוהלת | מדיניות שמנוהלת בנקודת הקצה, כמו plist של MDM, מדיניות registry, או קובץ הגדרות מנוהל, נטענת מהמארח. הגדרות שמנוהלות בשרת נמשכות בתצורה זכאית כשהסשן מאמת עם אישור מתאים, כמו התחברות OAuth של ארגון, מפתח API שהוגדר ישירות, או פרופיל Anthropic מסוג user_oauth | מדיניות נקודת קצה: הסר את קובץ ההגדרות המנוהל, ה-plist, או מדיניות ה-registry מהמארח. הגדרות שמנוהלות בשרת: Owner בארגון Claude שלך שולט בהן. אי אפשר להשבית אותן מה-SDK |
תצורה גלובלית ~/.claude.json | נקראת תמיד | העבר מיקום באמצעות CLAUDE_CONFIG_DIR ב-env |
זיכרון אוטומטי ב-~/.claude/projects/<project>/memory/ | נטען לתוך הנחיית המערכת בתחילת הסשן. הסוכן כותב זיכרונות חדשים שם עם הכלים הרגילים Write ו-Edit ולא עם כלי זיכרון ייעודי, ולכן הכלים האלה חייבים להיות מופעלים כדי שהסוכן ישמור זיכרונות | הגדר autoMemoryEnabled: false בהגדרות, או CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 ב-env |
| מחברי MCP של claude.ai | נטענים כשהסשן מאמת עם ההתחברות שלך ל-claude.ai. לא נטענים כש-CLAUDE_CODE_OAUTH_TOKEN מחזיק אסימון מ-claude setup-token, שיכול לבצע רק בקשות מודל. העברת mcpServers: {} לא מדכאת את המחברים | הגדר strictMcpConfig: true, disableClaudeAiConnectors: true בהגדרות, או ENABLE_CLAUDEAI_MCP_SERVERS=false ב-env |
רשומות deny של sandbox.credentials ורשומות mask של קבצים ב-~/.claude/settings.json | כשארגז החול של הפקודות רץ, Claude Code מחיל את רשומות deny ושומר את רשומות mask של credentials.files כהגבלות גם כש-settingSources מחריג הגדרות משתמש. Claude Code משתמש ברשומות האלה רק כדי לצמצם את מה שפקודות בארגז החול יכולות לגשת אליו | הסר את הרשומות מ-~/.claude/settings.json |
[!WARNING]
אל תסתמך על אפשרויות ברירת המחדל של
query()לבידוד מרובה דיירים. מכיוון שהקלטים שלמעלה נקראים בלי קשר ל-settingSources, תהליך SDK יכול לקלוט תצורה ברמת המארח וזיכרון לפי תיקייה. בפריסות מרובות דיירים, הרץ כל דייר במערכת קבצים משלו והגדרsettingSources: []וגםCLAUDE_CODE_DISABLE_AUTO_MEMORY=1ב-env. הגדרות שמנוהלות בשרת נמשכות כשהתהליך מאמת עם אישור ארגון. בידוד מערכת קבצים לא מסיר אותן. ראה פריסה מאובטחת.
#הוראות פרויקט (CLAUDE.md וכללים)
קבצי CLAUDE.md וקבצי .claude/rules/*.md נותנים לסוכן שלך הקשר מתמשך על הפרויקט: מוסכמות קוד, פקודות בנייה, החלטות ארכיטקטורה והוראות. כש-settingSources כולל "project", כמו בדוגמת settingSources, ה-SDK טוען את הקבצים האלה להקשר בתחילת הסשן. אחר כך הסוכן פועל לפי מוסכמות הפרויקט שלך בלי שתחזור עליהן בכל הנחיה.
#מיקומי טעינה של CLAUDE.md
| רמה | מיקום | מתי נטען |
|---|---|---|
| פרויקט (שורש) | <cwd>/CLAUDE.md או <cwd>/.claude/CLAUDE.md | settingSources כולל "project" |
| כללי פרויקט | <cwd>/.claude/rules/*.md ו-.claude/rules/*.md בכל תיקיית אב | settingSources כולל "project" |
| פרויקט (תיקיות אב) | קבצי CLAUDE.md בתיקיות מעל cwd | settingSources כולל "project", נטען בתחילת הסשן |
| פרויקט (תיקיות משנה) | קבצי CLAUDE.md בתת-תיקיות של cwd | settingSources כולל "project", נטען לפי דרישה |
| מקומי | <cwd>/CLAUDE.local.md ו-CLAUDE.local.md בכל תיקיית אב | settingSources כולל "local" |
| משתמש | ~/.claude/CLAUDE.md | settingSources כולל "user" |
| כללי משתמש | ~/.claude/rules/*.md | settingSources כולל "user" |
כל הרמות מצטברות: אם קיימים גם קבצי CLAUDE.md של הפרויקט וגם של המשתמש, הסוכן רואה את שניהם. אין כלל קדימות קשיח בין הרמות. אם הוראות סותרות, התוצאה תלויה באופן שבו Claude מפרש אותן. כתוב כללים שאינם סותרים, או ציין קדימות במפורש בקובץ הספציפי יותר ("הוראות הפרויקט האלה גוברות על ברירות מחדל סותרות ברמת המשתמש").
[!TIP]
אפשר גם להזריק הקשר ישירות דרך
systemPromptבלי להשתמש בקבצי CLAUDE.md. ראה שינוי הנחיות מערכת. השתמש ב-CLAUDE.md כשאתה רוצה את אותו הקשר משותף בין סשנים אינטראקטיביים של Claude Code לבין סוכני ה-SDK שלך.
לאופן המבנה והארגון של תוכן CLAUDE.md, ראה ניהול הזיכרון של Claude.
#מיומנויות
מיומנויות הן קבצי markdown שנותנים לסוכן שלך ידע מתמחה ותהליכי עבודה שאפשר להפעיל. בניגוד ל-CLAUDE.md (שנטען בכל סשן), מיומנויות נטענות לפי דרישה. הסוכן מקבל תיאורי מיומנויות בהפעלה וטוען את התוכן המלא כשהוא רלוונטי.
מיומנויות מתגלות ממערכת הקבצים דרך settingSources. כשאפשרות skills ב-query() מושמטת, מיומנויות משתמש ופרויקט שהתגלו מופעלות וכלי Skill זמין, בהתאם להתנהגות ה-CLI. כדי לשלוט באילו מיומנויות מופעלות, העבר את skills כ-"all", כרשימת שמות מיומנויות, או כ-[] כדי להשבית את כולן. כש-skills מוגדר, ה-SDK מוסיף את כלי Skill ל-allowedTools באופן אוטומטי. אם אתה מעביר גם רשימת tools מפורשת, כלול "Skill" ברשימה הזו כדי ש-Claude יוכל להפעיל מיומנויות.
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
import asyncio
# Skills in .claude/skills/ are discovered automatically
# when settingSources includes "project"
async def main():
async for message in query(
prompt="Review this PR using our code review checklist",
options=ClaudeAgentOptions(
setting_sources=["user", "project"],
skills="all",
allowed_tools=["Read", "Grep", "Glob"],
),
):
if isinstance(message, ResultMessage) and message.subtype == "success":
print(message.result)
asyncio.run(main())import { query } from "@anthropic-ai/claude-agent-sdk";
// Skills in .claude/skills/ are discovered automatically
// when settingSources includes "project"
for await (const message of query({
prompt: "Review this PR using our code review checklist",
options: {
settingSources: ["user", "project"],
skills: "all",
allowedTools: ["Read", "Grep", "Glob"]
}
})) {
if (message.type === "result" && message.subtype === "success") {
console.log(message.result);
}
}[!NOTE]
מיומנויות חייבות להיווצר כארטיפקטים במערכת הקבצים (
.claude/skills/<name>/SKILL.md). ל-SDK אין API תכנותי לרישום מיומנויות. ראה מיומנויות סוכן ב-SDK לפרטים המלאים.
#Hooks
ה-SDK תומך בשתי דרכים להגדיר hooks, והן רצות זו לצד זו:
- Hooks של מערכת קבצים: פקודות shell שמוגדרות ב-
settings.json, ונטענות כאשרsettingSourcesכולל את המקור הרלוונטי. אלה אותם hooks שהיית מגדיר עבור הפעלות אינטראקטיביות של Claude Code. - Hooks תכנותיים: פונקציות callback שמועברות ישירות אל
query(). אלה רצות בתהליך של היישום שלך ויכולות להחזיר החלטות מובנות. ראה שליטה בביצוע עם hooks.
callbacks של hooks מקבלים את הקלט של הכלי ומחזירים מילון החלטה. החזרת {} פירושה לאפשר לכלי להמשיך. כדי לחסום ביצוע, החזר אובייקט hookSpecificOutput עם permissionDecision: "deny" ו-permissionDecisionReason. הסיבה נשלחת אל Claude כתוצאת הכלי. ראה את מדריך ה-hooks לחתימת ה-callback המלאה ולסוגי ההחזרה.
from claude_agent_sdk import query, ClaudeAgentOptions, HookMatcher, ResultMessage
import asyncio
# PreToolUse hook callback. Positional args:
# input_data: HookInput dict with tool_name, tool_input, hook_event_name
# tool_use_id: str | None, the ID of the tool call being intercepted
# context: HookContext, reserved for future abort-signal support
async def audit_bash(input_data, tool_use_id, context):
command = input_data.get("tool_input", {}).get("command", "")
if "rm -rf" in command:
return {
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "Destructive command blocked",
}
}
return {} # Empty dict: allow the tool to proceed
# Filesystem hooks from .claude/settings.json run automatically
# when settingSources loads them. You can also add programmatic hooks:
async def main():
async for message in query(
prompt="Refactor the auth module",
options=ClaudeAgentOptions(
setting_sources=["project"], # Loads hooks from .claude/settings.json
hooks={
"PreToolUse": [
HookMatcher(matcher="Bash", hooks=[audit_bash]),
]
},
),
):
if isinstance(message, ResultMessage) and message.subtype == "success":
print(message.result)
asyncio.run(main())import { query, type HookInput, type HookJSONOutput } from "@anthropic-ai/claude-agent-sdk";
// PreToolUse hook callback. HookInput is a discriminated union on
// hook_event_name, so narrowing on it gives TypeScript the right
// tool_input shape for this event.
const auditBash = async (input: HookInput): Promise<HookJSONOutput> => {
if (input.hook_event_name !== "PreToolUse") return {};
const toolInput = input.tool_input as { command?: string };
if (toolInput.command?.includes("rm -rf")) {
return {
hookSpecificOutput: {
hookEventName: "PreToolUse",
permissionDecision: "deny",
permissionDecisionReason: "Destructive command blocked",
},
};
}
return {}; // Empty object: allow the tool to proceed
};
// Filesystem hooks from .claude/settings.json run automatically
// when settingSources loads them. You can also add programmatic hooks:
for await (const message of query({
prompt: "Refactor the auth module",
options: {
settingSources: ["project"], // Loads hooks from .claude/settings.json
hooks: {
PreToolUse: [{ matcher: "Bash", hooks: [auditBash] }]
}
}
})) {
if (message.type === "result" && message.subtype === "success") {
console.log(message.result);
}
}#מתי להשתמש באיזה סוג hook
| סוג hook | מתאים ביותר ל |
|---|---|
מערכת קבצים (settings.json) | שיתוף hooks בין הפעלות CLI והפעלות SDK. תומך ב-"command" (סקריפטי shell), "http" (POST לנקודת קצה), "mcp_tool" (קריאה לכלי של שרת MCP מחובר), "prompt" (LLM מעריך prompt), ו-"agent" (מפעיל סוכן מאמת). אלה מופעלים בסוכן הראשי ובכל תת-סוכנים שהוא מפעיל. |
תכנותי (callbacks ב-query()) | לוגיקה ייעודית ליישום, החלטות מובנות, ושילוב בתוך התהליך. אלה מופעלים גם בתוך תת-סוכנים. קלט ה-hook, הארגומנט הראשון של ה-callback, נושא שדות agent_id ו-agent_type שמזהים איזה סוכן הפעיל את ה-hook. |
[!NOTE]
ה-SDK של TypeScript תומך באירועי hook נוספים מעבר ל-Python, כולל
SessionStart,SessionEnd,TeammateIdle, ו-TaskCompleted. ראה את מדריך ה-hooks לטבלת התאימות המלאה של האירועים.
לפרטים מלאים על hooks תכנותיים, ראה שליטה בביצוע עם hooks. לתחביר של hooks של מערכת קבצים, ראה Hooks.
#בחירת היכולת המתאימה
ה-Agent SDK נותן לך גישה לכמה דרכים להרחיב את ההתנהגות של הסוכן שלך. אם אינך בטוח במה להשתמש, הטבלה הזו ממפה מטרות נפוצות לגישה המתאימה.
| מה אתה רוצה לעשות | השתמש ב | משטח SDK |
|---|---|---|
| הגדר מוסכמות פרויקט שהסוכן שלך תמיד עוקב אחריהן | CLAUDE.md | settingSources: ["project"] טוען אותו אוטומטית |
| תן לסוכן חומר עזר שהוא טוען כשהוא רלוונטי | Skills | אפשרות settingSources + skills |
| הרץ תהליך עבודה לשימוש חוזר (deploy, review, release) | User-invocable skills | אפשרות settingSources + skills |
| האצל משימת משנה מבודדת להקשר חדש (research, review) | Subagents | פרמטר agents + allowedTools: ["Agent"] |
| תאם כמה מופעים של Claude Code עם רשימות משימות משותפות והודעות ישירות בין סוכנים | Agent teams | לא מוגדר ישירות דרך אפשרויות SDK. צוותי סוכנים הם יכולת CLI שבה הפעלה אחת פועלת כמובילת הצוות, ומתאמת עבודה בין חברי צוות עצמאיים |
| הרץ לוגיקה דטרמיניסטית על קריאות כלים (audit, block, transform) | Hooks | פרמטר hooks עם callbacks, או סקריפטי shell שנטענים דרך settingSources |
| תן ל-Claude גישת כלים מובנית לשירות חיצוני | MCP | פרמטר mcpServers |
כל יכולת שאתה מפעיל מוסיפה לחלון ההקשר של הסוכן שלך. לעלויות לפי יכולת ולאופן שבו היכולות האלה נערמות זו על זו, ראה הרחבת Claude Code.
#משאבים קשורים
- הרחבת Claude Code: סקירה מושגית של כל יכולות ההרחבה, עם טבלאות השוואה וניתוח עלות הקשר
- Skills ב-SDK: מדריך מלא לשימוש ב-skills באופן תכנותי
- Subagents: הגדר והפעל תת-סוכנים למשימות משנה מבודדות
- Hooks: יירט ושלוט בהתנהגות הסוכן בנקודות ביצוע מרכזיות
- Permissions: שלוט בגישה לכלים עם מצבים, כללים, ו-callbacks
- System prompts: הזרק הקשר בלי קבצי CLAUDE.md