Dinoer

Un assistant qui cherche sur le web vous donne sa réponse, pas les pages qu’il a lues. Le 14 août 2026, un modèle chargé de rédiger un rapport à partir de pages déjà collectées a lancé de lui-même douze recherches sur le web. Aucune n’apparaissait dans le rapport, et une partie de la réponse venait de pages que personne n’avait collectées. Seul l’enregistrement de tous les événements émis par le modèle les a révélées.

L’outil présenté ici garde sur votre disque les pages dont dépend un rapport, et interdit au modèle qui le rédige d’en chercher d’autres. Il ne cherche pas à trouver plus de pages qu’un assistant de recherche web. À quoi il sert, et à quoi il ne sert pas →

Avant le nom, la preuve

Une commande et sa sortie réelle, relevée le 15 août 2026 sur https://example.com avec Dinoer 1.0.0 et le guide en version 1.6. La sortie est abrégée : la réponse complète contient aussi des statistiques du DOM, la durée de chaque action et le compteur de navigation. Les clés sont en français parce que le programme les nomme ainsi.

/opt/dinoer/venv/bin/python3 /opt/dinoer/shot.py \
  --url https://example.com --a11y --guide-version 1.6
{"succes": true, "http_status": 200,
 "a11y_tree": "- heading \"Example Domain\" [level=1]\n- paragraph: This domain is for use in documentation examples…\n- paragraph:\n  - link \"Learn more\":\n    - /url: https://iana.org/domains/example",
 "boussole": {"titre_page": "Example Domain", "dernier_code_http": 200,
              "respect": {"actions_executees": 0, "duree_totale_ms": 2910}},
 "etat": {"pret_a_agir": true, "niveau_confiance": "eleve"}}

La sortie ne contient aucune image : Dinoer n’en produit jamais. Sans --guide-version, le programme répond {"succes": false, "erreur": "guide_non_lu"} et ne fait rien d’autre : un agent doit avoir lu le guide et en citer le numéro de version avant d’agir sur une page. Pourquoi ce verrou →

Ce qu’est Dinoer

Dinoer interroge des sources publiques, enregistre sur votre disque les pages qu’il collecte, et fait rédiger par un modèle un rapport fondé sur ces seules pages. La liste des sources, en fin de rapport, est écrite par Dinoer, pas par le modèle.

C’est une dérivation de Diwall, un outil d’automatisation de navigateur pour modèles de langage qui travaille sur des captures d’écran. Dinoer a retiré toute cette couche : ni capture, ni numérotation Set-of-Mark, ni modèle de vision. Il lit une page comme du texte : le DOM, l’arbre d’accessibilité, le texte nettoyé. Il fonctionne sous Debian 13 et Ubuntu 24.04 ; le paquet a été installé et exécuté sur un Raspberry Pi 4 doté de 8 Go de mémoire.

Requête → découverte par SearXNG → collecte HTTP légère
        → navigateur réel seulement pour les pages qui l'exigent
        → rédaction par un LLM délégué → rapport Markdown daté et sourcé

Ce qu’il ne fait pas mieux Un assistant de recherche web adossé à des moteurs commerciaux, avec compte et cookies, trouve des pages qu’une instance SearXNG sans authentification n’atteint pas. Mesuré le 14 août 2026 : la mesure →

Le corpus est la garantie, pas la réponse

Chaque page retenue par une campagne est écrite dans collecte.jsonl ; chaque tentative, réussie ou non, dans operations.jsonl. Le rapport est rédigé à partir de collecte.jsonl seulement : à chaque appel, Dinoer retire au modèle ses outils websearch et webfetch. Une ouverture subsiste : le modèle garde bash, et l’un d’eux a déjà atteint le web par curl. Ce que cela couvre, et ce que cela ne couvre pas →

{"id_campagne": "concerts-finistere-2026-07-28",
 "cibles": [{"type": "query", "valeur": "concerts finistere sud ete"}]}

Un manifeste n’exige que ces deux clés. campagne.py --manifeste manifeste.json collecte les pages, avec une pause entre deux requêtes, puis rédige le rapport. Lancer une campagne →

Comment Dinoer lit une page →

Rubriques