← المدونةObsidian · MCP · Cloudflare
انتقل Obsidian إلى مركزي للذكاء الاصطناعي: اتصال واحد بكل الخدمات ومخططات يرسمها الوكيل
صارت خزنة Obsidian الخاصة بي على Cloudflare، وkosh اتصال MCP واحد بالمهام والملاحظات وTelegram وGo-Alpha وInstagram وجهازي Mac. ويرسم الوكيل مخططات Excalidraw مباشرة داخل الخزنة. كيف بُني ذلك، وأين حدوده.
نُشر 31 أكتوبر 20267 دقيقة قراءة
TL;DR
لم تعد خزنة Obsidian الخاصة بي على جهاز Mac. صارت على Cloudflare، داخل kosh-vault. ويتزامن معها جهازا Mac وiPhone عبر إضافة Self-hosted LiveSync.
kosh هو مركزي الشخصي للذكاء الاصطناعي: اتصال MCP واحد تقف خلفه كل خدماتي، من المهام والملاحظات إلى Telegram وGo-Alpha وInstagram، وحارس جهاز Mac وطرفية shell عليه.
والآن يرسم الوكيل مخططات Excalidraw مباشرة داخل الخزنة. أفتح Obsidian فأرى فكرته على هيئة صورة. ويمكنني تعديلها بيدي، فيرى الوكيل تعديلاتي.
ما الذي كان يؤلم
كانت هناك مشكلتان. تحت كل واحدة منهما: كيف كان الأمر، وكيف صار.
1. كل خدمة كانت اتصالًا منفصلًا
قبل — 5 اتصالات:
Claude ──▶ المهام
Claude ──▶ Telegram
Claude ──▶ Go-Alpha
Claude ──▶ Instagram
Claude ──▶ الملاحظات (على Mac فقط)
الآن — اتصال واحد:
Claude ──▶ kosh ──▶ كل هذه الخدماتوكان الأمر كذلك في كل عميل: Claude Code وclaude.ai والهاتف. كان لا بد من إضافة أي خدمة جديدة إلى كل عميل على حدة. أما الملاحظات فلم يكن Claude قادرًا على تعديلها إلا على Mac.
2. كانت تعديلات الوكيل تسلك طريقًا ملتويًا إلى ملاحظاتي
قبل:
الوكيل ──▶ GitHub ──(حتى دقيقتين)──▶ Mac ──(iCloud)──▶ iPhone
الآن:
الوكيل ──▶ kosh-vault ──(~1 ث)──▶ Mac وiPhoneفي السابق كانت إضافة Obsidian Git تجلب التعديل من GitHub، خلال دقيقتين على الأكثر، وفقط ما دام Obsidian مفتوحًا على Mac. ثم كان عليه أن يمر عبر iCloud ليصل إلى iPhone. أما الآن فالخزنة في السحابة، ويمكن لجهاز Mac أن ينام.
انتقلت الخزنة إلى السحابة
أردت مصدرًا واحدًا للحقيقة. مصدرًا لا ينام مع الحاسوب المحمول.
وجدتُ مشروعًا جاهزًا: livesync-workers، وهو واجهة خلفية لإضافة Self-hosted LiveSync تعمل على Cloudflare Workers. أنشأت منه نسخة متفرعة (fork) وسمّيتها kosh-vault.
الحقيقة الآن قاعدة بيانات SQLite داخل Durable Object. يحتفظ Obsidian على Mac وiPhone باتصال حي معها، ويتلقى كل تغيير في نحو ثانية. إنه في جوهره Obsidian عبر WebSockets.
يمكن لجهاز Mac أن ينام، وتبقى الخزنة متاحة للوكلاء. أما بقية النسخ فلا تفعل سوى اتباع السحابة: نسخة احتياطية كل ساعة إلى GitHub، ومرآة للقراءة فقط في iCloud.
keepReplicationActiveInBackground: true. وإلا توقفت المزامنة مؤقتًا حين تختفي نافذة Obsidian خلف نوافذ أخرى، ولا تصل تعديلات الوكيل إلا حين أنظر.kosh: باب واحد
kosh مجموعة من خدمات Workers على Cloudflare. والاسم مأخوذ من «الكوش» عند القوزاق، أي مقر قيادة السيتش.
في الداخل بقيت كل خدمة منفصلة. يعمل Telegram وGo-Alpha داخل Cloudflare Containers، وInstagram مجرد Worker عادي، والملاحظات هي kosh-vault. لكن من الخارج هناك مدخل واحد: /mcp.
ماذا يعني ذلك عمليًا:
- يجمع المركز أدوات كل الخدمات في قائمة واحدة بأسمائها الأصلية، فيرى العميل اتصالًا واحدًا.
- تتحدث الخدمات فيما بينها عبر service bindings في Cloudflare، لا عبر عناوين عامة برمز وصول مشترك.
- ألصق مفاتيح خدمات الأطراف الثالثة في صفحة اتصالات واحدة. تُحفظ مشفّرة، ولا يعرضها أي شيء مرة أخرى.
- إذا تعطلت خدمةٌ بقيت أدواتها في القائمة، ويجيب الاستدعاء بصدق: «غير متاحة».
كان جوهر kosh كله أن تكون كل خدماتي متاحة من خلاله، بدل أن أربط كل واحدة منها على حدة.
المهام مجرد markdown
نظام المهام الوحيد عندي هو ملاحظات في الخزنة. منطقة واحدة، ملف واحد. والأولوية رمز تعبيري من Obsidian Tasks على السطر.
يضيف الوكيل المهام وينقلها ويغلقها بأدوات tasks_*. وكل كتابة تُفحص مقابل بصمة المحتوى (hash): إذا تغيّر الملف في الأثناء، تُعاد العملية. وكل تعديل يُسجَّل سطرًا في السجل.
لوحة المهام يرسمها kosh بنفسه، في ملف Excalidraw. أغيّر قائمة بيدي، فتلاحظ مهمة cron ذلك خلال دقيقة وتعيد رسم اللوحة. ولا تكتبها إلا إذا تغيّر عليها شيء فعلًا.
الوكيل يرسم المخططات
هذا هو الجزء الأحدث. أربع أدوات: drawing_list وdrawing_read وdrawing_create وdrawing_edit.
أطلب: «ارسم كيف تعمل هذه العملية». فينشئ الوكيل ملف .excalidraw.md في الخزنة. وبعد ثانية يكون على جهاز Mac، وتفتحه إضافة Excalidraw كأنه ملفها.
الوكيل
│ يطلب تعديل المخطط (drawing_edit)
▼
kosh
│ يكتب ملف الرسم
▼
kosh-vault (Cloudflare)
│ يوصله LiveSync، ~1 ث
▼
الرسم المفتوح في Obsidian يتحدّثلإضافة Excalidraw واجهة أوامر (CLI) خاصة بها، لكنها تحتاج إلى Obsidian يعمل على Mac. لذلك يكتب kosh الملف بنفسه بصيغة الإضافة، فيعمل حتى وجهاز Mac نائم. وكل قاعدة أدناه جُرّبت على الإضافة الحقيقية:
- كل عنصر يتغيّر يحصل على إصدار جديد لا يقل عن الوقت الحالي بالثواني. وإلا تجاهل الرسم المفتوح التعديل بصمت.
- الحذف يكون بعلامة
isDeleted. أما العنصر الذي يختفي من الملف ببساطة فيبقى في العرض المفتوح ويعود مع الحفظ التالي. - يتغيّر النص في موضعين: في JSON وفي قسم Text Elements. والغلبة لـ Text Elements.
- يُكتب الملف مضغوطًا، كما تكتبه الإضافة نفسها. فلا يبقى للعرض المفتوح سبب لحفظه مرة أخرى.
لا يلزم الوكيل أن يحسب التخطيط بنفسه، فهناك تخطيط تلقائي: 80 كتلة و118 سهمًا في ستة أقسام تُرتَّب في 2.9 ثانية. نظرت إلى أول مخطط حقيقي في Obsidian وقلت: «نعم، كل شيء رائع».
الحدود بصراحة
أضعف نقطة هي رسم مفتوح على شاشتي بينما يعدّله الوكيل.
بعد أول تعديل من الخارج، تحفظ الإضافة الرسم مرة أخرى. وإذا كتب الوكيل من جديد قبل أن يصل هذا الحفظ إلى السحابة، ينشأ تعارض في LiveSync.
لا يضيع شيء عند التعارض: يحتفظ LiveSync بالنسختين. لكن الملاحظة تتجمد على القرص، ويظهر مربع حوار «Conflicting changes». هذا ما أظهره اختبار حي بتعديلات متتالية على رسم مفتوح:
| الفاصل بين التعديلات | الكتابات المقبولة | حوارات التعارض |
|---|---|---|
| 15 ث | 25 | 0 |
| 5 ث | 30 | 1 |
| 1 ث | 3 | 1 |
| بلا فاصل | 6 | 1 |
العيّنات صغيرة. إنه اتجاه عام، لا إحصاء. والفاصل الزمني ليس ضمانة.
لذلك تعلّم kosh أن يدمج هذه التعارضات بنفسه. يأخذ السلف المشترك للنسختين ويقارنهما عنصرًا عنصرًا. غيّرتُ الكتلة C وغيّر الوكيل الكتلة A؟ يبقى التعديلان، ويُغلق الحوار من تلقاء نفسه خلال نحو 10 ثوانٍ. الاختبار نفسه بعد الإصلاحات:
| الفاصل بين التعديلات | الكتابات المقبولة | حوارات التعارض |
|---|---|---|
| 5 ث | 24 | 0 |
| 1 ث | 29 | 1 — أُغلق تلقائيًا خلال 12 ث |
ما لا يدمجه kosh عن قصد: أن يغيّر الطرفان العنصر نفسه. فقد تكون النسختان كلتاهما من عملي، لذلك يبقى هذا الحوار لي. ولا يلمس kosh كذلك تعارضًا بين جهازين من أجهزتي، بل فقط تعارضًا تكون إحدى نسختيه من كتابته هو.
فخاخ وقعتُ فيها
- كان Linter يُفسد الرسوم. إحدى قواعده كانت تكتب عناوين الأقسام بحرف أول صغير. وإضافة Excalidraw تبحث عنها مع مراعاة حالة الأحرف، فتوقفت عن رؤيتها، وصار كل حفظ يضيف قسمًا جديدًا. الحل: استثناء ملفات
.excalidraw.mdمن Linter. - لا تشغّل نسخة ثانية من Obsidian على جهاز Mac نفسه. نسخة تجريبية بمجلد منزلي منفصل أظهرت حوارًا من النظام يعرض إعادة تعيين سلسلة المفاتيح (Keychain) لديّ.
- الطرفية على Mac ليست بيئة معزولة. يستطيع kosh تنفيذ أمر على حاسوبي المحمول باسمي. لذلك لا يمر أي شيء يحذف أو يثبّت أو يدفع (push) أو يلمس المفاتيح إلا بعد «نعم» مني على ذلك الأمر بعينه. ويمكنني إيقاف القناة بملف على جهاز Mac نفسه.
- livesync-workers مشروع حديث بمؤلف واحد. ومن هنا النسخة المتفرعة والنسخة الاحتياطية كل ساعة إلى GitHub.
ماذا يمنحني ذلك
أفتح أي عميل لـ Claude: على Mac، أو في المتصفح، أو على الهاتف. فأجد فيه كل شيء جاهزًا: المهام، والملاحظات، وTelegram، والأبحاث، وحالة جهاز Mac.
وما يصعب الاحتفاظ به في الذهن يضعه الوكيل على لوحة رسم. أنظر وأعدّل بيدي، فيرى الوكيل تعديلاتي.
لاحظت خطأً؟
معلومة خاطئة، ترجمة ركيكة، أو شيء يبدو غير صحيح في هذه المقالة؟ راسلني — بلغتك أنت.