Edge = IA · Chrome = Humain · v2.5.2

Surf CLI

Contrôle navigateur via la ligne de commande.
Edge dédié à l'IA — Chrome reste votre espace humain.

Installation → GitHub ↗ Notre Skill ↗
zsh — Edge
$ surf window.new "https://app.bnb.re" ✓ Window opened in Edge $ surf read --depth 3 --compact ✓ 42 interactive elements found $ surf locate.role button --name "Connexion" --action click ✓ Clicked button "Connexion" $ surf network --origin api.bnb.re --format curl ✓ 3 requests → curl commands ready

C'est quoi Surf ?

Un outil CLI qui permet à n'importe quel agent — Claude Code, GPT, Cursor, ou un script shell — de piloter un navigateur via des commandes. Chez nous : Edge pour l'IA, Chrome pour l'humain.

🔓

Agent-agnostique

Pas lié à un fournisseur IA. Ce sont juste des commandes CLI utilisables par n'importe quel outil.

Zero config

Pas de serveur MCP/relay. Extension + native host sur Edge, puis surf <cmd> et c'est parti.

🎯

Interactions sémantiques

Basé sur l'arbre d'accessibilité avec des locators locate.role, locate.text, locate.label.

🪙

Token-friendly

Options --depth et --compact pour réduire le bruit. Screenshots redimensionnés par défaut.

🌐

Capture réseau + curl

Interceptez XHR/fetch, filtrez par domaine, et générez des commandes curl reproductibles.

📱

Émulation device

Test responsive sur iPhone, Pixel, iPad. Émulation réseau 3G, throttling CPU, géolocalisation.

🧠

Convention BNB

Séparation claire des contextes pour ne jamais être perturbé :

🤖
Edge = IA & Automation

Surf CLI tourne ici. Dédié aux agents, scripts, Claude Code. Session isolée, aucun cookie perso.

👤
Chrome = Humain

Votre navigation habituelle. Aucune extension Surf, aucun agent. Votre espace reste intact.

Comment ça marche

Trois composants qui communiquent pour vous donner le contrôle total d'Edge.

💻

CLI surf

Vos commandes

🔌

Native Host

Pont système

🧩

Extension

Chargée dans Edge

🌍

Page Web

Arbre d'accessibilité

Les interactions passent par l'arbre d'accessibilité avec des références stables (e1, e2…) et des locators sémantiques — bien plus fiable que les sélecteurs CSS.

Quick Start

5 étapes pour être opérationnel. Pré-requis : Node.js et Microsoft Edge (navigateur IA dédié chez BNB).

1

Installer le CLI

bash
npm install -g surf-cli
2

Récupérer le chemin de l'extension

bash
surf extension-path
3

Charger l'extension dans Edge

Ouvrir edge://extensions → Activer Developer mode → Load unpacked → Coller le chemin.

4

Installer le native host pour Edge

L'extension ID se trouve dans edge://extensions.

bash
surf install <extension-id> --browser edge
5

Redémarrer Edge et tester

bash
surf tab.list

Commandes essentielles

Les commandes les plus utilisées. La référence complète (80+ commandes) est dans commands-reference.md sur Git.

🧭 Navigation

surf go "<url>"Naviguer vers une URL
surf back / forwardHistorique navigateur
surf tab.reload --hardHard refresh
surf page.stateÉtat courant (modals, loading…)

📖 Lecture

surf read --depth 3 --compactArbre d'accessibilité réduit, LLM-friendly
surf page.textTexte brut uniquement
surf search "<terme>"Recherche dans la page

🎯 Locators sémantiques RECOMMANDÉ

surf locate.role button --name "…" --action clickPar rôle ARIA
surf locate.text "…" --action clickPar contenu textuel
surf locate.label "…" --action fill --value "…"Par label de champ

🖱️ Interaction

surf click eNCliquer par ref
surf type "…" --submitTaper et soumettre
surf form.fillRemplir plusieurs champs en batch
surf select eN "valeur"Dropdown

🌐 Réseau

surf network --urlsURLs capturées
surf network --origin <dom> --format curlCurl filtré par domaine
surf network.curl <id>Curl d'une requête spécifique
surf network.originsDomaines contactés + stats

📱 Émulation & Performance

surf emulate.device "iPhone 14"Émuler un device mobile
surf emulate.network "3g"Conditions réseau dégradées
surf perf.start / perf.stopTrace de performance
surf consoleMessages console du navigateur

🪟 Fenêtres & Attentes

surf window.new "<url>"Nouvelle fenêtre isolée
surf frame.list / frame.switchGérer les iframes
surf wait.network / wait.elementAttentes intelligentes
surf snap --annotateScreenshot annoté

En pratique

Chaque cas d'usage est documenté en détail dans le skill. Voici la vue d'ensemble.

01
QA / Support

Reproduction de bug

Rejouer un parcours utilisateur, capturer screenshot annoté, logs console, état du DOM. Livrable : étapes précises + hypothèse.

window.newread → login → actions → snap --annotate + console
02
Frontend

Design Debugging

Inspecter styles calculés, comparer desktop vs mobile via émulation. Pas besoin d'ouvrir le DevTools.

read → repérer eN → element.styles eNemulate.device → compare
03
Backend

Reverse API / curl

Capturer les appels XHR/fetch, filtrer par domaine, générer des curl reproductibles. Idéal pour debug ou bootstrap Postman.

network.clear → navigation → network --origin api.x.com --format curl
04
Automation

Locators sémantiques

Automatiser sans sélecteurs CSS fragiles. Rôle ARIA, texte visible, label de champ — résiste aux changements de markup.

locate.label "Email" → locate.role button → locate.text "Submit"
05
Responsive

Émulation device

Tester iPhone, Pixel, iPad, conditions 3G, throttling CPU. Screenshots comparatifs par breakpoint.

emulate.device "iPhone 14"snapemulate.device "iPad Pro"snap
06
DevOps

Smoke Testing

Vérifier qu'une liste d'URLs est accessible post-déploiement. Détecter erreurs console et éléments manquants.

go url → page.statewait.element ".widget" → console
07
Data

Formulaires en batch

Remplir des formulaires via labels, gérer dropdowns, checkboxes, uploads. form.fill pour le batch.

locate.label champs → select dropdown → locate.role submit
08
⚠ Prudence

IA via sessions browser

Utiliser ChatGPT/Gemini/Perplexity/Grok via sessions connectées. Sans API key. Attention : confidentialité.

surf chatgpt "résume" --with-page · surf gemini "analyse" --file data.csv

Exemples d'invocation /surf

Le plus simple : /surf suivi d'une description en langage naturel de ce que vous voulez faire dans le navigateur.

QA
/surf Reproduis le bug de la page login sur https://staging.monapp.fr — le bouton Submit ne répond pas après une erreur de validation
QA
/surf Va sur https://staging.monapp.fr/dashboard et vérifie que le graphique se charge correctement
API
/surf Va sur https://app.bnb.re/users, capture les appels API qui chargent la liste et génère les curls
API
/surf Navigue sur le backoffice, fais une recherche client, et montre-moi le curl de l'appel de recherche
CSS
/surf Inspecte le bouton CTA de https://monsite.fr/pricing — je veux connaître la font, la couleur et le padding
Mobile
/surf Teste https://monsite.fr sur iPhone 14 et iPad Pro, prends des screenshots pour comparer
Smoke
/surf Vérifie que ces pages sont accessibles après le déploiement : /login, /dashboard, /settings
Form
/surf Remplis le formulaire de contact sur https://monsite.fr/contact avec des données de test

Le Skill /surf

Le skill encapsule les bonnes pratiques, les playbooks, et les 8 use cases documentés. Il est versionné dans notre repo Git.

git.bnb.re/jgaulin/claude-clode-env/.../skills/surf
📐 Structure du skill
Nom
surf — invoqué via /surf dans Claude Code
Navigateur
Edge uniquement (convention BNB : Edge = IA, Chrome = humain)
7 règles d'or
Isoler la session · Lire avant d'agir · Locators sémantiques · Snap après action · Réduire le bruit · Masquer les secrets · Gérer les erreurs (--auto-capture, --soft-fail)
4 playbooks
(A) Ouvrir et comprendre — window.newpage.stateread --compact
(B) Action robuste — locate.role / locate.labelkey Enter
(C) Debug UI — readelement.styles eN
(D) Extraire API — network --urlsnetwork --origin … --format curl
8 use cases
Chacun documenté dans un fichier dédié :
uc-qa-bug-repro.mduc-design-debug.mduc-network-reverse.mduc-semantic-automation.mduc-device-emulation.mduc-smoke-testing.mduc-form-automation.mduc-ai-sessions.md
Référence
commands-reference.md — 80+ commandes documentées (v2.5.2)
Output attendu
1. Plan d'action (3-8 étapes) → 2. Exécution des commandes surf → 3. Résumé + next step

Bonnes pratiques

Règles à suivre pour un usage sûr et efficace en équipe.

🤖

Edge = navigateur IA

Surf tourne exclusivement sur Edge. Chrome reste votre espace humain, sans extension ni agent.

🪟

Fenêtres isolées

Systématiquement surf window.new pour ne pas perturber votre travail.

🔇

Réduction de bruit

--depth 3 --compact par défaut. Montez la profondeur seulement si besoin.

🔒

Secrets & tokens

La capture réseau peut exposer des tokens. Ne les collez jamais dans un ticket public ou un commit.

🛡️

Auto-capture & soft-fail

Utilisez --auto-capture pour le debug automatique et --soft-fail pour les commandes non critiques.

👥

Pairing au démarrage

Au début, utilisez Surf en binôme (1 pilote / 1 observe) pour monter en compétence.

Troubleshooting

Les problèmes les plus courants et leurs solutions rapides.

surf tab.list ne voit rien

Vérifiez que l'extension est chargée dans edge://extensions, que surf install <extension-id> --browser edge a été exécuté, puis redémarrez Edge. Le native host nécessite un restart complet.

La page est trop grosse pour un LLM

Utilisez surf read --depth 2 --compact. Si vous n'avez besoin que du texte visible, surf page.text est votre meilleur allié.

Les locators ne trouvent pas l'élément

Les refs changent selon le frame actif. Refaites surf read, puis vérifiez avec surf frame.list. Si l'élément est dans un iframe, faites surf frame.switch --index N.

Timeout ou pas de réponse

Vérifiez surf health et que Edge est au premier plan. Le native host peut perdre la connexion si le navigateur a été minimisé trop longtemps.

Comment désinstaller Surf ?

surf uninstall pour Edge, ou surf uninstall --all pour tous les navigateurs. Retirez ensuite l'extension depuis edge://extensions.