Technische Entscheidungen
Sieben Entscheidungen, die Dinoer prägen, jede mit dem dahinterliegenden Grund und dem Preis, der dafür gezahlt wird. Darunter auch eine, die durch eine tatsächliche Informationsleckage erzwungen wurde, am selben Tag, an dem sie entdeckt wurde.
Jede der folgenden Optionen hat einen Preis. Die Nennung des Nutzens ohne Angabe des Preises würde diese Seite zu einer Werbung machen, anstatt zu einem Dokument, das Sie bewerten können.
Text über Pixeln, ohne etwas zurückzuhalten
Diwall, das Tool, von dem Dinoer abgeleitet wurde, betrachtet Bilderkennung als eine Notlösung für Elemente ohne semantische Repräsentation. Dinoer behält diese Notlösung nicht: die gesamte Wahrnehmungsschicht – Screenshots, Set-of-Mark, das Bilderkennungsmodell – wurde bei einer kompletten Neuentwicklung entfernt und ist nicht optional. Es gibt keine Option, um sie wiederherzustellen.
Der Preis. Eine anklickbare Fläche oder ein Bild ohne zugängliche Beschriftung liegt außerhalb dessen, was Dinoer verarbeiten kann, Punkt. Das Tool, aus dem Dinoer abgeleitet wurde, könnte in solchen Fällen immer noch auf ein Vision-Modell zurückgreifen. Dieser Kompromiss wurde bewusst eingegangen: Die Aufgaben, die Dinoer bearbeitet – das Lesen und Zusammenfassen von öffentlich zugänglichen Texten –, erfordern dies nicht, und die Implementierung dieser Fähigkeit hätte unnötige Kosten verursacht (ein lokales Modell zum Ausführen, ein entferntes, mit dem man vorsichtig sein müsste) für eine Art von Seiten, die dieses Projekt nicht abdeckt.
Eskalieren Sie nur, wenn eine Seite es tatsächlich benötigt
campagne.py liest die meisten Seiten mit requests + BeautifulSoup – ohne Browser,
ohne JavaScript, zu einem Bruchteil der Kosten einer vollständigen Playwright-Sitzung. Eine Seite
wird nur dann an den behaltenden Browser-Kern (rpa.py/shot.py) weitergeleitet, wenn die
einfache Stufe sie als insuffisante_legere markiert – eine mit JavaScript gerenderte Oberfläche, bei der es nichts
im rohen HTML Lesbares gibt.
Der Preis. Der Auslöser für eine Eskalation basiert derzeit auf „leeren Textfeldern“ und nicht auf „Text, der zwar vorhanden ist, aber unbrauchbar“. Eine echte Kampagne fand zwei Seiten – ein GitHub-Profil, einen YouTube-Kanal – die Text zurückgaben und daher keine Eskalation auslösten. Dieser Text bestand jedoch nur aus Cookie-Banner-Inhalten und nichts anderem. Dies wird als eine tatsächliche, offene Schwachstelle in der Architektur dargestellt, nicht als eine versteckte. Der vollständige Fall →
Ein Prozess pro Aufruf, kein Server
Dinoer ist ein Befehl, kein Dienst. shot.py und rpa.py starten einen Playwright-
Prozess, führen das, was das Szenario vorschreibt, aus, antworten einmal und beenden sich: kein Skript
des Produkts lauscht auf einem Port zwischen zwei Aufrufen. Jeder Aufruf schreibt einen Eintrag in das
Betriebsjournal, Erfolg oder Fehler, und jeder Aufruf trifft auf die Leseschranke des Guides –
ohne ein gültiges --guide-version-Token oder eine lokale Markierung wird er
abgelehnt.
campagne.py hat eine andere Form: ein Prozess, der ein komplettes Manifest ausführt,
indem er seinen leichten Abruf im selben Prozess aufruft und rpa.py als Subprozess für die Seiten,
die einen Browser brauchen, und sich dann beendet. Was er von einem Schritt zum nächsten speichert, sind
Dateien: der Korpus, das Betriebsjournal und der Suchcache.
Der Preis. Der aktuelle Zustand der Seite bleibt nicht zwischen zwei Aufrufen erhalten. Cookies und
lokaler Speicher können gespeichert und wiederhergestellt werden (--sauver-session,
--reprendre-session); ein geöffnetes modales Fenster, ein halb ausgefülltes Formular oder eine Scrollposition
nicht. Eine Sequenz, die von einem solchen Zustand abhängt, muss in einem Szenario, in einem
Prozess ablaufen – das Rezept für verlorene Sitzungen
zeigt, wie das aussieht, wenn es nicht so ist.
Was diese Option nicht ändert. Der Transport entscheidet nicht, wo ein Geheimnis entschlüsselt wird: er findet innerhalb des Playwright-Prozesses statt, egal was ihn gestartet hat. Ein Protokoll entscheidet nichts; der Agent, der das Tool steuert, entscheidet. Und ein gehostetes Modell, das eine Ausgabe liest, empfängt sie, egal was sie dorthin gebracht hat.
Lokale Sammlung, eine delegierte Synthese – wählen Sie diese sorgfältig aus
Die Sammlung bleibt auf Ihrem Gerät: SearXNG (lokal oder remote, Ihre Wahl),
requests, und der beibehaltene Browser-Kern laufen alle dort, wo Dinoer läuft. Die Berichtserstellung erfolgt nicht lokal – sie wird an OpenCode oder ein lokales Ollama-Modell delegiert, und die kostenlosen Modelle von OpenCode sind das Standard-Reasoning-Backend. Der gesammelte Seitentext kann an jedes Backend weitergeleitet werden, das Sie konfigurieren.
Der Preis. Dies ist keine lokale Garantie für die gesamte Pipeline, und
diese Seite wird nicht so tun, als wäre es das. Wenn eine Quelle sensibel ist, prüfen Sie
lib/modeles.py und wählen Sie das Backend bewusst aus, bevor Sie Dinoer
darauf lenken – dieselbe Disziplin opencode.jsonc, die für den Zugriff auf Tools gilt,
gilt hier auch für das Ziel des Textes selbst.
Der Korpus ist das, was dem Modell erlaubt ist zu generieren – und es hat es trotzdem einmal getan
opencode.jsonc, projektlokal, verweigert dem delegierten Modell seine eigenen
websearch / webfetch Tools – und seit 1.0.1 wird dieselbe Verweigerung bei jedem opencode run, das Dinoer startet, in OPENCODE_CONFIG_CONTENT mitgegeben, unabhängig vom Verzeichnis. Es existiert, weil am 14. August 2026 eine echte
Kampagne das Modell dabei beobachtete, genau das zu tun, was es jetzt verneint: zwölf Live-Websuchen, die Inhalte beschaffen, die im gesammelten Korpus nicht vorhanden sind und in der endgültigen Antwort unsichtbar sind, und die nur durch Aufzeichnen des gesamten Ereignisstroms gefunden werden konnten, anstatt dem zurückgegebenen Text zu vertrauen.
Der Preis wird offen genannt und nicht versteckt. bash bleibt erlaubt – in einigen Szenarien ist das unbedingt erforderlich, um eine Benachrichtigung zu curl, und ein verweigertes Modell hat bei einem echten Verifizierungslauf stattdessen websearch über bash curl ins Live-Web gelangt. Keine wasserdichte Garantie. Eine reduzierte Oberfläche, und die ehrliche Art, dies einem Bediener zu beschreiben, ist genau dieser Ausdruck, nicht “eingeschränkt”.
Signale, niemals Urteile
Dinoer meldet, was es festgestellt hat, und lässt Sie entscheiden. etat.pret_a_agir: false
bedeutet eine Reibung wurde wahrgenommen – eine WAF-Signatur, ein Sitzungsdrift – nicht eine
Verweigerung der Funktion. Die Erkennung durch die WAF basiert auf Schlüsselwörtern und kann falsch sein; sie wird
als eine Zählung angezeigt, niemals als eine Ausnahme, die einen Vorgang stoppt.
Der Preis. Sie müssen die Antwort lesen. Ein Anrufer, der sich nur auf
succes konzentriert, profitiert nicht von einem dieser Signale.
Die Sperre, die Ihren ersten Lauf fehlschlagen lässt
Dinoer wird erst ausgeführt, wenn die Person, die es bedient, das Handbuch gelesen hat und dessen Versionsnummer nennen kann.
Dinoer ist in den Trainingsdaten keines der Modelle enthalten, und ein Modell, das die Anleitung nicht gelesen hat, improvisiert. Das ist keine Hypothese – es verursachte einen dokumentierten Sicherheitsverstoß im Vorgängerprojekt dieses Projekts, und diese Einschränkung ist die Lösung. Was Improvisation bedeutet und welche zwei Regeln sie verhindern →
Der Preis. Ihr erster Anruf schlägt fehl, absichtlich, mit
{"succes": false, "erreur": "guide_non_lu"}. Jeder dokumentierte Befehl
enthält --guide-version. Es ist Reibung, es ist gewollt.
Und es wird niemals übersetzt. Der Leitfaden existiert nur auf Englisch. Ein übersetzter Leitfaden kann stillschweigend unsynchronisiert werden – seine Versionsnummer wird mechanisch wieder synchronisiert, während sein Inhalt immer noch die vorherige Version beschreibt – und ein Agent umgeht dann die Sperre, indem er veraltete Anweisungen liest. Ein Modell liest Englisch nativ, und Englisch benötigt weniger Tokens: der Vorteil einer Übersetzung ist null, das Risiko ist real.
Kurz gesagt
- Keine Ausweichlösung für die Bilddarstellung, und zwar absichtlich – weder eine verkleinerte Version von Diwall, noch eine fehlende.
- Nur wenn die Basisversion eine Seite nicht darstellen kann, wird ein Browser verwendet.
- Ein Prozess pro Aufruf, kein Server – daher ist eine Sequenz, die den aktuellen Seitenzustand benötigt, ein möglicher Anwendungsfall.
- Die Datensammlung erfolgt lokal; die Synthese wird ausgelagert – prüfen Sie das Backend, bevor Sie eine sensible Quelle verwenden.
- Die Grenzen des Datensatzes werden durchgesetzt, nicht nur angenommen – und die tatsächlichen Lücken werden veröffentlicht, nicht kaschiert.
- Signale statt Urteile – Sie entscheiden, daher müssen Sie lesen.
- Der erste Durchlauf schlägt absichtlich fehl, und die Anleitung, die ihn ermöglicht, wird niemals übersetzt.