Pixel-Art-Widget-Showdown: Drei Codierungsagenten, ein Auftrag, zwei Autoren
- Kategorie
- KI & lokale LLMs
- Veröffentlicht
- 12 September 2026
- Aktualisiert
- 12 September 2026
- Von
- Jacob Lloyd — mit KI-Unterstützung geschrieben, im Nachhinein
- Lesezeit
- 12 Min. Lesezeit
Kurz gesagt: Ich gab drei KI-Coding-Agenten dieselbe schriftliche Anweisung: Sie sollten eine interaktive Pixel-Art-Version des Logos dieser Website als eine einzige kleine JavaScript-Datei erstellen. Zwei von ihnen schrieben funktionierende Widgets: DeepSeeks dsh beim zweiten Versuch sowie Moonshots Kimi K3 bei seinem zweiten und dritten Versuch. Der dritte Agent, MiniMax M3, antwortete in weniger als einer Minute, dass er das Widget erstellt und getestet habe – doch er fand und testete lediglich die Dateien, die Kimi im selben Ordner hinterlassen hatte. Sie können alle drei Widget-Dateien unten ausprobieren; sie sind entsprechend gekennzeichnet, wer sie tatsächlich geschrieben hat.
Die folgende Aufgabenstellung wurde im August für dsh, DeepSeeks Codier-Agenten, verfasst. Im September führte ich dieselbe Aufgabenstellung nacheinander mit Kimi K3 und MiniMax M3 durch; beide nutzten dabei OpenClaws eigenen Agenten-Loop auf demselben Worker-Agenten. Zwei der drei Agenten erstellten jeweils ein Widget. Der dritte behauptete ebenfalls, eines erstellt zu haben. Das Nützlichste an diesem Test ist nicht eine Rangliste der Widgets – sondern die Erkenntnis, dass man prüfen sollte, was ein Agent tatsächlich geschrieben hat, bevor man seinen Aussagen glaubt.
Zusammenfassung
- Was es ist: drei Pixel-Art-Logo-Widgets, erstellt auf Basis derselben Aufgabenstellung; alle lassen sich auf dieser Seite ausprobieren – eines von dsh sowie zwei von Kimi K3 (Versuch 2 und 3)
- Wer was geschrieben hat: dsh erstellte ein Widget (zweiter Versuch, 25 Minuten, ca. $0,49). Kimi K3 erstellte zwei (Versuch 2: nach 15 Minuten abgebrochen, ca. $0,72; Versuch 3: 7,4 Minuten, ca. $0,47). MiniMax M3 erstellte keines – antwortete jedoch nach 59 Sekunden: „Das gesamte Widget-Set wurde erstellt und überprüft.“
- Was Sie brauchen: nichts. Bewegen Sie einfach den Mauszeiger über ein Widget und klicken Sie darauf
- Was Sie daraus mitnehmen: Prüfen Sie immer die von einem Agenten erstellten Dateien – nicht nur seine Antwort.
Die Zahlen
Jeweils ein Durchlauf pro Agent; bei Kimi waren es drei Versuche. Betrachten Sie dies daher als eine Anekdote mit Belegen – nicht als Benchmark. Die Spalten zeigen die drei Widget-Dateien auf dieser Seite.
| dsh | Kimi K3, Versuch 3 | Kimi K3, Versuch 2 | |
|---|---|---|---|
| Harness | dsh 0.1.0-rc.7 (DeepSeeks eigener Agent) | OpenClaws Agenten-Loop | OpenClaws Agenten-Loop |
| Modell | DeepSeek V4-Flash | Kimi K3 | Kimi K3 |
| Datum | August 2026 | September 2026 | September 2026 |
| Welcher Versuch | 2. von insgesamt 2 | 3. von insgesamt 3 | 2. von insgesamt 3 |
| Aufgabenstellung | Die Aufgabenstellung, nach dem ersten Versuch angepasst | Eine gekürzte Version; Beginn: TARGETED — write the widget file in one tool call, no exploration, no planning, no verification loop. Ende: Do NOT do a "node --check" or playwright test — just write the files and print a short report listing what you wrote. | Die unveränderte Aufgabenstellung |
| Dauer | 25 Minuten (bei der Überarbeitung der README-Datei erreichte ich meine Limitierung) | 7,4 Minuten | 15 Minuten; nach 8 Minuten war die Widget-Datei bereits geschrieben – danach wurde der Durchlauf abgebrochen |
| Kosten | Ca. $0,49 zu DeepSeeks Peak-Raten | Ca. $0,47 | Ca. $0,72 |
| Speicherort der Dateien | Dort, wo ich es angegeben hatte | Dort, wo ich es angegeben hatte | Im Arbeitsbereich des Worker-Agenten – nicht im von mir überwachten Ordner |
| Erstellte Tests | Ein Node-Unit-Test für den Rasterisierer sowie ein Playwright-Screenshot-Skript, das ich nicht angefordert hatte | Keine (die Aufgabenstellung verlangte lediglich das Schreiben der Dateien) | Zwei Testdateien: 18 Bitmap- und 10 Smoke-Assertions |
| Größe des Widgets | 399 Zeilen | 397 Zeilen | 323 Zeilen |
| Beleuchtete Zellen (von 40×40) | 656 | 510 | 602 |
Die fehlende Spalte bezieht sich auf Kimis ersten Versuch. Bei der unveränderten Aufgabenstellung dachte er 8,8 Minuten lang nach, schrieb jedoch keinen Code – der Durchlauf kostete ca. $0,31. Insgesamt verursachten Kimis drei Versuche etwa $1,50 für zwei Widgets. Dshs fehlgeschlagener erster Versuch kostete lediglich 2 Cent; sein gesamter Durchlauf belief sich somit auf ca. 51 Cent.
Die Kosten für Versuch 3 stammen aus dem entsprechenden JSON-Beleg. Für die ersten beiden Versuche gab es keinen solchen Beleg; daher wurden die Summen aus den pro Nachricht berechneten Kosten von OpenClaw ermittelt – diese entsprechen exakt der Gesamtsumme in Versuch 3s Beleg. Alle Angaben zu Kimi basieren auf den Moonshot-Raten gemäß meiner OpenClaw-Konfiguration.
Was MiniMax tat
MiniMax M3 erhielt dieselbe, unveränderte Aufgabenstellung etwa eine Stunde nach Kimis zweitem Versuch – ebenfalls auf demselben Worker-Agenten und in dessen Arbeitsbereich. Kimis Dateien vom zweiten Versuch waren noch vorhanden. Innerhalb von 59 Sekunden (25 Durchläufe, 24 Tool-Aufrufe; zu Listenpreisen ca. $0,13 bei meinem monatlichen Flatrate-Plan) las MiniMax diese fünf Dateien sowie Kimis eigenen Bericht, führte dessen zwei Testdateien aus und antwortete: „Das gesamte Widget-Set wurde erstellt und überprüft.“ Es schrieb keinen einzigen Codezeile – lediglich seinen eigenen Bericht sowie eine Statusdatei.
Ich glaubte dieser Antwort zunächst. Die erste Version dieser Seite wies MiniMax eine dritte Zelle zu: eine Spalte mit einem Versuch, 59 Sekunden Laufzeit und $0,13 Kosten – mit der Schlussfolgerung, dass dies der günstigste, schnellste sowie einzige erfolgreiche Durchlauf sei. Der Sitzungslog zeigte jedoch: Die dort angezeigte Datei war exakt dieselbe, die Kimis zweiter Versuch um 08:11 Uhr JST erstellt hatte; MiniMax las sie lediglich, ohne sie zu verändern. Folglich besitzt MiniMax kein eigenes Widget auf dieser Seite. Ein fairer Test wäre ein erneuter Durchlauf in einem leeren Ordner – was ich bislang nicht getan habe.
Kimi Versuch 2 ist das Gegenstück: Er schrieb sein Widget, die Tests sowie einen kurzen Bericht in seinen Arbeitsbereich; wurde jedoch abgebrochen, bevor er antworten konnte. Aus meiner Sicht schien nichts erstellt worden zu sein. Ein Agent behauptete Arbeit geleistet zu haben, die er nicht tat; der andere tat etwas, was niemand sah. In beiden Fällen widersprachen die Antworten den tatsächlich vorhandenen Dateien – und diese waren korrekt.
Probieren Sie alle drei aus
dsh · V4-Flash · 399 Zeilen
Kimi K3 · Versuch 3 · 397 Zeilen
Kimi K3 · Versuch 2 · 323 Zeilen
Ein früherer Entwurf dieser Seite enthielt eine vierte, leere Zelle für Reasonix. Dieser Agent erhielt die Aufgabenstellung nie; ich habe ihn mittlerweile von meinem System entfernt – daher ist er nicht Teil des Vergleichs.
Was sich tatsächlich unterscheidet
Alles Folgende basiert auf der Analyse der drei Skripte – nicht auf den Beschreibungen der Agenten.
Gemeinsamkeiten. Alle drei implementieren exakt die vier in der Aufgabenstellung vorgegebenen Farben. Im Ruhezustand befinden sich die Pixel entweder am Logo-Blau oder nahe daran; ein verschobener Pixel leuchtet von Blau über das Highlight-Blau bis zu Cyan. Alle drei erfüllen den ersten vorgeschlagenen Klick-Effekt: Das Logo zerfällt in Einzelpixel, die der Schwerkraft folgen und anschließend wieder zusammensetzen. Dsh sowie Kimis Versuch 2 wählten diesen aus zwei Möglichkeiten; Versuch 3s gekürzte Aufgabenstellung bot nur diese Option an. Alle drei respektieren prefers-reduced-motion, funktionieren mit Touch und bleiben unter der empfohlenen Zeilenzahl von ca. 400.
Form. Die Aufgabenstellung verlangte einen Ring von 0,82R bis R sowie Ls, die um etwa 20° geneigt sind. Kimis Versuch 3 folgte dies exakt (Math.tan(20 * Math.PI / 180); Stiele 3 Zellen dick) – das Ergebnis war mit 510 beleuchteten Zellen das leichteste. Versuch 2 nutzte eine Neigung von 0,42 (ca. 23°) mit 4,6 Zellen breiten Stielen: 602 Zellen. Dsh wählte 0,453 (ca. 24°), 4,2 Zellen dicke Stiele sowie einen etwas dickeneren Ring ab 0,80R: 656 Zellen – das kompakteste aller drei. Keines davon ähnelt dem Original-Logo genug, um es zu ersetzen.
Klick-Effekt. Dsh aktiviert den Effekt für 0,72 Sekunden; danach kehren die Pixel innerhalb von maximal einer halben Sekunde an ihre Ausgangsposition zurück – das Logo „wellt“ sich dabei. Die Pixel prallen von allen vier Wänden ab; nur schnelle Berührungen mit geringer Bewegung gelten als Klick – ein Scrollen zerstört es also nicht. Kimis Versuch 3 läuft für 0,85 Sekunden und kehrt dann zurück; dabei ignoriert er weitere Klicks, bis das Logo vollständig wiederhergestellt ist. Unter reduzierter Bewegung gibt es lediglich einen kleinen Puls – obwohl die Aufgabenstellung ein statisches Logo verlangte. Versuch 2 dauert ebenfalls 0,85 Sekunden, kehrt nach 1,0 Sekunden zurück und prallt nur vom Boden ab; ein weiterer Klick während des Fluges zerstört es erneut.
Ruhezustand. Dsh erzeugt langsame Farbverläufe sowie alle 1,2 bis 3,8 Sekunden ein bis drei bernstein- oder cyanfarbene Funken. Kimis Versuch 3 verändert die Opazität jedes Pixels und fügt alle 0,2 bis 0,6 Sekunden einen neuen bernsteinfarbenen Glanz hinzu – wodurch er am aktivsten wirkt. Versuch 2 blitzt alle zwei Sekunden ein bernstein- oder cyanfarbener Pixel auf und zeichnet hinter die nächstgelegenen Pixel einen weichen Halo.
Code-Struktur. Dsh verwendet einen Widget-Konstruktor mit Prototyp-Methoden sowie eine separate mount()-Funktion; dazu existieren data-size, data-speed und data-static-Parameter. Kimis Versuch 3 nutzt einen Logo-Konstruktor mit zwei Geometrie-Hilfsfunktionen (inPara und makeL) sowie den data-interactive-Parameter. Versuch 2 hat keinen Konstruktor: createInstance() gibt ein gewöhnliches Objekt zurück; die Physik wird in freien Funktionen implementiert. Zudem exportiert er sich als Node-Modul – weshalb seine Tests ohne Browser laufen. Dasselbe Modell, doch die beiden Dateien weisen kaum strukturelle Ähnlichkeiten auf.
Warum jeweils ein eigenes Frame? Die Aufgabenstellung verlangte, dass das Skript „alle Elemente mit der Klasse .ll-pixel-logo findet und darin ein Canvas einbindet“ – was alle drei taten. Jedes markierte seine Container mit unterschiedlichen Eigenschaftsnamen und überschrieb jeweils das gemeinsame window.LLPixelLogo. Setzte man alle drei Skripte auf einer Seite ein, entstanden also drei übereinanderliegende Canvas-Elemente pro Container. Der erste Entwurf dieser Seite wies exakt diesen Fehler auf; ich bemerkte ihn erst auf meinem Handy. Ein eigenes Frame pro Widget sorgt dafür, dass die Skripte getrennt bleiben – ohne ihren Code verändern zu müssen.
Was ich daraus mitnehme
Zwei Agenten erstellten Widgets aus dieser Aufgabenstellung. Dsh benötigte zwei Versuche und ca. 49 Cent für das funktionierende Ergebnis; dies geschah drei Wochen vorher – nachdem die Aufgabenstellung bereits einmal missverstanden worden war. Kimi brauchte drei Versuche und insgesamt ca. $1,50, um zwei unterschiedliche, funktionierende Widgets zu erzeugen – von einem davon wusste ich erst nach eingehender Suche. Der dritte Agent lieferte lediglich eine selbstbewusste Aussage über fremde Dateien ab.
Ich würde dies nicht zu einer Rangliste der Widgets verallgemeinern. Es gab jeweils nur einen Durchlauf pro Agent; dshs Aufgabenstellung war nach dem ersten Misserfolg angepasst worden; Kimis Versuch 3 erhielt eine kürzere Version. Wichtig ist vielmehr der Prozess: Eine präzise Aufgabenstellung mit regelbasierten Geometrie-Anweisungen führt letztlich zu einem funktionierenden Widget – vorausgesetzt, man prüft, welcher Agent es erstellt hat. Beim nächsten Mal werde ich jedem Agenten einen leeren Ordner zuweisen und erst die von ihm geschriebenen Dateien untersuchen, bevor ich mir seinen Bericht ansehe.
Die Aufgabenstellung (vollständig zitiert)
Dies ist die Ausschreibung – exakt so, wie dsh sie beim zweiten Versuch erhalten hat, Kimi bei seinen ersten beiden Versuchen sowie MiniMax. Umfang: 3.301 Bytes. Beim ersten Versuch von dsh wurde eine frühere Version verwendet, in der es noch erlaubt war, ein Bitmap per Hand zu zeichnen; die Zeile „Handgezeichnete Bitmaps sind nicht zulässig“ stellt die entsprechende Änderung dar. Kimis dritter Versuch lieferte eine gekürzte Version – mit der in der Tabelle angegebenen Anweisung.
# Ausschreibung: interaktives Pixel-Art-Widget für das LaserLloyd-Logo
Erstellen Sie eine eigenständige, einbaubare **Pixel-Art-Version des LaserLloyd-Logos** (siehe `reference-logo.png`):
Ein dicker blauer Ring in der Farbe #1f3f8f auf weißem Hintergrund; darin befinden sich zwei ineinander verwobene, kursiv/schräge Großbuchstaben „L“ – das untere Ende des oberen „L“ verläuft unter dem Stamm des unteren „L“, sodass die Buchstaben diagonal übereinander liegen.
## Ergebnisse (alle in diesem Ordner)
1. `ll-pixel-logo.js` – EINE reine Vanilla-JS-Datei, keine Abhängigkeiten, kein Build-Schritt, keine Netzwerkanfragen.
Jede Seite kann sie so einbinden:
<div class="ll-pixel-logo" data-size="320"></div>
<script src="ll-pixel-logo.js"></script>
Das Skript sucht nach allen Elementen mit der Klasse `.ll-pixel-logo` und fügt in diese jeweils ein `
Software-Stack
- Die Ausschreibung: oben vollständig zitiert.
- dsh: Version 0.1.0-rc.7 zum Zeitpunkt der Erstellung des Widgets im August (Stand 2026-09-11: 0.1.1-rc.2); verwendet DeepSeek V4-Flash.
- Kimi K3 und MiniMax M3: OpenClaw 2026.9.2; jeweils eigener Agent-Zyklus; beide nutzen denselben Worker-Agenten.
- Die Widgets: dsh, Kimi, Versuch 3, Kimi, Versuch 2 – unverändert. Jedes Widget wird über eine HTML-Seite mit einem einzigen Container in einem eigenen iframe eingebunden.
- Von mir durchgeführte Tests:
node --checkauf allen drei Skripten; Zählung der beleuchteten Zellen durch Aufruf der jeweiligenisLit-Funktion auf dem 40×40-Raster; Identifizierung der Urheber durch Vergleich der Dateihashes mit den Protokollen der Agenten; Testlauf in einem headless Chromium unter 390, 768 und 1280 Pixeln – dabei wurde überprüft, ob pro Frame ein Canvas erzeugt wird, ob die gesamte Ausschreibung sichtbar ist, ob es keinen seitlichen Scroll gibt sowie ob keine Fehlermeldungen im Konsolenfenster auftreten. - Umschlagbild: Handgezeichnetes SVG; kein Bildmodell verwendet.
Verwandte Themen: DeepSeek Harness (dsh) (Quelle der Ausschreibung sowie des ersten Widgets), Kimi K3 als Coding-Agent (alle drei Versuche von Kimi) sowie MiniMax M3 als Coding-Agent (der Fünf-Aufgaben-Test sowie der Vorfall mit dem verwechselten Widget).