A research assistant that searches the web gives you its answer, not the pages it read. On 14 August 2026, a model asked to write a report from a set of pages already collected made twelve web searches of its own. None of them showed in the report, and part of the answer came from pages nobody had collected. Only a record of every event the model emitted revealed them.
The tool on this site keeps the pages a report relies on on your disk, and forbids the model that writes the report to fetch any other. It does not try to find more pages than a web search assistant does. What it is for, and what it is not →
Before the name, the proof
A command and its real output, captured on 15 August 2026 against
https://example.com with Dinoer 1.0.0 and guide version 1.6. The output is
abridged: the full answer also carries DOM statistics, the duration of
each action and the navigation counter. The keys are in French because the
program names them that way.
/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"}}
The output contains no image, because Dinoer never produces one. Without
--guide-version, the program answers {"succes": false, "erreur": "guide_non_lu"} and does nothing else: an agent has to read the guide and
quote its version number before it can act on a page.
Why this lock →
What Dinoer is
Dinoer searches public sources, stores the pages it collects on your disk, and has a model write a report from those pages only. The list of sources at the end of the report is written by Dinoer, not by the model.
It is a fork of Diwall, a browser automation tool for language models that works from screenshots. Dinoer removed that layer entirely: no screenshot, no Set-of-Mark numbering, no vision model. It reads a page as text: the DOM, the accessibility tree, the cleaned text. It runs on Debian 13 and Ubuntu 24.04; the package has been installed and run on a Raspberry Pi 4 with 8 GB of memory.
Query → SearXNG discovery → lightweight HTTP collection
→ escalation to a real browser only for pages that need it
→ synthesis by a delegated LLM → dated, sourced Markdown report
What it does not do better A web search assistant backed by commercial, signed-in search engines finds pages that an unauthenticated SearXNG instance does not reach. Measured on 14 August 2026: the measurement →
The corpus is the guarantee, not the answer
Every page a campaign keeps is written to collecte.jsonl; every attempt,
successful or not, to operations.jsonl. The report is written from
collecte.jsonl alone: on every call, Dinoer forbids the model its
websearch and webfetch tools. One opening remains: the model keeps
bash, and one has already reached the web through curl.
What this covers and what it does not →
{"id_campagne": "concerts-finistere-2026-07-28",
"cibles": [{"type": "query", "valeur": "concerts finistere sud ete"}]}
A manifest needs only these two keys. campagne.py --manifeste manifeste.json collects the pages, pausing between requests, then writes
the report. Running a campaign →
Sections
- GuidesInstall Dinoer, run it, launch a research campaign, write scenarios, set up the encrypted directory. Each guide gives commands you can type.
- RecipesProblems met with the browser core, sorted by what you are seeing, each with its cause and its fix.
- PerceptionWhat a language model can perceive of a web page when nothing is rendered as an image: general knowledge, useful even if you never install Dinoer.
- Use casesFour kinds of task, what Dinoer does for each, and where it stops, with dated results where there are some.
- ArchitectureHow a research campaign runs, and what leaves your machine by which door, with the file of the code behind each line.
- JournalDated records: the development log, and what a real campaign could reach through unauthenticated discovery.
- AgentsThe entry point for language models: two files at the domain root, the lock that stops an agent that has not read the guide, and two rules to know first.
- The projectWhere Dinoer comes from, what it kept and what it removed, how a measurement on 14 August 2026 narrowed its claim about itself, and who builds it.