الرفيق بحجم الجيب
يعمل وولفيش على جهازك — وهو ما كان يعني دائماً أن تكون عند جهازك. ويضع تطبيق الهاتف تجربةَ سطح المكتب في راحة اليد: خيط المحادثة ببطاقات أدواته وملفاته المسلَّمة، وسجلّ المحادثات، ودفتر الاستهلاك، وكلّ صفحات الإعدادات — النماذج، والقنوات، والخدمات، وMCP، والمتغيّرات، والقدرات، والمعرفة، والمشاريع، والأتمتة، والإجراءات، والتخصيص، والاستخدام، والبيانات، والتحديثات، والتفضيلات، والمظهر — مرتَّبةً كما لو أنّ شريط إعدادات سطح المكتب صار قائمةَ تنقّل. ومنذ الإصدار 1.0.235 يفعل ذلك مقابل سطح مكتبك أنت. فالهاتف يقترن بهذا الجهاز ويحمل معه المحادثات نفسها والإعدادات نفسها والاستهلاك نفسه — عبر وصلةٍ لا يقرؤها إلا الجهازان. ومنذ الإصدار 1.0.236 يحمل أيضاً كلَّ ما يصوغ تلك المحادثات: المشاريع والإجراءات والأتمتة والوثائق الثلاث خلف كلّ ردّ، تُحرَّر من أيّ الجهازين على الملفّات ذاتها. ومنذ الإصدار 1.0.239 لم يعد الجهاز على الطرف الآخر محتاجاً إلى شاشةٍ أصلاً — فالهاتف يقترن بـخادمٍ بلا شاشة تماماً كما يقترن بسطح مكتب.الاقتران
كلّ شيءٍ يجري في الإعدادات ← القنوات ← الهاتف على سطح المكتب. الاقتران يحدث مرّةً واحدة، ولا رمزَ تلصقه: سطحُ المكتب يعرض اقتراناً والهاتف يطالب به.رمز QR
ولّد رمز QR وامسحه بكاميرا هاتفك. السرّ يسافر من الشاشة إلى الكاميرا — ولا يعبر الشبكة أبداً. ويحمل الرمزُ عنوانَ المُرحِّل أيضاً، فالمُرحِّل المخصّص لا يحتاج كتابةً إضافية.
رمز الاقتران
ولّد رمزاً قصيراً — ثمانية محارف تُطبع هكذا
K7M9-2QXR — واكتبه على الهاتف حين لا ترى الكاميرا الشاشة. لا يهمّ حجم الحرف ولا المسافات ولا الشُّرَط، والمحارف المتشابهة (O/0 وI/1) تُطوى نيابةً عنك.الرمز المكتوب لا يحمل إلا السرّ. فإن وجّهت سطح المكتب إلى مُرحِّلٍ مخصّص وجب أن يُخبَر الهاتف بذلك العنوان يدوياً — ولشاشة اقترانه حقلٌ له، وشاشة العرض على سطح المكتب تظهر العنوان المطلوب كتابته بالضبط. أمّا رمز QR فيفعل ذلك عنك.
النفق المشفَّر
بعد الاقتران يتخاطب الجهازان مشفَّرَين من طرفٍ إلى طرف — تبادل مفاتيح X25519، وتعمية الإطارات بـ ChaCha20-Poly1305. كلّ شيءٍ يُختَم على أجهزتك قبل أن يُرسَل، والمفاتيح عند هذا السطح وهاتفك وحدهما. ولكلّ جهازٍ مفتاحه الخاص، ويثبّت مفتاح الآخر: لا حساب، ولا كلمة سرّ، ولا شيء تسجّل الدخول إليه. وتعرض اللوحة بعد الاقتران حالةَ الوصلة كاملةً — حال النفق، واسم الهاتف وطرازه ونظامه، ومتى اقترن ومتى شوهد آخر مرّة، والمُرحِّل ونقطة اللقاء، وبصمتَي المفتاحين، والجلسة، وعدّادات الإطارات. وتطابق البصمتين على الجهازين يعني أنّ لا شيء يقف بينهما. وتُحفظ مفاتيح الاقتران على سطح المكتب في مخزن مفاتيح النظام — Keychain على macOS، وDPAPI على ويندوز، وخدمة الأسرار على لينكس — واللوحة تسمّي الخلفية المستعملة فعلاً.المُرحِّل الأعمى
نادراً ما يكون الجهازان على الشبكة نفسها، فلا بدّ لشيءٍ أن يحمل البايتات. وذلك الشيء مُرحِّلٌ أعمى، وجهلُه هو بيت القصيد:- يعين الجهازين على التلاقي عند معرّف لقاءٍ يشتقّه كلٌّ منهما مستقلاً — وهو الحقيقة الوحيدة عن الاقتران التي يعلمها المُرحِّل يوماً.
- يمرّر الإطارات المختومة. ولا يستطيع قراءتها ولا تبديلها ولا إعادة إرسالها.
- ولا يخزّن شيئاً البتّة — لا قاعدة بيانات، ولا سجلّات، ولا حسابات، ولا تاريخ رسائل.
قطع الاتصال مقابل فكّ الاقتران
عند أسفل اللوحة مخرجان، والفرق بينهما هو كلّ المقصود. قطع الاتصال يُسقط الوصلة الحيّة؛ ويبقى الاقتران، فيعود الهاتف حين يعود إلى المقدّمة. أمّا فكّ الاقتران فينسى الجهاز — تُمحى مفاتيحه ويلزمه أن يقترن من جديدٍ من الصفر. والمغادرة من جانب الهاتف لا تترك شيئاً وراءها في أيّ مكان: تُمحى الشارات — عدّادات المحادثات ودرج الإشعارات وأيقونة التطبيق — ويُؤمَر المُرحِّل بتصفير نسخته ونسيان تسجيل دفع الجهاز، وعندها فقط يُسقط الهاتف مفاتيحه ويمسح كلَّ ما زامنه، عائداً كأنّه مثبَّتٌ للتوّ. وسطح مكتبك يحتفظ بالأصول، فالاقتران من جديدٍ يستعيدها.سطح المكتب هو المضيف: يقف على المُرحِّل وينتظر. والهاتف يطلبه حين يكون في المقدّمة ويختفي حين يعلّقه iOS، ولذلك يُعاد التصافح مع كلّ اتصال ولا شيء يفترض الاستمرار. فالهاتف الذي بقي ساعةً في جيبك يعود إلى وصلةٍ أُمِّنت لتوّها.
ما يعبر الوصلة
الهاتف واجهةٌ ثانية للتطبيق كلّه لا خيط رسائل — فسطح المكتب يجيب عن أكثر بكثير من المحادثة، ويدفع التغيّرات لحظة وقوعها بدل أن يترك الهاتف يستعلم:
ولأنّ الدور الذي يبدأ من الهاتف دورٌ حقيقي، فله شارة قناته: المحادثات التي بدأت هناك ترتدي أيقونة هاتفٍ في سجلّ سطح المكتب وفي شريط المحادثات، إلى جانب شارات تيليجرام وواتساب والطرفيّة والأتمتة والإجراءات.
حقول بيانات الاعتماد على الهاتف تبقى مواضعَ فارغة — الأسرار لا تُدخَل على الهاتف أبداً. المفاتيح تُلصق على سطح المكتب حيث تعيش.
مساحة العمل قابلة للتحرير
حمل الاقتران محادثاتك إلى هاتفك، وبقي حتى الإصدار 1.0.236 كلُّ ما يصوغ تلك المحادثات عند الجهاز. كانت المشاريع والإجراءات والأتمتة أشياءَ يعرضها الهاتف ولا يغيّرها إلا سطح المكتب. أمّا اليوم فالثلاثة تُحرَّر من أيّ الشاشتين شئت.المشاريع
المشروع يجمع التعليمات القائمة والملفات التي تبدأ منها المحادثات الجديدة. أنشئ واحداً، وامنحه رمزاً تعبيريّاً من المنتقي، وحرّر تعليماته، وأضف ملفّاتٍ من الهاتف نفسه، وأدرج محادثةً قائمة تحته. والمحادثة التي تُفتح داخل مشروعٍ تحمل إحاطته من دورها الأوّل لا بعد لحظة.
الإجراءات
طلبٌ محفوظ تشغّله عند الحاجة — يُنشأ ويُحرَّر ويُحذف ويُشغَّل من الهاتف، والتشغيل يبلّغك بما فعله المجدوِل فعلاً.
الأتمتة
طلبٌ يعمل على جدول، يُحرَّر هنا بوصفه ملفّ
heartbeat.md نفسه الذي يكتبه محرّر سطح المكتب — ومعه موعد تشغيله التالي وزرّ تشغيلٍ إلى جانبه.أدوارٌ تستطيع تقييمها
كلُّ إجابةٍ منتهية تحمل شريط تقييم من 0 إلى 10. والتقييم الذي يُلقى من الهاتف يحطّ على سطح المكتب تماماً كما يحطّ تقييم سطح المكتب نفسه، والتقييم الذي يُلقى من أيّ مكانٍ آخر — شريط سطح المكتب، أو رقمٌ مجرّد ردّاً على تيليجرام — يظهر هنا دون انتظار إعادة تحميل. إنّه الإشارة نفسها التي تتعلّم منها المراجعة الليليّة؛ غير أنّها كفّت عن اشتراط سطح المكتب.كلّ محادثة، دون أن تغادر التي أنت فيها
ورقةٌ تنزلق فوق المحادثة تحمل قائمة المحادثات كلّها، مجموعةً بحسب الحداثة، تُظهر إلى أيّ مشروعٍ تنتمي كلُّ واحدة وأيَّها يعمل الآن ومن أين جاءت كلُّ واحدة — فـرمز المصدر يركب أوّل تحديثٍ حيٍّ بعينه، حتّى إنّ المحادثة التي لم يرها الهاتف إلّا وهي تعمل ترتدي طائرة تيليجرام أو علامة الطرفيّة من اللحظة الأولى، بدل أن تجلس فارغةً حتى تلحق بها بياناتها الوصفيّة. والتبديل نقرة، والدور الذي كنت تتابعه يواصل بثّه وأنت تنظر. ووجهاتها الخمس — الإعدادات والمشاريع والأتمتة والإجراءات والتخصيص — تثبت في أعلى الورقة بينما تمرّ المحادثات تحتها.بماذا ينشغل سطح المكتب
ما يستولي على شاشة سطح المكتب بأكملها يعرضه الهاتف بطاقةً في رصّةٍ فوق أيّ شاشةٍ أنت فيها، والطلب وراء كلٍّ منها على بعد نقرة: أتمتةٌ في أثناء عملها، أو ضغطٌ، أو المراجعة الليليّة، أو فهرس ذاكرةٍ يُعاد بناؤه. تظهر لحظةَ يتّصل الهاتف — حتى لتشغيلٍ بدأ وهو نائم — وتذهب حين يذهب الاتصال، لأنّ بطاقةً تزعم أنّ شيئاً يعمل على جهازٍ لم يعد الهاتف يراه بطاقةٌ كاذبة. فيبقى الهاتف صالحاً للاستعمال في أثنائها بدل أن يبدو معطّلاً.التشخيص من الهاتف
جمعُ حزمة تشخيص لمحادثة — السجلّات والمهامّ والذاكرة والسياق والإعدادات والمرفقات ورواية النموذج نفسه لما جرى — صار شيئاً يستطيع الهاتف أن يبدأه ويتابعه خطوةً خطوة ويسلّمه إلى ورقة مشاركة النظام حين ينتهي. ويجري خلف حارس المرور الواحد نفسه الذي يحرس زرّ سطح المكتب، فلا يتنازع تشغيلٌ بدأ هنا وآخر بدأ هناك على الملفّات ذاتها أبداً.الدور الذي تتابعه من الهاتف يعرض السؤال فوق الجواب: فالطلب يسافر مع كلّ تحديثٍ حيّ، حتّى إنّ هاتفاً اقترن — أو فتح محادثةً — في منتصف الدور لم يعد يقرأ ردّاً على لا شيء. والنفق الذي يقوم في منتصف تشغيلٍ يعلم أنّ التشغيل قائم: فمع كلّ اتصالٍ يسأل الهاتف سطحَ المكتب عمّا يعمل الآن، فتعرض المحادثة المشغولة زرَّ إيقافها ونبضة بثّها بدل صندوق كتابةٍ ساكن، وتعود بطاقة الموافقة الواقفة لتُجاب، ولا يظهر شريط التقييم إلّا بعد أن يقول سطح المكتب فعلاً إنّ الدور انتهى — لا فوق جوابٍ ما زال يُكتَب.
إشعارات الهاتف
حين تكون إشعارات الهاتف مشتغلة، يستطيع الوكيل أن يبلغك بأداتهnotify_phone حين ينتهي تشغيلٌ أو يخفق أو يحتاج إليك. ولا شيء يُرسَل تلقائياً أبداً — على الوكيل أن يستدعي الأداة عمداً، والإطفاء يجعل الأداة ترفض من أساسها بنزعها من يد الوكيل نزعاً تامّاً. والنقرة تحطّ حيث يشير الإشعار — بما في ذلك محادثة التشغيل نفسه، عبر wolffish://chat?id=current — فإن كان الهاتف متصلاً ركب الإشعارُ النفقَ الحيّ، وإن لم يكن خرج إشعارَ منصّةٍ بدلاً من ذلك.
وللمنظومة كلّها اليوم صفحتها الخاصّة: الأطوار وكم يبقى كلٌّ منها وجيهاً، وما يختمه سطح المكتب على كلّ إرسالٍ وما لا يُؤتمَن عليه النموذج أبداً، والقائمة الثابتة للشاشات التي تفتحها النقرة، وكيف تبقى شارات غير المقروء صادقة، وما يستطيع المُرحِّل رؤيته وما لا يستطيع في الطريق بالضبط.
شارات غير المقروء
كلُّ إشعارٍ يسمّي محادثةً يغذّي عدّاد غير مقروءٍ لكلّ محادثةٍ على حدة — على صفوف المحادثات هنا وفي السجلّ، ومجموعاً على زرّ القائمة العائم، ورقماً على أيقونة التطبيق، صحيحاً حتى قبل أن يستيقظ التطبيق. والمسحُ هو القراءة: افتح المحادثة يذهب عدّادها، ومعه إشعارات الدرج؛ ولا عملَ من نوع «علِّم كمقروء». وصفحة الإشعارات تحمل الآليّات كاملة.نتائج المهامّ
مفتاحٌ واحد يقرّر كم من التشغيل ينقله خيط الهاتف. الإطفاء — وهو الافتراضي — يُبقيه نظيفاً: رسائل المساعد، والنتائج الحاملة للملفات، والأخطاء. والإشعال ينقل كلّ استدعاء أداةٍ ونشاط. أمّا تسجيل الاتصال فمنفصلٌ ومشتغلٌ دائماً.خيط المحادثة
يعرض الخيط ما يعرضه سطح المكتب — ردود ماركداون، ونشاط أدوات، وملفات مسلَّمة — وبطاقتين تستحقان المعرفة:- التفكير — حين يحمل الردُّ تفكيرَ نموذج، تجلس بطاقةٌ مطويّة في ختام الدور؛ انقرها ينبسط نصُّ التفكير الخام. وتطبيق سطح المكتب يعرض البطاقة نفسها، فتروي الواجهتان الحكاية نفسها عن الطريقة التي وُلد بها الجواب.
- أقراص الحالة — الدور الذي وقف عند سقف الردّ أو أصابه خطأ اتصالٍ يقول ذلك في مكانه.
عارضو الملفات
انقر أيَّ مرفقٍ يتوسّع ملءَ الشاشة (والمشاركة تُسلَّم إلى ورقة مشاركة النظام): الصور بالتكبير بالقرص والسحب، وSVG بعارضٍ ضوئي، ومشغّلا فيديو وصوت، وPDF، ومستندات Word، وجداول البيانات — مع CSV/TSV جداولَ حقيقية — وMarkdown، والنص العادي، وHTML بمبدّل معاينة/مصدر، وملفات الشيفرة بطاقاتٍ مرقّمةَ الأسطر. وملفّات PDF تُصيَّر في البطاقة على المنصّتين. فWebView في أندرويد لم يشحن قطّ محرّك PDF، فكانت البطاقة تسلّم المستند إلى أيّ عارضٍ صادف وجوده على الهاتف. أمّا القارئ اليوم فمضمَّنٌ في التطبيق — صفحة pdf.js قائمة بذاتها تُركَّب حول بايتات الملفّ نفسه — فصارت المعاينة والمستند الموسَّع على أندرويد كما هما على iPhone: صفحةٌ أولى حقيقيّة، قابلة للتمرير وللتكبير بالقرص. ولا يُسلَّم شيء إلى تطبيقٍ آخر، والصندوق المعزول يبقى مغلقاً، والصفحة التي ترسم المستند لا تبلغ ملفّاً غير الذي فتحته. أمّا ملفّات PDF الضخمة جدّاً فتذهب إلى عارض النظام، وهو موضعها الصحيح.الاستخدام وأنت في الطريق
شاشة الاستخدام هي لوحة سطح المكتب على عمودٍ واحد: شبكة النشاط الشهرية، وبطاقة اليوم الحاضرة دائماً (تفتح على اليوم وتتحرك بنقرة يومٍ آخر — الرموز والكلفة والرسائل وصفوف كل نموذج واستعلامات Brave)، وستّة نطاقات من «اليوم» إلى «كل الوقت»، وإحصاءات عامة (محادثات، ورسائل، وإجمالي رموز، وأيام نشطة، وأطول سلسلة، والنموذج المفضّل)، وقسم التكاليف (إجمالي الإنفاق، وأعلى يوم، والمتوسط اليومي)، وبطاقات لكل مزوّد. وكلُّ نطاقٍ يبلّغ عن نافذته هو: فكلّ مجموعٍ مغلقٌ عند اليوم كما هو مفتوحٌ عند بدايته، فلا يحمل رقمٌ موسومٌ بـ«اليوم» غداً في صمت، والانتقال من 3 أشهر إلى 6 أشهر إلى «منذ بداية السنة» يحرّك الأرقام بدل أن يكرّرها. والحدّ المغلِق يخصّ مجاميع النطاقات وحدها — أمّا تقويم النشاط وبطاقة يومه فيرسمان كلّ صفٍّ يحمله الدفتر، لأنّ شهراً يظهر فارغاً لأنّ الساعة لم تبلغه لا يُميَّز عن شهرٍ بلا استخدام. ومبدّل النطاقات يملأ صفّه عنصراً واحداً، مقتسماً العرض بالتساوي بين الستّة.صفوف إضافة المتصفح
الإعدادات ← الخدمات تعكس قائمةَ إضافة المتصفح متعددة المتصفحات على سطح المكتب: صفٌّ لكل ملفٍّ شخصي متصل — اسم المتصفح مع بريد الملف الشخصي والإصدار ونظام التشغيل — مع إمكانية ضبط إعدادات لقطة الشاشة من الهاتف. أمّا منفذ الاقتران فيبقى بيد سطح المكتب: فنقله يعيد تشغيل خادم الاقتران على سطح المكتب، وذلك فعلُ سطح المكتب نفسه. واللقطة الآتية من سطح مكتبٍ أقدم يسبق دعمَ تعدّد المتصفحات تنحدر إلى صفّ «إضافة Chrome» واحدٍ بمنفذه. أمّا تثبيت الإضافة واقترانها فيجريان على سطح المكتب دائماً.التحديثات
بطاقتان في الإعدادات ← التحديثات تُبقيان الواجهتين متمايزتين: هذا التطبيق (إصدار الهاتف ورقم بنائه، وهل أنت على بناء المتجر أم تحديثٍ هوائيّ، ومفتاح تحديثاتٍ تلقائية يحكم فحوص التحديث حقاً) وتطبيق سطح المكتب (إصدار سطح المكتب المعكوس ومنصته وإعدادُ تحديثه التلقائي الخاص).الاقتران بخادم
لا يعنى الهاتف بمن يجيب على الطرف الآخر من النفق. اقرِنه بتطبيق سطح المكتب على حاسوبك المحمول، أو بـوولفيش بلا شاشةٍ على خادمٍ افتراضيٍّ خاصّ — الخيط نفسه، ومساحة العمل نفسها، وصفحات الإعدادات نفسها، عبر الوصلة المختومة نفسها. وفي نشر الخوادم هذه هي الواجهة الموصى بها: سطر أوامر الطرفيّة يدير الجهاز، والهاتف هو السطح الذي تعيش فيه فعلاً — محادثاتٌ تُبثّ حيّة، وأتمتةٌ تشاهدها في أثناء عملها، وإشعاراتٌ حين ينتهي شيءٌ أو يحتاج إليك، والمشاريع والإجراءات والأتمتة ووثائق التخصيص كلّها تُحرَّر على ملفّات الخادم نفسها. والاقتران يعمل من الطرفيّة — يرسمwolffish pair phone رمز QR صالحاً للمسح حين تتّسع له النافذة، ويرتدّ إلى الرمز المكتوب من تلقاء نفسه حين لا تتّسع. والهاتف يعكس حالة طرفيّة الخادم في الاتجاه الآخر: فبطاقة الإعدادات ← القنوات ← CLI تقول هل يُحَلّ أمر wolffish على PATH سطح المكتب نفسه، وهل التشغيل التلقائيّ مسجَّل، وأيّ آليّةٍ تمسكه — systemd أو launchd أو schtasks. والتسجيل لدى نظام التشغيل فعلُ سطح المكتب نفسه، فهذا الجهاز يبلّغ عنه ولا يغيّره.
على مُرحِّلٍ مستضافٍ ذاتيّاً، لا يحمل الرمز المكتوب إلا السرّ — أدخل عنوان المُرحِّل في بطاقة المُرحِّل على شاشة الاقتران في الهاتف. أمّا رمز QR فيحمله عنك.