Уведомления и разрешения Claude Code на телефоне
В Claude Code есть хуки: точки, в которых он запускает твою команду. Этого достаточно, чтобы собрать уведомление о том, что он просит разрешение или закончил работу, и даже ответить ему с телефона. Вот как это устроено внутри и как этим пользуется Wendo.
Что такое хук Claude Code
Хук — это команда, которую Claude Code запускает, когда что-то происходит: начинается сессия, ты отправляешь промпт, ему нужно разрешение, он заканчивает ответ. Они объявляются в ~/.claude/settings.json, по одному событию на ключ, и каждый указывает на команду:
{
"hooks": {
"Stop": [
{ "hooks": [{ "type": "command", "command": "~/.wendo/wendo-hook.sh" }] }
]
}
}
Claude Code запускает эту команду и передаёт ей на стандартный ввод JSON-документ с данными события: имя события, рабочий каталог, идентификатор сессии и, в зависимости от случая, инструмент, который он хочет использовать. Команда делает с этим что угодно. Для некоторых событий она может также записать ответ в стандартный вывод, так Claude Code узнаёт решение.
События, которые регистрирует хук Wendo
Установщик добавляет один и тот же скрипт на шесть событий:
PermissionRequest: Claude Code вот-вот попросит твоё разрешение.Notification: уведомление Claude Code, требующее внимания.Stop: он закончил отвечать.UserPromptSubmit: ты отправил промпт, значит, он работает.SessionStartиSessionEnd: сессия началась или закончилась.
Каждое событие сохраняется строкой в ~/.wendo/events.jsonl на компьютере. Приложение читает этот файл по SSH с твоим ключом, так что промежуточного сервера и аккаунта нет. То, что ты видишь во Входящих, берётся оттуда.
Чтобы установить хук, достаточно одной команды:
curl -fsSL https://wendo.lirafy.dev/install.sh | sh
Прежде чем трогать settings.json, скрипт сохраняет копию в settings.json.bak-wendo, и его можно запускать сколько угодно раз, не плодя дубликаты. Все хуки, которые у тебя уже есть, остаются нетронутыми. Параметры и ручная настройка описаны на странице уведомлений и разрешений; более общий разбор того, как собрать всё окружение, — в статье как пользоваться Claude Code с телефона.
Как работает разрешение
PermissionRequest — единственное событие, в котором хук остаётся и ждёт. Когда Claude Code просит разрешение, скрипт записывает запрос как ожидающий, и во Входящих приложения появляется строка с кнопками «Разрешить» и «Отклонить». Когда ты нажимаешь одну из них, приложение кладёт ответ в файл на компьютере, хук его подхватывает и передаёт решение Claude Code.
Ожидание длится 90 секунд. Если к этому времени ты не ответил, хук ничего не выводит, и Claude Code показывает обычный запрос в терминале, как будто Wendo нет. Это важно: если телефон сел или пропала связь, ничего не зависает, ты просто возвращаешься к тому, как всё работало всегда.
Если ты ответишь в терминале раньше, чем на телефоне, это тоже записывается, как решённое локально.
Несколько переменных окружения, заданных перед командой хука, настраивают поведение:
WENDO_APPROVAL_TIMEOUT: сколько секунд ждать.timeoutхука вsettings.json(120 в установленной конфигурации) должен быть больше.WENDO_BLOCKING=0: только уведомлять, не ждать ответа.WENDO_HOST: имя, под которым приложение знает этот компьютер, если оно отличается отhostname -s.
Вопросы Claude (AskUserQuestion) и утверждение планов (ExitPlanMode) не блокируют работу. В них нужно выбрать вариант, а не ответить «да» или «нет», поэтому на них отвечают в виде чата.
Уведомления при закрытом приложении: ntfy
Пока Wendo открыт, приложение читает Входящие раз в несколько секунд. Когда оно закрыто, кто-то должен доставить уведомление на телефон, и это ntfy: простой сервис push-уведомлений, в который публикуют обычным HTTP-запросом.
- Поставь
NTFY_TOPICперед командой хука вsettings.json:
NTFY_TOPIC=a-long-random-topic ~/.wendo/wendo-hook.sh
- Установи приложение ntfy на телефон и подпишись на тот же топик.
- Введи топик и в Wendo, в Настройки › Агенты › Уведомления.
Чтобы получить топик, который никто не угадает:
openssl rand -hex 16
Топик работает как пароль. На публичном сервере ntfy любой, кто знает имя топика, может читать всё, что в него публикуется, и публиковать свои сообщения, так что не называй его вроде claude-john. В уведомления попадают проект и фрагмент сообщения или команды, достаточные для решения, и это не то, что стоит показывать посторонним.
Если не хочется зависеть от публичного сервера, NTFY_URL направляет хук на твой собственный сервер ntfy. По умолчанию это https://ntfy.sh. Нажатие на уведомление открывает панель tmux, zellij или herdr, где работает агент, если ты запускаешь его внутри одного из них (см. страницу tmux).
На Android есть ещё и фоновая проверка не реже чем раз в 15 минут. В ntfy уходят только уведомления о разрешении, о событии Notification и о завершении задачи; хук не отправляет push о старте и окончании сессии или о каждом промпте.
Ограничения
- Пока только Claude Code. Хук не регистрируется в других агентах.
- Нужен
jqна компьютере.curlнужен только для ntfy. - Без мультиплексора приложение не знает, в какой панели Claude, и не может отвести тебя прямо к ней.
- В бесплатном плане есть 5 пробных разрешений из Входящих; с Pro ограничений нет.
- Wendo пока нет в магазинах: он скоро появится в App Store и Google Play.