La bêta de Hermes Mobile est sortie : ce que font vraiment les apps iOS et Android (et où ça casse encore)


Vous confiez la tâche de recherche à Hermes sur votre bureau, vous prenez votre téléphone et vous partez vers l’ascenseur. Vers le troisième étage, ça vous frappe : vous avez visé trop large. Les papiers seulement. Laissez tomber les articles de blog.

Il y a un an, cela voulait dire soit garder l’idée en tête jusqu’au retour à votre bureau, soit sortir Telegram et taper un paragraphe de contexte dans une fenêtre de chat. Depuis cette semaine, il existe une réponse officielle : une app Hermes pour votre téléphone. Cet article n’est pas une énième annonce de l’arrivée de l’app. Il couvre les trois choses qui comptent vraiment : ce qui est sorti, si vous pouvez l’installer aujourd’hui, et quelles parties tiennent la route une fois installée.

Le téléphone est une télécommande. L’agent ne bouge pas.

C’est le point le plus mal compris de Hermes Mobile, et l’annonce officielle est explicite là-dessus : l’app se connecte à votre propre gateway Hermes. Le modèle, les outils, la mémoire, les fichiers du projet — tout reste sur la machine où ça tournait déjà. Le téléphone gère trois choses : parler, suivre la progression, appuyer sur approuver.

  App mobile (chat / voix / approvals / statut)
        |  connexion authentifiée (adresse directe, tunnel SSH ou Tailscale)
        v
  Votre gateway (hermes dashboard ou hermes serve, port 9119 par défaut)
        |
        v
  Modèles | outils | skills | fichiers de projet | cron

Une fois cette séparation claire, la plupart du comportement de la bêta devient logique. Le rapport d’un testeur daté du 31 octobre est sans ambiguïté : au bout d’environ 55 minutes, l’app Android s’est figée puis est morte, tandis que le même tour continuait de tourner sur le serveur et se terminait normalement — la seule trace côté backend était une WebSocket qui se fermait avec le code 1006 (issue #147323). L’UI a lâché ; le travail, non.

L’inverse est vrai aussi. Quand le téléphone dit qu’il ne peut pas se connecter, l’app est rarement la partie cassée. Soit le chemin du téléphone vers la gateway est mauvais, soit l’auth de la gateway n’a pas passé.

Ce qui est réellement sorti

Le 30 octobre 2026, au NousCon de New York, Nous Research a ouvert une bêta mobile officielle et renvoyé tout le monde vers hermes-agent.nousresearch.com/mobile. Cette page fait exactement une chose : vous choisissez une plateforme, elle vous donne une invitation.

Élément Réalité
iOS Invitation publique Apple TestFlight
Android Firebase App Distribution — pas Google Play
Nom du package ai.nousresearch.hermes.mobile
Version 1.0.0 ; les builds vus dans les rapports de testeurs sont en versionCode 21
Statut sur les stores Aucune des deux plateformes n’est dans un app store ; aucune date de disponibilité générale annoncée

Selon l’annonce officielle, la promesse tient en trois points : le streaming du chat, l’approbation des appels d’outils depuis le téléphone, et la gestion des bots et des routines en déplacement.

Un détail mérite son propre paragraphe. Cinq jours avant la bêta, Nous a averti publiquement qu’il n’existait encore aucune app Hermes officielle dans les app stores, et que les apps tierces empruntant le nom et l’apparence étaient probablement des arnaques plutôt que des projets communautaires. Donc ne la cherchez pas dans les stores. Partez de la page officielle.

Il y a aussi une collision de noms à connaître : l’entrée Hermes Mobile de notre annuaire de l’écosystème est un client Android fait par la communauté, sans lien avec cette sortie. Même nom, projet différent.

Pouvez-vous l’installer aujourd’hui ? Vérifiez les deux portes d’abord

Que la bêta soit ouverte ne veut pas dire que l’invitation fonctionne quand vous cliquez dessus. J’ai vérifié les deux liens aujourd’hui, le 2 novembre, et c’est la partie que la plupart des articles sautent.

L’invitation iOS est actuellement morte. La page officielle distribue testflight.apple.com/join/U8e1zmbc, qui renvoie 404 — la page nue Not Found d’Apple, 896 octets, et non un écran indiquant que cette bêta est pleine. La distinction compte : une bêta pleine affiche quand même la page de l’app et vous dit qu’elle est pleine ; un 404 signifie que le lien public lui-même n’est plus actif (révoqué, expiré ou remplacé). Pendant ce temps, /mobile répond toujours 200 et sert toujours ce même vieux lien. Plusieurs utilisateurs ont reproduit le 404 avec des user-agents desktop, iPhone et TestFlight, plus des paramètres de cache-busting (issue #147556, et le fil de commentaires sur issue #147269).

L’invitation Android est à saturation. Ouvrez le lien Firebase, connectez-vous avec Google, et vous obtenez un message sans détour : This app is at the tester limit, avec le conseil de demander au développeur de libérer des places. Plusieurs personnes, sur des machines et des comptes différents, ont confirmé le même résultat (voir les commentaires sur issue #147269).

Donc l’état réel des choses : certaines personnes font déjà tourner l’app et ouvrent des bugs ; tout le reste est bloqué à la porte, en attente de places ou d’un lien réparé. Ce n’est pas votre réseau, et ce n’est pas un blocage régional.

À quoi doit ressembler votre backend

Une installation seule ne vous donne qu’une coquille vide. L’app a besoin de quelque chose à qui parler. D’après la configuration qui revient dans les rapports de testeurs, la checklist ressemble à ceci :

  1. Lancez la gateway. En général hermes dashboard (port 9119 par défaut, avec l’auth du dashboard) ou hermes serve pour la surface web. Voir la référence de la commande hermes dashboard pour les flags.
  2. Rendez-la joignable depuis le téléphone. Le même Wi-Fi est la voie facile. Hors réseau, Tailscale est ce que les testeurs utilisent le plus ; l’app a aussi un mode tunnel SSH.
  3. N’exposez pas le port 9119 sur l’internet ouvert. Derrière ce port se trouve un agent capable d’exécuter des commandes et de lire des fichiers. Passez par une plage Tailscale, ou placez Tailscale Serve devant pour du HTTPS et pointez webapp.public_url vers cette origine.
  4. Choisissez une méthode d’auth. L’app gère deux routes : la connexion navigateur avec un compte Nous (le callback arrive sur /auth/callback), ou le mode Direct avec une adresse plus un mot de passe via basic_auth du dashboard.
  5. Installez le plugin push si vous voulez des notifications. La gateway a besoin de hermes-mobile-push, et il n’est pas découvrable dans le catalogue aujourd’hui — hermes plugins search hermes-mobile-push renvoie No catalog entries matched, il faut donc le déposer à la main dans le répertoire de plugins utilisateur (issue #147651). Sans lui, n’attendez pas de push de fin de réponse.
  6. Gardez le backend raisonnablement à jour. Les backends des rapports sont majoritairement en v0.22.5 (2026.9.24).

Une chose de plus avant de commencer : se connecter n’est pas un mode unique. Il y a Direct (adresse plus connexion navigateur ou mot de passe), un tunnel SSH & Mosh, et une connexion directe à l’adresse du dashboard. Ils échouent de façons différentes, et c’est exactement ce que montre la section suivante.

Ce qui marche déjà dans la 1.0.0

Il n’y a pas de liste officielle des fonctionnalités, et le site de docs n’a pas encore de guide d’installation mobile. Ce tableau est donc assemblé à partir de vrais rapports de testeurs, chacun avec un numéro d’issue que vous pouvez vérifier vous-même.

Capacité Statut Remarques
Streaming du chat Fonctionne Les réponses longues et le Markdown s’affichent ; les écrans sessions, Projects et Artifacts existent
Sélecteur de modèle Fonctionne, avec des bugs d’affichage Lit /api/model/options sur la gateway ; un backend renvoyait 69 ids dans le groupe nous et 407 dans custom:openrouter
Live Voice Fonctionne, gère les interruptions Inaccessible depuis un chat vide par défaut — voir le contournement plus bas
Approbations d’appels d’outils Annoncé dans le communiqué Approuver depuis un téléphone est pratique et, dans la même mesure, une surface de risque
Bots et routines Annoncé dans le communiqué Les livraisons cron arrivent dans Bot Chat mais s’affichent mal dans l’app — voir plus bas
Page Système Fonctionne Affiche l’adresse de l’hôte, la version de Hermes, la date de sortie, l’état de santé, le mode d’auth
Notifications push Incomplet Une notification de réflexion en cours arrive, celle de fin non ; vérifiez d’abord le plugin push
Rapports HTML inline Manquant Les dashboards générés arrivent en fichiers téléchargeables, pas rendus dans le chat

Live Voice a un contournement vraiment utile, documenté dans issue #147322 : par défaut, un chat tout neuf n’a aucun moyen de démarrer le live voice tant que vous n’avez pas envoyé un message texte. Changez Settings → Chat → Collapsed Voice Button de message vocal à live voice, et les nouveaux chats comme la tuile des réglages rapides basculent directement dans une session live voice ; les messages vocaux classiques restent enregistrables depuis le composer. Le testeur le dit lui-même : le démarrage en un geste compte beaucoup quand on conduit. La voix elle-même, interruptions comprises, fonctionne bien.

Six aspérités à connaître avant d’installer

C’est une bêta, et ce sont des issues déposées, pas des rumeurs.

1. Les longues sessions mangent la mémoire. La chronologie du même testeur est précise : environ 55 minutes à alterner entre live voice et longues réponses en streaming, puis une ANR (le thread principal en attente du garbage collector), puis treize secondes plus tard java.lang.OutOfMemoryError avec les 256 Mo de heap pleins, sur un Galaxy S25 sous Android 17 (#147323). C’est arrivé une fois, et c’est exactement le genre de scénario à surveiller.

2. Les longues réponses ne défilent pas. Le même rapporteur a aussi signalé un défilement saccadé et des réponses en streaming impossibles à faire venir à l’écran (#147321).

3. Les bulles de chat coupent leur texte. Au premier rendu, le bas d’une bulle est coupé au milieu d’une ligne, côté utilisateur comme côté agent ; faites défiler ailleurs puis revenez et tout s’affiche — le contenu est intact, la hauteur mesurée est fausse (#147723).

4. Les noms de modèles se tronquent les uns dans les autres. deepseek/deepseek-v4.1-flash et deepseek/deepseek-v4.1-flash-1017 s’affichent tous deux deepseek/deepseek-v4.1-fl… sur un téléphone, donc les seuls caractères qui les distinguent sont ceux qui sont coupés (#147319).

5. La connexion peut ouvrir le callback deux fois. Sur Android, par intermittence : le navigateur atterrit sur une page d’erreur invalid_grant alors que l’app se connecte très bien. Le log de la gateway montre deux hits /auth/callback à 697 ms d’intervalle, le second échangeant un code déjà consommé — un onglet dupliqué perdant, affiché à l’écran (#147738). Le classique « ça a marché mais ça m’a dit que ça avait échoué » est le moyen le plus rapide de faire recommencer à quelqu’un un flux qui était déjà bon.

6. Les WebSockets du chat prennent un 403 sur les gateways distantes. L’auth passe, puis la WebSocket est refusée et l’app dit que Hermes vous a connecté mais a refusé la connexion au chat. L’upgrade porte un ticket dans un sous-protocole et aucun en-tête Origin depuis un pair non-loopback, donc il est traité comme un dial Desktop local natif et fermé avant même que le contrôle du ticket ne s’exécute (#147361). Passer à SSH & Mosh n’est pas non plus un correctif automatique : sur iOS, l’auth SSH et celle du dashboard réussissaient toutes deux côté serveur alors que l’app signalait une erreur d’identifiants (#147726).

Deux autres, opérationnelles, à mettre en favori. D’abord, le plugin hermes-session-reset-policy ne se déclenche jamais pour les sessions source=gui — le chemin dashboard / Desktop / mobile — donc ces sessions ne se réinitialisent jamais par inactivité ; un utilisateur a enregistré 47 compactions de contexte en six heures, puis a arrêté d’obtenir des réponses sur le téléphone (#147660). Ensuite, les livraisons cron avec deliver: bot-chat s’affichent dans l’app comme des messages tapés par l’utilisateur, alors que la même livraison est correctement stylée comme message sortant de bot sur Telegram (#147573).

Quant au rapport sur l’absence de notification à la fin de la réponse (#147345), le rapporteur l’a fermé lui-même, en soupçonnant un composant manquant. Vu que le plugin push n’est pas dans le catalogue, l’explication tient : ce n’est probablement pas un système de notifications cassé, c’est un maillon manquant dans la chaîne. Si vous voulez le tableau complet des notifications dans Hermes en général, notre guide sur les notifications et l’attention couvre le côté configuration.

Un test d’acceptation en dix minutes une fois dedans

Ne commencez pas par installer une pile de plugins. Faites d’abord passer une seule tâche à faible risque sur tout le chemin. Cette séquence touche tous les modes de défaillance listés plus haut :

  1. Nouveau chat, posez une question à laquelle on répond en une ligne. Confirmez que le streaming fonctionne.
  2. Demandez une réponse longue — mille mots ou plus — et regardez si le défilement suit.
  3. Mettez l’app en arrière-plan, revenez, vérifiez que la session et tout son contenu ont survécu.
  4. Lancez une session live voice, interrompez-la en pleine phrase, voyez si elle reprend le fil.
  5. Déclenchez un appel d’outil qui demande une approbation. Approuvez ou refusez depuis le téléphone.
  6. Ouvrez la page Système et comparez la version du backend et son état de santé avec ce que rapporte l’hôte.
  7. Notez trois choses : le numéro de build de l’app, la version de l’OS du téléphone et le hermes --version du backend. Ces trois-là transforment « ça ne marche pas » en un rapport de bug sur lequel quelqu’un peut agir.

Si vous en êtes encore à l’étape backend, commencez par le guide d’installation, puis lisez comment l’app web et l’app desktop se partagent le travail — l’app mobile parle aux mêmes endpoints webapp, et la connexion emprunte le même handoff (connexion Nous et handoff vers l’app va plus loin).

Ce que cette sortie change vraiment

Rassemblez toutes les aspérités et le positionnement reste clair : Hermes Mobile n’est pas l’agent compressé dans un téléphone. C’est vous, libéré du bureau.

L’ancienne façon de juger un agent consistait à compter les outils et les modèles. Il y a désormais une seconde question : quand je suis loin de mon bureau, est-ce que je peux l’atteindre, ajouter une phrase, approuver une commande et garder le travail en mouvement ? Cette question compte plus qu’une liste de fonctionnalités, parce qu’elle décide si vous confierez un jour une tâche serveur de longue durée à un agent.

La réponse honnête aujourd’hui : oui, mais ne misez pas tout sur le téléphone. Lancer des tâches courtes, vérifier la progression, ajouter une exigence, approuver une commande, dicter une idée — tout cela fonctionne. Attendre du téléphone qu’il porte seul une tâche de plusieurs heures, avec chaque notification qui arrive à l’heure, c’est surestimer l’outil.

Quand l’invitation iOS sera remplacée et que Firebase libérera des places, revérifiez la même page officielle. Et évitez les liens APK dans des fils aléatoires — l’agent sur votre machine mérite une meilleure provenance que ça.