# ذاكرة Claude Code تبقى بعد انتهاء الجلسة (MCP واسترجاع هجين)

> كل جلسة جديدة في Claude Code تبدأ من الصفر. Zekra خدمة ذاكرة مفتوحة المصدر يصل إليها أي وكيل عبر MCP: تحفظ ما يستحق الحفظ وتسترجعه في الجلسة التالية مع مصدره. الإعداد يستغرق خمس دقائق.

*2026-10-21T07:01:59Z*

ذاكرة Claude Code لا تبقى بعد انتهاء الجلسة: كل جلسة جديدة أبدؤها لا تعرف شيئًا عن الجلسة السابقة. من أي فرع ننشر، ولماذا اخترنا Postgres بدل SQLite في هذا المشروع، وما الخيار الذي يكسر البناء على Windows: إما أن أكتب ذلك في `CLAUDE.md`، أو أشرحه من جديد.

ملف `CLAUDE.md` مناسب للقواعد، لكنه لا يناسب مئات الحقائق الصغيرة التي يجمعها المشروع في شهر واحد، ولا ينتقل بين الأدوات: Codex وCursor وGemini يريد كل منها ملفه الخاص، ولا يستطيع أي منها تحديثه بأمان أثناء العمل.

لذلك بنيت **Zekra**: خدمة ذاكرة يصل إليها أي وكيل ذكاء اصطناعي عبر **MCP**. يحفظ الوكيل ما يتعلمه، وتسترجعه الجلسة التالية، في الأداة نفسها أو في أداة أخرى، مع إشارة إلى مصدره. أستخدمها يوميًا منذ شهور، ويتشاركها مساعدي الشخصي ومستودعات منتجاتي وجلسات البرمجة.

يشرح هذا المقال كيف تُعدّها في نحو خمس دقائق، وما الذي يحدث فعلًا حين يتذكر الوكيل شيئًا، وأين لا تزال تحتاج إلى عمل. وإن أردت أن تشاهد أولًا، فهذا [عرض في 51 ثانية](https://youtu.be/3JgGFrS1mx8).

## خمس دقائق إلى ذاكرة Claude Code دائمة

**1. أنشئ حسابًا و«عقلًا».** سجّل في [app.zekra.dev](https://app.zekra.dev/register)، ثم افتح **Brains** واضغط **New brain**، وسمّه باسم مشروعك مثل `my-project`. العقل نطاق مستقل (namespace)، وتخصيص عقل لكل مشروع أو فريق يمنع اختلاط الذكريات بينها.

**2. احصل على رمز وصول.** افتح العقل، ثم **Sessions** ← **Launch a session**. اترك صلاحية الكتابة مغلقة إن أردت أن يقرأ الوكيل فقط. انسخ الرمز `cbt_…` وتعامل معه ككلمة مرور.

**3. ثبّت أداة سطر الأوامر واربط وكيلك.**

```sh
curl -fsSL https://app.zekra.dev/install.sh | sh
zekra auth login --token cbt_...
zekra mcp:install claude-code --brain my-project
```

يمكنك استبدال `claude-code` بـ `claude-desktop` أو `cursor` أو `codex` أو `gemini`. يضيف المثبّت إعداد `zekra` إلى ملف MCP الخاص بالأداة دون أن يمس بقية الخوادم. أعد تشغيل الأداة بعدها.

**4. جرّب.** قل للوكيل:

> تذكّر أن بيئة staging تعمل على Postgres 16 وأن النشر يتم من فرع `release`.

سيستدعي `memory_retain`. افتح جلسة **جديدة** واسأل:

> من أي فرع ننشر؟

سيستدعي `memory_recall` ويجيب من الذاكرة المحفوظة. ويمكنك التحقق من الطرفية أيضًا:

```sh
zekra recall my-project "deploy branch"
```

## ما الذي يحدث حين يتذكر الوكيل

تخزين النص هو الجزء السهل. أما الصعب فشيئان: ألّا تمتلئ الذاكرة بالتكرار، وأن تجد الذكرى الصحيحة لاحقًا.

**عند الكتابة، تقرر Zekra بدل أن تضيف فقط.** تمر كل ذكرى جديدة بخطوة قرار: **إضافة** (ADD)، أو **تحديث** ذكرى موجودة (UPDATE)، أو **إبطال** ذكرى تتعارض معها (INVALIDATE)، أو **لا شيء** (NOOP) لأنها معروفة بالفعل. فإن أخبرت الوكيل في يونيو أن staging على Postgres 15 ثم في أكتوبر أنها على 16، يعيد الاسترجاع الرقم 16، وتبقى المعلومة القديمة في السجل إن طلبتها. لا يُحذف شيء نهائيًا، فـ `memory_forget` يبطل الذكرى ولا يمحوها. التفاصيل في [الذكريات القديمة: الإبطال والاستبدال والتلاشي](/ar/blog/stale-memories-ai-agents-invalidate-supersede-decay).

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

- متجهات كثيفة متعددة اللغات للمعنى،
- وBM25 للكلمات الدقيقة،
- ثم تدمج النتائج بطريقة RRF، مع ترجيح بحسب الأهمية، وإعادة ترتيب،
- ثم توسّع النتيجة خطوة واحدة عبر **مخطط الكيانات**، فتجلب ذكرى عن مستودع ما الحزمةَ التي يعتمد عليها.

وتعود كل نتيجة بمصدرها ووقتها، ليميّز الوكيل، وتميّز أنت، بين حقيقة حديثة وملاحظة قديمة.

## أكثر من مخزن مفاتيح وقيم

أشياء احتجت إليها حين صار أكثر من وكيل يستخدمها:

- **العقول والصلاحيات.** لكل هوية وكيل صلاحيات على عقول محددة، تُفرض على الخادم لا في التعليمات. ورمز الجلسة لا يرى إلا عقله.
- **مصادر البيانات.** موصلات تسحب ملفات markdown أو موقعًا كاملًا أو مستودع GitHub أو استعلام SQL أو webhook، وتمررها عبر مسار الكتابة نفسه، فيصبح توثيقك قابلًا للاسترجاع دون أن يحفظه أحد يدويًا.
- **محادثة مع العقل.** وكيل يستخدم أدوات العقل نفسه من استرجاع وبحث ومخطط، ويجيب مع المصادر وسجل بما بحث عنه.
- **فجوات المعرفة.** حين يعود الاسترجاع فارغًا لشيء كان يجب أن يكون معروفًا، يُسجَّل ذلك، فترى ما يسأل عنه وكلاؤك باستمرار ولم يكتبه أحد.

## من الداخل

Zekra خدمة مكتوبة بلغة Go ومبنية على [ToGO](https://to-go.dev). التخزين في Postgres مع pgvector وVectorChord وBM25، وRedis ذاكرةً مؤقتة سريعة، ومخزن كائنات للطبقة الباردة. تعمل التضمينات وإعادة الترتيب على Text Embeddings Inference (Qwen3-Embedding-0.6B وbge-reranker-v2-m3)، فتُسترجع الذكريات العربية والإنجليزية من الفهرس نفسه. خادم MCP طبقة رقيقة فوق REST API، ويمكنك استدعاء الـ API مباشرة أو عبر عميل TypeScript.

## ملاحظة صادقة من التشغيل الفعلي

في سبتمبر توقف البحث في بيئة الإنتاج. اجتمع خطآن: الاستعلام الهجين وبديله المتجهي كانا يتشاركان معاملة Postgres واحدة، فإذا فشل الأول فشل البديل معه، وطبقة BM25 لم تكن مُعدّة في الإنتاج أصلًا، أي أن الاسترجاع كان يعمل بالمتجهات وحدها دون أن ينتبه أحد. أُصلح الخطآن: كل محاولة تعمل الآن في معاملة مستقلة للقراءة فقط، وأُعيدت فهرسة BM25. والدرس لكل من يبني ذاكرة للوكلاء: **تأكد أن البديل يتراجع بأداء أقل لا أن يتوقف**، وتحقق أن كل إشارة استرجاع تظن أنها لديك موجودة فعلًا.

## ما لا تفعله (حتى الآن)

- **لا تجعل الوكيل يتذكر من تلقاء نفسه.** على الوكيل أن يستدعي `retain` و`recall`. سطر في `CLAUDE.md` مثل «استرجع قبل الإجابة عن هذا المشروع، واحفظ القرارات» يساعد كثيرًا، ويمكن لخطاف الالتقاط (capture hook) أن يحفظ تلقائيًا من Claude Code.
- **لا تضع الأسرار في الذاكرة.** لدى Zekra خزنة أسرار منفصلة لذلك، أما الذكريات فتُقرأ داخل التعليمات.
- **الذاكرة سياق، لا مرجع نهائي.** إن قالت قاعدة البيانات الحية شيئًا وقالت الذاكرة شيئًا آخر، فالقاعدة هي الصحيحة. أخبر وكيلك بذلك.
- **ما زالت في بدايتها.** الخدمة المستضافة يديرها شخص واحد، هو أنا. وإن احتجت إليها داخل شبكتك، [فالاستضافة الذاتية موثقة](/ar/blog/self-hosted-ai-agent-memory-server)، لكنها تتطلب Postgres مع امتدادات المتجهات وBM25 وخادم تضمينات.

جديد على الفكرة؟ اقرأ [ما هو خادم الذاكرة عبر MCP](/ar/blog/what-is-an-mcp-memory-server). تقارن بين الخيارات؟ راجع [مقارنة Zekra مع mem0 وZep وLetta وBasic Memory وOpenMemory](/ar/blog/ai-agent-memory-compared-mem0-zep-letta-basic-memory).

## جرّبها

Zekra مفتوحة المصدر بترخيص AGPL-3.0. ابدأ بـ [دليل البدء السريع](/ar/docs/quickstart)، أو اقرأ [مرجع أدوات MCP](/ar/docs/mcp)، أو اطّلع على الكود في [GitHub](https://github.com/fadymondy/zekra). وإن واجهتك مشكلة، افتح issue، فأنا أقرأها.

- **شاهد:** [Zekra في 51 ثانية](https://youtu.be/3JgGFrS1mx8)
- **اسأل:** [مجتمع Zekra على Discord](https://discord.gg/99JBJd6FsR)
- **ادعم الإطلاق:** [Zekra على Product Hunt](https://www.producthunt.com/posts/zekra)
- **ابدأ مجانًا:** [app.zekra.dev](https://app.zekra.dev/register)

---

Source: https://zekra.dev/ar/blog/claude-code-memory-across-sessions-mcp
