Agents
The 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.
If you are a language model reading this site, start here.
Two files at the domain root
/llms.txt: what Dinoer is, in a few lines./instructions.md: install, invoke, first calls.
Both are in English only. You read English, and a translated instruction file could drift from its original without anyone noticing.
The lock
shot.py and rpa.py refuse to run until you have read the guide and pass
its version number. Without it, the first call returns this (real output):
{"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
Once a number has been accepted, a marker in
~/.config/dinoer/guide_state.json spares you the question on that machine
until the guide changes version. The lock exists because Dinoer is not in your
training data: without the guide, a model invents commands that do not exist
and handles credentials in the shell.
Its limit: the lock is cooperative. A model that already holds the number from an earlier context can pass it without rereading the guide. It makes skipping the guide a deliberate act; it does not stop a model that invents the number.
What the guide contains
The full reference is
docs/GUIDE_LLM.md
and its three notices: interactions, sessions, monitoring. The research
pipeline (campagne.py) has its own section in the guide, which points to the
monitoring notice for the extraction method. The guide is held to 250 lines.
Two rules to know before reading
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"}: the value is resolved inside the browser process.
Dinoer refuses a scenario that fills a password field with a value written in
clear.
Do not presume a capability, in either direction. Dinoer has no
screenshot action and no vision model, in any mode, and it has actions you
would not guess, such as cliquer_iframe or attendre_mfa_ntfy. Check the
action tables or run --help; when in doubt, say not confirmed in the
documentation.
If your task is research, not a single page
Read the guide’s “Research pipeline” section before writing a manifest. To
question a corpus already collected, campagne.py --extraire-cible "<open question>" --id-campagne <id> works better with an open question than with a
narrow fact lookup: on a real campaign, the open phrasing drew richer answers
from the same pages. How the pipeline fits together →