Human in the Loop (Mensch im Kreislauf)
Schicht von Einmal-Interfaces zwischen Eigentümer und Agent. Der Agent beschreibt, was der Eigentümer prüfen und entscheiden muss, ein Skript baut eine autarke HTML-Seite, der Eigentümer antwortet im Browser in beliebiger Reihenfolge und gibt ein JSON zurück. Die Seite wird nicht von Hand geschrieben: nur spec.json und scripts/build.py.
$SKILL bezeichnet den Ordner dieser Datei.
Wann einsetzen
- Dokument zur Genehmigung: Spezifikation, PRD, Angebot, Plan. Status pro Abschnitt, direkte Textbearbeitung, Antworten auf offene Fragen.
- Auswahl aus Optionen zu mehreren Fragen gleichzeitig, jede Frage hat Optionen des Agenten und eine eigene Antwort.
- Blindlabel für Referenz: Der Eigentümer antwortet, die Antworten des Modells liegen in einer separaten Datei und werden nicht auf die Seite übernommen; später berechnet
score.pydie Übereinstimmung. - Bewertung von Vorschlägen auf einer Skala.
Bei ein oder zwei Fragen direkt im Chat fragen.
Ablauf
- Spec. Erstelle
spec.json(Format:references/spec-format.md). Für ein Markdown-Dokument gibt es eine Vorlage:python3 $SKILL/scripts/from_markdown.py doc.md --options options.json -o spec.json(Abschnitte##und###werden zu bearbeitbaren Blöcken, der Abschnitt „Offene Fragen“ wird zu Fragen mit Optionen aus options.json). Für Blindlabel lege die versteckten Antworten in eine separatesidecar.json; in der spec.json dürfen sie nicht vorkommen. - Seite.
python3 $SKILL/scripts/build.py spec.json -o page.htmlerstellt und öffnet die Seite. Lege spec und Seite neben dem Projekt ab (z. B. inprivate/), nicht im Scratchpad, damit der Eigentümer zurückkehren kann. Teile dem Eigentümer in einer Zeile mit, was geöffnet ist und was von ihm erwartet wird. - Eigentümer antwortet und fügt im Chat das JSON ein (Schaltfläche „JSON für Agenten kopieren“). Im JSON steht nur das, was er bearbeitet hat:
status,comment,markdown_old/markdown_new,answers,notes, plusdecisionundgeneral_comment. - Agent wendet an die Antworten anhand des
task-Felds aus dem JSON und berichtet, was geändert wurde und was noch offen ist. Ein leererdecisionbei vorhandenen Entscheidungs-Buttons bedeutet, dass keine Entscheidung getroffen wurde: Nachfragen, das Dokument nicht als genehmigt betrachten. Für Labeln: JSON speichern und ausführen:python3 $SKILL/scripts/score.py labels.json sidecar.json --spec spec.json. Abweichungen dem Eigentümer als Liste zeigen, Label-Fehler nicht selbst korrigieren.
Wenn sich die spec ändert, wird die Seite neu gebaut; alte Antworten im Browser werden nicht auf die neue Version angewendet.
Test
python3 $SKILL/tests/selftest.py [ordner] baut beide Beispiele aus examples/, durchläuft sie im headless Chromium und prüft die Ausgaben. Nach jeder Änderung an Vorlage oder Skripten ausführen.