Présentation

Pocketty est une application iPhone/iPad qui se connecte directement à un hôte via SSH. Elle cible les agents de la plateforme herdr et notifie l’utilisateur dès qu’un agent passe à l’état « blocked » ou « done ». L’alerte est transmise uniquement au téléphone grâce à APNS ou FCM, sans serveur intermédiaire. L’offre comprend une période d’essai de 14 jours, puis un paiement unique de 99 $ après le prix de lancement.

Architecture et flux de données

L’application utilise une clé Tailscale pour établir un tunnel chiffré entre le téléphone et l’hôte. La connexion repose sur le protocole SSH standard, ce qui permet d’utiliser des shells classiques comme bash, tmux ou zellij. Lorsqu’un agent change d’état, le daemon côté serveur crée un « seal » contenant les données de notification, puis les chiffre avec HPKE (X25519 + ChaCha20) avant de les envoyer via le service de notification d’Apple (APNS) ou Google (FCM). Le téléphone déchiffre le message dans le Secure Enclave, garantissant que seul l’appareil peut le lire.

pub const MAX_BODY : usize = 16 * 1024 ;
pub const RETRY_AFTER : u32 = 60 ;
const APNS_TOKEN_LIFETIME : u64 = 40 * 60 ;
const FCM_TOKEN_MARGIN : u64 = 5 * 60 ;

Mécanismes de sécurité

Chaque notification est scellée (sealed) avec une clé dérivée de HPKE, ce qui empêche toute interception en transit. Le token APNS possède une durée de vie de 40 minutes, tandis que le token FCM est rafraîchi avec une marge de 5 minutes, limitant la fenêtre d’exploitation. Le code source du relais indique que les réponses de limitation de débit utilisent la constante RETRY_AFTER (60 s), assurant un comportement cohérent entre le serveur et le client. L’appareil utilise Face ID ou le code d’accès pour déverrouiller l’application, et aucune donnée n’est stockée sur les serveurs de Pocketty.

Analyse des limites et perspectives

Le modèle repose sur la disponibilité du service de notification d’Apple ou de Google ; une interruption de ces services empêcherait la réception des alertes. Le daemon doit rester actif sur l’hôte pour générer les scellés, ce qui introduit une dépendance supplémentaire. Le texte fourni ne précise pas de mécanisme de récupération en cas de perte de connexion SSH, ni de chiffrement de bout en bout au niveau de la session terminale au-delà du tunnel SSH. Enfin, la compatibilité est limitée aux agents de herdr, ce qui restreint l’adoption à d’autres environnements de développement.