12 KiB
Moli
English | 简体中文 | 日本語 | Deutsch | Français | Español
Moli ist ein Headless-Browser für KI-Agenten, der nach dem Prinzip „Rendering bei Bedarf“ entwickelt wurde und bereits produktionsreif ist.
Sie führt standardmäßig echtes JavaScript aus, verwaltet ein echtes DOM und stellt echte Browser-APIs bereit. Layoutberechnungen oder das Rendern von Pixeln erfolgen jedoch nur, wenn sie tatsächlich benötigt werden.
Moli kann über die CLI, CDP, WebDriver Classic oder WebDriver BiDi genutzt werden.
Demo
Ein von Moli gerendertes und live mit Chrome DevTools untersuchtes HTML5-Spiel.
Die von Moli gerenderte Website rust-lang.org, deren Live-DOM, CSS und Geometrie in Chrome DevTools verfügbar sind.
Schnellstart
Gib deinem KI-Coding-Agenten diese Anweisung:
Installiere die skills unter
https://github.com/lexmount/moli/tree/main/skills, folge ihren Anweisungen zum Herunterladen und Installieren des neuesten vorkompilierten Moli-Binarys, rufe anschließend mitmoli-webfetchdie Seitehttps://example.comab und zeige mir das Ergebnis.
CLI-Verwendung
Eine Seite extrahieren
Die Seite mit Molis standardmäßiger Abschlussstrategie als Markdown rendern:
moli fetch \
--dump markdown \
--wait-until done \
https://example.com
Alternativ direkt einen kompakten, modellfreundlichen semantischen Baum zurückgeben:
moli fetch \
--dump semantic_tree_text \
--wait-selector body \
https://example.com
fetch --help zeigt die vollständige Parameterliste, darunter Ausgabeformate, Wartebedingungen für das Laden von Seiten und für Antworten, Profile, Proxy-Einstellungen, Ressourcenrichtlinien und Tracing-Optionen.
Den Automatisierungsserver starten
# Einfacher Automatisierungsserver für DOM-orientierte Workloads
moli serve
# Echte Geometrie, Koordinateneingaben sowie Screenshot-/Screencast-Funktionen aktivieren
moli serve --layout
# Zusätzlich optionale Bild-, Schrift-, Audio-, Video-, Medien- und Textspurressourcen abrufen
moli serve --layout --resource
Derselbe Endpunkt stellt alle drei Protokolle bereit: CDP, WebDriver Classic und WebDriver BiDi. Playwright kann sich direkt über CDP verbinden:
import { chromium } from "playwright";
const browser = await chromium.connectOverCDP("http://127.0.0.1:9222");
const context = browser.contexts()[0];
const page = context.pages()[0] ?? await context.newPage();
await page.goto("https://example.com");
console.log(await page.locator("body").innerText());
await browser.close();
Warum Moli?
Für Agenten-Workloads sind drei Eigenschaften besonders wichtig, und Moli vereint sie:
- Vollständig — echtes JavaScript, DOM, CSS, Netzwerk, Speicher, Layout, Screenshots und Standard-Automatisierungsprotokolle, alles in einem einzigen Headless-Browser integriert.
- Schnell — die meisten Automatisierungsanfragen benötigen überhaupt kein visuelles Rendering; strukturorientierte Vorgänge überspringen Layout und Zeichnen deshalb vollständig.
- Ressourceneffizient — Layout und Pixel entstehen nur bei Bedarf. Moli muss daher keinen vollständig gerenderten visuellen Zustand dauerhaft pflegen und aktualisieren.
Was die meisten Browserautomatisierungen wirklich benötigen, ist die Seitenstruktur und keine kontinuierlich gerenderte visuelle Welt. Moli behandelt das native DOM und den Stilzustand als einzige maßgebliche Datenquelle und löst Layout oder Software-Zeichnung nur bei Vorgängen aus, die diese Berechnungen tatsächlich benötigen.
| Agentenanfrage | Verhalten von Moli |
|---|---|
| HTML/Markdown extrahieren, DOM abfragen, JS ausführen, Netzwerk/Speicher untersuchen | Liest den Zustand der Browser-Laufzeit direkt aus — löst weder Layout noch Zeichnen aus |
| Begrenzungsrahmen eines Elements lesen, Koordinaten testen, Koordinateneingaben senden | Führt eine Layoutberechnung aus und behält nur den neuesten Geometrie-Snapshot |
| Screenshot aufnehmen oder Screencast aktualisieren | Baut aus dem aktuellen DOM/Stil neu auf, rendert einen neuen Frame und verwirft ihn nach Gebrauch |
Moli enthält weiterhin den vollständigen Funktionsumfang mit V8, CSS, Layout, Textsatz, Treffertests, Software-Zeichnung und mehr. Der einzige Unterschied liegt darin, wann visuelle Arbeit ausgeführt und wie lange ihr Ergebnis vorgehalten wird. Dieses Kostenmodell eignet sich besonders für Crawling, Browser-Agenten, Retrieval-Pipelines, Evaluierungsumgebungen und Reinforcement-Learning-Workloads.
Derzeit unterstützte Funktionen
- Vollständige Web-Laufzeit — Streaming-HTML-Parsing, natives DOM, V8 JavaScript, Module/Timer/Microtasks/Events, iframes und Worker, CSS-Kaskade, Fetch/XHR/WebSocket, Cookies, WebCrypto und profilspezifischer Speicher (localStorage, IndexedDB, OPFS).
- Für Extraktion optimierte Ausgaben — die CLI gibt HTML, Markdown, JSON, semantische Textbäume und framebewusste Serialisierung direkt aus und unterstützt das Warten auf Selektoren/Skripte/Antworten sowie Netzwerk-Tracing.
- Einheitliches Automatisierungsprogramm — CDP, WebDriver Classic und WebDriver BiDi verwenden denselben Kernel und Scheduler. Eine separate Installation von ChromeDriver, geckodriver oder einem Browser ist nicht erforderlich.
- Echte visuelle Funktionen bei Bedarf —
--layoutaktiviert die vollständige Box-Konstruktion, Taffy-Layout, Parley-Textsatz, layoutgestützte Treffertests/Eingaben, Viewport-Screenshots und niedrigfrequente, CPU-gerenderte DevTools-Screencasts. - Kontrollierbare Betriebsoptionen — Profile, Cookies, HTTP-Cache, Proxys, Ressourcengruppen, Verbindungslimits, Zeitüberschreitungen, Richtlinien für private Netzwerke, User-Agent-Überschreibungen, strukturierte Protokollierung und Netzwerkdiagnose sind vollständig verfügbar.
Die Beziehung zwischen Moli und Lexmount
Moli ist der Open-Source-Headless-Browser von Lexmount; Lexmount Browser ist die darum herum aufgebaute verwaltete Cloud-Laufzeit und Steuerungsebene.
Der Open-Source-Headless-Browser selbst ist vollständig nutzbar und nicht von Lexmount Browser abhängig.
Kostensteuerung
Aufwendige Browseroperationen müssen in Moli ausdrücklich aktiviert werden und sind standardmäßig ausgeschaltet:
| Modus oder Option | Verhalten |
|---|---|
| Standard | LayoutPolicy::Mock — deterministische, formatkompatible Geometrie, kein echtes Layout und kein Zeichnen |
--layout |
LayoutPolicy::OnDemand — echtes Layout, Geometrie, Treffertests, Koordinateneingaben, Screenshots und Screencast |
--resource |
Alle optionalen visuellen und Medienressourcengruppen abrufen |
--image, --font, --audio, --video, --media, --text-track |
Eine bestimmte optionale Ressourcengruppe aktivieren |
--profile-dir, --http-cache-dir, --cookie-file |
Persistenz je nach Bedarf des Workloads gezielt aktivieren |
Das Layoutergebnis ist ein bei Bedarf erstellter Snapshot und kein dauerhaft gepflegter Zustand: Die erste Geometrieanfrage (Kaltstart) baut ein vollständiges Layout aus dem aktuellen DOM/Stil auf und behält nur die neueste LayoutPassOutput. Danach können normale Geometrieabfragen diesen Snapshot selbst dann wiederverwenden, wenn sich die Seite geändert hat. Screenshots und Screencasts werden dagegen jedes Mal neu aufgebaut und verwenden keine alten Ergebnisse.
Architektur
Moli ist ein eigenständiger Browser-Kernel und kein Chromium-Wrapper. Er ist in Rust entwickelt, folgt eigenen Regeln für Besitz und Lebenszyklus und verwendet als zentrale Abhängigkeiten:
libcurl— Netzwerktransport und Laufzeit für mehrere Anfragenhtml5ever— HTML-Parsingrusty_v8/ V8 — JavaScript-Ausführung- Servo/Stylo — Selektoren, Kaskade und berechnete Stile
- Taffy + Parley — Box- und Textlayout
- AnyRender/Vello CPU,
usvgund das Rust-Bildökosystem — Software-Rendering
Dokument und Stil haben genau eine maßgebliche Datenquelle: die Integration von nativem DOM und Stylo. Jede echte Aktualisierung baut das Layout daraus neu auf, überführt das Ergebnis in DOM-neutrale, unveränderliche Daten und verwirft anschließend den temporären Zustand aus diesem Layout- und Zeichendurchlauf. Das gesamte System besitzt keinen inkrementellen Layoutbaum, keinen Damage-Graph, keine beibehaltene Displayliste, keinen GPU-Compositor und kein persistentes Fenster.
Testdaten
Die folgenden zwei Messreihen zeigen Molis derzeitigen Funktionsumfang. Die Tests decken reale Websites, reale Automatisierungsclients, gezielte Prüfungen des Chromium-/WPT-Verhaltens und eine große nextest-Regressionssuite ab.
Gemischter Crawl-Test des öffentlichen Webs
Getestet wurden 192 öffentliche URLs großer chinesischer und internationaler Websites. Als Erfolg galt nur eine Seite, die nach Ausführung von JavaScript inhaltlich verwertbare Ergebnisse lieferte — ein HTTP-200-Status, eine Verifizierungsseite, eine Anmeldesperre, eine leere Antwort oder eine reine App-Hülle wurden nicht als Erfolg gewertet.
| Browser | Verwertbare Seiten | Erfolgsquote | Medianzeit | Median-RSS |
|---|---|---|---|---|
| Moli | 103 | 53.6% | 1.43 s | 73 MiB |
| Chrome Headless | 101 | 52.6% | 1.43 s | 773 MiB |
| Lightpanda | 85 | 44.3% | 0.97 s | 40 MiB |
| Obscura | 57 | 29.7% | 1.30 s | 39 MiB |
Beispiel eines Agenten-Workloads
| Metrik | Moli | Chromium |
|---|---|---|
| CDP bereit | 34.85 ms | 169.37 ms |
| Aktive Episodendauer p50 | 33.40 ms | 57.13 ms |
| PSS-Spitzenwert | 102.46 MiB | 348.82 MiB |
| Maximale Prozesse / Threads | 1 / 24 | 11 / 123 |
In der aktuellen WPT-Auswahl zur Überprüfung von Molis Agenten-Browser-Funktionsumfang verzeichnete ein vollständiger Testlauf 1,612 Millionen bestandene Tests.
Projektumfang
In den in der Dokumentation definierten Agenten-Browser-Szenarien ist Moli bereits produktionsreif und wird weiterhin kontinuierlich entwickelt.
Zu den derzeit bewusst beibehaltenen Grenzen gehören:
- Kein GUI-Browser, persistentes Fenster oder GPU-Compositor und keine beibehaltene Mehrfach-Frame-Zeichenarchitektur.
- Moli strebt keine pixelgenaue Übereinstimmung mit Chrome an und bietet keine originalgetreue Canvas-/WebGL-/Medienwiedergabe.
- Nur ein ausgewählter Teil der Funktionen von CDP, WebDriver Classic und WebDriver BiDi wird abgedeckt; eine vollständige Protokollkompatibilität ist nicht implementiert.
- Im
--layout-Modus werden Software-Screenshots und rasterbasierte CDP-PDF-Erzeugung unterstützt, jedoch nicht sämtliche Screenshot- oder Druckmodi von Chrome. - Ressourcenladen, Aktualität der Geometrie und Kosten des visuellen Renderings bleiben ausdrücklich festzulegende Richtlinienoptionen und sind nicht dauerhaft standardmäßig aktiv.
Nicht unterstützte Protokollpfade geben einen eindeutigen Fehler zurück — Moli täuscht nie vor, dass eine Browseraktion, ein Ereignis, eine Netzwerkbeobachtung oder ein visuelles Ergebnis stattgefunden hat.
Maintainer können mithilfe von GitHub Actions ein getaggtes Binär-Release veröffentlichen, indem sie der Release-Anleitung folgen.
Lizenz
Sofern eine Datei oder ein Verzeichnis nichts anderes angibt, kann Moli wahlweise unter der Apache License 2.0 oder der MIT License genutzt werden. Separat lizenzierte Komponenten und Fixtures von Drittanbietern unterliegen weiterhin ihren jeweiligen Lizenzen und Hinweisen.
