Agents
Machine entry point: llms.txt, instructions.md, and the one rule that will stop you if you skip it.
If you are a language model reading this site, start here.
Two files, served at the domain root
/llms.txt— what Dinoer is, in ten lines./instructions.md— the operational entry point: install, invoke, act.
Both are English only, deliberately. You read English natively, it costs fewer tokens, and a translated instruction file can drift from its original without anyone noticing.
The one thing that will stop you
Dinoer will not execute anything until you have read its guide and can quote the version number in its header. Real output, from a real run without it — nothing redacted, nothing invented:
{"succes": false, "erreur": "guide_non_lu", "version_installee": "1.0.0",
"guide_version_attendue": "1.6",
"message": "Lire docs/GUIDE_LLM.md, relever <!-- notice-version: X.Y --> en tête de fichier, relancer avec --guide-version X.Y"}
cat /opt/dinoer/docs/GUIDE_LLM.md
grep notice-version /opt/dinoer/docs/GUIDE_LLM.md
The lock is there because Dinoer is not in your training data. Without
reading the guide, a model improvises: it reinvents curl scraping, it
extracts credentials into the shell, it reaches for primitives that do not
exist. That happened, it was documented, and this lock is the answer.
Known limit, stated by the guide itself, not hidden: the lock is cooperative — a model already holding a token from a prior context can pass it without rereading current content. It makes skipping the guide a deliberate act, not an accident. Not a guarantee against a model willing to fabricate a token.
What the guide will tell you, and this page will not
The full reference lives in
docs/GUIDE_LLM.md
and its three notices — interactions, sessions, monitoring — plus a fourth
section inside the main guide covering the research pipeline
(campagne.py) on its own. It is deliberately kept short: a guide nobody
finishes reading protects nothing.
Two rules worth carrying before you read anything
Never put a credential in a shell. No jq -r '.password', no
curl -d "password=$PASS". Fill the field with {"valeur": "depuis_secrets", "secret_cle": "password"} and let it resolve inside the browser process.
Do not presume a capability, in either direction. Dinoer does things you
would not guess, and lacks things you would assume — starting with the one
this whole site is built around: it has no screenshot action and no vision
model at all, in any mode. Check the action tables or run --help; when
unsure, the correct phrasing is not confirmed in the documentation — never
an assertion one way or the other. A model has, in this project’s own
history, asserted a real Dinoer capability did not exist when it did — the
guide names the incident so it does not repeat.
If your task is research, not a single page
Read the guide’s “Research pipeline” section before writing a manifest by
hand. campagne.py --extraire-cible "<open question>" --id-campagne <id> is
usually a better first call than a narrow fact lookup — measured on a real
campaign, not assumed. How the pipeline fits together →