מדריך קלוד קוד בעברית

תיעוד 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.mdsettingSources כולל "project"
כללי פרויקט<cwd>/.claude/rules/*.md ו-.claude/rules/*.md בכל תיקיית אבsettingSources כולל "project"
פרויקט (תיקיות אב)קבצי CLAUDE.md בתיקיות מעל cwdsettingSources כולל "project", נטען בתחילת הסשן
פרויקט (תיקיות משנה)קבצי CLAUDE.md בתת-תיקיות של cwdsettingSources כולל "project", נטען לפי דרישה
מקומי<cwd>/CLAUDE.local.md ו-CLAUDE.local.md בכל תיקיית אבsettingSources כולל "local"
משתמש~/.claude/CLAUDE.mdsettingSources כולל "user"
כללי משתמש~/.claude/rules/*.mdsettingSources כולל "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.mdsettingSources: ["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