ESP32 iPhone Agent : un ESP32 à environ 7 dollars comme « mains » et la recopie AirPlay comme « yeux » laissent un modèle de vision piloter un vrai iPhone
onehumanbeing/esp32-iphone-agent est un projet Python sous licence MIT créé le 11 octobre 2026, avec environ 1 500 étoiles à la rédaction. La recopie AirPlay envoie l'écran de l'iPhone à un ordinateur, et un ESP32-S3 branché au téléphone se comporte comme une souris et un clavier USB, piloté par tout modèle de vision compatible OpenAI. Rien n'est installé sur le téléphone, et ni Mac, ni Xcode, ni compte développeur ne sont nécessaires. Le projet ne donne aucun chiffre de fiabilité, et les démonstrations viennent de l'auteur.
onehumanbeing/esp32-iphone-agent est un projet open source écrit en Python sous licence MIT. Il a été créé le 11 octobre 2026, la dernière poussée date du 13 octobre, et il compte environ 1 517 étoiles et 194 forks à la rédaction. L'argument tient en une ligne : laisser un modèle d'IA utiliser un vrai iPhone avec un ESP32 à environ 7 dollars, sans Mac, sans compte développeur et sans jailbreak. Les vidéos de démonstration et les mises à jour sont sur le compte X de l'auteur et sur YouTube. Le README donne deux exemples. Dans le premier, la tâche est « Ouvre Tableau blanc et dessine un smiley », et l'agent cherche l'application, l'ouvre et dessine le visage en traits continus. Dans le second, la tâche est « Règle une alarme à 7 h 00 qui se répète tous les jours, puis enregistre », et l'agent ouvre Horloge, tape 0700 dans la roue des heures, coche les jours sous Répéter en plusieurs touches à la fois, et enregistre. La capture de chaque étape, avec sa touche ou son trait dessiné dessus, reste sur un « mur d'étapes ».
Pourquoi cette voie ? Le README explique que la plupart des automatisations d'iPhone pilotent le téléphone via XCTest ou WebDriverAgent. Cela demande un Mac, Xcode, une application d'aide signée et un compte développeur Apple, et la signature d'un compte gratuit expire tous les 7 jours. Ce projet emprunte les mêmes chemins qu'une personne, l'écran et un pointeur, si bien que le téléphone n'a rien à installer. Un tableau comparatif du README indique que cette approche n'exige ni compte développeur ni Xcode, fonctionne sur Mac ou Linux, n'installe aucune application sur le téléphone et marche dans n'importe quelle application, jeux compris, puisqu'elle ne voit que des pixels. Les outils de type XCTest exigent un compte développeur et Xcode, ne tournent que sur Mac, demandent une application de test et dépendent surtout de ce que montre l'arbre d'accessibilité.
Techniquement, il y a trois parties. Les yeux sont la recopie AirPlay : l'iPhone envoie son écran à UxPlay sur votre ordinateur, et un pipeline GStreamer transforme le flux en images JPEG pour l'agent et la page web. Les mains sont un pont USB HID : un ESP32-S3 branché au téléphone se présente comme une souris et un clavier USB standard. Avec AssistiveTouch d'iOS activé, la souris déplace un pointeur rond à l'écran, donc un clic est une touche et un glissé un balayage. La carte se connecte à l'ordinateur en Wi-Fi et exécute de simples commandes par ligne comme move, click et type, en répondant ok ou err, et toute la logique reste sur l'ordinateur. Le cerveau est un planificateur et un acteur. Le planificateur écrit un court plan d'après l'objectif et l'écran actuel. L'acteur regarde chaque nouvelle capture et choisit toucher, balayer, dessiner un tracé, saisir, appuyer sur une touche, revenir à l'accueil ou terminer. Les deux rôles peuvent être le même modèle, et tout modèle compatible OpenAI qui accepte des images convient, via une API cloud ou un modèle que vous exécutez.
Ce qui rend cette voie praticable, c'est la boucle fermée. Le pointeur est relatif, donc le serveur suit sa position. Avant chaque touche, il agite le pointeur, le repère sur l'écran recopié et corrige l'écart, en affinant l'étalonnage au fil de l'eau. Après chaque action, il vérifie que l'écran a vraiment changé et le dit au modèle : une touche manquée est repérée et retentée, et non utilisée comme base. Les actions répétées déclenchent un nouveau plan, et on peut se remettre d'une liaison coupée ou d'une mauvaise réponse. L'interface web montre le téléphone en direct, où un clic touche et un glissé balaie, un journal en direct, le mur d'étapes avec chaque capture et le raisonnement du modèle, et un arrêt d'urgence. La touche Échap arrête aussi l'agent et libère le pointeur. Avec HIDAGENT_DEBUG=1, chaque exécution enregistre aussi un dossier contenant steps.jsonl, qui garde chaque appel au modèle et chaque action, et la capture que chaque appel a vue.
Les besoins matériels sont faibles. Il faut une carte ESP32-S3. L'auteur a testé la Seeed Studio XIAO ESP32S3 ordinaire, sans broches soudées, pas la version caméra Sense ni la Plus, à environ 7 dollars chez Seeed, et toute carte ESP32-S3 dont le port USB-C est relié à l'USB natif du S3 convient. Les iPhone USB-C se branchent directement, les modèles Lightning demandent un adaptateur Lightning vers USB pour appareil photo. L'ordinateur tourne sous macOS ou Linux, sur le même réseau que le téléphone, et exécute UxPlay et le serveur. Pour une installation entièrement locale, la configuration de développement de l'auteur utilise deux NVIDIA DGX Spark en parallélisme tensoriel (TP=2) pour servir nvidia/Qwen3.8-Flash-Next-NVFP4, à environ 1,3 seconde par action et 2 secondes par plan, mode réflexion désactivé.
Quelques points pour le lecteur. D'abord, tout cela est la description et les démonstrations du projet lui-même. Le README ne donne ni taux de réussite, ni taux d'échec, ni évaluation sur de nombreuses tâches : ne voyez pas une démonstration comme une preuve de fiabilité. Ensuite, l'agent contrôle tout un téléphone, il peut donc atteindre vos e-mails, votre banque et vos messageries, et avec un modèle cloud chaque capture part chez le fournisseur du modèle. Utilisez un téléphone de test, ne vous connectez pas à des comptes importants et gardez l'arrêt d'urgence à portée de main. Enfin, cela abaisse la barre de l'automatisation d'iPhone, et aussi celle du contrôle d'un téléphone par accès physique, ce qui est une commodité pour les testeurs et un risque que les spécialistes de la sécurité doivent considérer. Dans l'ensemble, c'est un petit projet astucieux qui mérite un essai, mais il est tout jeune.
Sources
FAQ
Comment « voit-il » et « agit-il » ?
Les yeux sont la recopie AirPlay : le téléphone envoie son écran à UxPlay sur votre ordinateur, et un pipeline GStreamer transforme le flux en images JPEG pour l'agent et la page web. Les mains sont un pont USB HID : un ESP32-S3 branché au téléphone se présente comme une souris et un clavier USB standard. Avec AssistiveTouch d'iOS activé, la souris déplace un pointeur à l'écran, donc un clic est une touche et un glissé un balayage. La carte se connecte à l'ordinateur en Wi-Fi et exécute de simples commandes par ligne comme move, click et type, et toute la logique reste sur l'ordinateur.
Comment l'agent s'assure-t-il de toucher au bon endroit ?
Le pointeur est relatif, donc le serveur suit sa position. Avant chaque touche, il agite le pointeur, le repère sur l'écran recopié et corrige l'écart, en affinant l'étalonnage au fil de l'eau. Après chaque action, il vérifie que l'écran a vraiment changé et le dit au modèle : une touche manquée est repérée et retentée au lieu de servir de base. Les actions répétées déclenchent un nouveau plan, et on se remet d'une liaison coupée ou d'une mauvaise réponse. Le cerveau a deux rôles : un planificateur écrit un court plan d'après l'objectif et l'écran, un acteur choisit l'action suivante d'après chaque nouvelle capture. Les deux peuvent être le même modèle.
Quel matériel faut-il, et quels sont les risques ?
Il faut une carte ESP32-S3. L'auteur a testé la Seeed Studio XIAO ESP32S3 ordinaire, à environ 7 dollars. Les iPhone USB-C se branchent directement, les modèles Lightning demandent un adaptateur. L'ordinateur tourne sous macOS ou Linux, sur le même réseau que le téléphone. Le modèle de vision peut être n'importe quelle API compatible OpenAI, dans le cloud ou en local. Côté risque : un agent qui peut piloter tout le téléphone peut atteindre tous vos comptes. La page web a un arrêt d'urgence, et Échap fonctionne aussi. Avec un modèle cloud, les captures vont au fournisseur du modèle. Le README ne donne aucune évaluation du taux de réussite : voyez les démonstrations comme une vitrine de l'auteur.