Der Standup — einmal am Tag
Menschen haben Sprechzeiten. Agenten haben Budgets. Dazwischen liegt ein fester Standup.
Alles, was auf Sie wartet, steht in der ersten Zeile des Boards und in einem Befehl:
python3 tools/shoalmark/shoalmark.py --standup
Er gibt die Tagesordnung eines Standups aus, nach Art geordnet: zuerst Entscheidungen (antworten Sie; eine vorläufige Antwort ist eine Antwort), dann was nur Ihre Hände tun können, in der Reihenfolge, die am meisten Arbeit freigibt, dann was Belege klären könnten, ohne Sie, dann Knöpfe. Jeder Punkt ist eine Frage, mit der Wartezeit und dem, was sie aufhält. Nach den Fragen kommen Ihre Handlungen, mit ihrer Zeit — versäumte und überfällige zuerst, dann was fällig wird, dann was noch keinen Termin hat — und zuletzt, was Sie beantwortet oder getan haben und was unterwegs zu Ihrem Merge ist.
Wann
standup = "09:00" # in shoalmark.toml — Ortszeit
standup_minutes = 15
Die erste Zeile der Tagesordnung trägt diese Uhrzeit und Dauer. Den Termin in Ihrem Kalender legen Sie selbst an: das Werkzeug schreibt keine Kalenderdatei und zeigt keine Benachrichtigung (R9). Mehrere Repositories? Ein Standup kann sie alle halten: der nächste Abschnitt.
Mehrere Repositories, ein Standup
python3 tools/shoalmark/shoalmark.py --standup ~/code/notes-app ~/work/client-site ~/code/side-project
Eine Tagesordnung, nach Art geordnet, über die Repositories, die Sie nennen — jeder Punkt mit seinem Repository. Jedes wird gelesen, wie es steht: ein git-Repository mit seinem Branch und seinem Commit, eine Subversion-Arbeitskopie mit ihrer Revision, ein einfacher Ordner, wie er ist. Ein Ordner, der sich nicht lesen lässt, wird mit dem Grund genannt und nirgends gezählt. Jede Zahl gehört einem Repository und wird dann addiert: FM-001 in zwei Repositories sind zwei Punkte.
Es führt nichts von ihnen aus — kein eigenes Werkzeug eines Repositorys, keinen Deriver, keinen Hook und kein
konfiguriertes Programm, und es holt nichts — und es schreibt nichts, weder in einem Repository noch anderswo. git und svn
startet es aus den absoluten Einträgen von PATH außerhalb der genannten Repositories; wo keiner eines enthält, werden die
Ordner, die es brauchen, mit dem Grund genannt. Es sagt,
was dadurch ungelesen bleibt: ob ein git-Arbeitsbaum Änderungen hat, was git status dort sagt; und was das eigene
--standup eines Repositorys auf diesen Wegen liest — was Sie beantwortet oder getan haben und auf einem Antwort-Branch
unterwegs ist (eine Frage, die Sie beantwortet haben, steht hier bis zu Ihrem Merge), die Warteschlange der Pull
Requests und, wo ein Repository [seats] hat, wer gefragt hat. Sie antworten in jedem Repository wie bisher, und sein
eigenes --standup dort sagt den Rest.
Auf dem Board trägt der Kasten mit dem, was auf Sie wartet, zwei Knöpfe: Standup-Prompt vor den Sitzungen des letzten Tages und Abschluss-Prompt an seinem Ende. Jeder kopiert einen festen Prompt für die Sitzung, die Sie nutzen — Claude Code, Codex oder eine andere: der eine bittet sie, Ihren Standup nach dieser Tagesordnung zu halten, einen Punkt nach dem anderen; der andere, den Tag aus dem Verlauf vorzulesen und nichts zu ändern. Keiner führt etwas aus, und eine Nachricht ist nie eine Antwort: Ihre Entscheidung hält der Befehl fest, den Sie selbst ausführen. Die Prompts sind englisch.
Was die Agenten damit tun
Vor dem Standup steht jede Frage an Sie als ask: im Arbeitspaket: ein Satz, den Sie beantworten können. Zwischen den
Standups unterbricht Sie niemand, außer für etwas, das sich nicht rückgängig machen lässt. Die letzte Nachricht jeder
Session endet mit --owner: dieselbe Liste, damit sie zu Ihnen kommt, ohne dass Sie etwas öffnen.
Antworten
Auf dem Board trägt jede Frage annehmen und ablehnen. Beides öffnet einen Dialog mit der Frage, ihren
Möglichkeiten (die vom Agenten empfohlene zuerst) und dem, was sie aufhält; beim Annehmen können Sie eine Änderung
mitgeben, beim Ablehnen sagen Sie, warum. OK gibt Ihnen einen Befehl — python3 tools/shoalmark/shoalmark.py --answer
AP-007 accept —, der Ihre Antwort als Commit schreibt, mit Ihrem Schlüssel signiert, sobald Sie das Signieren
einschalten. Die Antwort ist Ihr eigener Commit: Ihre Antwort ist Ihr Commit.
Ihre Handlungen, mit ihrer Zeit
Manche Antworten sind Zusagen: ja, ich lese die Produktion um sieben. Was folgt, ist eine Handlung, die nur Sie tun
können, und sie hat eine Zeit — due: im Arbeitspaket, und ein Fenster danach (window:, 60 Minuten, wenn nichts
anderes dasteht). Das Board listet Ihre Handlungen unter den Fragen, jede fällig, überfällig nach ihrer Zeit
oder versäumt, wenn ihr Fenster ohne Ergebnis verstrichen ist. Eine zugesagte Handlung steht als Ihre Zusage da — die
Option, die Sie gewählt haben —, die Frage, die sie beantwortet, klein darunter. Jede trägt zwei Knöpfe: erledigt fragt, wo das
Ergebnis liegt — der Pfad genügt: der Eintrag ergänzt, was das Repository über die Datei weiß, wer sie wann hinzugefügt
hat und bei einer Prüfung ihr Urteil —, und gibt Ihnen python3 tools/shoalmark/shoalmark.py --done AP-007 "evidence/AP-007/read.md";
verschieben fragt nach der neuen Zeit und gibt Ihnen --due AP-007 <Zeit>. Beides wird signiert und gepusht wie
eine Antwort.
Unterwegs — vor Ihrem Merge
Was Sie beantworten oder tun, ist ein signierter Commit auf answer/<id>, gepusht; der Standardzweig hat ihn erst nach
Ihrem Merge. Bis dahin liest das Board git, und die Seite, auf die Sie zurückkommen, zeigt es sofort: die Frage verlässt
wartet auf Sie, die Handlung verlässt Ihre Handlungen, und beide stehen unter unterwegs — Ihre Zusage oder Ihre
Antwort zuerst, dann was es ist: beantwortet, unterwegs, erledigt, unterwegs — python3 tools/shoalmark/shoalmark.py --revoke AP-007 "<warum>" —
einen neuen signierten Commit darauf, auf demselben Zweig, nie ein Überschreiben. Eine Verschiebung trägt keinen; um sie
noch einmal zu verschieben, führen Sie --due auf ihrem Zweig aus. Nach Ihrem Merge liest jede wieder vom
Standardzweig; ein anderer Rechner zeigt nach einem Fetch dieselben Zeilen.
Einladungen und Benachrichtigungen gibt es nicht mehr (R9): --invite, --notify und --standup DATEI.ics sagen das
in einer Zeile. Wo eine frühere Version eine Kalenderdatei, einen Zeitplan oder seinen Zustand auf Ihrem Rechner
hinterlassen hat, nennen --standup und --owner jedes Stück, bis Sie es entfernen, und das README sagt, wie.
Welches Review unabhängig war
Bevor Arbeit bei Ihnen zum Mergen ankommt, prüft sie ein Reviewer, und sein Urteils-Commit nennt den Stand, den er
geprüft hat (Reviewed: <sha>). Jeder Commit eines Agenten nennt außerdem seine Session. Deshalb zählt das Board die
Urteile der Woche: unabhängig — der Reviewer lief in einer anderen Session als der, die die Arbeit gebaut hat —
oder gleiche Session — ein Sub-Agent der Session des Erbauers, also eine zweite Meinung aus demselben Lauf. Ein
READY ist so viel wert, wie seine Zählung sagt; Sie sehen sie, bevor Sie auf Merge drücken.