Cloudflare a annoncé Kitesurf, un nouveau navigateur web fonctionnant entièrement sur la plateforme Workers et conçu spécialement pour les agents d’intelligence artificielle et les applications d’automatisation. Kitesurf est actuellement disponible gratuitement pendant la phase expérimentale via le produit Browser Run, avec des limites d’utilisation appliquées au niveau du compte.
Cloudflare affirme que les navigateurs traditionnels comme Chromium ont été conçus principalement pour les besoins humains et incluent donc des fonctionnalités ainsi qu’une consommation de ressources dont les modèles et les agents n’ont pas nécessairement besoin. Kitesurf se concentre plutôt sur le contenu lisible par machine, la taille des jetons, la capacité de contexte, l’évolutivité, les performances et le coût, en acceptant certains compromis concernant la précision du rendu visuel.
Un navigateur axé sur les besoins des agents
Un agent d’intelligence artificielle n’a généralement pas besoin d’onglets, d’attributs visuels, d’extensions ou de synchronisation entre appareils, mais il doit pouvoir extraire du HTML, capturer des captures d’écran et gérer des pages web à grande échelle et à faible coût. Les exigences de sécurité diffèrent également lorsque l’agent traite des pages et des sources non fiables, ce qui fait des risques tels que l’injection d’instructions et l’intégrité des outils des priorités.
Le développement de Kitesurf a commencé 12 semaines avant l’annonce, en tirant parti des évolutions de la plateforme destinée aux développeurs de Cloudflare, notamment la maturité de l’exécution de WebAssembly dans Workers, les isolats dynamiques, les Durable Objects reposant sur SQLite, le mécanisme RPC entre Workers, les Service Bindings, l’amélioration de la compatibilité avec Node.js et le relèvement des limites opérationnelles.
Une architecture isolée et sans état
Kitesurf se compose de trois éléments principaux : Engine, PageScript et PageRenderer. Engine est le seul composant exposé au public ; il gère les interfaces HTTP REST et WebSocket du protocole Chrome DevTools Protocol et conserve l’état de la session. Les autres composants sont, autant que possible, sans état, ce qui permet de les redémarrer ou de les supprimer en cas de panne et de les faire évoluer à la demande.
Le worker SandboxOutbound prend en charge toutes les communications avec Internet, tandis que les autres composants sont empêchés d’accéder directement au réseau par l’intermédiaire de Dynamic Workers. Ce composant applique les politiques CORS, ajoute des en-têtes similaires à ceux des navigateurs, filtre les réponses, isole les cookies pour chaque page et rejette les requêtes non conformes à la politique avec le code 403.
PageScript s’appuie sur des isolats distincts pour chaque page ou cadre intégré, en dehors du processus, et utilise des parties de Blitz ainsi que l’analyseur CSS Stylo, écrits en Rust. PageRenderer convertit les objets calculés de la page en images que le client peut afficher dans des formats tels que JPEG et PNG, ou en PDF. Pour gérer les défaillances, le système a été conçu de sorte qu’une erreur produise une image vide ou un élément manquant au lieu d’interrompre toute la session.
Résultats des tests et performances
Kitesurf passe actuellement plus de 215 000 tests issus de Web Platform Tests, avec l’ajout de centaines de tests réussis chaque semaine. La couverture est bonne dans des domaines importants pour les agents, notamment CSS, DOM, HTML, la sélection, SVG et XHR.
Lors d’une comparaison comprenant cinq exécutions intermédiaires d’actions rapides via Browser Run, sur un ensemble de 14 URL, Kitesurf a consommé environ 380 millisecondes de processeur pour capturer une capture d’écran, contre 1173 millisecondes pour Chromium. Il a également consommé 229 millisecondes pour extraire le HTML, contre 877 millisecondes. La consommation mémoire s’est élevée à 57,8 MiB pour la capture d’écran et à 39,4 MiB pour l’extraction du HTML, contre respectivement 271 et 273,7 MiB pour Chromium.
En revanche, Chromium était plus rapide en temps total : 637 millisecondes pour la capture d’écran, contre 1148 millisecondes pour Kitesurf, et 472 millisecondes pour l’extraction du HTML, contre 820 millisecondes. Cloudflare attribue cet écart à l’avantage du JIT dans Chromium ainsi qu’au coût du rendu logiciel et de l’encodage, tout en estimant que la réduction de la consommation mémoire et processeur, comprise entre trois et sept fois dans les tests mentionnés, est davantage liée au coût d’exploitation et à l’évolutivité.
Disponibilité et limites
Kitesurf peut être utilisé via un point de terminaison CDP dans Browser Run en ajoutant le paramètre browser=kitesurf. Il fonctionne également avec Puppeteer, Playwright, chrome-remote-interface et les outils d’agents utilisant MCP et CDP. Il est aussi disponible via Quick Actions, ainsi que dans un Playground public permettant de tester des URL et d’inspecter le DOM, les messages de la console, l’activité réseau et la consommation de WebAssembly.
Kitesurf convient aux agents qui doivent effectuer le rendu de pages, en extraire le contenu ou créer des fichiers PDF ou des captures d’écran, tout en acceptant son incompatibilité totale avec le navigateur Chromium. Il ne prend toutefois pas encore en charge la lecture vidéo, WebGL ni la gestion de la négociation des défis anti-robots au moyen de véritables empreintes TLS. Il n’est pas non plus adapté aux sessions authentifiées de longue durée nécessitant un état persistant. Cloudflare recommande de tester le site souhaité via les interfaces de Kitesurf ou le Playground, avec la possibilité d’utiliser Browser Run par défaut, fondé sur Chromium, lorsque cela est nécessaire.
Cloudflare travaille à étendre la couverture de CDP, à améliorer la précision du rendu des captures et des fichiers PDF, à accroître la compatibilité des tests WPT et à réduire la consommation de processeur et de mémoire ainsi que le temps total. L’entreprise a déclaré son intention d’ouvrir le code source de Kitesurf lorsqu’il sera prêt, afin de permettre aux clients de déployer leurs propres versions sur leurs comptes.