Headless-Browser sind die unglamouröseste Schicht des KI-Stacks – und zunehmend die Schicht, die entscheidet, was ein Agent überhaupt tun kann. Ein Jahrzehnt lang lautete die Standardantwort Chrome: forken, Oberfläche entfernen, hoffen, dass es in einen Container passt. Lightpandas Wette ist, dass die richtige Antwort ein Browser ist, der nie eine Oberfläche hatte, die man entfernen könnte.

Das Projekt stand am Samstag weit oben auf GitHubs Trending-Seite: 827 Sterne an einem Tag, rund 36.000 insgesamt, 1.700 Forks. Es ist ein von Grund auf in Zig geschriebener Headless-Browser – kein Chromium-Fork, kein WebKit-Patch. Eine grafische Rendering-Engine gibt es gar nicht. JavaScript läuft auf V8, HTML wird mit html5ever geparst, Seiten werden über libcurl geladen. Übrig bleibt die Fläche, die Automatisierung tatsächlich anfasst: ein DOM, XHR und fetch, Cookies, Klicks, Formulareingaben, Netzwerk-Interception, Proxys, ein Adblocker, eine optionale robots.txt-Prüfung und zwei Automatisierungsprotokolle – Chrome DevTools Protocol und WebDriver BiDi.

Die Benchmarks des Anbieters sind das Argument. Über 933 echte Seiten auf einer AWS m5.large lagen die Spitzenwerte für 100 Seiten bei 123 MB gegenüber 2 GB bei Headless Chrome, und 100 Seiten brauchten 5 statt 46 Sekunden. Das sind rund 16-mal weniger Speicher und 9-mal schneller. Es ist ein Hersteller-Benchmark auf einem Hersteller-Seitenmix, kein unabhängiges Audit – und bei solchen Tests entscheidet der Seitenmix über alles.

Die interessantere Designentscheidung kam im Juni mit `lightpanda agent`. Man beschreibt eine Aufgabe in normaler Sprache, und der Browser steuert sich selbst: navigiert, klickt sich durch Abläufe, füllt Formulare, extrahiert strukturierte Daten. Er ist von der Anlage her anbieterunabhängig – Anthropic, OpenAI, Gemini, Vertex AI, Mistral, Hugging Face, Vercel AI Gateway, OpenRouter, jeder OpenAI-kompatible Endpunkt über `OPENAI_BASE_URL` oder lokale Modelle über Ollama und llama.cpp, dazu eine `--no-llm`-REPL für alle, die nur den Browser wollen.

Entscheidend ist, was die Agentensitzung produziert. Die Arbeit wird als PandaScript festgehalten: reines JavaScript mit einer kleinen Menge nativer Browser-Primitive, die in Lightpanda eingebaut sind. Mit `/save` speichern, mit `lightpanda run script.js` abspielen. Wiederholungen sind deterministisch und kosten keine Tokens – das Modell wird einmal benutzt, um das Programm zu schreiben. „Mit dem LLM prototypen und die Ausgabe ohne Modell zur Laufzeit in Produktion bringen“, heißt es im README.

Dieselbe Logik zeigt sich im MCP-Server. Über stdio ist es eine einzige Verbindung; mit `lightpanda mcp --port 9223` bedient er HTTP, und jede `Mcp-Session-Id` bekommt ihre eigene Browsing-Sitzung – eigene Seite, eigene Cookies, eigener Speicher –, sodass zwei Agenten sich nicht mehr gegenseitig den Tab überschreiben. Schickt man dieselbe ID, teilen sie bewusst einen Kontext.

Die Einschränkungen sind nicht klein. Die Lizenz ist AGPL-3.0. Telemetrie ist standardmäßig aktiv und braucht `LIGHTPANDA_DISABLE_TELEMETRY=true`, um abzuschalten. Es gibt kein natives Windows-Binary (nur WSL), keinen Android- oder Termux-Build, und die Linux-Binaries sind gegen glibc gelinkt, weshalb Alpine mit einem Linker-Fehler scheitert. `--dump png` ist ein rein textliches Rendering der Seite, kein Screenshot. Vor allem aber ist die Funktionsliste kürzer als die von Chrome, und die täglich veröffentlichten Web Platform Tests sind die ehrliche Rangliste der Lücken – die Fehlschläge betreffen meist genau jene Browser-APIs, die echte Seiten kaputt machen.

Warum das zählt: Modell und Browser in einem Prozess zu koppeln und die Sitzung dann als abspielbaren Code aufzuzeichnen, macht aus einem Agentenlauf ein Artefakt, das man prüfen, diffen und in CI laufen lassen kann, statt eines undurchsichtigen Chat-Protokolls. Der Haken ist der, den jedes Crawler-Team kennt: Das Web ist nicht deterministisch. Selektoren wandern, Consent-Wände ändern sich, Konten laufen ab. Ein aufgezeichnetes Skript ist nur so stabil wie die Seite, gegen die es aufgezeichnet wurde.