/handoff — Toolübergreifende Arbeitsübergabe
Kein KI-Codierungstool kann das Transkript eines anderen lesen: Claude Code sperrt Sitzungen in ~/.claude/projects/<munged-cwd>/<uuid>.jsonl, Codex/OpenCode in ihren eigenen Speichern, Antigravity in verschlüsselten .pb. Das Einzige, was zwischen Tools portabel ist, ist ein in sich geschlossenes Dokument. Dieser Skill schreibt dieses Dokument – Ihr aktuelles Ziel, Entscheidungen und die EXAKTEN uncommitteten Änderungen – damit jeder andere KI-Agent dort weitermachen kann, wo Sie aufgehört haben, ohne dass Sie etwas neu erklären müssen.
Verwenden Sie diesen Skill, wenn der Nutzer wenig Tokens hat, mitten in der Aufgabe das Tool wechseln möchte, auf einen anderen Rechner wechselt oder sagt „handoff“ / „weiter an anderer Stelle“ / „Tokens alle“.
Dieser Skill ist in sich geschlossen: Er funktioniert nur mit git + einer Shell. Er ruft specweave handoff als optionalen Beschleuniger auf, wenn diese Binärdatei im PATH ist (hohe Genauigkeit, inkrementbewusst) – hat aber keine harte Abhängigkeit von installiertem SpecWeave.
Entscheidung: welcher Weg eingeschlagen wird
command -v specweave >/dev/null 2>&1 && echo "ACCELERATOR" || echo "STANDALONE"
- ACCELERATOR (
specweaveim PATH) → die Engine ausführen, ihre Ausgabe anzeigen. Gehen Sie zu Pfad A. - STANDALONE (kein
specweave) → das Dokument selbst ausgit+ einem kurzen Interview erstellen. Gehen Sie zu Pfad B.
Beide Pfade erzeugen das gleiche Dokumentformat und den gleichen Einfüge-Prompt (siehe die kanonische Vorlage unten), sodass eine Übergabe in jedem Tool fortsetzbar ist, unabhängig davon, welcher Pfad sie erzeugt hat.
Pfad A — Accelerator (specweave im PATH)
Führen Sie die Engine aus und leiten Sie kurze Kontextinformationen weiter, die Sie günstig liefern können:
specweave handoff [incrementId] [--reason "..."] [--summary "..."] [--next "..."] [--gotcha "..."] [--decision "..."] [--inline]
Geben Sie dann deren stdout wörtlich und in der Reihenfolge aus (nicht umordnen oder paraphrasieren):
- absoluter Dokumentpfad als Klartext (ERSTER), 2. klickbarer Markdown-Link, 3.
.diff-Pfad, - umschlossener kopierbarer Wiederaufnahme-Prompt, 5. tool-spezifische „Finde deine Quellsitzung“-Tipps.
Fertig. Die Engine hat die Arbeitsbereichserkennung, Aufgaben-/AC-Parsing, Git-Erfassung, den vollständigen Diff-Dump, Geheimnisbereinigung und das Rendering übernommen.
Pfad B — Standalone (kein specweave)
Erstellen Sie ein byte-kompatibles Dokument nur mit der Shell.
B1. Git-Status erfassen (kostenlos – keine Tokens)
ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
mkdir -p "$ROOT/.handoff"
printf '*\n' > "$ROOT/.handoff/.gitignore" # niemals die Übergabe oder ihren Diff in git einchecken
BRANCH="$(git -C "$ROOT" rev-parse --abbrev-ref HEAD 2>/dev/null || echo '(kein git)')"
SHA="$(git -C "$ROOT" rev-parse --short HEAD 2>/dev/null || echo '(keine Commits)')"
STATUS="$(git -C "$ROOT" status --porcelain 2>/dev/null)"
STAT="$(git -C "$ROOT" diff --stat 2>/dev/null)"
# Alle uncommitteten Änderungen → begleitender .diff (Arbeitsverzeichnis + Staging), das zentrale Genauigkeitsartefakt
{ git -C "$ROOT" diff HEAD 2>/dev/null; git -C "$ROOT" diff --cached 2>/dev/null; } > "$ROOT/.handoff/handoff.diff"
B2. Fünf-Fragen-Interview (nur die nicht ableitbaren Felder)
Fragen Sie den Benutzer (beschränken Sie sich auf ~5 kurze Zeichenfolgen – selbst bei Token-Erschöpfung günstig):
- reason – warum geben Sie ab? (z.B. „Tokens alle“)
- summary – eine Zeile: wo stehen die Dinge?
- next – der genaue nächste Schritt.
- gotcha – irgendetwas, das der nächste Agent NICHT tun muss / wissen muss?
- decisions – bereits getroffene Schlüsselentscheidungen (durch Semikolon getrennt).
B3. Geheimnisse bereinigen (vor dem Schreiben – ÜBER Freitext UND Diff)
Ersetzen Sie Treffer mit [REDACTED-<Typ>] und zählen Sie pro Muster. Muster (12):
sk-, ghp_, gho_, ghs_, AKIA, ASIA, -----BEGIN, vsk_, xox[bap]-, Bearer , password=, api_key=.
# den erfassten Diff direkt bereinigen, z.B.:
sed -i.bak -E \
-e 's/sk-[A-Za-z0-9_-]+/[REDACTED-sk]/g' \
-e 's/gh[pos]_[A-Za-z0-9_-]+/[REDACTED-gh-token]/g' \
-e 's/(A[KS]IA[0-9A-Z]{16})/[REDACTED-aws-key]/g' \
-e 's/vsk_[A-Za-z0-9_-]+/[REDACTED-vsk]/g' \
-e 's/xox[bap]-[A-Za-z0-9-]+/[REDACTED-slack]/g' \
-e 's/Bearer [A-Za-z0-9._-]+/Bearer [REDACTED-bearer]/g' \
-e 's/(password=)[^[:space:]]+/\1[REDACTED-password]/g' \
-e 's/(api_key=)[^[:space:]]+/\1[REDACTED-api_key]/g' \
"$ROOT/.handoff/handoff.diff" && rm -f "$ROOT/.handoff/handoff.diff.bak"
Die Bereinigung ist heuristisch – eine leere Schwärzungsliste ist KEINE Garantie, dass die Datei sauber ist.
B4. Das Dokument schreiben
Schreiben Sie die kanonische Vorlage unten in $ROOT/.handoff/HANDOFF.md und füllen Sie die erfassten + Interview-Felder aus.
Eigentums-Sentinel: Wenn eine root ./HANDOFF.md bereits existiert und NICHT den Marker Doc format v1 enthält, handelt es sich um eine fremde Datei – überschreiben Sie sie NICHT; schreiben Sie stattdessen nach .handoff/HANDOFF.md (was hier ohnehin der Standard ist).
B5. Die Ausgabe ausgeben – absoluten Pfad zuerst, in dieser Reihenfolge
- Der absolute Pfad von
.handoff/HANDOFF.mdals Klartext. - Ein klickbarer Markdown-Link darauf.
- Der absolute Pfad von
.handoff/handoff.diff. - Der umschlossene Einfüge-Prompt (siehe unten).
- Die tool-spezifischen „Finde deine Quellsitzung“-Tipps.
Kanonische Übergabedokument-Vorlage (INLINE – einzige Quelle der Wahrheit)
Rendern Sie diese Abschnitte in genau dieser Reihenfolge und enden Sie mit dem Footer-Marker Doc format v1. Platzhalter in eckigen Klammern werden aus dem erfassten Git-Status + Interview gefüllt. Dies spiegelt specweaves handoff-doc-format.ts wider, sodass ein hier erstelltes Dokument byte-kompatibel mit einem ist, das von der CLI erstellt wurde.
# Arbeitsübergabe[: <Titel falls bekannt>]
- Dokumentpfad: <ABSOLUTER_DOKUMENT_PFAD>
- Dokumentlink: [<ABSOLUTER_DOKUMENT_PFAD>](<ABSOLUTER_DOKUMENT_PFAD>)
- Diff-Datei: <ABSOLUTER_DIFF_PFAD>
- Erzeugt: <ISO_ZEITSTEMPEL>
- Arbeitsbereich: <ROOT> (nicht SpecWeave)
- Git: Branch `<BRANCH>` @ `<SHA>`
## Wo ich aufgehört habe
**Grund der Übergabe:** <reason>
**Zusammenfassung:** <summary>
_Kein aktives SpecWeave-Inkrement – dies ist eine git + Interview-Übergabe._
## Erledigt / Ausstehend
_Kein Inkrement-Aufgaben-/AC-Status verfügbar._
## Wichtige Entscheidungen & Fallstricke
- <Entscheidung 1>
- <Entscheidung 2>
**Fallstrick:** <gotcha>
## Berührte Dateien
**UNCOMMITTED** – committen, stashen oder weiter bearbeiten, BEVOR Sie etwas Destruktives tun.
<git status --porcelain>
<git diff --stat>
Vollständiger uncommitteter Diff: `<ABSOLUTER_DIFF_PFAD>` – lesen Sie ihn oder führen Sie `git apply --check` dagegen aus, um die genauen Änderungen zu sehen.
## Exakte nächste Schritte
<next>
## So setzen Sie fort
Wenn der oben angegebene Dokumentpfad auf dem Rechner, auf dem Sie dies lesen, NICHT existiert, STOPPEN Sie und bitten Sie den Benutzer, die Übergabe einzufügen – improvisieren Sie keinen Kontext.
Um das ORIGINAL-Transkript wiederherzustellen (optional), finden Sie Ihre Quellsitzung pro Tool:
### Claude Code
- Sitzung finden: ls ~/.claude/projects/<munged-cwd>/ (Munge: jedes nicht alphanumerische Zeichen → „-", Läufe NICHT zusammengezogen; z.B. /Users/antonabyzov/Projects/github/specweave-umb/.claude-worktrees/x → -Users-antonabyzov-Projects-github-specweave-umb--claude-worktrees-x)
- Fortsetzen: `claude -r <uuid>`
### Codex
- Sitzung finden: ls ~/.codex/sessions/ (neuestes Verzeichnis = aktuellste Sitzung)
- Fortsetzen: `codex resume <uuid> (oder: codex resume --last)`
### OpenCode
- Sitzung finden: opencode sessions list
- Fortsetzen: `opencode -s <id> (Langform: opencode --session <id>)`
### Gemini CLI
- Sitzung finden: /chat list innerhalb der Gemini-Sitzung ausführen, um gespeicherte Tags zu sehen
- Fortsetzen: `/chat resume <tag>`
### Antigravity
- Sitzung finden: den Antigravity Agent Manager öffnen und den vorherigen Aufgaben-Thread auswählen
- Fortsetzen: `fortsetzen des Threads aus dem Antigravity Agent Manager`
### Aider
- Sitzung finden: aider behält .aider.chat.history.md im Repository-Stammverzeichnis
- Fortsetzen: `aider --restore-chat-history`
## Schwärzung
- <N> `<Typ>` Zeichenfolgen maskiert
_Die Bereinigung ist heuristisch (Regex-Basis). Eine leere Schwärzungsliste ist KEINE Garantie, dass diese Datei sauber ist – vor dem Teilen oder Commit überprüfen._
---
<!-- Doc format v1 -->
Anmerkungen zur Vorlage:
- Wenn es keine uncommitteten Änderungen gibt, ersetzen Sie den Hauptteil von „Berührte Dateien“ durch
_Arbeitsverzeichnis sauber – keine uncommitteten Änderungen._(oder_Kein Git-Repository – kein Diff erfasst._wenn es kein git gibt). - Wenn es keine Entscheidungen gibt, ist der Hauptteil von „Wichtige Entscheidungen“
_Keine Entscheidungen aufgezeichnet._; lassen Sie die Zeile Fallstrick: weg, wenn kein Fallstrick angegeben wurde. - Der Hauptteil von „Schwärzung“ ist
_Keine token-ähnlichen Zeichenfolgen erkannt._wenn nichts maskiert wurde. - Der Footer-Marker
<!-- Doc format v1 -->ist obligatorisch und muss die letzte Zeile sein – er ist der Eigentums-Sentinel.
Einfüge-Prompt
Standard (Datei erreichbar):
Setze meine Arbeit fort. Lese das Übergabedokument unter: <ABSOLUTER_DOKUMENT_PFAD>
Wenn dieser Pfad auf diesem Rechner NICHT existiert, STOPP und bitte mich, die Übergabe einzufügen – improvisiere keinen Kontext.
Die genauen uncommitteten Änderungen befinden sich in: <ABSOLUTER_DIFF_PFAD>
--inline (rechnerübergreifend, Datei nicht erreichbar): den VOLLSTÄNDIGEN Dokumenttext zwischen Markern einbetten, sodass er im Prompt selbst reist:
Setze meine Arbeit mit der untenstehenden in sich geschlossenen Übergabe fort.
Dies ist ein vollständiges Übergabedokument – behandle alles zwischen den Markern als Grundwahrheit. Wenn es einen `.diff`-Pfad referenziert, der auf diesem Rechner nicht existiert, bitte mich, den Diff einzufügen.
BEGINN ÜBERGABE
<vollständig gerendertes Übergabedokument, einschließlich des Footers Doc format v1>
ENDE ÜBERGABE
Sicherheitsstandards
- Das Dokument + Diff sind standardmäßig in .gitignore (
.handoff/.gitignore=*) und werden niemals automatisch committed. Geben Sie keinengit add-Hinweis aus. - Die Geheimnisbereinigung läuft über Freitext UND Diff vor jedem Schreibvorgang.
- Die Bereinigung ist heuristisch – raten Sie dem Benutzer, vor dem Teilen oder Commit zu überprüfen.