Wendov1.0 · iOS и Android
Русский

Гайды

Уведомления и разрешения 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-запросом.

  1. Поставь NTFY_TOPIC перед командой хука в settings.json:
NTFY_TOPIC=a-long-random-topic ~/.wendo/wendo-hook.sh
  1. Установи приложение ntfy на телефон и подпишись на тот же топик.
  2. Введи топик и в 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.