Gemessen, nicht behauptet: So macht Norminator seine eigene Arbeit überprüfbar
Vertrauen ist gut. Messen ist besser.
Die meisten KI-Assistenten sind eine Blackbox: Man stellt eine Frage, es kommt eine Antwort, und ob das Modell dabei noch den vollen Verlauf im Blick hatte, ob es etwas weggelassen, wiederholt oder schlicht behauptet hat — das bleibt im Dunkeln. Im Qualitäts- und Rechtsumfeld ist das keine Fußnote, sondern ein Risiko: Wer eine Antwort nicht überprüfen kann, kann sie nicht verantworten.
Norminator geht den umgekehrten Weg. Er macht seine eigene Arbeit sichtbar und nachmessbar — mit einem Kontext-Chip, der den Füllstand live anzeigt, einem Wächter, der die Kontextgrenze misst, statt sie zu erleiden, einer Werkstatt, in der jede Code-Änderung per git belegt ist, und einem Satz deterministischer Wächter, die einschreiten, bevor etwas behauptet wird, das nicht stattfand. Dieser Artikel legt die vier Schichten offen.
Der Kontext-Chip: der Füllstand als Daueranzeige
Links in der Kopfzeile des Chats sitzt ein unscheinbarer Chip: ein Ampelpunkt plus eine Angabe wie „Kontext 312k / 1M · 31 %”. Er ist keine Dekoration. Vor jedem Aufruf eines Modellanbieters misst Norminator den gesamten Verlauf, den das Modell gleich bekommen wird, und meldet ihn als Ereignis. Live pulsiert der Punkt je Runde; nach dem Zug bleibt der Endstand stehen; nach dem Neuladen steht dort der Stand der letzten Antwort — „Stand Zugende 14:32 Uhr”.
Die Zahl ist dabei keine Schätzung ins Blaue. Sobald ein Anbieter die tatsächlich verbrauchten Eingabe-Token meldet, wird der Zeichen-je-Token-Faktor geeicht: Die Anzeige kennt drei Quellen — „exakt” für den gemessenen Aufruf, „geeicht” für die folgenden, „grob”, bevor die erste Messung existiert.
Ein Klick auf den Chip öffnet die vollständige Belegung: Systemtext, Nutzerkontext, Projektkontext (mit Projektname oder „kein Projekt verknüpft”), Erinnerungen (n von m, davon k angeheftet — mit Titeln), Abriss des Gesprächs, Verlauf, aktuelle Nachricht samt Anhängen, Werkzeugliste, Werkzeug-Ergebnisse des Zuges, das Denken der Vorrunden, die Antworten des Zuges, Hinweise der Wächter — als Balken und in Zeichen und Token, dazu Runde k von 40, Anbieter und ob das Denken der Vorrunden mitgeschickt wird.
Die Ampel färbt sich ausschließlich nach Füllstand:
| Ampel | Füllstand | Bedeutung |
|---|---|---|
| 🟢 Grün | unter 40 % | voll belastbar |
| 🟡 Gelb | 40–70 % | wird eng, Details können untergehen |
| 🔴 Rot | ab 70 % | neues Gespräch empfohlen — was gebraucht wird, kurz übergeben |
Rot gilt auch, wenn der Wächter Ergebnisse kürzen musste. Die Eingriffe der Wächter stehen daneben als eigene Zeile — „Wiederholung ausgeblendet · Recherche nachgeholt · Verlauf gekürzt …”. Sie färben die Ampel nicht: Sie erklären, was in diesem Zug automatisch geschah, statt Alarm zu schlagen.
Der Kontextwächter: die Grenze wird gemessen, nicht erlitten
Warum braucht es das überhaupt? Weil bei einem Sprachmodell nicht die Zahl der Runden die Grenze ist, sondern der Kontext: Jede Runde schickt den gesamten Verlauf erneut an den Anbieter. Wächst er über das Fenster hinaus, antwortet jeder Anbieter mit einem Fehler 400 — die Kette probiert der Reihe nach alle, und der Zug stirbt. Mitten in der Arbeit, ohne Vorwarnung.
Deshalb misst der Kontextwächter vor jedem Aufruf. Die Grenze liegt bei 2,4 Millionen Zeichen (≈ 600.000 Token), inklusive Reserve für Systemtext, Ausgabe und Zählunschärfe. Wird sie gerissen, greift eine gestaffelte Kaskade:
- Die ältesten Werkzeug-Ergebnisse werden auf Stummel gekürzt — die letzten sechs bleiben vollständig.
- Reicht das nicht, wird älteres Denken der Vorrunden entfernt.
- Reicht auch das nicht, ist Schluss mit weiteren Werkzeugen: Das Modell schreibt eine ehrliche Standmeldung, statt in einen Anbieterfehler zu laufen.
Jede Kürzung steht im Qualitätsprotokoll — „Verlauf gekürzt (k ältere Ergebnisse) — Kontextgrenze” — und im Chip als „· N gekürzt”. Nichts davon passiert still. Bis zu 40 Runden hat ein Zug Zeit; Arbeiter im Schwarm bekommen einen engeren Deckel (1,2 Millionen Zeichen), damit ein Vielleser früh kompaktiert wird, statt vom Anbieter abgewiesen zu werden.
Die Kontextschichten: Nutzer, Projekt, Erinnerungen, Abriss
Der Kontext eines Zuges ist kein Brei, sondern geschichtet — und jede Schicht ist einzeln sichtbar und beherrschbar:
- Nutzerkontext — Profil und Unternehmen, steht im Systemtext und als eigene Zeile im Chip.
- Projektkontext — wird genau einmal injiziert, mit Revisionsnummer. Schlägt Norminator eine Änderung vor, erscheint sie als eigene Blase mit Diff gegen den bestehenden Stand („+N / −M Zeilen”, rot markiert, wenn Zeilen wegfallen) — annehmen oder ablehnen, die letzten fünf Fassungen bleiben als Verlauf im Projekt. Behauptet das Modell, ein Vorschlag liege bereit, ohne ihn wirklich erstellt zu haben, wird nachgefasst — und der nächste Zug sieht im Verlauf, ob er übernommen wurde.
- Erinnerungen — das persönliche Gedächtnis: bis zu 30 Einträge à 1.200 Zeichen. Pro Zug gehen die angehefteten (maximal 8) immer mit, dazu bis zu fünf, die ein kleiner Auswähler passend zur Frage wählt; fällt er aus, kommen die fünf zuletzt angefassten. Der Chip zeigt „Erinnerungen (n von m, k angeheftet)” — mit Titeln.
- Abriss des Gesprächs — der verdichtete Verlauf, aus dem auch der Auswähler liest. Dazu kommen die letzten zehn Nachrichten roh; die aktuelle Nachricht steht genau einmal im Aufruf.
- Denken der Vorrunden — das Reasoning hängt an den Werkzeugaufrufen, wie es Denkmodelle über mehrere Züge erwarten. Bei Platznot wird es als Erstes gekürzt, und es ist im Chip als eigene Schicht ausgewiesen.
Die übrigen Sichtfenster
Der Chip ist nicht allein. Unter jeder Antwort liegt das Qualitätsprotokoll: die Spur des Zuges — jeder Werkzeugaufruf mit Symbol, jeder Wächter-Eingriff als Klartext. „Rückfrage stand als Text da — stelle sie als Frage.” „Werkzeug gescheitert.” „Anbieterkette erschöpft — Zwischenstand gesichert.” Daneben führt der Arbeitsplan neben dem Chat die Schritte, das Schwarm-Panel zeigt je Arbeiter Spur, Phase, Dauer und im Fehlerfall den Grund.
Und eines gilt seit Kurzem ausdrücklich: Was man live gesehen hat, steht auch nach dem Neuladen noch da. Gespeichert wird die Mitschrift des gesamten Stroms — nicht mehr nur der Text der letzten Runde.
Die Werkstatt: Code-Arbeit mit git-Rückgrat
Die Werkstatt ist ein dauerhafter Arbeitsbereich, in den Norminator Repositories klont und in dem er liest, sucht, ändert, testet, committet und pusht — im Käfig: Jeder Pfad wird gegen die Werkstatt-Wurzel geprüft (Symlink-Ausbruch eingeschlossen), Repositories kommen nur aus einer Freigabeliste des Admins, und Schreibrechte sind je Arbeiter auf genau ein Repository begrenzt.
Der Werkzeugsatz deckt den ganzen Bogen ab: klonen, Status und Diff lesen, Dateien lesen (mit Zeilennummern, in Ausschnitten), suchen (Dateimuster und Inhalt in einem), gezielt bearbeiten (per Textanker oder Zeilenbereich — die Ära des „zehntausend Zeichen zeichengenau wiederholen” ist Geschichte), schreiben, gezielt testen (pytest, in einer geschrubbten Umgebung ohne Schlüssel, mit Zeitlimit), committen, pushen, aktualisieren und — nur auf ausdrückliche Ansage — verwerfen.
Dabei gilt eine eiserne Regel: Lesen vor Schreiben ist Pflicht und wird geprüft. Nur wer eine Datei vollständig gelesen hat, darf sie bearbeiten. Und ein Grundsatz aus dem Handwerkszeug jedes guten Entwicklers gilt auch hier:
Ein Fix ohne grünen Test ist eine Behauptung.
Die Hausordnung gehört dazu: Eine Kladde nimmt alles auf, was nicht ins Repository gehört, und räumt sich nach sieben Tagen selbst. Fremde Reste aus früheren Sitzungen werden gemeldet — nie still überarbeitet, nie automatisch verworfen. Im Werkstatt-Tab steht die Belegung je Repository: Branch, letzter Commit, offene Änderungen, „N Commits nicht gepusht”, „N hinter dem Remote” — mit Knöpfen zum Pushen, Aktualisieren, Verwerfen. Jeder Knopfdruck misst danach nach und sagt, was wirklich ist.
Die Werkstatt-Bilanz: gemessen, nicht behauptet
Hier liegt der Punkt, der diesem Artikel den Titel gab. Am Anfang jedes Zuges bekommt das Modell den gemessenen Stand als Regel mit auf den Weg: „committed”, „gepusht”, „sauber” darf es nur sagen, wenn diese Bilanz es hergibt. Am Ende des Zuges wird erneut gemessen — per git status, nicht per Erinnerung. Widerspricht die Antwort der Messung, hängt der Rahmen eine markierte Richtigstellung an. Der Chip unter der Antwort — „gemessen 21:39 Uhr per git” — überlebt sogar das Neuladen.
Damit ist die häufigste KI-Krankheit im Entwickleralltag ausgeschlossen: das selbstbewusste „ist committed und gepusht”, während in Wahrheit nichts gesichert war.
Der Schwarm in der Werkstatt
Lesende Arbeiter — Analyse, Audit — laufen parallel. Schreibende Arbeiter sind je Repository exklusiv: genau einer, die Grenze zieht das Werkzeug selbst, und der Änderungsbericht kommt aus dem git-Stand vorher/nachher — nicht aus der Erzählung des Arbeiters. Committen und pushen bleibt dem Hauptmodell vorbehalten. Und der Stop-Knopf reißt wirklich alles: Runden, Werkzeuge, jeden gestreamten Token — inklusive der Kindprozesse wie Klonen, Fetch, Push und Tests.
Der Determinismus: was das Ganze sicher macht
Hinter all dem steht ein einziges Muster, das sich überall wiederholt:
- Erkennen ohne Modell — per Regex, Wortlisten, git, Messung. Kein KI-Urteil, wo eine Messung reicht.
- Handeln im Loop — Text zurückhalten, verwerfen, einen Werkzeugaufruf selbst zusammensetzen, ein Werkzeug sperren, einen Zwischenstand retten, einen ehrlichen Hinweis anhängen.
- Sichtbar machen — Qualitätsprotokoll, Chip, Log.
- Fail-open mit Deckel — nichts hängt, jeder Eingriff hat eine Obergrenze.
- Getestet — jeder Wächter hat seine eigene Testdatei.
Das Ergebnis ist ein Kranz von Wächtern, die rund um das Modell arbeiten. Die vollständige Liste:
| Wächter | Erkennt (deterministisch) | Tut | Sichtbar als |
|---|---|---|---|
| Wiederholungssperre | Rundentext ist Kopie oder Präfix eines früheren (auch ähnlich, ab 60 % Überlappung) | hält die Kopie im Strom zurück, zeigt nur Neues; ab dem 2. Mal Hinweis ans Modell | „Wortgleiche Wiederholung ausgeblendet” |
| Ankündigungs-Nachschub | „Ich erstelle jetzt …” ohne Werkzeugaufruf | erzwingt eine Werkzeugrunde; ein zweites leeres Versprechen wird zur Standmeldung | „Ankündigung statt Ergebnis — hole die Standmeldung” |
| Codeblock-Nachschub | großer Codeblock im Chat, obwohl der Code-Worker existiert | ein Hinweis, eine Halte-Runde | Protokoll |
| Kreislaufbremse | Runden ohne neue Ergebnisse oder nur Fehler in Folge | Hinweis ab 2, Schluss ab 5 | „Kreislauf” |
| Lesedeckel | Werkstatt-Lesen Runde um Runde ohne Handlung | Lesewerkzeuge für eine Aktionsrunde zu, Schwarm als Ausweg genannt | „Lesedeckel” |
| Kontextwächter | Verlauf über der Grenze | Stummel für älteste Ergebnisse, Denken raus, notfalls Standmeldung | „Verlauf gekürzt”, Chip „· N gekürzt” |
| Kontextstand | jeder Aufruf | misst und eicht an den gemeldeten Token | Chip, Ampel, Belegung |
| Recherche-Pflicht | Fach- oder Webfrage ohne Nachschlagen | hält die Antwort zurück, der Loop ruft Rechtskataster, Wissensbasis oder Websuche selbst | „Ohne Recherche geantwortet — hole … nach” |
| Schwarm-Empfehlung | Plan über mehrere Repos, Bereiche oder Themen | Empfehlung im Plan; serielle Einzelrecherche wird angehalten, bis der Schwarm läuft | „Serielle Recherche angehalten — Schwarm zuerst” |
| Rückfrage-Wächter | eine Rückfrage, die als Fließtext statt als Dialog erscheint | hält den Text zurück und stellt die Frage als echte Rückfrage mit Antwortknöpfen | „Rückfrage stand als Text da — stelle sie als Frage” |
| Projektkontext-Wahrheit | „Vorschlag liegt zur Übernahme bereit” ohne dass einer erstellt wurde | Nachschub — sonst ehrlicher Hinweis unter der Antwort; Spur im Verlauf | „Projektkontext angemahnt” |
| Werkstatt-Bilanz | git-Stand vs. Behauptung in der Antwort | Richtigstellung als Schlusstext | Chip, zweite Blase |
| Werkzeug-Isolation | jede Ausnahme in einem Werkzeug | Werkzeugfehler statt Laufabbruch — das Modell liest den Grund | „Werkzeug gescheitert — …” |
| Notlandung | Anbieterkette erschöpft nach getaner Arbeit | Zwischenstand als Teilergebnis zurückgeben, Pause vor dem zweiten Versuch | Schwarm-Panel „Teilergebnis” |
| Zu lange Aufrufe | Ausgabelimit erreicht, Werkzeugaufruf abgeschnitten | „kleiner machen” — nach dem 2. Mal Abbruch mit ehrlichem Satz | Protokoll |
| Stillstand-Wachhund | 120 Sekunden kein Token bei offener Verbindung | Anbieterwechsel, Strom sauber zurücksetzen | Protokoll |
| Stop auf Zuruf | Stop-Knopf | Abbruch an jeder Grenze, Kindprozesse beendet, Antwort trotzdem gesichert | Banner, gespeicherte Antwort |
| Gesehen bleibt | Zugende | Mitschrift des Stroms wird gespeichert, nicht nur die letzte Runde | Antwort nach dem Neuladen |
| Nutzertext kompakt | Terminal-Paste | Weißraum-Regeln beim Einfügen, Senden, Anzeigen, Speichern | Blase |
Dahinter steht die Entwicklungsdisziplin, die das absichert: der Kopien-Vertrag (135 byte-gleiche Dateien zwischen den Installationen, maschinell geprüft), die Deploy-Schranke (die volle Testsuite im Container gegen die Baseline — 1.110 Tests im einen Haus, 1.017 im anderen), ein Umlaut-Wächter (sichtbare Texte deutsch, Werte auf der Leitung ASCII) und Patches, die im Frischklon per git verifiziert und mit Zählprobe abgenommen werden.
Ehrliche Restgrenzen
Transparenz gehört auch dahin, wo das System endet. Drei Grenzen benennen wir ausdrücklich:
Deterministisch ist die Form, nicht der Inhalt. Den Text eines Projektkontext-Vorschlags, die Formulierung eines Schwarm-Auftrags, die Suchbegriffe einer Recherche — das schreibt das Modell. Die Wächter sorgen dafür, dass es passiert, dass es sichtbar ist und dass nichts behauptet wird, was nicht stattfand. Die Qualität des Inhalts bleibt eine Modellfrage; die Wahrheit über den Vorgang ist eine Messfrage — und die ist gelöst.
Wortlisten sind Regeln, keine Naturgesetze. Recherche-Klassen, Ankündigungs-Muster, Entwicklungs-Vokabular: Sie werden nachgeschärft, wenn ein Fall durchrutscht. Jeder gemeldete Fall wird ein Test.
Die Zahl der Anbieter ist endlich. Sind alle Fallback-Anbieter gleichzeitig weg, gibt es ein sauber gesichertes Teilergebnis — kein Wunder. Auch das ist eine Haltung: lieber ein ehrlicher Zwischenstand als eine glatte Antwort ohne Substanz.
Der rote Faden
Man kann dieses System von oben nach unten lesen und findet überall dieselbe Haltung. Der Chip misst, statt zu schätzen. Der Kontextwächter kürzt, bevor die Grenze reißt — und sagt, dass er es tat. Die Werkstatt-Bilanz wird per git gemessen, nicht aus dem Gedächtnis behauptet. Die Wächter erkennen ohne Modell, handeln mit Deckel und machen jeden Eingriff sichtbar.
Für ein Werkzeug im Qualitätsmanagement ist das keine Spielerei, sondern die Voraussetzung: Eine Antwort, deren Entstehung man prüfen kann, ist mehr wert als eine, die nur gut klingt. Gemessen, nicht behauptet — das gilt für das Managementsystem unserer Kunden genauso wie für den Assistenten, der dabei hilft.