Wendov1.0 · iOS et Android
Français

Apprendre

Notifications et approbations Claude Code sur ton téléphone

Claude Code a des hooks : des points où il exécute une commande de ta part. C’est suffisant pour construire une alerte quand il demande une permission ou qu’il termine, et même pour y répondre depuis ton téléphone. Voici comment ça marche sous le capot et comment Wendo s’en sert.

Ce qu’est un hook de Claude Code

Un hook est une commande que Claude Code exécute quand quelque chose se produit : une session démarre, tu envoies un prompt, il a besoin d’une permission, il finit une réponse. Tu les déclares dans ~/.claude/settings.json, un événement par clé, chacun pointant vers une commande :

{
  "hooks": {
    "Stop": [
      { "hooks": [{ "type": "command", "command": "~/.wendo/wendo-hook.sh" }] }
    ]
  }
}

Claude Code exécute cette commande et lui passe sur l’entrée standard un document JSON avec les données de l’événement : son nom, le répertoire de travail, l’id de session et, selon le cas, l’outil qu’il veut utiliser. La commande en fait ce qu’elle veut. Pour certains événements, elle peut aussi écrire une réponse sur la sortie standard, et c’est ainsi que Claude Code connaît la décision.

Les événements que le hook de Wendo enregistre

L’installateur ajoute le même script à six événements :

  • PermissionRequest : Claude Code est sur le point de te demander ta permission.
  • Notification : un avis de Claude Code qui demande ton attention.
  • Stop : il a fini de répondre.
  • UserPromptSubmit : tu as envoyé un prompt, donc il travaille.
  • SessionStart et SessionEnd : une session commence ou se termine.

Chaque événement est stocké sous forme de ligne dans ~/.wendo/events.jsonl sur l’ordinateur. L’app lit ce fichier en SSH avec ta clé, donc il n’y a ni serveur intermédiaire ni compte. Ce que tu vois dans la boîte de réception vient de là.

Pour l’installer, une seule commande :

curl -fsSL https://wendo.lirafy.dev/install.sh | sh

Avant de toucher à settings.json, il en sauvegarde une copie sous settings.json.bak-wendo, et tu peux le relancer à répétition sans dupliquer les entrées. Les hooks que tu as déjà sont laissés tranquilles. Les options et la configuration manuelle sont sur la page alertes et approbations ; le tour d’horizon pour construire tout l’environnement est dans comment utiliser Claude Code depuis ton téléphone.

Comment fonctionne une approbation

PermissionRequest est le seul événement où le hook reste et attend. Quand Claude Code demande une permission, le script enregistre la demande comme en attente, et la boîte de réception de l’app affiche la ligne avec des boutons pour approuver ou refuser. Quand tu en touches un, l’app dépose la réponse dans un fichier sur l’ordinateur, le hook la récupère et renvoie la décision à Claude Code.

L’attente dure 90 secondes. Si tu n’as pas répondu d’ici là, le hook n’affiche rien et Claude Code montre sa demande habituelle dans le terminal, comme si Wendo n’était pas là. C’est important : si ton téléphone meurt ou si tu perds le signal, rien ne reste bloqué, tu reviens simplement au fonctionnement de toujours.

Si tu réponds dans le terminal avant le téléphone, c’est enregistré aussi, comme résolu localement.

Quelques variables d’environnement permettent de régler cela, à placer devant la commande du hook :

  • WENDO_APPROVAL_TIMEOUT : secondes d’attente. Le timeout du hook dans settings.json (120 dans la configuration installée) doit être plus grand.
  • WENDO_BLOCKING=0 : alerte seulement, sans attendre de réponse.
  • WENDO_HOST : le nom sous lequel l’app connaît l’ordinateur, s’il diffère de hostname -s.

Les questions de Claude (AskUserQuestion) et les approbations de plan (ExitPlanMode) ne bloquent pas. Elles demandent un choix plutôt qu’un oui ou un non, donc tu y réponds depuis la vue chat.

Alertes app fermée : ntfy

Tant que Wendo est ouvert, l’app lit la boîte de réception toutes les quelques secondes. App fermée, il faut que quelque chose pousse l’alerte vers ton téléphone, et c’est ntfy : un service de notifications push simple où l’on publie avec une requête HTTP.

  1. Mets NTFY_TOPIC devant la commande du hook dans settings.json :
NTFY_TOPIC=a-long-random-topic ~/.wendo/wendo-hook.sh
  1. Installe l’app ntfy sur ton téléphone et abonne-toi à ce même topic.
  2. Saisis aussi le topic dans Wendo, sous Réglages › Agents › Notifications.

Pour générer un topic que personne ne devinera :

openssl rand -hex 16

Le topic joue le rôle de mot de passe. Sur le serveur ntfy public, quiconque connaît le nom d’un topic peut lire ce qui y est publié et y publier ses propres messages, donc n’utilise pas quelque chose comme claude-john. Les alertes contiennent le projet et un extrait du message ou de la commande, assez pour décider, et pas quelque chose que tu veux voir lu par des inconnus.

Si tu préfères ne pas dépendre du serveur public, NTFY_URL oriente le hook vers ton propre serveur ntfy. Par défaut, c’est https://ntfy.sh. Toucher une alerte ouvre le pane tmux, zellij ou herdr où tourne l’agent, à condition de le lancer dans l’un d’eux (voir la page tmux).

Sur Android, il y a aussi une vérification en arrière-plan au moins toutes les 15 minutes. Seules les alertes de permission, de notification et de tâche terminée vont vers ntfy ; le hook ne pousse pas le début ou la fin de session, ni chaque prompt.

Limites

  • Claude Code uniquement pour l’instant. Le hook n’est pas enregistré pour les autres agents.
  • Il faut jq sur l’ordinateur. curl n’est nécessaire que pour ntfy.
  • Sans multiplexeur, l’app ne sait pas dans quel pane se trouve Claude et ne peut pas t’y emmener directement.
  • Le plan gratuit inclut 5 approbations d’essai depuis la boîte de réception ; avec Pro, il n’y a pas de limite.
  • Wendo n’est pas encore dans les stores : il arrive bientôt sur l’App Store et Google Play.