Когда Claude Code нужно, чтобы Вы выбрали один из вариантов, он вызывает инструмент AskUserQuestion и ждёт Вашего выбора. Hook PreToolUse, настроенный на AskUserQuestion, может ответить за Вас, вернув вопрос с заполненным полем answers. Так и устроены ответы на вопросы Claude Code с телефона: hook отправляет вопрос и варианты на телефон, ждёт Вашего выбора и передаёт его обратно. Claude Code Notifier делает это на Mac, Windows и Linux с помощью утилиты ccn и мобильного приложения.
01Что такое AskUserQuestion
Иногда Claude оказывается на развилке, где не стоит решать в одиночку. Какой фреймворк выбрать? Оставить старый 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 как обычно.
Регистрация hook
{
"hooks": {
"PreToolUse": [
{
"matcher": "AskUserQuestion",
"hooks": [
{ "type": "command", "command": "/path/to/your-answer-script" }
]
}
]
}
}
Добавьте это в ~/.claude/settings.json, чтобы охватить все проекты. Обзор всех событий hooks и того, где каждое из них применяется, — в статье Hooks в Claude Code: подробный разбор.
О неинтерактивных запусках
Согласно документации Anthropic, при запусках claude -p инструмент AskUserQuestion доступен, только если есть обработчик разрешений, который примет запрос, например callback canUseTool из Agent SDK. В обычном скриптовом запуске Claude может просто ничего не спрашивать. Это руководство посвящено интерактивным сессиям.
03Каким должен быть хороший ответ с телефона
JSON — это самое простое. Вопросы проектирования те же, что и с запросами разрешений:
- Показывайте вопрос целиком. Важны и заголовок, и сам вопрос, и описание каждого варианта. Одна подпись («Вариант B») на экране блокировки ничего не скажет.
- Сохраняйте возможность ответить в terminal. Если Вы за компьютером, Вы должны иметь возможность ответить там, а не ждать hook, который ждёт телефон.
- Корректно сдавайтесь. Если ответа нет, hook должен ничего не вернуть до истечения таймаута, чтобы вопрос появился в terminal.
- Точно совпадайте по тексту. Ключи в
answersдолжны совпадать с текстом вопроса в точности так, как его написал Claude, а значения — с подписями вариантов.
04Использование Claude Code Notifier
Claude Code Notifier — независимый инструмент от TouchTap Ltd, не связанный с Anthropic. Его утилита командной строки ccn вместе с остальными hooks устанавливает hook PreToolUse для AskUserQuestion. Когда 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 работать и отойдите всё это собрано в единый сценарий.
06FAQ
Можно ли ввести ответ свободным текстом вместо выбора варианта?
Документированный способ через hook отвечает метками вариантов в поле answers. В Claude Code Notifier Вы выбираете из вариантов на телефоне. Если ни один не подходит, ответьте на вопрос в терминале или направьте Claude следующей инструкцией, когда он закончит.
Почему «allow» в моём hook PreToolUse не отвечает на вопрос?
Потому что AskUserQuestion нужен ответ, а не просто разрешение. Верните updatedInput с исходным questions и объектом answers, как показано выше.
Что, если Claude задаёт сразу несколько вопросов?
Массив questions может содержать несколько элементов. В объекте answers должна быть запись для каждого вопроса с ключом — его точным текстом.
Работает ли это в VS Code, Cursor или JetBrains?
Hook принадлежит Claude Code, а не терминалу, поэтому срабатывает и во встроенном терминале IDE. Подробнее: Уведомления Claude Code в терминалах VS Code, Cursor и JetBrains.