Ask a search-augmented assistant a question and it hands you an answer. What it does not hand you is the corpus it actually read to produce it — and on 14 August 2026, a real run proved that gap is not theoretical: given latitude to “plan before extracting,” a delegated model made twelve live web searches of its own, invisible in the final text, and answered from pages nobody had collected.
That is the problem Dinoer exists to close, not the one it exists to win on volume. What Dinoer actually competes on →
Before the name, the proof
The command below is the one you would type. The output is real — captured
on 15 August 2026, against https://example.com, run through the actual call
path (shot.py, Dinoer 1.0.0, guide-version 1.6). It is abridged: the
real answer carries more keys — DOM statistics, per-action latency, the
respectful-navigation counter. The keys are in French because the tool itself names them that way — not a translation left undone.
/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"}}
No PNG anywhere in that output. Not because one was stripped before
publishing it — because none was ever produced. --guide-version is not
decoration. Without it you get {"succes": false, "erreur": "guide_non_lu"}
and nothing else happens — how an agent proves it read the guide before
touching a live target. Why that lock exists →
What Dinoer is
Dinoer explores a large number of public sources and compiles a sourced, verifiable signal from them — on hardware as modest as a Raspberry Pi 5.
It is a fork of Diwall (visual browser automation for LLMs), stripped of its entire perception layer: zero screenshots, zero Set-of-Mark, zero vision model, ever. Dinoer never looks at a page — it reads it: DOM, accessibility tree, cleaned page text.
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 compete on A generalist search assistant with authenticated, cookie-backed engines behind it has structural reach a local, unauthenticated SearXNG instance does not — measured directly, not assumed. The measurement →
The corpus is the guarantee, not the answer
Every claim in a Dinoer report is attributable to a page actually collected
to disk (collecte.jsonl/operations.jsonl) — with zero dependency on
whatever a third-party search backend did while producing the answer.
opencode.jsonc denies the delegated model its own websearch/webfetch
tools, whatever the directory OpenCode is launched from; a direct check of the model’s full event stream during synthesis, not
just its final text, is what caught the 12-call leak above in the first
place and confirmed the fix.
{"id_campagne": "concerts-finistere-2026-07-28",
"cibles": [{"type": "query", "valeur": "concerts finistere sud ete"}],
"sujet_synthese": "concerts and festivals, south Finistère, summer 2026"}
That is most of a real manifest. campagne.py --manifeste manifeste.json
does the rest — quota-respecting collection, then a synthesized report you
can trace back to every source it used.
Sections
- GuidesInstall it, run it, launch a research campaign, write your own scenarios, set up the encrypted directory. Everything here is a command you can type.
- RecipesReal frictions from the retained browser core, sorted by the situation you are in. Written after being stuck, not before.
- PerceptionWhat a language model actually perceives of a web page when nothing is ever rendered to an image — general knowledge, useful even if you never install anything.
- Use casesHow far it actually goes, on four real cases. Proofs of reach, not tutorials for someone else's tool.
- ArchitectureWhy Dinoer is built the way it is: what it guarantees, what it refuses, and where its limits are — narrowed once already on real evidence.
- JournalDated records rather than claims: what changed, what real use taught us, and where the project's own positioning was rewritten on evidence.
- AgentsMachine entry point: llms.txt, instructions.md, and the one rule that will stop you if you skip it.
- The projectA fork of a browser-automation tool, narrowed to one question: can an agent's research be trusted, not just fast? Tested against that question directly — and the test did not go the way the fork expected.