Sitzungsabschluss (projektbewusst)

Projektbewusster End-of-Session-Abschluss – aktualisiert die Read-First-Handoff-Memory und zeigt MEMORY.md neu (funktioniert für JEDES Projekt), synchronisiert dann den Zustandsspeicher des AKTUELLEN Projekts, falls vorhanden. Verwenden Sie dies am Ende einer Sitzung, bei hohem Kontext (~70 %+) oder mit Befehlen wie „save context“, „prepare handoff“, „wrap up“, „save the session“. Mid-Session-Auto-Checkpoints sind enthalten.

Was ist Sitzungsabschluss (projektbewusst)?

Session Wrap ist ein projektbewusstes Abschlussskill, das speziell für KI-Assistenten wie Claude Code entwickelt wurde, um den Kontextverlust zwischen Sitzungen zu verhindern. Es besteht aus drei Teilen: (1) Ein universelles Handoff-Memory, das die aktuellen Projekt-SHAs, Entscheidungen und nächsten Arbeitsschritte speichert, (2) ein projektspezifischer Zustandsspeicher-Sync, der entweder eine PostgreSQL-Datenbank oder einen anderen Datenspeicher aktualisiert, und (3) die Ausgabe eines Resume-Prompts, den der Benutzer beim nächsten Start in Claude einfügt. Mid-Session-Herzschlag-Checkpoints sichern den Fortschritt nach jeder Teilaufgabe, sodass ein Absturz höchstens einen Schritt kostet. Das Skill unterstützt jedes Projekt und erkennt automatisch das aktuelle Arbeitsverzeichnis, um die richtige Route zu wählen – sei es eine Datenbank, ein Live-System oder ein speicherbasierter Workflow.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/butterpurse-dot/claude-code-crashproof-handoff/tree/HEAD/skills/session-wrap

Installed? Explore more Produktivität & Zusammenarbeit skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht Sitzungsabschluss (projektbewusst)?

Zwei Teile: §1 ist universell; §2 leitet je nach Projekt weiter (Zustandstabellen sind projektspezifisch — niemals Tabellen eines Projekts für ein anderes schreiben). §0 = Mid-Session-Herzschlag (siehe unten). <MEM> = das Memory-Verzeichnis, das durch bash ~/.claude/hooks/session-resume.sh --dir ausgegeben wird.

Vor jedem SPEICHERN redigieren (Herzschlag, Handoff-Memory, Regeln/Aktuell-Dateien, DB-Zeilen, Resume-Prompt): API-Schlüssel, Tokens, Passwörter, private Schlüssel, Kontonummern und -salden, personenbezogene Daten, alles, was Live-Konten identifiziert, entfernen. Schreiben Sie <REDACTED — siehe Tresor> oder paraphrasieren Sie („Live-Saldo verifiziert, hier nicht erfasst“). Die Benennung, WO der echte Wert lebt, ist in Ordnung; der Wert selbst nicht. Gleiches Muster wie die Guardrail-Paraphrase-Regel in §2 — beide beachten.

0. Herzschlag-Checkpoint — MID-SESSION (nur Handoff-Memory)

Nach jeder abgeschlossenen Teilaufgabe und VOR jedem langen/riskanten Schritt (großes Refactoring, Deployment, DB-Migration) nur die §1-Handoff-Datei des aktuellen Projekts aktualisieren (ggf. neu erstellen): einen ## LIVE STATE (Herzschlag)-Block — was gerade abgeschlossen wurde, was in Bearbeitung ist, der nächste Schritt. Vorherigen Block ersetzen, niemals anhängen; Ziel <15 geschriebene Zeilen. Halten Sie die Überschrift exakt ein: Der Hook erwartet sie.

  • MEMORY.md NICHT neu taggen, keine Datenbank berühren oder den Resume-Prompt ausgeben – diese bleiben am Ende der Sitzung (§1-Tag, §2, §3). Beim Abschluss den Block in den verifizierten Zustand überführen und löschen.
  • Ein Absturz zu jedem Zeitpunkt kostet jetzt höchstens einen Schritt Erinnerung. session-resume.sh listet jedes Handoff, das den Block noch enthält, beim nächsten Start als UNWRAPPED HEARTBEAT auf, sodass auch eine ungetaggte erste Herzschlag-Datei noch gefunden wird.

1. Handoff-Memory — IMMER (beliebiges Projekt)

<MEM>/project_<proj>_handoff_<YYYYMMDD>.md schreiben/aktualisieren: verifizierter Zustand (wichtige SHAs, was gelandet ist, OFFENE Entscheidungen, geordnete nächste Arbeiten, Vorgaben). In <MEM>/MEMORY.md die Indexzeile mit ★READ FIRST FOR <PROJECT> (aktuell)★ taggen; die vorherige als „(ersetzt)“ markieren. Alte Handoffs bleiben auf der Festplatte: Die Ersetzungskette ist die Projekthistorie.

  • Der SessionStart-Hook ~/.claude/hooks/session-resume.sh ist PROJEKTUNABHÄNGIG: Er injiziert JEDE Zeile, die auf READ FIRST FOR <IRGENDEIN PROJEKT> passt und nicht als ersetzt markiert ist → das Taggen der Zeile IST die Resume-Garantie für JEDES Projekt (kein projektspezifischer Hook nötig). Behalten Sie den Hook, auch wenn MEMORY.md automatisch geladen wird: Er fügt die Anweisung „Handoff VOR dem Arbeiten lesen“ hinzu, funktioniert von jedem Verzeichnis aus und überlebt, wenn MEMORY.md über das 200-Zeilen-Ladelimit hinauswächst. Er warnt auch, wenn ein Projekt zwei Live-Zeiger oder einen Zeiger auf eine fehlende Datei hat – diese beim Abschluss korrigieren.

Regeln weitertragen. Jede neue Eigentümerregel, dauerhafte Anweisung, funktionierender Befehl oder bezahlte Lektion geht sofort in die immer geladene Regeln-Datei dieses Projekts ein, nicht nur in ein Handoff. Regeln-Datei: <MEM>/<proj>_rules.md, wird von session-resume.sh vollständig geladen für jedes Projekt, das in <MEM>/session-wrap.conf aufgeführt ist. Kurz halten; ersetzen statt anhängen. Beim Abschluss prüfen: Alles, was der Eigentümer in dieser Sitzung wiederholen musste, muss jetzt darin sein. Auch <MEM>/<proj>_now.md umschreiben (aktueller Zustand und nächste Schritte, kurz halten: Hook-Kontext wird bei etwa 10.000 Zeichen abgeschnitten).

2. Projekt-Zustandsspeicher-Sync — ROUTE zuerst

Projekt aus cwd / der Arbeit dieser Sitzung erkennen. Dann der Route dieses Projekts folgen. Eine ###-Route pro eigenem Projekt hinzufügen; die drei unten sind die Muster.

→ dessen eigene Datenbank

Mit Anmeldedaten aus der Umgebung verbinden (psql "$PROJECT_DB_URL"), niemals ein Literal im Befehl. Beispieltabellen in examples/state-store.sql:

INSERT INTO session_handoff (session_id, handoff_prompt, created_at) VALUES ('<sid>','<resume>',now());
INSERT INTO decisions (title,rationale,applies_to,status,session,"timestamp",decided_at)
  VALUES ('<d>','<why>','<project>','implemented','<sid>',now()::text,now());   -- ein INSERT pro Zeile
INSERT INTO code_map (module,path,lines,purpose,bounded_context) VALUES (...);  -- DELETE the path first if no unique constraint

GOTCHAS (hier eigene Speicher-Gotchas eintragen; dies sind die Art, die jeweils eine Sitzung kosten): Keyword-benannte Spalten in Anführungszeichen setzen (decisions."timestamp"; für reservierte Wörter wie "order" erforderlich, sonst harmlos) und deren Typ beachten (hier text + NOT NULL, daher now()::text); eine CHECK-constraint-Spalte akzeptiert NUR ihre aufgelisteten Werte (pending|implemented|superseded|deferred|rejected); nicht davon ausgehen, dass eine Tabelle existiert – zuerst \d ausführen; mehrzeiliges VALUES ist atomar, daher ein fehlerhafter Zeile verwirft alle → zeilenweise mit -v ON_ERROR_STOP=off arbeiten. Guardrail-Fehlalarm: Ein PreToolUse-Hook, der gefährliche Befehle blockiert, durchsucht den GESAMTEN Bash-Befehl – wenn Ihr SQL-Text ein wörtliches blockiertes Muster enthält (reset --hard, git push, git clean), wird der GESAMTE Befehl BLOCKIERT. Solche Zeichenfolgen in Handoff-/Entscheidungstext paraphrasieren (z. B. „destruktives git“ nicht das wörtliche).

<Projekt, das live läuft> → dessen eigener Speicher (NICHT eines anderen Projekts)

Schema VOR dem Schreiben ÜBERPRÜFEN; Notizen dazu werden schnell alt. Live-Infrastruktur – das externe System of Record (Zahlungsanbieter, Produktions-DB, der laufende Dienst) ist die Wahrheit, nicht das Handoff; niemals ein Live-Flag oder eine Live-Einstellung als Teil eines Abschlusses umschalten.

→ nur Memory

Kein DB-Zustandsspeicher – das §1-Handoff-Memory IST die Aufzeichnung. Dies notieren; keine Tabellen anderer Projekte schreiben.

3. RESUME-PROMPT ausgeben (das letzte Artefakt – was der Benutzer in den nächsten Claude einfügt)

Nach dem Speichern eine eingerahmte Copy-Paste-Aufforderung für die nächste Sitzung AUSGEBEN. Der SessionStart-Hook injiziert bereits den Handoff-Zeiger, daher fügt dieser Prompt nur hinzu: erneute Lade-Prüfungen + die OFFENE(N) Entscheidung(en), die der Benutzer treffen muss. Vorlage:

Resume <Projekt>. Lies zuerst Memory <handoff-file>, dann Skill /<project-map-skill>.
Verifizierter Zustand: <1-zeilig: wichtiger SHA + was live ist + das gesperrte/blockierte Ding>.
Zuerst: 1) /context — <erneute Lade-Prüfung, z. B. Kosten neu geladener Plugins messen>; 2) <Lade-Bestätigungs-Prüfung>.
Dann meine Entscheidung zu <OFFENER FORK>: [EINS AUSWÄHLEN] (a) <Empfehlung> (b) … (c) …
<Ihre dauerhaften Sitzungsanweisungen, z. B. vor Fertigmeldung verifizieren>

KURZ halten – Zeiger + Entscheidungen, kein Zustandsdump (Zustand lebt im Handoff-Memory + DB; nicht duplizieren → Kontextverschmutzung). Diesen Prompt auch im Handoff-Memory unter einer ## RESUME PROMPT-Überschrift ablegen, damit er abfragbar ist und nicht im Chat verloren geht.

Abschluss (prüfen, Ergebnisse zitieren)

  • Abgleich-Gate – ZUERST ausführen, obligatorisch. Die gesamte Konversation (nicht nur Memory) durchsuchen und alle Entscheidungen, offenen Punkte, Eigentümerkorrekturen und Vorgaben dieser Sitzung auflisten. Für JEDEN Punkt zitieren + wo er gelandet ist (Handoff-Memory-Zeile, Regeln-Datei-Zeile oder DB-Zeile) oder als FALLENGELASSEN: <einzeiliger Grund> markieren. „Ich denke, es ist abgedeckt“ ist nicht erlaubt – auf die Zeile verweisen oder als fallengelassen markieren. Alles Ungeklärte → jetzt schreiben (§3 aktualisieren, wenn eine OFFENE Entscheidung geändert wurde), dann erneut auflisten.
  • §1: Die MEMORY.md-Zeile des Handoff-Memorys trägt (aktuell); vorherige als ersetzt markiert; grep -c 'LIVE STATE (Herzschlag)' <handoff> = 0.
  • §2: Für ein DB-Projekt: SELECT max(created_at) FROM session_handoff; ≈ jetzt + die von Ihnen geschriebenen Zeilenanzahlen. Für Memory-only dies angeben.
  • §3: Der Resume-Prompt wird AUSGEGEBEN UND im Handoff-Memory gespeichert.

Verwandte Skills