Powiadomienia i zatwierdzenia Claude Code na telefonie
Claude Code ma hooki: miejsca, w których uruchamia twoje polecenie. To wystarcza, żeby zbudować alert na moment, gdy prosi o zgodę albo kończy, a nawet odpowiedzieć na niego z telefonu. Oto jak to działa od środka i jak używa tego Wendo.
Czym jest hook Claude Code
Hook to polecenie, które Claude Code uruchamia, gdy coś się dzieje: zaczyna się sesja, wysyłasz prompt, potrzebuje zgody, kończy odpowiedź. Deklarujesz je w ~/.claude/settings.json, jedno zdarzenie na klucz, każde wskazuje polecenie:
{
"hooks": {
"Stop": [
{ "hooks": [{ "type": "command", "command": "~/.wendo/wendo-hook.sh" }] }
]
}
}
Claude Code uruchamia to polecenie i przekazuje na standardowe wejście dokument JSON z danymi zdarzenia: nazwą zdarzenia, katalogiem roboczym, identyfikatorem sesji i, zależnie od przypadku, narzędziem, którego chce użyć. Polecenie robi z tym, co chce. Dla niektórych zdarzeń może też zapisać odpowiedź na standardowe wyjście, i tak Claude Code dowiaduje się o decyzji.
Zdarzenia, które rejestruje hook Wendo
Instalator dodaje ten sam skrypt do sześciu zdarzeń:
PermissionRequest: Claude Code zaraz poprosi o twoją zgodę.Notification: komunikat Claude Code, który wymaga uwagi.Stop: skończył odpowiadać.UserPromptSubmit: wysłałeś prompt, więc pracuje.SessionStartiSessionEnd: sesja się zaczyna lub kończy.
Każde zdarzenie trafia jako linia do ~/.wendo/events.jsonl na komputerze. Aplikacja czyta ten plik przez SSH twoim kluczem, więc nie ma serwera pośredniczącego ani konta. To, co widzisz w Skrzynce, pochodzi stamtąd.
Żeby to zainstalować, jedno polecenie:
curl -fsSL https://wendo.lirafy.dev/install.sh | sh
Przed ruszeniem settings.json zapisuje kopię jako settings.json.bak-wendo, a możesz uruchamiać go wielokrotnie bez dublowania wpisów. Hooki, które już masz, zostają nietknięte. Opcje i konfiguracja ręczna są na stronie o alertach i zatwierdzeniach; szerszy opis budowania całego środowiska jest w jak używać Claude Code z telefonu.
Jak działa zatwierdzenie
PermissionRequest to jedyne zdarzenie, przy którym hook zostaje i czeka. Gdy Claude Code prosi o zgodę, skrypt zapisuje prośbę jako oczekującą, a Skrzynka w aplikacji pokazuje wiersz z przyciskami zatwierdzenia lub odrzucenia. Gdy stukniesz jeden, aplikacja zostawia odpowiedź w pliku na komputerze, hook ją odbiera i przekazuje decyzję Claude Code.
Oczekiwanie trwa 90 sekund. Jeśli do tego czasu nie odpowiesz, hook nic nie wypisuje, a Claude Code pokazuje zwykły prompt w terminalu, jakby Wendo nie było. To ważne: jeśli telefon padnie albo stracisz zasięg, nic nie zostaje zablokowane, po prostu wracasz do tego, jak działało zawsze.
Jeśli odpowiesz w terminalu przed telefonem, to też zostanie zapisane, jako rozstrzygnięte lokalnie.
Kilka zmiennych środowiskowych to dostraja, ustawia się je przed poleceniem hooka:
WENDO_APPROVAL_TIMEOUT: sekundy oczekiwania.timeouthooka wsettings.json(120 w zainstalowanej konfiguracji) musi być większy.WENDO_BLOCKING=0: tylko alertuje, bez czekania na odpowiedź.WENDO_HOST: nazwa, pod jaką aplikacja zna komputer, jeśli różni się odhostname -s.
Pytania Claude (AskUserQuestion) i zatwierdzanie planów (ExitPlanMode) nie blokują. Proszą o wybór, a nie o tak lub nie, więc odpowiadasz na nie w widoku czatu.
Alerty przy zamkniętej aplikacji: ntfy
Gdy Wendo jest otwarte, aplikacja czyta skrzynkę co kilka sekund. Przy zamkniętej aplikacji coś musi dostarczyć alert na telefon, i tym czymś jest ntfy: prosta usługa powiadomień push, do której publikujesz zwykłym żądaniem HTTP.
- Wstaw
NTFY_TOPICprzed poleceniem hooka wsettings.json:
NTFY_TOPIC=a-long-random-topic ~/.wendo/wendo-hook.sh
- Zainstaluj aplikację ntfy na telefonie i zasubskrybuj ten sam temat.
- Wpisz temat także w Wendo, w Ustawienia › Agenci › Powiadomienia.
Żeby wygenerować temat, którego nikt nie zgadnie:
openssl rand -hex 16
Temat działa jak hasło. Na publicznym serwerze ntfy każdy, kto zna nazwę tematu, może czytać to, co w nim opublikowano, i publikować własne wiadomości, więc nie używaj czegoś w rodzaju claude-john. Alerty zawierają projekt i fragment wiadomości lub polecenia, tyle by podjąć decyzję, i nie jest to coś, co chcesz, by czytali obcy.
Jeśli wolisz nie zależeć od publicznego serwera, NTFY_URL kieruje hooka na twój własny serwer ntfy. Domyślnie jest to https://ntfy.sh. Stuknięcie alertu otwiera panel tmux, zellij lub herdr, w którym działa agent, o ile uruchamiasz go w jednym z nich (zobacz stronę o tmux).
Na Androidzie jest też sprawdzanie w tle co najmniej co 15 minut. Do ntfy trafiają tylko alerty o zgodzie, powiadomieniu i zakończonym zadaniu; hook nie wysyła startu sesji, końca sesji ani każdego promptu.
Ograniczenia
- Na razie tylko Claude Code. Hook nie jest rejestrowany w innych agentach.
- Potrzebuje
jqna komputerze.curljest potrzebny tylko dla ntfy. - Bez multipleksera aplikacja nie wie, w którym panelu jest Claude, i nie może zabrać cię prosto do niego.
- Plan darmowy obejmuje 5 próbnych zatwierdzeń ze Skrzynki; w Pro nie ma limitu.
- Wendo nie ma jeszcze w sklepach: wkrótce pojawi się w App Store i Google Play.