Diwall

Français
Télécharger 1.24.4

Choix techniques

Huit décisions qui ont façonné Diwall, chacune avec sa raison et ce qu’elle coûte. Y compris celle qui fait échouer votre première exécution, exprès.

Chaque choix ci-dessous coûte quelque chose. Énumérer l’avantage sans le prix ferait de cette page une publicité, et non un document que vous pouvez évaluer.

Un numéro plutôt qu’une description

Set-of-Mark numérote chaque élément interactif et renvoie ces numéros avec la capture. Agir, c’est désigner un numéro : {"id": 7}.

L’autre voie — demander à un modèle de décrire l’élément qu’il vise, ou de produire un sélecteur CSS à partir d’une image — fait porter l’identification au maillon le plus faible. Un numéro est sans ambiguïté par construction : trois boutons identiques reçoivent trois numéros différents.

Le prix. Les numéros sont calculés à chaque capture et bougent quand le document change. Un numéro vaut pour l’état dans lequel il a été lu, jamais d’une session à l’autre. Depuis la 1.24.0, la résolution garde un numéro attaché à son élément quand elle le peut : après une capture Set-of-Mark faite plus tôt dans le même scénario, elle passe par le marqueur data-dw-som-id que cette capture a posé ; sans elle, elle se replie sur une nouvelle indexation de la page en l’état. Tout désaccord entre les deux voies est signalé dans boussole.respect.som_derive_detectee, et --som-brut rétablit l’indexation seule. La recette Ça a cliqué, mais pas sur l’élément voulu le montre à l’œuvre.

Local par défaut, distant seulement si vous le demandez

L’analyse d’image se fait sur votre machine : --llm local, une instance Ollama sur localhost. --llm claude envoie plutôt l’image à une API distante — l’option existe, elle est documentée, et elle n’est jamais le défaut. Cela vaut pour l’analyse d’image que Diwall fait lui-même ; le modèle qui pilote Diwall lit la capture dans tous les cas, et ce qu’elle devient est expliqué dans Ce que Diwall ne fait pas dans votre dos.

La raison est simple : la capture d’écran d’une interface authentifiée est l’un des éléments les plus sensibles qu’un outil puisse produire. Là où elle part doit relever d’une décision, pas d’un réglage hérité.

Le prix. Les modèles de vision locaux sont plus petits que les modèles hébergés. Pour ce dont Diwall a réellement besoin — localiser un élément sans représentation sémantique —, cela a suffi. Pour un raisonnement visuel plus fin, c’est une vraie limite.

Une identité déclarée, pas un déguisement

Diwall ne se fait pas passer pour un navigateur humain par défaut. --stealth existe pour les cas où vous en décidez autrement ; il faut le demander, et la décision vous revient, parce que c’est vous qui répondez du trafic que vous envoyez.

Le prix, et il n’est pas mince. Certains sites refusent un agent qui s’annonce, là où ils auraient servi un navigateur qui ne disait rien. Un panel réel de 23 sites marchands : 39 % bloqués par un WAF. Voilà ce que coûte cette position, mesuré plutôt que supposé.

Ce que le web refuse →

Des signaux, jamais des verdicts

Diwall rapporte ce qu’il a remarqué et vous laisse décider. etat.pret_a_agir: false signifie j’ai remarqué quelque chose — une signature de WAF, une dérive de session — et non je refuse de fonctionner. La détection de WAF repose sur des mots-clés et peut se tromper ; elle est exposée sous forme de compteur, jamais comme une exception qui interrompt l’exécution.

La conception inverse — un outil qui bloque dès qu’il croit voir un problème — transforme chaque faux positif en panne, et apprend à ses utilisateurs à désactiver la vérification.

Le prix. Il faut lire la réponse. Un appelant qui ne regarde que succes ne tire aucun profit de ces signaux.

Le verrou qui fait échouer votre première exécution

Diwall refuse de s’exécuter tant que celui qui le pilote n’a pas lu le guide et ne peut pas en citer le numéro de version.

Diwall ne figure dans les données d’entraînement d’aucun modèle, et un modèle qui n’a pas lu le guide improvise. Ce n’est pas une hypothèse : cela a causé une faille de sécurité documentée, et ce verrou est la réponse. À quoi ressemble l’improvisation, et les deux règles qui l’empêchent →

Le prix. Votre premier appel échoue, exprès, avec {"succes": false, "erreur": "guide_non_lu"}. Chaque commande documentée porte --guide-version. C’est une friction, elle est voulue, et c’est la décision la plus contestée du projet.

Le guide n’est jamais traduit

La documentation destinée aux humains existe en quatre langues. Les guides que lisent les modèles n’existent qu’en anglais, et ce n’est pas un oubli.

Un guide traduit peut se désynchroniser sans bruit. Son numéro de version est recopié mécaniquement alors que son contenu en est encore à la version précédente — et un agent passe alors le verrou en ayant lu des instructions périmées. C’est exactement l’échec que le verrou doit empêcher, réintroduit par la traduction elle-même.

Un modèle lit l’anglais nativement, et l’anglais coûte moins de tokens : le bénéfice est nul, le risque est réel.

Le prix. Un opérateur qui ne lit pas l’anglais et veut comprendre ce qu’on a dit à son agent doit lire l’anglais. La documentation destinée aux humains comble ce manque ; le guide, non.

L’ordre est déclaré une seule fois

Le PDF de référence assemble plusieurs documents. Leur ordre est déclaré dans un manifeste, une seule fois, commun à toutes les langues — jamais déduit du système de fichiers.

Un ordre implicite n’est jamais l’ordre pédagogique : c’est ainsi qu’un manuel finit par présenter la désinstallation avant l’installation. Et si chaque traduction déclarait le sien, quatre PDF finiraient avec trois ordres différents, sans que personne ne s’en aperçoive avant qu’un lecteur suive le mauvais.

Tout document du périmètre qui ne figure ni dans l’ordre ni dans les exclusions motivées fait échouer la compilation. Bruyamment, plutôt que de disparaître du PDF en silence.

Un processus par appel, pas un serveur

Diwall est une commande que le modèle lance à chaque étape, pas un service auquel il se connecte. Entre deux appels, rien n’écoute. C’est la première question d’un ingénieur : pourquoi pas un serveur — qui parlerait un protocole comme MCP, par exemple ?

Ce que ce choix apporte : aucun service à l’écoute sur un port ; un appel, une entrée dans le journal des opérations ; le verrou --guide-version vérifié à chaque appel ; tout modèle capable de lancer une commande shell pilote Diwall, sans client de protocole à installer ; un scénario reste un fichier déclaratif, validé avant le lancement du navigateur.

Le prix. L’état vivant de la page ne survit pas entre deux appels. Les cookies et le stockage, si, par --sauver-session et --reprendre-session ; une case cochée ou un formulaire à moitié rempli, non. D’où la règle : une séquence avec état tient dans un seul scénario. → La session n’est pas conservée entre deux appels

Ce que ce choix ne change pas, parce que la question l’amène souvent :

  • Le transport ne décide pas où un identifiant est résolu. Une référence depuis_secrets resterait une référence avec n’importe quel protocole.
  • Un protocole ne décide de rien. C’est l’agent qui décide, dans les deux cas.
  • Un modèle hébergé qui lit la capture la reçoit, quel que soit ce qui la transporte.

En bref

  • Un numéro est sans ambiguïté ; une description ne l’est pas.
  • Local par défaut, parce que la capture d’une page authentifiée est sensible.
  • Une identité déclarée, et 39 % d’un panel réel l’ont refusée.
  • Des signaux plutôt que des verdicts : vous décidez, donc vous devez lire.
  • La première exécution échoue exprès, et c’est voulu.
  • Le guide n’est pas traduit, parce qu’une traduction périmée déjouerait le verrou.
  • L’ordre des documents est déclaré une seule fois, et un document oublié fait échouer la compilation.
  • Un processus par appel : rien n’écoute, et l’état de la page tient dans un seul scénario.