Lektion 07 · Gedächtnis

Zustand auf Disk schreiben — Komprimierung überleben

"State that survives compression — because it's outside the conversation."

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

Was ist der Unterschied zwischen TodoWrite und Task?

Der TodoManager aus s03 kann ebenfalls Aufgaben auflisten — aber er speichert sie im Arbeitsspeicher. Wenn auto_compact aus s06 ausgelöst wird und messages[] durch ein Summary ersetzt wird, gehen die In-Memory-Daten des TodoManagers verloren.

Das Task-System aus s07 funktioniert anders: Jede Task ist eine .tasks/task_42.json-Datei. Egal ob Context komprimiert, Prozess neugestartet oder Agent ausgewechselt wird — solange die Datei existiert, existiert die Aufgabe.

# .tasks/task_12.json
{
  "id": 12,
  "subject": "Refactor auth middleware",
  "description": "Extract JWT logic to shared module",
  "status": "pending",
  "blockedBy": [8, 11],   # erst wenn #8 und #11 abgeschlossen
  "owner": ""
}
Entscheidungsregel: Temporäre Todos (nach dieser Sitzung vergessen) → todo; persistente Aufgaben (sitzungsübergreifend, mit Abhängigkeiten) → task.

blockedBy · Das Abhängigkeits-Verhalten

blockedBy ist eine Liste von Task-IDs — die müssen alle completed sein, bevor die aktuelle Task ausführbar ist.

Ein elegantes Detail in s07: Beim Abschließen einer Task entfernt sich diese automatisch aus den blockedBy-Listen aller anderen Tasks.

def _clear_dependency(self, completed_id: int):
    # Scan every task, remove completed_id from their blockedBy
    for f in self.dir.glob("task_*.json"):
        task = json.loads(f.read_text())
        if completed_id in task.get("blockedBy", []):
            task["blockedBy"].remove(completed_id)
            self._save(task)

Der Agent muss keine separate Tabelle für freigeschaltete Tasks pflegen — einfach .tasks/ durchsuchen und Tasks mit status=="pending" and not blockedBy finden.

Abhängigkeitsgraph interaktiv erkunden

Das folgende Widget zeigt 5 Tasks mit Abhängigkeiten. Complete drücken und beobachten, wie blockedBy aktualisiert wird und welche Tasks grün (ausführbar) werden.

Überlebt Komprimierung?

auto_compact ersetzt messages[] durch ein Summary. Tasks sind davon unberührt — sie liegen auf Disk. Teste es: 5 Tasks erstellt, Konversation komprimiert, Agent scannt .tasks/ und arbeitet direkt weiter.

Interaktiv

Widget 1 · Dependency Graph · Complete klicken und Abhängigkeiten beobachten

5 Tasks mit Abhängigkeiten. Eine pending Task starten oder abschließen — beobachte, wie blockedBy-Arrays und die Liste ausführbarer Tasks sich ändern.

Task-Liste (.tasks/ Verzeichnis)
Aktuell ausführbar (status=pending, blockedBy=[])
Abhängigkeitsdiagramm
Interaktiv

Widget 2 · Compression Survival · Tasks überleben auto_compact

3 Tasks erstellen, dann auto_compact auslösen (messages leeren) und wiederherstellen — sind die Tasks noch da?

.tasks/ Verzeichnis
messages[]
Interaktiv

Widget 3 · Dependency Chain · Welche Tasks sind gerade ausführbar?

5 Tasks mit Abhängigkeiten. Frage: Welche Tasks können jetzt begonnen werden (möglicherweise mehrere)?

0 / 4 richtig