Notifiche e approvazioni di Claude Code sul telefono
Claude Code ha gli hook: punti in cui esegue un comando tuo. Basta per costruire un avviso per quando chiede un permesso o finisce, e persino per rispondere dal telefono. Ecco come funziona sotto il cofano e come lo usa Wendo.
Cos’è un hook di Claude Code
Un hook è un comando che Claude Code esegue quando succede qualcosa: parte una sessione, mandi un prompt, serve un permesso, finisce una risposta. Li dichiari in ~/.claude/settings.json, un evento per chiave, ciascuno con un comando:
{
"hooks": {
"Stop": [
{ "hooks": [{ "type": "command", "command": "~/.wendo/wendo-hook.sh" }] }
]
}
}
Claude Code esegue quel comando e gli passa sullo standard input un documento JSON con i dati dell’evento: il nome dell’evento, la directory di lavoro, l’id della sessione e, a seconda del caso, lo strumento che vuole usare. Il comando ne fa quello che vuole. Per alcuni eventi può anche scrivere una risposta sullo standard output, ed è così che Claude Code viene a sapere la decisione.
Gli eventi che registra l’hook di Wendo
L’installer aggiunge lo stesso script a sei eventi:
PermissionRequest: Claude Code sta per chiederti il permesso.Notification: un avviso di Claude Code che richiede attenzione.Stop: ha finito di rispondere.UserPromptSubmit: hai mandato un prompt, quindi sta lavorando.SessionStarteSessionEnd: una sessione inizia o finisce.
Ogni evento viene salvato come riga in ~/.wendo/events.jsonl sul computer. L’app legge quel file via SSH con la tua chiave, quindi non ci sono server intermedi né account. Quello che vedi nella posta in arrivo viene da lì.
Per installarlo, un solo comando:
curl -fsSL https://wendo.lirafy.dev/install.sh | sh
Prima di toccare settings.json ne salva una copia come settings.json.bak-wendo, e puoi rilanciarlo più volte senza duplicare le voci. Gli hook che hai già restano dove sono. Le opzioni e la configurazione manuale sono nella pagina avvisi e approvazioni; la guida più ampia per costruire tutto l’ambiente è come usare Claude Code dal telefono.
Come funziona un’approvazione
PermissionRequest è l’unico evento in cui l’hook resta e aspetta. Quando Claude Code chiede un permesso, lo script registra la richiesta come in sospeso, e la posta in arrivo dell’app mostra la riga con i pulsanti per approvare o rifiutare. Quando ne tocchi uno, l’app lascia la risposta in un file sul computer, l’hook la raccoglie e restituisce la decisione a Claude Code.
L’attesa dura 90 secondi. Se non hai risposto entro allora, l’hook non stampa nulla e Claude Code mostra la sua richiesta normale nel terminale, come se Wendo non ci fosse. È importante: se il telefono si spegne o perdi segnale, nulla resta bloccato, torni semplicemente a come ha sempre funzionato.
Se rispondi nel terminale prima che dal telefono, viene registrato anche quello, come risolto in locale.
Alcune variabili d’ambiente lo regolano, da mettere davanti al comando dell’hook:
WENDO_APPROVAL_TIMEOUT: secondi di attesa. Iltimeoutdell’hook insettings.json(120 nella configurazione installata) deve essere maggiore.WENDO_BLOCKING=0: solo avviso, senza aspettare una risposta.WENDO_HOST: il nome con cui l’app conosce il computer, se è diverso dahostname -s.
Le domande di Claude (AskUserQuestion) e le approvazioni dei piani (ExitPlanMode) non bloccano. Chiedono una scelta più che un sì o un no, quindi rispondi dalla vista chat.
Avvisi ad app chiusa: ntfy
Mentre Wendo è aperto, l’app legge la posta in arrivo ogni pochi secondi. Con l’app chiusa serve qualcosa che spinga l’avviso sul telefono, ed è ntfy: un semplice servizio di notifiche push su cui si pubblica con una richiesta HTTP.
- Metti
NTFY_TOPICdavanti al comando dell’hook insettings.json:
NTFY_TOPIC=a-long-random-topic ~/.wendo/wendo-hook.sh
- Installa l’app ntfy sul telefono e iscriviti allo stesso topic.
- Inserisci il topic anche in Wendo, in Impostazioni › Agenti › Notifiche.
Per generare un topic che nessuno indovinerà:
openssl rand -hex 16
Il topic fa da password. Sul server ntfy pubblico, chiunque conosca il nome di un topic può leggere ciò che vi viene pubblicato e pubblicare messaggi propri, quindi non usare qualcosa come claude-john. Gli avvisi includono il progetto e un estratto del messaggio o del comando, abbastanza per decidere, e non qualcosa che vuoi far leggere a degli sconosciuti.
Se preferisci non dipendere dal server pubblico, NTFY_URL punta l’hook al tuo server ntfy. Il valore predefinito è https://ntfy.sh. Toccando un avviso si apre il pane tmux, zellij o herdr dove gira l’agente, a patto che tu lo esegua dentro uno di essi (vedi la pagina tmux).
Su Android c’è anche un controllo in background almeno ogni 15 minuti. A ntfy vanno solo gli avvisi di permesso, di notifica e di compito finito; l’hook non spinge l’inizio o la fine della sessione, né ogni prompt.
Limiti
- Per ora solo Claude Code. L’hook non è registrato per gli altri agenti.
- Serve
jqsul computer.curlserve solo per ntfy. - Senza un multiplexer, l’app non sa in quale pane si trova Claude e non può portarti direttamente lì.
- Il piano gratuito include 5 approvazioni di prova dalla posta in arrivo; con Pro non ci sono limiti.
- Wendo non è ancora negli store: arriverà presto su App Store e Google Play.