Lektion 03 · Planung

Der Agent verwaltet seinen eigenen Fortschritt

"The agent can track its own progress — and I can see it." Den Agenten eine eigene Checkliste schreiben lassen — und ihn mit einem kleinen Mechanismus daran erinnern, sie aktuell zu halten.

⏱ ~10 Min · 📝 3 interaktive Widgets · 🧑‍💻 Basiert auf shareAI-lab · s03_todo_write.py

Strukturiertes Self-Planning

Claude Code muss bei der Arbeit oft mehrere Schritte ausführen: grep für Referenzen → ein paar Dateien lesen → Code ändern → Tests ausführen. Lässt man das Modell "nach Gefühl" vorgehen, arbeitet es die ersten Schritte ordentlich ab, verliert dann den Faden und gibt halbfertig auf.

Die Lösung in s03: ein Checklisten-Tool. Das Modell ruft das todo-Tool auf, um Aufgaben einzutragen; TodoManager validiert die Struktur, persistiert sie und gibt die aktuelle Ansicht zurück. Zwei Vorteile:

  • Das Modell wird gezwungen, "was zu tun ist" explizit zu formulieren — das allein hilft ihm, den Überblick zu behalten.
  • Menschen können sehen, was das Modell plant. Debugging wird zehnmal einfacher.
# TODO-Ansicht, jedes Element strukturiert
[ ] #1: grep "TODO" across src/
[>] #2: read src/app.py and list comments     # in Bearbeitung
[ ] #3: generate summary markdown
[ ] #4: write to TODO_LIST.md

(0/4 completed)

Eine harte Regel: immer nur ein in_progress

TodoManager.update() enthält eine Prüfung:

if in_progress_count > 1:
    raise ValueError("Only one task can be in_progress at a time")

Das klingt streng, hilft aber dem Modell. Erlaubt man gleichzeitig drei "in Bearbeitung", eröffnet es überall Fronten und schließt nichts ab. Erzwingt man sequenzielle Bearbeitung, muss es jeden Schritt abschließen, bevor es den nächsten beginnt.

Das folgende Widget lässt dich verschiedene Todo-Payloads absenden und zeigt, welche die Validierung bestehen.

Nag Reminder: nach 3 Runden ohne Update — anstoßen

Selbst mit Todo-Tool vergisst das Modell manchmal die Aktualisierung — es arbeitet viel, aber in_progress bleibt bei Eintrag 2 stecken. Die Lösung in s03: ein einfacher Zähler:

rounds_since_todo = 0
while True:
    response = LLM(messages, tools)
    ...
    used_todo = any(b.name == "todo" for b in tool_uses)
    rounds_since_todo = 0 if used_todo else rounds_since_todo + 1
    if rounds_since_todo >= 3:
        results.append({"type":"text", "text":"<reminder>Update your todos.</reminder>"})

Bei Zählerstand 3 wird in der nächsten User-Message ein Reminder eingebettet. Das Modell reagiert darauf und aktualisiert das Todo. Dies ist ein Engineering-Ansatz, um eine weiche Anforderung ("bitte Todo aktuell halten") in einen harten Stimulus umzuwandeln.

Wie heißt dieses Muster?

In der Agent-Design-Community heißt das structured self-planning with soft nudges — dem Modell einen strukturierten Zustand geben, den es beschreiben muss, ergänzt durch zeitgemäße Reminder. Claude Code verwendet intern ein ähnliches Muster, aber zurückhaltender (geringere Frequenz, neutralere Formulierung).

Warum nicht einfach "Todo immer aktuell halten" ins System-Prompt schreiben? Das geht, aber die Befolgung von allgemeinen Anweisungen im System-Prompt nimmt mit zunehmender Konversationslänge ab. Anweisungen als wiederholt injizierte Reminder sind deutlich stabiler.
Interaktiv

Widget 1 · Kanban · Todo-Entwicklung nach Runden

Step klicken und beobachten, wie Aufgaben von pending zu in_progress zu completed wandern. Beachte: in_progress ist immer nur einmal besetzt.

[ ] pending
[>] in_progress
[x] completed
Bereit zum Start...
Interaktiv

Widget 2 · Validierung · Welche Todo-Payloads bestehen?

Das Modell übergibt beim Aufruf des todo-Tools ein items-Array. TodoManager führt folgende Prüfungen durch: text nicht leer, status gültig, maximal ein in_progress, Gesamtzahl ≤ 20.

0 / 5 richtig
Interaktiv

Widget 3 · Nag Counter · Was passiert nach 3 Runden ohne Todo-Update?

Next Turn klicken und den Zähler beobachten. Jede Runde wählt zufällig, ob das Modell todo aufruft — genau wie in der Realität.

rounds_since_todo: 0