الكتابات/blog/2026/06
Blog26 يونيو 2026·6 دقيقة

Claude Agent SDK: بناء زملاء ذكاء اصطناعي دائمين

ابنِ زملاء ذكاء اصطناعي دائمين مع Claude Agent SDK: هوية مخصصة للقناة، جلسات مستمرة، عزل أدوات MCP، ومحفزات سياقية. أنماط من Claude Tag.

عندما أطلقت Anthropic منتج Claude Tag في 23 يونيو 2026، استبدلت تطبيق "Claude in Slack" القديم بشيء جديد معماريًا: هوية Claude واحدة مشتركة لكل قناة، وذاكرة دائمة بين أعضاء الفريق، ووضع سياقي (Ambient Mode) يجعل Claude ينشر بمبادرته دون أن يُستدعى. إنها نفس حلقة الوكيل التي تشغّل Claude Code، مُعاد تغليفها كزميل طويل الأمد داخل واجهة دردشة.

الخبر الجيد للمطورين هو أن اللبنات الأساسية متاحة للعموم. تُتيح Claude Agent SDK نفس الحلقة والأدوات والجلسات وبنية MCP التي يستخدمها Claude Tag داخليًا. يمكنك استخدامها لشحن زملاء دائمين داخل منتجك — روبوت Discord يفرز الحوادث، ووكيل WhatsApp يتابع عروض الأسعار، ووكيل في مساحة العمل يراقب CRM ويُنبّه فريق المبيعات عندما تتوقف صفقة.

هذا الدليل يستعرض الأساسيات الأربع التي تحتاجها لتجميع زميل دائم: الهوية، والذاكرة، والأدوات، والمحفزات.

نمط الزميل الدائم

الزميل ليس روبوت دردشة. ثلاث خصائص تفصل بينهما:

  1. هوية مشتركة، وليست لكل مستخدم. قناة Slack تحوي @Claude واحدًا يتحدث إليه كل أعضاء الفريق ويتشاركون السياق معه — وليس نسخة منفصلة لكل شخص. هذا عكس نموذج "مساعد ذكاء اصطناعي لكل مستخدم" المعتاد.
  2. ذاكرة تنجو بعد المحادثة. ما يتعلمه الوكيل في خيط الإثنين يبقى متاحًا يوم الجمعة، لزميل آخر، دون إعادة التذكير.
  3. مبادرة سياقية. الوكيل يمكنه التصرف دون أن يُخاطَب. يراقب البيئة ويقرر ما يحتاج البشر معرفته.

هذه الخصائص الثلاث يصعب إضافتها لاحقًا على واجهة LLM عديمة الحالة. توفرها Agent SDK كمفاهيم من الدرجة الأولى.

التثبيت والإقلاع

تتوفر SDK في TypeScript و Python. تأتي حزمة TypeScript مدمجة مع ثنائي Claude Code أصلي، لذا تكفي npm install واحدة.

npm install @anthropic-ai/claude-agent-sdk
# أو
pip install claude-agent-sdk

اضبط مفتاح API كمتغير بيئة. تقبل SDK أيضًا مزودين خارجيين — Amazon Bedrock، Google Vertex AI، Microsoft Foundry، Claude Platform on AWS — عبر علامات بيئة مخصصة. للفرق في منطقة MENA التي تمر عبر البحرين (AWS) أو الإمارات الشمالية (Azure) لإقامة البيانات، هذا هو المسار الأقل احتكاكًا.

export ANTHROPIC_API_KEY=your-api-key

حلقة وكيل بسيطة في TypeScript تبدو هكذا:

import { query } from "@anthropic-ai/claude-agent-sdk";
 
for await (const message of query({
  prompt: "لخّص القضايا المفتوحة في #engineering هذا الأسبوع",
  options: { allowedTools: ["Read", "WebFetch", "Grep"] }
})) {
  console.log(message);
}

تُرجع query مكررًا غير متزامن على دفق الرسائل — أدوار المساعد، استدعاءات الأدوات، نتائج الأدوات، ورسالة result نهائية. تتولى SDK حلقة الأدوات بأكملها بدلًا عنك. قارن هذا بـ Anthropic Client SDK الخام، حيث ستكتب حلقة while (response.stop_reason === "tool_use") بنفسك، وتنظم النتائج، وتمررها يدويًا.

هوية مخصصة للقناة

لتحويل هذا الاستعلام لمرة واحدة إلى زميل قناة، تحتاج هوية مستقرة مرتبطة بسطح دردشة. يعمل نمطان:

  • عملية لكل قناة. عامل طويل الأمد يحافظ على دفء حلقة الوكيل.
  • جلسة لكل قناة. عامل عديم الحالة، لكن كل رسالة تستأنف معرف جلسة محفوظ.

لمعظم الفرق النمط الثاني أرخص وأسهل تشغيلًا. تحفظ SDK الجلسات بصيغة JSONL في نظام ملفاتك، وتستأنفها عبر المعرف.

import { query } from "@anthropic-ai/claude-agent-sdk";
 
async function handleMessage(channelId: string, userText: string, savedSessionId?: string) {
  let sessionId: string | undefined;
 
  for await (const message of query({
    prompt: userText,
    options: {
      resume: savedSessionId,
      allowedTools: ["Read", "WebFetch", "Grep", "Bash"]
    }
  })) {
    if (message.type === "system" && message.subtype === "init") {
      sessionId = message.session_id;
    }
    if ("result" in message) {
      await postToChannel(channelId, message.result);
    }
  }
 
  await saveSessionId(channelId, sessionId);
}

الآن الوكيل في #engineering هوية مختلفة عن #support — ذاكرة مختلفة، أدوات مختلفة، موجه نظام مختلف — لكن كلًا منهما دائم عبر الرسائل. عدة زملاء ينشرون في نفس القناة يتشاركون نفس Claude.

الذاكرة: CLAUDE.md بالإضافة إلى سجل الجلسة

تكشف SDK طبقتي ذاكرة وعليك استخدام كلتيهما.

ذاكرة المشروع تعيش في .claude/CLAUDE.md (أو CLAUDE.md في جذر دليل العمل). تُحمّلها SDK في كل جلسة كسياق نظام. استخدمها للحقائق التي يجب ألا تتغير بين المحادثات: من هو الفريق، وماذا يفعل المنتج، واصطلاحاتك، وقواعد التصعيد. لزميل قناة، اكتب ملف CLAUDE.md مختلفًا لكل قناة.

ذاكرة الجلسة هي سجل JSONL لكل دور في جلسة مُستأنَفة. تحمل رؤية النموذج للمحادثات السابقة، والملفات المقروءة، ونتائج الأدوات المستلمة. تدير SDK الضغط مع امتلاء نافذة السياق.

طبقة ثالثة عملية هي قاعدة بياناتك الخاصة. الجلسات قد تنمو بلا حدود، ولا تريد لسجل جامح أن يصبح كامل نظرة الوكيل للعالم. النمط الشائع هو تلخيص الجلسات الأقدم من أسبوع في فقرات قليلة، كتابة هذه الفقرات في CLAUDE.md، وبدء معرف جلسة جديد. يحتفظ الوكيل بالمعرفة الدائمة ويتخلص من الضجيج.

عزل الأدوات عبر MCP

بروتوكول Model Context Protocol هو الجزء من Agent SDK الذي يجعل الزملاء الدائمين يستحقون التشغيل. MCP معيار مفتوح لربط الوكلاء بأنظمة خارجية — قواعد بيانات، متعقبات تذاكر، متصفحات، واجهات APIs الداخلية — دون كتابة تنفيذات أدوات مخصصة.

ربط خادم MCP هو سطر واحد من الإعدادات:

for await (const message of query({
  prompt: "ما الذي تغير في المستودع منذ الأمس؟",
  options: {
    mcpServers: {
      github: { command: "npx", args: ["@modelcontextprotocol/server-github"] },
      slack: { command: "npx", args: ["@modelcontextprotocol/server-slack"] }
    },
    allowedTools: ["Read", "Grep"]
  }
})) {
  if ("result" in message) console.log(message.result);
}

لزميل قناة تريد دائمًا تقريبًا تحديد نطاق الأدوات لكل قناة. وكيل #finance يجب ألا يملك صلاحية كتابة على GitHub. وكيل #engineering يجب ألا يرى بيانات العملاء الشخصية. النمط هو حساب mcpServers و allowedTools من بيانات القناة قبل كل استعلام — لا شحن وكيل ضخم واحد مع كل شيء مفعّل.

عنصر التحكم الآخر الأساسي هو permissionMode. الافتراضي هو الطلب؛ يوافق acceptEdits تلقائيًا على التعديلات؛ bypassPermissions للأتمتة الموثوقة فقط. لوكيل قناة سياقي، اكشف مجموعة ضيقة من الأدوات المعتمدة مسبقًا واطلب تأكيد بشريًا لأي شيء يعبر حدًا (دفعة، منشور عام، حذف).

Hooks: سجل المراجعة الذي ستحتاجه

كل زميل دائم يحتاج في النهاية إجابة عن "ماذا فعل الوكيل فعلًا الأسبوع الماضي؟" Hooks هي استدعاءات دورة حياة SDK لهذا. PreToolUse, PostToolUse, Stop, SessionStart, SessionEnd, UserPromptSubmit — كل واحدة تطلق بشكل متزامن وتدعك تسجّل، أو تتحقق، أو تمنع.

import { query, HookCallback } from "@anthropic-ai/claude-agent-sdk";
import { appendFile } from "fs/promises";
 
const logToolUse: HookCallback = async (input) => {
  const tool = (input as any).tool_name;
  const args = JSON.stringify((input as any).tool_input);
  await appendFile("./audit.log", `${new Date().toISOString()} ${tool} ${args}\n`);
  return {};
};
 
for await (const message of query({
  prompt: "عالج تقارير نفقات هذا الأسبوع",
  options: {
    permissionMode: "acceptEdits",
    hooks: {
      PreToolUse: [{ matcher: ".*", hooks: [logToolUse] }]
    }
  }
})) {
  if ("result" in message) console.log(message.result);
}

للامتثال لـ INPDP في تونس و PDPL في السعودية، هذا ليس اختياريًا. كل استدعاء أداة ضد نظام يحوي بيانات شخصية — CRM، أداة الفوترة، صندوق الدعم — يحتاج سجلًا بما قُرئ، وأي وكيل قرأه، وفي أي قناة، ولصالح من. خطاف PostToolUse يبث إلى جدول المراجعة يغطي الحالة المعيارية.

الوضع السياقي: محفزات لا مطالبات

أصعب جزء في زميل دائم هو الجزء الذي لا علاقة له بـ Agent SDK. SDK تعطيك الحلقة؛ عليك أن تعطيها أسبابًا للاستيقاظ.

ثلاثة مصادر محفزات تغطي معظم حالات الاستخدام:

  • Webhooks. رسالة Slack جديدة، قضية GitHub جديدة، شحنة Stripe جديدة. معالج webhook يستأنف جلسة القناة بمطالبة مثل "تم رفع قضية جديدة عالية الأولوية؛ راجع وفرز."
  • Cron. كل يوم عمل الساعة 9 صباحًا، استأنف الجلسة بـ "لخّص سجلات المناوبة الليلية وانشر أي شيء يستحق الإشارة." هكذا تحصل على ملخصات نهاية اليوم وموجزات الصباح.
  • مراقبات داخلية. عملية صغيرة ترصد طابورًا، أو قياسًا، أو تقويمًا، وتستأنف الجلسة عند تجاوز عتبة. هذا أقرب تطابق لـ "الوضع السياقي" في Claude Tag.

الخيط المشترك هو أن المحفز كودك أنت. لا تشترك Agent SDK في أي شيء نيابة عنك. أنت تقرر ما يُحتسب حدثًا، يطلق المحفز query({ resume: sessionId, prompt: "..."})، والوكيل يستنتج فوق ذاكرته المتراكمة قبل الاستجابة.

لمنع الوضع السياقي من التحول إلى سبام، اشترط فحص ثقة قبل كل منشور استباقي. نمط بسيط: اسأل النموذج "هل أنشر هذا في القناة، نعم أم لا، ولماذا" كمرور ثانٍ، حلّل الجواب، وانشر فقط على نعم. أضف حدًا لمعدل النشر لكل قناة.

وكلاء فرعيون للعمل المتوازي

غالبًا ما يحتاج الزملاء طويلو الأمد إلى التوسع أفقيًا. وكيل الفرز في #support قد يحتاج لقراءة ملف العميل، والبحث في الوثائق، وفحص النشرات الأخيرة دفعة واحدة. تشحن SDK وكلاء فرعيين — وكلاء أبناء مفوضين بسياقهم الخاص — لنمذجة هذا.

for await (const message of query({
  prompt: "افرز التذكرة من acme.corp المنشورة في هذه القناة",
  options: {
    allowedTools: ["Read", "Glob", "Grep", "Agent"],
    agents: {
      "doc-searcher": {
        description: "يبحث في وثائق المنتج وسجلات التغييرات.",
        prompt: "ابحث عن أوثق فقرات الوثائق لسؤال المستخدم.",
        tools: ["Read", "Glob", "Grep"]
      },
      "deploy-checker": {
        description: "يفحص النشرات والحوادث الأخيرة.",
        prompt: "اسرد النشرات والحوادث في آخر 24 ساعة التي قد تؤثر على هذا العميل.",
        tools: ["Bash", "WebFetch"]
      }
    }
  }
})) {
  if ("result" in message) console.log(message.result);
}

كل وكيل فرعي يعمل في نافذة سياقه الخاصة، فلا يدفع الأب تكلفة الرموز لنص بحث الوثائق الكامل — فقط الملخص الذي يعيده الوكيل الفرعي. الرسائل من داخل وكيل فرعي تحمل parent_tool_use_id لتنسب السجلات والتكاليف بشكل صحيح.

SDK أم Managed Agents

إن بدا تشغيل تخزين الجلسات والصناديق الرملية في بنيتك التحتية أكثر مما تريد، تقدم Claude Platform أيضًا Managed Agents — واجهة REST API مُستضافة حيث تشغل Anthropic حلقة الوكيل وصندوقًا رمليًا لكل جلسة بدلًا عنك. ترسل الأحداث، وتدفق النتائج عائدة.

الانقسام مباشر:

  • Agent SDK عندما يجب أن يلمس الوكيل نظام ملفاتك، وخدماتك، وقواعد بياناتك المحمية بـ VPN. نمذجة محلية. أدوات مخصصة بكود أصلي.
  • Managed Agents عندما تريد صفر بنية تحتية، جلسات طويلة الأمد جاهزة، و Anthropic تشغّل الصندوق الرملي. نطاق إنتاج دون بناء مخزن جلسات خاص بك.

المسار الشائع هو النمذجة على Agent SDK محليًا، ثم نقل الوكلاء الساخنين إلى Managed Agents بمجرد وضوح الشكل.

ما الذي تبنيه أولًا

إن كنت تبدأ من الصفر، فأصغر زميل دائم مفيد هو تقريبًا:

  1. قناة واحدة، معرف جلسة واحد مخزن في قاعدة بياناتك مفهرسًا بالقناة.
  2. ملف CLAUDE.md واحد يصف غرض القناة وقواعدها.
  3. خادمان أو ثلاثة من MCP، محددو النطاق للقناة.
  4. webhook يستأنف الجلسة عند الرسائل الجديدة.
  5. خطاف PostToolUse يكتب صف مراجعة.
  6. cron ينشر ملخصًا صباحيًا.

هذا تقريبًا يومان من العمل ويعطيك زميلًا يتذكر ما تحدثتم عنه أمس، ويعرف الأدوات المسموح له لمسها، ويمكنه النشر دون أن يُسأل. من هناك، كل قناة إضافية هي إعداد، لا كود.

التحول المعماري الذي يمثله Claude Tag — من مساعدين لكل مستخدم إلى زملاء مشتركين دائمين سياقيين — هو بنية تحتية مفتوحة الآن. السؤال المثير ليس ما إذا كان عليك بناء واحد، بل أين في منتجك ستغير هوية مشتركة بذاكرة طويلة طريقة عمل الفريق فعلًا.

المصادر