spinny:~/writing $ less building-ai-agents-claude-agent-sdk.md
12يمنحك Claude Agent SDK وصولاً برمجياً إلى نفس حلقة الوكيل التي تشغل Claude Code. يمكن لوكلائك قراءة الملفات، وتنفيذ أوامر shell، والبحث في الويب، وتحرير الكود، واستدعاء واجهات API خارجية من خلال خوادم MCP، وتنسيق الوكلاء الفرعيين - كل ذلك من بضعة أسطر من TypeScript أو Python.34على عكس Anthropic Client SDK المعياري حيث تبني حلقة الأدوات الخاصة بك، يتولى Agent SDK تنفيذ الأدوات وإدارة السياق وإعادة المحاولات والتنسيق داخلياً. أنت تصف ما تريد، وتوفر الأدوات، والوكيل يكتشف الباقي.56## البنية المعمارية78يتبع SDK حلقة بسيطة: **اجمع السياق، اتخذ إجراءً، تحقق، كرر**.910```mermaid11graph TD12 Input[User Prompt] --> Loop[Agent Loop]13 Loop --> Reason[Claude Reasons]14 Reason --> Tool[Call Tool]15 Tool --> Result[Tool Result]16 Result --> Loop17 Reason --> Done[Final Response]1819 subgraph "Built-in Tools"20 T1[Read / Write / Edit]21 T2[Bash / Terminal]22 T3[Glob / Grep]23 T4[WebSearch / WebFetch]24 end2526 subgraph "Custom Tools via MCP"27 M1[Your API]28 M2[Database]29 M3[Slack / GitHub / etc.]30 end3132 Tool --> T133 Tool --> M134```3536نقطة الدخول الرئيسية هي `query()`، التي تعيد async iterator يبث الرسائل أثناء عمل الوكيل. كل رسالة تخبرك بما يفعله الوكيل: التفكير، أو استدعاء أداة، أو استلام نتيجة، أو تقديم المخرج النهائي.3738## البدء3940### التثبيت4142```bash43# TypeScript44npm install @anthropic-ai/claude-agent-sdk4546# Python47pip install claude-agent-sdk48```4950تحتاج إلى تعيين مفتاح Anthropic API كـ `ANTHROPIC_API_KEY` في بيئتك.5152### وكيلك الأول5354```typescript55import { query } from "@anthropic-ai/claude-agent-sdk";5657const conversation = query({58 prompt: "Find all TODO comments in the codebase and create a summary",59 options: {60 allowedTools: ["Read", "Glob", "Grep"],61 },62});6364for await (const message of conversation) {65 if (message.type === "assistant") {66 process.stdout.write(message.content);67 }68 if (message.type === "result" && message.subtype === "success") {69 console.log("\nDone:", message.result);70 }71}72```7374هذا كل شيء. سيستخدم الوكيل Glob للعثور على الملفات، وGrep للبحث عن أنماط TODO، وRead لفحص التطابقات، ويعيد ملخصاً منظماً. لا تحتاج لكتابة منطق التنسيق - SDK يتولى ذلك.7576### المعادل في Python7778```python79from claude_agent_sdk import query8081async for message in query(82 prompt="Find all TODO comments in the codebase and create a summary",83 options={"allowed_tools": ["Read", "Glob", "Grep"]},84):85 if message.type == "assistant":86 print(message.content, end="")87 if message.type == "result" and message.subtype == "success":88 print(f"\nDone: {message.result}")89```9091## الأدوات المدمجة9293يأتي SDK مع نفس الأدوات المتوفرة في Claude Code:9495| الأداة | الوصف |96|------|-------------|97| **Read** | قراءة محتويات الملف |98| **Write** | إنشاء ملفات جديدة |99| **Edit** | إجراء تعديلات مستهدفة على الملفات الموجودة |100| **Bash** | تنفيذ أوامر shell |101| **Glob** | البحث عن الملفات بالنمط |102| **Grep** | البحث في محتويات الملفات باستخدام regex |103| **WebSearch** | البحث في الويب |104| **WebFetch** | جلب عنوان URL وإعادة محتوياته |105| **AskUserQuestion** | طلب إدخال من المستخدم |106107تتحكم في الأدوات التي يمكن للوكيل استخدامها من خلال `allowedTools`. إذا لم تكن أداة في القائمة، فلا يمكن للوكيل استدعاؤها.108109## أوضاع الصلاحيات110111بما أن الوكلاء ينفذون أوامر حقيقية على أنظمة حقيقية، فالصلاحيات مهمة.112113| الوضع | السلوك | حالة الاستخدام |114|------|----------|----------|115| `default` | callback مخصص `canUseTool` يقرر لكل استدعاء | تحكم دقيق |116| `acceptEdits` | موافقة تلقائية على عمليات الملفات، طلب إذن لـ Bash | سير عمل التطوير |117| `dontAsk` | رفض أي شيء ليس في allowedTools | وكلاء مقيدون |118| `bypassPermissions` | موافقة تلقائية على كل شيء | بيئات sandboxed موثوقة |119| `auto` | مصنف النموذج يقرر الأمان | أتمتة متوازنة |120121```typescript122const conversation = query({123 prompt: "Refactor the auth module to use JWT",124 options: {125 allowedTools: ["Read", "Edit", "Glob", "Grep", "Bash"],126 permissionMode: "acceptEdits",127 },128});129```130131للاستخدام في الإنتاج، شغل الوكلاء دائماً في بيئات معزولة (حاويات، VMs) واستخدم وضع الصلاحيات الأكثر تقييداً الذي لا يزال يسمح للوكيل بأداء عمله.132133## بناء أدوات مخصصة مع MCP134135القوة الحقيقية لـ SDK تأتي من توسيع الوكلاء بأدواتك الخاصة. تُعرَّف الأدوات المخصصة كخوادم MCP داخل العملية - بدون إدارة عمليات فرعية، وبدون حمل إضافي على الشبكة.136137### مثال: أداة الطقس138139```typescript140import { tool, createSdkMcpServer, query } from "@anthropic-ai/claude-agent-sdk";141import { z } from "zod";142143const getTemperature = tool(144 "get_temperature",145 "Get the current temperature at a location",146 {147 latitude: z.number().describe("Latitude"),148 longitude: z.number().describe("Longitude"),149 },150 async ({ latitude, longitude }) => {151 const res = await fetch(152 `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m&temperature_unit=celsius`153 );154 const data = await res.json();155 return {156 content: [157 {158 type: "text",159 text: `Current temperature: ${data.current.temperature_2m}C`,160 },161 ],162 };163 }164);165166const weatherServer = createSdkMcpServer({167 name: "weather",168 version: "1.0.0",169 tools: [getTemperature],170});171172for await (const message of query({173 prompt: "What's the weather like in Rome?",174 options: {175 mcpServers: { weather: weatherServer },176 allowedTools: ["mcp__weather__get_temperature"],177 },178})) {179 if (message.type === "result" && message.subtype === "success") {180 console.log(message.result);181 }182}183```184185تتبع الأدوات المخصصة اتفاقية التسمية `mcp__{server_name}__{tool_name}`. يمكنك استخدام أحرف البدل في `allowedTools`: `"mcp__weather__*"` تسمح بجميع أدوات خادم الطقس.186187### مثال: أداة استعلام قاعدة البيانات188189```typescript190const queryDb = tool(191 "query_database",192 "Run a read-only SQL query against the application database",193 {194 sql: z.string().describe("SQL SELECT query to execute"),195 },196 async ({ sql }) => {197 // Validate: only allow SELECT queries198 if (!sql.trim().toUpperCase().startsWith("SELECT")) {199 return {200 content: [{ type: "text", text: "Error: Only SELECT queries are allowed." }],201 };202 }203204 const result = await pool.query(sql);205 return {206 content: [207 {208 type: "text",209 text: JSON.stringify(result.rows, null, 2),210 },211 ],212 };213 }214);215```216217## الاتصال بخوادم MCP خارجية218219بالإضافة إلى الأدوات داخل العملية، يمكنك الاتصال بأي خادم MCP موجود - نفس الخوادم التي تعمل مع Claude Desktop وCursor وعملاء MCP الآخرين.220221```typescript222for await (const message of query({223 prompt: "Check the latest issues in the frontend repo and summarize them",224 options: {225 mcpServers: {226 github: {227 command: "npx",228 args: ["-y", "@modelcontextprotocol/server-github"],229 env: { GITHUB_PERSONAL_ACCESS_TOKEN: process.env.GITHUB_TOKEN },230 },231 },232 allowedTools: ["mcp__github__*"],233 },234})) {235 // ...236}237```238239يمكنك دمج خوادم MCP متعددة. يرى الوكيل جميع الأدوات من جميع الخوادم المتصلة ويستخدمها حسب الحاجة.240241```mermaid242graph LR243 Agent[Your Agent] --> SDK[Agent SDK]244 SDK --> InProcess[In-process MCP\nCustom Tools]245 SDK --> GitHub[GitHub MCP Server]246 SDK --> Postgres[PostgreSQL MCP Server]247 SDK --> Slack[Slack MCP Server]248```249250## تنسيق متعدد الوكلاء251252لسير العمل المعقدة، يمكنك تعريف وكلاء فرعيين متخصصين يفوض إليهم الوكيل الأصلي. لكل وكيل فرعي موجهه وأدواته ومجال تركيزه الخاص.253254```typescript255for await (const message of query({256 prompt: "Review the PR, check for security issues, and update the changelog",257 options: {258 allowedTools: ["Read", "Edit", "Bash", "Glob", "Grep", "Agent"],259 agents: [260 {261 name: "security-reviewer",262 description: "Reviews code for security vulnerabilities",263 prompt: "You are a security expert. Analyze code for OWASP Top 10 vulnerabilities.",264 allowedTools: ["Read", "Glob", "Grep"],265 },266 {267 name: "changelog-writer",268 description: "Updates the CHANGELOG.md file based on recent changes",269 prompt: "You maintain the project changelog. Follow Keep a Changelog format.",270 allowedTools: ["Read", "Edit", "Bash"],271 },272 ],273 },274})) {275 // The parent agent will:276 // 1. Read the PR diff277 // 2. Delegate security review to security-reviewer278 // 3. Delegate changelog update to changelog-writer279 // 4. Synthesize results280}281```282283أضف `"Agent"` إلى `allowedTools` الخاص بالوكيل الأصلي لتمكين التفويض. تعمل الوكلاء الفرعيون بأدواتهم الخاصة ولا يمكنهم الوصول إلى أدوات الأصل إلا إذا مُنحت لهم صراحة.284285```mermaid286graph TD287 Parent[Parent Agent] --> SR[Security Reviewer\nRead, Glob, Grep]288 Parent --> CW[Changelog Writer\nRead, Edit, Bash]289 SR --> Report[Security Report]290 CW --> Updated[Updated CHANGELOG]291 Report --> Parent292 Updated --> Parent293 Parent --> Final[Final Summary]294```295296## الجلسات والاستمرارية297298يمكن للوكلاء الحفاظ على السياق عبر استعلامات متعددة باستخدام الجلسات. التقط `session_id` من التفاعل الأول ومرره في `resume` للاستعلامات اللاحقة.299300```typescript301let sessionId: string | undefined;302303// First query304for await (const message of query({305 prompt: "Read the project structure and understand the architecture",306 options: { allowedTools: ["Read", "Glob", "Grep"] },307})) {308 if (message.type === "init") {309 sessionId = message.session_id;310 }311}312313// Follow-up query (same session, full context preserved)314for await (const message of query({315 prompt: "Now refactor the auth module based on what you learned",316 resume: sessionId,317 options: { allowedTools: ["Read", "Edit", "Bash"] },318})) {319 // Agent remembers the full project context from the first query320}321```322323## Claude Managed Agents324325إذا كنت لا تريد استضافة بنية الوكيل التحتية بنفسك، فإن **Claude Managed Agents** (أُطلق في أبريل 2026) يوفر خدمة سحابية مدارة بالكامل. تشغل Anthropic الحاويات، وتتولى التوسع، وتوفر واجهة API للبث.326327```mermaid328graph LR329 subgraph "Self-hosted (Agent SDK)"330 Code[Your Code] --> SDK2[Agent SDK]331 SDK2 --> API[Claude API]332 SDK2 --> Tools[Your Tools]333 end334335 subgraph "Managed Agents"336 App[Your App] --> MAPI[Managed Agents API]337 MAPI --> Container[Anthropic-hosted Container]338 Container --> API2[Claude API]339 Container --> Tools2[Tools in Container]340 end341```342343الفرق الرئيسي: مع Agent SDK، تشغل حلقة الوكيل في بنيتك التحتية الخاصة. مع Managed Agents، تستضيف Anthropic الوكيل وتشغله لك. تتفاعل عبر واجهة API قائمة على الجلسات وتتلقى الأحداث عبر Server-Sent Events.344345**التسعير:**346- **Agent SDK**: أسعار رموز Claude API المعيارية فقط. أنت تتولى الاستضافة.347- **Managed Agents**: أسعار الرموز بالإضافة إلى $0.08 لكل ساعة جلسة (الفوترة بالمللي ثانية).348349## أفضل الممارسات للإنتاج350351### 1. استخدم العزل دائماً352353لا تشغل أبداً وكلاء بصلاحيات غير مقيدة على جهاز إنتاج. استخدم الحاويات (Docker, Fly.io, Modal) أو البيئات المعزولة (E2B, Vercel Sandbox).354355### 2. حدد الوصول إلى الأدوات356357اتبع مبدأ أقل الامتيازات. الوكيل الذي يولد تقارير لا يحتاج إلى `Bash` أو `Write`.358359```typescript360// Too permissive361allowedTools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]362363// Better: only what's needed364allowedTools: ["Read", "Glob", "Grep"]365```366367### 3. استخدم Hooks للحواجز الأمنية368369تتيح لك Hooks اعتراض استدعاءات الأدوات قبل وبعد التنفيذ. استخدمها للتسجيل والتحقق وتحديد المعدل.370371```typescript372const conversation = query({373 prompt: "Analyze the codebase",374 options: {375 allowedTools: ["Read", "Glob", "Grep"],376 hooks: {377 PreToolUse: async (toolName, input) => {378 console.log(`Tool call: ${toolName}`, input);379 // Return false to block the call380 if (toolName === "Bash" && input.command.includes("rm")) {381 return false;382 }383 return true;384 },385 },386 },387});388```389390### 4. تعامل مع الأخطاء بأناقة391392يمكن لحلقة الوكيل إنتاج أخطاء - فشل الأدوات، حدود معدل API، تجاوز نافذة السياق. تحقق دائماً من أنواع الرسائل.393394```typescript395for await (const message of conversation) {396 switch (message.type) {397 case "assistant":398 // Agent reasoning399 break;400 case "tool_use":401 // Agent is calling a tool402 break;403 case "result":404 if (message.subtype === "error") {405 console.error("Agent failed:", message.error);406 }407 break;408 }409}410```411412### 5. راقب استهلاك الرموز413414يمكن لحلقات الوكيل استهلاك رموز كبيرة، خاصة مع قواعد الكود الكبيرة. يتضمن SDK ضغط سياق تلقائي، لكن يجب عليك مراقبة الاستهلاك.415416## الخلاصة417418يحول Claude Agent SDK نموذج اللغة الكبير من آلة للإجابة على الأسئلة إلى شيء أقرب إلى مطور مبتدئ. يمكن لوكلائك القراءة والكتابة والتنفيذ والتحقق والتكرار - نفس سير العمل الذي يتبعه الإنسان.419420ابدأ صغيراً: ابنِ وكيلاً ببضع أدوات مدمجة. ثم أضف أدوات MCP مخصصة لمجالك المحدد. وسع إلى تنسيق متعدد الوكلاء عندما تتطلب سير عملك التخصص.421422حلقة الوكيل هي نفسها التي تشغل Claude Code. إذا كان يمكنه بناء البرمجيات، فيمكن لوكلائك ذلك أيضاً.423424> **قائمة مراجعة البدء:**425>426> - [x] ثبت SDK (`npm install @anthropic-ai/claude-agent-sdk`)427> - [x] عيّن `ANTHROPIC_API_KEY` في بيئتك428> - [x] ابنِ وكيلاً بسيطاً بالأدوات المدمجة (Read, Glob, Grep)429> - [x] أضف أداة مخصصة عبر خادم MCP داخل العملية430> - [x] اتصل بخادم MCP خارجي (GitHub, PostgreSQL, إلخ.)431> - [x] نفّذ تنسيق متعدد الوكلاء مع وكلاء فرعيين432> - [x] أعد بيئة معزولة للإنتاج433> - [x] أضف hooks للتسجيل والحواجز الأمنية434
:بناء وكلاء AI باستخدام Claude Agent SDK: دليل عمليlines 1-434 (END) — press q to close