Guillaume Duvernay

Experiment

Ein Agent annotiert meine Screenshots für die Dokumentation

Die Frage
Kann ich einem Agenten einen Ordner mit namenlosen Screenshots geben, damit er analysiert, was sie zeigen, und mir die annotierten Abbildungen für eine Dokumentationsseite erstellt?
Ergebnis
Ja, das Lesen und Zeichnen funktioniert. Die Platzierung der Bildunterschrift bleibt eine Ermessensentscheidung und hängt davon ab, ob die Benutzeroberfläche genügend Weißraum bietet.

documentationagentstooling

Was ich herausfinden wollte

Wenn ich Dokumentationen schreibe, erstelle ich währenddessen Screenshots, die mit Namen wie Screenshot 2026-09-14 at 18.03.12.png auf meinem Desktop landen. Dann beginnt der mühsame Teil: jedes Bild öffnen, zuordnen, welchem Schritt es angehört, zuschneiden, eine Box um die Schaltfläche zeichnen und die Bildunterschrift so platzieren, dass sie das beschriebene Element nicht verdeckt.

Die Frage war, ob ich das alles überspringen kann. Dem Agenten den Ordner übergeben, die Bilder analysieren lassen, um zu verstehen, worüber er überhaupt schreibt, Unterstützung beim Text erhalten und dann die markierten Abbildungen erstellen lassen. Kein Figma, kein Hin und Her bei der Platzierung einer Box.

Ich hatte erwartet, dass das Zeichnen schwierig wird. Das erwies sich als falsch.

Wie es getestet wurde

Eine Annotation ist ein JavaScript-Modul, keine Zeichnung. Es definiert ein Quellbild und eine Liste von Formen in Prozentwerten des Rahmens. Ein Renderer legt diese in Chrome über den Screenshot und fotografiert die Seite mit Playwright erneut ab.

Chrome ist der entscheidende Trick. Abgerundete Ecken, Schatten, Textrendering und Unschärfe werden vom Browser übernommen, sodass nichts neu implementiert werden muss. Das Ergebnis ist eine PNG-Datei in der exakten Dimension der Quelle.

Nur Schritt drei erfordert eine visuelle Prüfung des Bildes. Der Rest ist ein Befehl.

In Schritt drei wäre das Experiment fast gescheitert. Wenn man den Agenten bittet, eine Box per Auge um eine Schaltfläche zu platzieren, liegt er etwa 2 % daneben. Auf dem Papier klingt das wenig, im Bild ist es offensichtlich. Die Lösung besteht darin, nicht mehr zu schätzen: Zuerst wird ein Prozent-Grid über das Bild gelegt, der Agent liest die Zahlen dieses Grids einmal ab, und jede nachfolgende Box landet exakt auf dem Pixel.

Eine Aufgabenlisten-Oberfläche mit einem rot-blauen Grid, das horizontal und vertikal alle zehn Prozent markiert ist.
Der Grid-Durchgang. Er dient nur dem Ablesen: x: 88.1, y: 19.4 auslesen und dann verwerfen. Koordinaten bleiben in Prozenten, sodass ein neuer Screenshot in einer anderen Größe ohne Änderung der Zahlen neu annotiert wird.

Sechs Primitiven decken alles ab, was eine Dokumentationsabbildung benötigt.

PrimitivFunktion
boxDer abgerundete Rahmen mit Halo, optional mit Nummer und Bildunterschrift
arrowEin gebogener Pfeil, punktorientiert, für ein einzelnes “Klicken Sie hier”
noteEine Textkarte: Titel und eine Zeile Fließtext
spotlightVerdunkelt alles außer den ausgeschnittenen Bereichen
zoomEine Lupe: ein vergrößerter Ausschnitt, platziert in einem freien Bereich
redactMacht eine Region unscharf

Das Ergebnis

Das Lesen der Screenshots funktioniert. Trotz fehlender nützlicher Dateinamen identifizierte der Agent, welches Produkt jeder Capture zeigt, welchen Bildschirm es darstellt und welcher Capture welchen Schritt illustriert, gut genug, um den Text darum herum zu entwerfen.

Das Zeichnen funktioniert ebenfalls und ist schnell: Da die Spec aus Code besteht, wird ein nach einer UI-Änderung neu aufgenommener Screenshot durch das Ausführen eines einzigen Befehls neu annotiert, solange sich nichts um mehr als etwa 1 % verschoben hat.

Der Teil, der sich nicht in einen Befehl reduzieren lässt, ist die Platzierung der Bildunterschrift. Diese wird durch den Screenshot und nicht durch das Tool bestimmt.

Eine Aufgabenliste. Vier rote nummerierte Badges befinden sich auf dem Filterfeld, den Status- und Prioritäts-Chips, der Ansichts-Schaltfläche und der Schaltfläche zum Hinzufügen von Aufgaben. Es gibt keine Bildunterschriften im Bild.
Kein Platz. Die Toolbar schließt bündig mit dem Tabellenkopf ab, sodass weder darüber noch darunter 60px freier Raum sind. Jede dort platzierte Bildunterschrift würde die Oberfläche verdecken. Daher enthält die Abbildung nur nummerierte Badges, und die nummerierte Liste steht im Text.
Ein Dashboard mit vier Statistik-Karten. Drei nummerierte Badges tragen jeweils eine kurze Bildunterschrift, die neben dem benannten Element im freien Raum des Layouts platziert ist.
Dasselbe Produkt, eine Seite, die Raum zum Atmen hat. Hier stehen die Bildunterschriften neben ihren Zielen und verdecken nichts, sodass die Abbildung eigenständig ist.

Die daraus resultierende Regel: Wenn die Oberfläche keinen Weißraum hat, wandert die Bildunterschrift aus dem Bild. Ein nummeriertes Badge im Screenshot und eine nummerierte Liste im Text, oder ein Zuschnitt, der den Raum erst schafft. Das ist keine Präferenz, sondern lässt sich aus dem Screenshot ablesen, bevor überhaupt gezeichnet wird.

Die Lupe ist das einzige Primitiv, das sich als unverzichtbar und nicht bloß dekorativ erwiesen hat.

Eine Aufgabenliste, bei der ein kleiner Status-Chip ausgeschnitten, etwa zweieinhalbmal vergrößert und im freien Bereich darunter platziert wurde, mit einer Bildunterschrift-Karte daneben.
Ein Status-Chip ist 22px hoch. In der Dokumentation wird dieses Bild mit etwa 700px Breite gerendert, wobei 22px unlesbar sind. Vergrößert wird das Detail zum Hauptmotiv, während der gesamte Bildschirm für den Kontext sichtbar bleibt.

Die Erkenntnis, die eigentlich nicht das Ziel war

Die Annotation von zwei echten Produkt-Captures brachte Dinge ans Licht, die das Unternehmen nicht verlassen sollten. Ein Screenshot eines Workflow-Editors zeigte einen API-Key im Klartext innerhalb einer Verzweigungsbedingung. Ein anderer zeigte eine Seitenleiste mit Titeln privater Konversationen.

Beides wurde bei der Aufnahme nicht bemerkt. Beides wurde offensichtlich, in dem Moment, als etwas das Bild Element für Element durchging und fragte, was jedes einzelne sei.

Mein Fazit

Das Zeichnen der Box ist mechanisch. Die Platzierung der Bildunterschrift ist die eigentliche Arbeit. Jedes Mal, wenn dies eine schlechte Abbildung ergab, lag eine Bildunterschrift über dem benannten Element, und das lag immer daran, dass die Oberfläche keine Lücke bot. Das ist eine Layout-Entscheidung über den Screenshot und das Teil, das nicht zum Befehl wurde.

Eine Spec-Datei schlägt für diesen Zweck eine Design-Datei. Die Abbildungen sind Code. Ein nächsten Monat neu aufgenommener Screenshot wird mit einem Befehl neu annotiert, statt ihn erneut zu öffnen und neu zu zeichnen. Der Preis dafür ist, dass die erste Version jeder Abbildung schlechter ist als eine handgezeichnete und ein oder zwei Durchgänge braucht, um optimal zu sein.

Ein Annotations-Durchgang ist ein versehentlicher Privacy-Review. Niemand hatte vor, diese Captures zu prüfen. Erst das genaue Betrachten jeder Region, um sie zu beschreiben, brachte den Key und die Konversationstitel zutage. Das ist ein Grund, diesen Durchgang vor der Veröffentlichung zu machen und nicht danach.

Eine Unschärfe ist keine Schwärzung. Der Renderer weichzeichnet mit einem Backdrop-Filter, und eine 14px-Unschärfe über einem 13px-Text ist unlesbar, aber nicht nachweislich unwiederbringlich. Für wirklich geheime Daten ist die Lösung ein solider Block, weshalb die zwei Captures, die einen solchen enthalten, hier beschrieben, aber nicht gezeigt werden.