عندما يحتاج Claude Code إلى أن تختار بين عدة خيارات، يستدعي أداة باسم AskUserQuestion وينتظر اختيارك. ويمكن لـ hook من نوع PreToolUse يطابق AskUserQuestion أن يجيب نيابةً عنك، بإعادة السؤال مع تعبئة الحقل answers. وهكذا تجيب عن أسئلة Claude Code من هاتفك: يرسل الـ hook السؤال وخياراته إلى الهاتف، وينتظر اختيارك، ثم يعيده. تقوم Claude Code Notifier بذلك على Mac وWindows وLinux عبر أداتها ccn وتطبيق الهاتف.
01ما هي AskUserQuestion
يصل Claude أحيانًا إلى مفترق طرق لا ينبغي أن يحسمه وحده. أي framework؟ هل نُبقي على الـ API القديمة أم نحذفها؟ هل نصلح الاختبار أم الكود؟ وبدلًا من التخمين، يطرح سؤالًا قصيرًا متعدد الخيارات. وفي الـ terminal ترى السؤال وعددًا من الخيارات المعنونة مع أوصافها، وتختار أحدها باستخدام لوحة المفاتيح.
وكأي استدعاء لأداة، يمر AskUserQuestion أولًا عبر الـ hooks في Claude Code. وهذه هي الفرصة التي تحتاجها الإجابة عن بُعد.
تختلف الأسئلة عن طلبات الإذن. فطلب الإذن يسأل بنعم أو لا عن إجراء واحد، ويجيب عنه الـ hook PermissionRequest (راجع الموافقة على طلبات إذن Claude Code من هاتفك). أما السؤال فيطلب منك الاختيار، والإجابة تكون عنوان خيار لا مجرد نعم.
02كيف يقدّم الـ hook الإجابة
يتلقى الـ hook من نوع PreToolUse مدخلات الأداة بصيغة JSON عبر الإدخال القياسي. وفي حالة AskUserQuestion، تحتوي المدخلات على مصفوفة questions. ولكل سؤال الحقول question (النص) وheader (عنوان قصير) وoptions (لكل منها label وdescription) وmultiSelect.
لا يكفي إرجاع "allow" وحده مع هذه الأداة، لأن الإجابة يجب أن تأتي من مكان ما. ينص مرجع الـ hooks من Anthropic على أن الـ hook يجب أن يعيد questions كما هي داخل updatedInput، وأن يضيف كائن answers يربط نص كل سؤال بعنوان الخيار المختار:
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "allow",
"updatedInput": {
"questions": [
{
"question": "Which framework?",
"header": "Framework",
"options": [
{ "label": "React", "description": "Component library" },
{ "label": "Vue", "description": "Progressive framework" }
],
"multiSelect": false
}
],
"answers": { "Which framework?": "React" }
}
}
}
في الأسئلة متعددة الاختيار، افصل بين العناوين المختارة بفواصل. وإذا لم يطبع الـ hook شيئًا، يظهر السؤال في الـ terminal كالمعتاد.
تسجيله
{
"hooks": {
"PreToolUse": [
{
"matcher": "AskUserQuestion",
"hooks": [
{ "type": "command", "command": "/path/to/your-answer-script" }
]
}
]
}
}
ضع هذا في ~/.claude/settings.json ليشمل جميع المشاريع. للاطلاع على جميع أحداث الـ hooks ومتى يُستخدم كل منها، راجع شرح الـ hooks في Claude Code.
ملاحظة حول التشغيل غير التفاعلي
في عمليات التشغيل عبر claude -p، تذكر وثائق Anthropic أن AskUserQuestion لا تُتاح إلا إذا كان هناك مضيف أذونات يستقبل الـ prompt، مثل callback من نوع canUseTool في Agent SDK. أما في التشغيل النصي العادي، فقد لا يطرح Claude أي سؤال أصلًا. يتناول هذا الدليل الجلسات التفاعلية.
03ما الذي يجعل الإجابة من الهاتف جيدة
الجزء الخاص بـ JSON هو الأسهل. أما أسئلة التصميم فهي نفسها التي تظهر مع طلبات الإذن:
- اعرض السؤال كاملًا. العنوان والسؤال ووصف كل خيار كلها مهمة. فالعنوان وحده ("الخيار B") لا يفيد على شاشة القفل.
- أبقِ الـ terminal قابلًا للاستخدام. إذا كنت أمام الكمبيوتر، فيجب أن تتمكن من الإجابة هناك، لا أن تنتظر hook ينتظر هاتفك.
- انسحب بسلاسة. إذا لم تصل إجابة، فيجب ألا يُرجع الـ hook شيئًا قبل انتهاء مهلته، حتى يظهر الـ prompt في الـ terminal.
- طابق النص بدقة. يجب أن تكون مفاتيح
answersهي نص السؤال كما كتبه Claude تمامًا، وأن تكون القيم هي عناوين الخيارات.
04استخدام Claude Code Notifier
Claude Code Notifier أداة مستقلة من TouchTap Ltd، وليست من إنتاج Anthropic. تثبّت أداة سطر الأوامر الخاصة بها، ccn، hook من نوع PreToolUse على AskUserQuestion إلى جانب الـ hooks الأخرى. وعندما يطرح Claude سؤالًا وأنت بعيد، يعرض هاتفك السؤال وخياراته. اضغط على أحدها فيقدّم الـ hook الإجابة، ويواصل Claude عمله.
ثبّتها على Mac أو Linux:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
أو على Windows في PowerShell (تجريبي):
irm https://claudecodenotifier.com/install.ps1 | iex
ثم اربط هاتفك بمسح رمز QR أو بكتابة الرمز المكوّن من 6 أرقام الظاهر في التطبيق. يشرح دليل ربط هاتفك بـ Claude Code الخطوات على كل نظام تشغيل.
وجودك يحدد مكان الإجابة
تطبّق ccn قاعدة الوجود نفسها على الأسئلة كما على الأذونات. فإذا كتبت شيئًا خلال آخر 30 ثانية، يطرح الـ terminal السؤال كالمعتاد ولا يصل إلى الهاتف سوى تنبيه على الأكثر. أما إذا كنت بعيدًا، فينتظر الـ terminal الهاتف حتى حدّ أقصى تختاره (hold_ceiling_seconds، من 30 إلى 3600، والافتراضي 600)، ويتوقف عن الانتظار فور لمسك لوحة المفاتيح.
اختيار ما يصل إلى هاتفك
للأسئلة إعداد خاص بها هو notify_on_question، منفصل عن notify_on_permission وnotify_on_done، فيمكنك إبقاء نوع وإيقاف آخر. يعرض الأمر ccn config show الإعدادات المطبّقة حاليًا، ويمكن تغيير معظم الإعدادات لكل جهاز كمبيوتر على حدة من تطبيق الهاتف.
تنطبق ساعات الهدوء أيضًا، مثلًا ccn config set quiet_hours 22:00-08:00. راجع ساعات الهدوء ووضع عدم الإزعاج.
حتى دون هاتف مقترن، يعرض ccn إشعارًا مجانيًا على سطح المكتب عندما يطرح Claude سؤالًا، لتعرف أن عليك العودة. أما الإجابة من الهاتف فتتطلب التطبيق، وتنزيله مجاني لكن استخدامه يحتاج إلى اشتراك أو شراء مدى الحياة. راجع الأسعار.
05الأسئلة والتعليمات اللاحقة وانتهاء المهمة
الأسئلة واحدة من ثلاث لحظات ينتظرك فيها Claude، والأخريان هما طلبات الأذونات ونهاية الدور. وفور انتهاء Claude، يتيح لك Claude Code Notifier أيضًا إرسال التعليمة التالية من الهاتف، فيعيدها الـ hook Stop إلى Claude بوصفها تعليمته التالية. وهذه اللحظات معًا تغطي معظم ما يُبقي المهام الطويلة متوقفة في الانتظار. ويجمعها دليل اترك Claude Code يعمل وابتعد في روتين واحد.
06الأسئلة الشائعة
هل يمكنني كتابة إجابة نصية حرة بدلًا من اختيار أحد الخيارات؟
الطريقة الموثّقة عبر الـ hook تجيب بتسميات الخيارات من خلال الحقل answers. في Claude Code Notifier تختار من الخيارات على الهاتف. وإن لم يناسبك أي منها، فاترك السؤال للـ terminal، أو وجّه Claude بتعليمة لاحقة بعد أن ينتهي.
لماذا لا تجيب قيمة "allow" في الـ hook PreToolUse عن السؤال؟
لأن AskUserQuestion يحتاج إلى إجابة لا إلى إذن فحسب. أعِد updatedInput متضمنًا questions الأصلية وكائن answers، كما هو موضح أعلاه.
ماذا لو طرح Claude عدة أسئلة دفعة واحدة؟
يمكن أن تحتوي المصفوفة questions على أكثر من سؤال. ويحتاج الكائن answers إلى مُدخل لكل سؤال، مفتاحه نص السؤال كما هو تمامًا.
هل يعمل في VS Code أو Cursor أو JetBrains؟
الـ hook تابع لـ Claude Code لا للـ terminal، لذا يعمل أيضًا داخل الـ terminal المدمج في بيئة التطوير. راجع إشعارات Claude Code في terminal كل من VS Code وCursor وJetBrains.