Claude Code

Запросы разрешений

Как purplemux перехватывает диалоги Claude Code «можно это запустить?» и позволяет одобрять их с панели, с клавиатуры или с телефона.

Claude Code по умолчанию блокируется на диалогах разрешений — для вызовов инструментов, записи файлов и тому подобного. purplemux ловит эти диалоги в момент появления и направляет их на устройство, которое сейчас под рукой.

Что перехватывается

Хук Notification Claude Code срабатывает по нескольким причинам. purplemux считает запросами разрешений только два типа уведомлений:

  • permission_prompt — стандартный диалог «Разрешить запуск этого инструмента?»
  • worker_permission_prompt — то же самое от sub-agent

Всё остальное (idle-напоминания и т. п.) игнорируется на стороне статуса и не переключит вкладку в needs-input и не отправит push.

Что происходит, когда срабатывает

  1. Claude Code эмитит хук Notification. Shell-скрипт в ~/.purplemux/status-hook.sh POST'ит событие и тип уведомления на локальный сервер.
  2. Сервер переводит состояние вкладки в needs-input (янтарный пульс) и транслирует изменение по статусному WebSocket.
  3. Панель рендерит запрос inline в таймлайне — с теми же опциями, что предложил Claude. Никакого модального окна, никакого переключения контекста.
  4. Если разрешение на уведомления выдано, срабатывают Web Push и/или десктопное уведомление для needs-input.

Сам Claude CLI всё ещё ждёт stdin. purplemux читает опции запроса из tmux и передаёт ваш выбор обратно, когда вы его делаете.

Как ответить

Три равноценных способа:

  • Кликнуть опцию в таймлайне.
  • Нажать цифру1, 2, 3 — соответствующую индексу опции.
  • Тапнуть push на телефоне — он откроет вкладку прямо на этом запросе; выбирайте оттуда.

После выбора purplemux отправляет ввод в tmux, вкладка возвращается в busy, и Claude продолжает с того же места. Подтверждать ничего больше не нужно — клик и есть подтверждение.

Подряд идущие запросы автоматически перерисовываются
Если Claude задаёт несколько вопросов подряд, inline-запрос перерисовывается с новыми опциями, как только приходит следующий `Notification`. Закрывать предыдущий не нужно.

Мобильный поток

С установленной PWA и выданными разрешениями на уведомления Web Push срабатывает независимо от того, открыта вкладка браузера, в фоне или закрыта:

  • Уведомление гласит «Input Required» и идентифицирует сессию.
  • Тап открывает purplemux с фокусом на этой вкладке.
  • Inline-запрос уже отрендерен; выбираете опцию одним нажатием.

Это и есть основная причина настроить Tailscale + PWA — одобрения следуют за вами вне рабочего стола.

Когда опции не удалось распарсить

В редких случаях (запрос ушёл из scrollback tmux раньше, чем purplemux успел его прочитать) список опций возвращается пустым. Таймлайн показывает карточку «не удалось прочитать запрос» и до четырёх раз пытается заново с экспоненциальной задержкой. Если всё равно не вышло — переключитесь в режим Terminal для этой вкладки и ответьте в сыром CLI: процесс Claude всё равно ждёт.

А что насчёт idle-напоминаний?

Прочие типы уведомлений Claude — например, idle-напоминания — всё равно приходят на эндпоинт хука. Сервер их логирует, но не меняет состояние вкладки, не отправляет push и не показывает UI-запрос. Это сделано специально: вашего внимания требуют только события, которые блокируют Claude.

Что дальше