Le projet
Une version dérivée d'un outil d'automatisation de navigateur, réduite à une seule question : la recherche effectuée par un agent peut-elle être considérée comme fiable, et pas seulement rapide ? Ceci a été testé directement, et le résultat du test n'a pas correspondu aux attentes de cette version dérivée.
Dinoer a débuté comme une version modifiée de Diwall 1.21.0 (25 juillet 2026, ultérieurement reconstruit le 9 août 2026 à partir de Diwall 1.23.0) — un outil d’automatisation visuelle pour les LLM, dont le cœur de l’exécution de ce projet entier est toujours issu. Ce qu’il a conservé : la capacité de naviguer, de remplir des champs, de cliquer, d’attendre et de résoudre une authentification dans le processus du navigateur. Ce qui a été complètement supprimé lors d’une reconstruction complète le 9 août 2026 : les captures d’écran, Set-of-Mark, le modèle de vision — toute la couche qui permettait à un modèle de voir une page.
Le pari était que le modèle n’a pas besoin de “voir” une page pour l’utiliser, mais seulement pour la lire. Ce qui suit est ce qu’il a fallu faire pour déterminer si ce pari était gagnant.
La forme de son développement
Trois étapes, et la troisième est celle qui a modifié la propre affirmation du projet sur lui-même.
La fonctionnalité de “réduction” est apparue en premier. La couche de perception a été supprimée, et non remplacée —
extraire_texte (11 août) a comblé le seul réel manque qu’elle laissait, un moyen de lire le texte nettoyé d’une
page lorsque l’arborescence d’accessibilité seule ne suffisait pas.
La construction du pipeline de recherche comprenait : campagne.py l’orchestration
de la découverte SearXNG, une collecte HTTP légère, le passage au navigateur
principal uniquement lorsque cela était nécessaire pour une page, et un LLM délégué rédigeant le rapport final. Une véritable campagne territoriale (11-12 août) a démontré la version naïve de cette dernière étape : concaténer le corpus, tronquer à 60 000 caractères, ce qui supprimait silencieusement les pages les plus pertinentes dans un grand corpus. Le préfiltrage temporel et le classement sémantique ont corrigé cela, en se basant sur le même corpus plutôt que sur des hypothèses fixes.
La véritable épreuve de la thèse est venue en dernier, et c’est la partie la plus importante. Le 14 août, une exécution réelle a surpris le modèle délégué en train d’effectuer douze recherches web de son propre chef — une vraie brèche de confinement, refermée le jour même par un opencode.jsonc propre au projet, avec la brèche résiduelle (un modèle privé de websearch atteignant curl via bash à la place) documentée plutôt que dissimulée. Quelques heures plus tard, une véritable confrontation directe contre une seule requête Perplexity non préparée a révélé trois pages que la découverte de Dinoer, pilotée par SearXNG, n’avait jamais fait remonter — pas un bug, une différence structurelle de portée entre un moteur de recherche commercial authentifié et un moteur local, non authentifié. L’affirmation du projet sur lui-même a été réécrite ce soir-là même, sur place, pas ajoutée sous l’ancienne : non pas « bat la recherche généraliste », mais « une synthèse traçable et reproductible d’un corpus verrouillé ». Le test complet →
Trois choses qui n’ont pas changé, et une qui l’a fait
Il fonctionne sur votre machine. La collection, les identifiants, le répertoire chiffré : par défaut, cela n’a jamais été différent. La recherche est déléguée à une instance SearXNG que vous spécifiez, locale ou distante ; la synthèse est déléguée à un modèle que vous configurez. Ni l’un ni l’autre ne sont propres à Dinoer.
Cela dit ce que c’est. La doctrine de navigation respectueuse, héritée de Diwall, reste inchangée : une identité déclarée par défaut, un passage comptabilisé, et aucune tentative de contourner un site qui ferme ses portes.
Les modifications apportées : L’agent de Diwall ne prend de décisions que sur la base de ce qui est indiqué dans un fichier de scénario. La chaîne de recherche de Dinoer délègue le jugement interprétatif réel à un modèle — ce qui constitue une correspondance, comment regrouper les événements dupliqués entre les pages —, contenu dans opencode.jsonc, et non éliminé. Indiquer précisément la lacune, plutôt que de prétendre qu’il existe quelque chose qui n’existe pas, est la position que ce projet adopte.
Le journal des développements
Continu, daté, ordre inverse chronologique — y compris l’inversion ci-dessus, écrit le soir où cela s’est produit. Un récit rétrospectif l’aurait simplifié en une ligne droite ; le journal ne le fait pas.
Qui le construit ?
Trois participants, avec des rôles distincts, ont exprimé leurs opinions de manière claire plutôt que d’être uniformisés en une seule voix.
Ronan Davalan — architecte et arbitre : vision produit, exigences de sécurité, orientation. Chaque décision architecturale est validée par lui.
Claude Code (Anthropic) — ingénieur système et développeur principal : version modifiée du cœur d’exécution de Diwall, la chaîne de recherche (campagne.py,
lib/searxng.py, lib/fetch_leger.py, lib/selection_candidats.py, lib/extraction.py,
lib/tables_reference.py, lib/cache_recherche.py), suppression de la
couche de perception. Auteur principal du code source.
Gemini (Google) — synthétiseur et conseiller stratégique : analyse architecturale indépendante, validation croisée des décisions techniques, résolution de conflits logiques.
Où en est-il maintenant ?
Quatre outils (shot.py, rpa.py, campagne.py, journal.py), un répertoire de crédentielles chiffré, des scénarios validés par rapport à un schéma avant que le navigateur ne démarre, quatre langues de documentation. Un paquet .deb et une installation via git-clone, les deux étant maintenus — voir Téléchargements.
Et une position qui s’est déjà rétrécie, sur la base de preuves réelles, et qui va se rétrécir ou s’élargir à nouveau de la même manière — pas par intuition.