Termin-Koordinieren

Ad-hoc-Skill. Statt manuelles Kalender-Jonglieren: Skill findet Optionen, analysiert Konflikte, bereitet Reply vor. Eintragung erst nach bestaetigter Kunden-Zusage — niemals vorher.

1. Input parsen

Aus Marvins Anweisung extrahieren:

FeldPflichtDefault
Kunden-Name / Partnerjabei Fehlen nachfragen
Wunsch-Zeitfensterjakonkret (“Dienstag 19:00”) oder unscharf (“Dienstagabend”, “Ende der Woche”)
DauerjaDefault 60min ist verboten — immer Rueckfrage “Wie lang soll der Termin sein?” bevor Slots gesucht werden
TypneinCall (Default) — alternativ Vor-Ort-Termin, Workshop

Warum Dauer-Rueckfrage statt Default: Dauer bestimmt welche Slots ueberhaupt in Frage kommen. Ein falscher Default produziert falsche Optionen, die spaeter wieder korrigiert werden muessen. Eine kurze Frage spart einen ganzen Iterations-Loop.

Achtung Lissabon-Pivot: Ab Mitte/Ende Mai 2026 nur noch Online-Termine. Wenn Typ “Vor-Ort” angefragt wird und das Datum nach dem Abflug liegt → flaggen und Online-Alternative vorschlagen (siehe project_lissabon_umzug.md).

2. Config + Kontext laden

Parallel:

  1. _meta/config-planning.mdChronotyp-Block (Pflicht), Arbeitszeit-Fenster, Themen-Tag fuer den Wunsch-Tag, Sicherheits-Regeln
  2. Google Calendar fuer den Wunsch-Tag (list_events, ggf. mehrere Tage bei unscharfem Fenster)
  3. Plugin-System day-plan fuer {wunsch-tag} falls bereits geplant
  4. Plugin-System week-plan fuer {wunsch-woche} falls Wochenplan existiert
  5. Plugin-TODO-Liste → falls TODO-Bloecke gegen den Slot konkurrieren koennten

Chronotyp-Regel (Pflicht): Marvin ist Eule. Niemals Slots vor 11:00 vorschlagen — auch nicht wenn der Kunde “vormittags” wuenscht. In dem Fall: Slot ab 11:00 anbieten und im Reply-Draft hoeflich erwaehnen (“Vormittags bin ich schwer erreichbar — ab 11:00 geht alles”). Wenn Kunde explizit auf 09:00 oder 10:00 besteht: nachfragen bei Marvin, nicht still einbauen.

3. Slots finden

Suche freie Zeitfenster ≥ angefragte Dauer im Wunsch-Fenster, innerhalb der Arbeitszeit aus Config.

Bei unscharfem Wunsch-Fenster (“Dienstagabend”, “Ende der Woche”, “diese Woche noch”):

  • Finde genau 3 Optionen auf maximal 2 Tagen
  • Bevorzuge konfliktfreie Slots
  • Verteile sinnvoll (nicht 3 Slots im selben Stunden-Block)

Warum 3 / 2 Tage: weniger Entscheidungs-Last fuer Kunde und Marvin. Bei Ad-hoc-Koordination ist weniger mehr — Kunde waehlt in 10 Sekunden, Marvin muss nicht ueber zu viele Slots nachdenken.

4. Konflikte klassifizieren

KonfliktVerschiebbar?Verhalten
Fixer Kalender-Event (Arzt, externer Call, Privat-Termin — alles ohne 📋-Prefix)neinSlot raus, andere Option anbieten
TODO-Block vom Tages-Planer (Titel mit 📋-Prefix)ja, mit ReviewAlternative ohne Konflikt bevorzugen. Wenn nur konfliktbehaftete Slots verfuegbar: Verschiebung des TODO im Vorschlag anbieten
Puffer / Mittagspause (adaptiv)ja, automatischKein Problem — Pause wandert

5. Vorschlag zeigen

Format:

🗓 {Wochentag} {Datum} (Themen-Tag: {tag})
 
Wunsch: Termin "{Kunden-Name}", {Wunsch-Fenster}, {Dauer}
Arbeitszeit-Fenster: {start}-{end}
 
Bestehende Termine {Tag}:
  {Slot} {Titel} (fix)
  {Slot} {Titel} (📋 TODO-Block — verschiebbar)
 
Freie Slots ≥{Dauer}min im gewuenschten Fenster:
  ✓ {Slot} — frei
  ✓ {Slot} — frei
  ⚠ {Slot} — kollidiert mit TODO "{Titel}" (auf {Alternativ-Tag} verschiebbar)
 
Empfehlung:
  → {Slot} ({kurze Begruendung})
  → {Slot} (Alternative, {Begruendung})
 
Was soll ich {Kunden-Name} anbieten?
  [Nur {Slot 1}]  [Nur {Slot 2}]  [Beide]  [{Slot 3} mit TODO-Verschiebung]  [Andere Zeit vorschlagen]

6. Gmail-Account fuer Reply waehlen

Heuristik:

KontextAccount
Anfrage kam an hello@marvinkuehlmann.com (Original-Thread)Reply von hello@
Anfrage kam an marvinkuehlmann@gmail.com (privat)Reply von privat
Marvin tippt Termin-Wunsch frei ein, kein Ausgangs-ThreadNachfragen: “Reply ueber hello@ (Business) oder privat?” — kein stiller Default
Geschaeftliche Kommunikation, aber Kontext mehrdeutighello@ (gemaess config.md default_sender_business)

Warum strenge Trennung: hello@marvinkuehlmann.com ist seriöser, trennt Business von Privat. Falsche Wahl wirkt unprofessionell und vermischt was getrennt bleiben soll.

7. Reply-Draft erstellen

Vorlage (anpassen an Marvins Sprachstil — locker, nicht kumpelhaft, echte Umlaute):

Hi {Kunden-Vorname},

fuer {Wochentag} ({Datum}) haette ich folgende Optionen:
  - {Slot 1}
  - {Slot 2}

Was passt dir besser?

LG
Marvin

Bei nur einem angebotenen Slot: Liste reduziert sich entsprechend, Frage wird zu “Passt das bei dir?“.

Speichern via gmail_create_draft im gewaehlten Account. NICHT senden. Marvin oeffnet Gmail, prueft, sendet selbst.

Memory-Regel: Keine Kalender-Einladung mit Attendee, kein Auto-Send, keine Zusage ohne Marvins Kontrolle. Siehe feedback_keine_einladungen_ohne_ok.md.

8. WAITING-Eintrag in Plugin-TODO-Liste anlegen

Sobald der Reply-Draft in Gmail gespeichert ist, automatisch einen Eintrag in der Plugin-TODO-Liste anhaengen (Sektion “Kunden”, oder falls neu: am Ende des aktuellen Fokus-Blocks):

- [ ] `WAITING [NORMAL]` Termin-Zusage von {Kunde} fuer {Purpose} — warten auf {Kunde}, nachfassen {heute+3 Werktage}

Default-Follow-up: heute + 3 Werktage. Marvin kann in der Bestaetigung anders setzen (“nachfassen Mo”).

tages-planung flaggt das Item am Faelligkeits-Tag wie jedes andere WAITING-Nachfass-Item — nur Anzeige, kein Auto-Nachfass-Draft. Klare Autorenschaft: termin-koordinieren schreibt, tages-planung liest.

9. Eintragung — erst nach Kunde-Zusage

Marvin kommt zurueck (Stunden oder Tage spaeter):

  • “XY nimmt 19:45” — explizit
  • oder via Email-Check (Marvin hat bestaetigte Zusage in Gmail gesehen und sagt “trag den XY-Termin ein”)

Skill macht dann:

  1. Kalender-Event (create_event):

    • Calendar: primary
    • Titel-Schema (festes Vokabular): Agentic Ventures <> {Kundenname} — {Purpose}
      • Beispiele: Agentic Ventures <> Koehnemann Design — Intro-Call, Agentic Ventures <> Becker Stahl — Workshop
      • Kein Emoji im Titel bei Kunden-Events (Attendee koennte ihn sehen wenn spaeter Invite geschickt wird)
    • Purpose-Vokabular: Intro-Call, Workshop, Sprint-Review, Abstimmung, Call (generisch)
    • Purpose-Wahl heuristisch: neuer Kunde ohne Vault-Historie → Intro-Call; Kunde mit laufendem Projekt in intern/projekte/<projekt>/_index.mdSprint-Review; explizit erwaehnter Zweck → dieser. Marvin kann in einem Wort aendern (“mach Workshop draus”).
    • Description: Koordiniert ueber termin-koordinieren am {heute}. Typ: {Call/Vor-Ort}. Online-Link: {falls vorhanden}.
      • KEINE internen Infos in der Description — Kunde koennte sie sehen falls spaeter Invite geschickt wird (Memory-Regel feedback_kalender_keine_internen_infos.md)
    • Start/End: wie vereinbart
    • KEIN Attendee — Memory-Regel. Marvin entscheidet manuell ob er nachtraeglich einlaedt.
  2. WAITING-Eintrag in Plugin-TODO-Liste auf DONE setzen oder loeschen:

    • - [x] WAITING ... → DONE ({Datum}): zugesagt, eingetragen
  3. Falls TODO-Block verschoben wurde: entsprechend Plugin-day-plan fuer betroffenen + Ziel-Tag aktualisieren.

  4. Bestaetigung an Marvin: “Eingetragen: {Slot} {Titel}. {Falls verschoben: ‘Rechnung XY auf Mittwoch 14:00 verschoben.’}“

10. Was wenn der Kunde absagt

Befehl: “XY hat abgesagt” / “XY will verschieben auf Donnerstag”

  • WAITING-Eintrag auf “abgesagt” setzen oder loeschen
  • Bei Verschiebungs-Wunsch: Skill von vorne starten mit neuem Wunsch-Fenster
  • Verschobene TODO-Bloecke zuruecksetzen (zurueck auf Original-Tag), nur nach Review-Gate — Marvin bestaetigt explizit
  • plan — verwandter Wochen-Skill (noch im Plan-Status)
  • config-planning — Arbeitszeit, Themen-Tage, Sicherheits-Regeln, Email-Account-Strategie
  • CLAUDE — Behavior Rules (Config zuerst, keine externen Kommunikationen ohne OK)
  • SKILL — koordiniert via day-plan-Files, liest WAITING-Items die hier geschrieben werden
  • gsuite — Calendar + Gmail-MCP
  • Plugin-TODO-Liste — Ziel fuer WAITING-Eintraege, Quelle fuer TODO-Bloecke die ggf. verschoben werden
  • Memory: feedback_keine_einladungen_ohne_ok.md, feedback_kalender_keine_internen_infos.md, project_lissabon_umzug.md