Respectful navigation
An agent crossing a public site spends resources that belong to someone else. Dinoer counts its own passage and reports it — and a campaign spaces its own requests deliberately, on both the search and the collection side.
An agent that crosses a public website spends resources belonging to someone else. Dinoer starts from there, inherited unchanged from the browser core it forked and extended to the research pipeline layered on top of it.
It moves at the pace you set, not at the maximum pace the machine allows. It presents itself for what it is, without borrowing the identity of a human browser. It counts its own pages and its own actions, and returns that count in every answer — you always know what it cost the target.
This measurement is not a leash: you remain free to set it. It is an honest counter, kept by the tool itself, on its own passage.
What the counter actually contains
Every run returns a respect block, at the root of the JSON and inside the
compass — real output, from a run against https://example.com:
"respect": {"pages_visitees": 0, "actions_executees": 1,
"duree_totale_ms": 1981, "indice_agressivite": 0.0}
One field deserves a warning, because its name promises more than it counts.
pages_visitees counts naviguer actions only — the initial URL of a
run is not one. A run that loads a page and reads it therefore reports 0,
which is correct and looks wrong. If you want the total including the first
load, add one.
We would rather write that sentence than let you discover it against a number you trusted.
The same doctrine, at campaign scale
A single shot.py call spaces its own actions. campagne.py has a second,
independent obligation: spacing the SearXNG queries themselves, not only
the page fetches that follow them. A real campaign found the gap the hard
way — a burst of discovery and collection queries fired back-to-back got the
SearXNG instance’s own upstream engines to suspend it for rate-limiting. A
time.sleep() call now runs at every rechercher() call site, not only
between retained page fetches.
Freshness is the other half of the same doctrine: a campaign will not re-crawl a page inside a configurable window (30 days by default) just because a later target happens to reference it again.
Declared identity
Dinoer does not pretend to be a human browser by default. That is a stated position, not a technical limitation — and it has a price: some sites refuse an agent that announces itself, where they would have served a browser that said nothing.
That price is ours to pay, not yours to discover. A --stealth option exists
for the cases where you decide otherwise; it is opt-in, and it is your call,
because you are the one accountable for the traffic you send.