Ein Satz als Auftrag: „Find one-way flights from Zurich to London on September 20, 2026, for one adult in economy. Stop when matching flight options are visible.” Danach 7,1 Sekunden, und auf Google Flights steht die Trefferliste. Kein Skript für die Seite, keine vorbereiteten Feldwerte. Der Agent hat sich jeden Klick selbst ausgesucht.
Das Repo dazu heißt jev-ultrafast, kommt vom browser-use-Team und ist am 16. September online gegangen. Eine Woche später lag es bei über 17.000 Sternen auf GitHub. Der Artikel erklärt, was in den 7,1 Sekunden passiert, warum das so schnell geht und wie du es bei dir zum Laufen bringst.
Wenn du Jev noch gar nicht kennst: das Modell schreibt keinen Text, es wählt aus vorgegebenen Optionen. Die Grundlagen stehen im Einstiegsartikel.
Was in den 7,1 Sekunden passiert
Die Zahlen kommen aus dem Messprotokoll des Repos. Der aufgezeichnete Lauf brauchte 7,073 Sekunden vom ersten Modellaufruf bis zur bestätigten Trefferliste. Darin stecken:
- 10 Browser-Aktionen plus ein bewusstes Warten auf die Ergebnisse
- 17 Anfragen an Jev, im Median 178 Millisekunden pro Entscheidung
- 2 Aufrufe an ein kleines Text-Modell, das „Zurich” und „London” in die Felder tippt
Die Klickfolge selbst ist unspektakulär. Erst „Round trip” anklicken, dann „One way” wählen, „Zurich” ins Abflugfeld tippen, den Vorschlag „Zürich, Switzerland” nehmen, dasselbe für London, Datumsfeld öffnen, den 20. September anklicken, „Done”, „Search”, warten. Jeder dieser Schritte war eine eigene Entscheidung des Modells.
Die Vorversion desselben Repos brauchte für dieselbe Aufgabe im Median 9,45 Sekunden und schickte 1.092 Befehle an den Browser. Die aktuelle Version kommt mit 101 aus. Das sind drei Wiederholungen einer Aufgabe auf einem Rechner, kein allgemeiner Benchmark, das schreibt das Team selbst dazu.
Warum das so schnell ist
Der übliche Browser-Agent macht vor jedem Klick einen Screenshot, schickt ihn an ein großes Sprachmodell und wartet, bis das einen Absatz Text geschrieben hat. Das dauert pro Schritt Sekunden und verbrennt Tausende Token.
jev-ultrafast geht anders vor. Jede Webseite hat ein DOM, das ist eine Art Inhaltsverzeichnis mit allen Buttons, Feldern und Überschriften. Daraus liest der Agent in einem einzigen Browser-Aufruf die sichtbaren Bedienelemente und macht eine nummerierte Liste:
[12] combobox Change ticket type · Round trip
[15] combobox Where from? · leer
[16] combobox Where to? · leer
[17] textbox Departure · leer
[19] button Search for flights
Diese Liste bekommt Jev, zusammen mit dem Auftrag. Jev antwortet mit einer Wahrscheinlichkeit pro Element. Kein Satz, keine Begründung, nur Aktion und Element, beides in einer Anfrage. Ein Screenshot wird im normalen Betrieb gar nicht gemacht.
Erst wenn die gewählte Aktion „Text eintippen” heißt, springt ein Sprachmodell ein und liefert den Wert. Im aufgezeichneten Lauf war das „Zurich” nach 581 Millisekunden und „London” nach 346 Millisekunden. Das ist das einzige Mal, dass ein Modell Text erzeugt.
Bei mir sah das am 23. September so aus, ich hatte den Inspector offen und konnte den Wahrscheinlichkeiten zuschauen:
| Schritt | Jev wählt | Wahrscheinlichkeit |
|---|---|---|
| 1 | „Round trip” anklicken | 87 % |
| 2 | „One way” | 72 % |
| 4 | „Zürich, Switzerland” | 95 % |
| 6 | „London, United Kingdom” | 87 % |
Jeder dieser Werte ist eine Entscheidung ohne einen einzigen erzeugten Satz. Deshalb dauert ein Schritt Millisekunden.
Setup in zehn Minuten
Du brauchst Python mit uv, Chrome und einen TypeSafe-Schlüssel von console.typesafe.ai. Wie du an den Schlüssel kommst, steht im Einstiegsartikel.
git clone https://github.com/browser-use/jev-ultrafast.git
cd jev-ultrafast
uv sync
cp .env.example .env
In die .env trägst du deinen TYPESAFE_API_KEY ein. Für das Text-Modell brauchst du entweder einen OpenRouter-Schlüssel als TEXT_MODEL_API_KEY, oder du nimmst den Weg im nächsten Abschnitt und sparst dir den zweiten Key.
Dann Chrome vorbereiten. Der Agent steuert deinen echten Browser, dafür muss Chrome Fernzugriff erlauben. Öffne in Chrome die Adresse chrome://inspect/#remote-debugging und schalte es dort ein. Ohne diesen Schritt meldet der Browser-Harness bei mir „DevToolsActivePort not found”. Ob die Verbindung steht, prüfst du mit:
uv run browser-harness --doctor
Jetzt der Start:
uv run jev
Im Browser öffnest du http://127.0.0.1:8766, klickst auf „Start demo” und dann auf „Run automatically”. Der Inspector zeigt die nummerierten Elemente und die Wahrscheinlichkeiten für Aktion und Ziel, während der Agent im anderen Tab klickt. Mit „Choose next” hält er vor jedem Schritt an.
Claude statt zweitem API-Key
Jev trifft die Entscheidungen, dafür bleibt der TypeSafe-Key. Für alles, was in Sprache gedacht werden muss, also den Text in den Feldern, erwartet das Repo ein zweites Sprachmodell über OpenRouter. Wenn du Claude Code sowieso bezahlst, ist das ein Key zu viel. Genau dieses zweite Modell tauscht der Shim gegen Claude. Deshalb habe ich claude-text-shim geschrieben: eine einzelne Python-Datei, die deine Claude-Code-Anmeldung als OpenAI-kompatiblen Text-Endpunkt bereitstellt. Keine Abhängigkeiten, kein Extra-Konto.
Starten in einem eigenen Terminal:
python3 claude_text_shim.py --port 8799
In der .env von jev-ultrafast dann diese drei Zeilen setzen:
TEXT_MODEL_BASE_URL=http://127.0.0.1:8799/v1
TEXT_MODEL_API_KEY=unused
TEXT_MODEL=haiku
Der Key wird vom Shim nie geprüft, die Zeile muss nur da sein, weil das Repo sie erwartet. Danach uv run jev neu starten, fertig.
Wer nach dem Setup nicht mehr ins Terminal will, nimmt den Skill aus dem Shim-Repo. Der prüft in Claude Code den Shim, die Chrome-Verbindung und das jev-ultrafast-Repo und startet dann den Auftrag.
npx skills add epictaste/claude-text-shim --skill browser-agent
Danach sagst du Claude Code in normalen Worten, was der Browser tun soll, und er kümmert sich um den Rest. Buchen oder bezahlen tut er dabei nie, die Aufträge stoppen vor allem, was sich nicht rückgängig machen lässt.
Eine Sache muss ich dazusagen. Jeder Aufruf startet im Hintergrund einen claude -p-Prozess, und das kostet Zeit. In meinem Lauf brauchte das Tippen von „Zurich” 5,9 Sekunden und „London” 5,2 Sekunden. Mit einem gehosteten Modell über OpenRouter ist es unter einer Sekunde. Die Klicks laufen weiter über Jev und bleiben schnell. Wenn dir die Gesamtzeit wichtig ist, nimm OpenRouter. Wenn dir der zweite Key lästiger ist als ein paar Sekunden, nimm den Shim.
Eigene Aufträge starten
Die Flugsuche ist nur das Beispiel. Das Repo bringt ein Skript mit, dem du eine Adresse und einen Satz gibst:
uv run --env-file .env python examples/run.py \
--url https://en.wikipedia.org/wiki/Main_Page \
--goal 'Find and open the Wikipedia article about Gödel’s incompleteness theorems.'
Das ist der Fall aus dem Repo, im Messprotokoll lief er in 2,8 Sekunden. Mit dem Shim statt OpenRouter waren es bei mir 8,9 Sekunden, aus dem oben genannten Grund.
Für eine Firma sind das die Aufträge, die ich als erstes ausprobieren würde. Ich formuliere sie hier nur, gelaufen sind sie bei mir noch nicht:
uv run --env-file .env python examples/run.py \
--url https://www.beispiel-lieferant.de \
--goal 'Suche das Produkt "Roll-up Banner 85x200" und stoppe, wenn der Preis pro Stück sichtbar ist.'
uv run --env-file .env python examples/run.py \
--url https://www.beispiel-kunde.de/kontakt \
--goal 'Fülle das Kontaktformular mit Name "Jonas Beispiel", Firma "Agentur Nord" und der Nachricht "Bitte um Rückruf zum Angebot". Stoppe vor dem Absenden.'
Auf Englisch ist der Auftrag im Moment die sichere Wahl, darauf ist das Repo getestet. Deutsche Zielsätze habe ich noch nicht ausprobiert. Wichtig ist die Stopp-Bedingung im Satz, sonst klickt der Agent weiter, bis das Modell glaubt, fertig zu sein.
Was nicht geht
Was das Repo selbst als Grenze nennt:
- Canvas, Uploads, neue Tabs, verschachteltes Scrollen. Steht so im Repo als nicht unterstützt. Auch Inhalte in iframes und Shadow-DOM sieht der Agent nicht.
- DONE ist kein Beweis. Das Modell sagt „fertig”, wenn es glaubt, fertig zu sein. Das Flug-Beispiel prüft das Ergebnis mit einer eigenen Kontrolle. Für deine Aufträge musst du selbst nachschauen.
- Zwei Schlüssel. Jev für die Klicks, ein Text-Modell fürs Tippen. Der Shim ersetzt den zweiten, kostet dich aber die Sekunden von oben.
- Bestehendes Chrome-Profil. Der Agent klickt in deinem eingeloggten Browser. Gib ihm keine Aufträge auf Seiten, wo ein falscher Klick etwas kaputt macht.
Womit du anfängst
Setz das Repo auf und lass die Flugsuche einmal mit „Choose next” laufen, Schritt für Schritt. Du siehst dabei, wie das Modell zwischen den Elementen abwägt. Danach nimm eine Seite, auf der du selbst jede Woche dasselbe nachschaust, und formulier den Auftrag als einen Satz mit Stopp-Bedingung. Das ist ein Feierabend, und dann weißt du, ob das Ding für deine Fälle taugt.
Quellen
23. September 2026. KI-Tools, Preise und Funktionen ändern sich schnell. Vor wichtigen Entscheidungen den aktuellen Stand direkt beim Anbieter prüfen.
Transparenz. Dieser Beitrag ist mit KI-Unterstützung entstanden und von mir geprüft. Genau mit diesen Workflows arbeite ich, und genau die zeige ich hier.
Klau mein System
Das Setup, mit dem KI bei mir 80 % der Arbeit übernimmt. Im kostenlosen PDF: Projekt, Anweisung und fünf Vorlagen für Angebot, Kundenmail, Nachfassen, Posts und Wochenplan. Skills folgen.
Mein System holen