Daily Briefing

Morgens um 9:30 Uhr Berlin (Mo-Fr) ein Telegram-Push mit knappem Tagesueberblick. Kein Wechsel mehr zwischen Kalender, Mail und Action-Items-File — ein Blick reicht.

Was sie macht

  1. Gmail beide Konten (hello@ + marvinkuehlmann@gmail.com) seit letztem Briefing (Mo zieht „seit Freitag”, Di-Fr „seit gestern”). Filter: keine Spam/Trash/Promotions/Social.
  2. Google Calendar primary aus hello@-Konto, Events heute zwischen 00:00 und 23:59 Berlin.
  3. Action-Items aus dem Vault-Repo via GitHub-API: marvin-khl/agentic-ventures/operations/action-items.md.
  4. Bedrock-Haiku-Summary baut strukturiertes Briefing — max 5 Bullets pro Sektion, plus ein Satz Top-Fokus. Schema-erzwungen via Converse API + Tool-Use.
  5. Telegram-Push an Marvin’s privaten Bot (marvin_aiops_17332026_bot) mit formatiertem Text.
  6. Vault-Archiv als operations/briefings/<YYYY-MM-DD>.md via GitHub-API (idempotent — sha-basiertes Update wenn schon existiert).

Architektur

EventBridge Cron (7:30 + 8:30 UTC Mo-Fr)
   └─ Lambda agent-daily-briefing
       ├─ zoneinfo-Check: 9:30 Berlin? (sonst skip)
       ├─ Gmail-API (urllib3 + OAuth-Refresh, beide Konten)
       ├─ Calendar-API (urllib3, primary)
       ├─ GitHub-API (PAT, action-items.md lesen)
       ├─ Bedrock InvokeModel (Haiku 4.5, Converse + Tool-Use)
       ├─ Telegram sendMessage (plain text)
       └─ GitHub-API (PAT, operations/briefings/<datum>.md commiten)

Schedule-Trick — Sommerzeit-Toleranz

AWS EventBridge kennt keine Timezone. Loesung: Cron triggert zweimal pro Tag (7:30 + 8:30 UTC), Lambda prueft intern Berlin-Zeit:

  • Sommerzeit: 7:30 UTC = 9:30 Berlin → laeuft. 8:30 UTC = 10:30 Berlin → skip.
  • Winterzeit: 8:30 UTC = 9:30 Berlin → laeuft. 7:30 UTC = 8:30 Berlin → skip.

Kein manuelles Umstellen im Oktober/Maerz. 2 Lambda-Invokes/Tag, einer ist no-op (~10ms billable).

Konfiguration

Env-VarWertQuelle
TELEGRAM_CHAT_ID8257793678hardcoded in app.ts
TELEGRAM_SECRET_NAMEagent-platform/telegram-bot-tokenSecret in av-production
GMAIL_SECRET_NAMEagent-platform/gmail-oauth-refreshSecret (JSON-Bundle hello+privat mit refresh_token+client_id+secret)
GITHUB_SECRET_NAMEagent-platform/github-patSecret (Fine-Grained PAT, Contents Read+Write auf agentic-ventures)
GITHUB_OWNERmarvin-khlhardcoded
GITHUB_REPOagentic-ventureshardcoded
ACTION_ITEMS_PATHoperations/action-items.mdhardcoded
BRIEFING_ARCHIVE_DIRoperations/briefingshardcoded
BEDROCK_MODEL_IDeu.anthropic.claude-haiku-4-5-20251001-v1:0hardcoded

Stand 2026-05-14 — PAUSIERT wegen Vault-Restructure-Migration

⚠️ Lambda-Trigger ist disabled. EventBridge-Rule agent-daily-briefing-schedule wurde am 14.05.2026 disabled im Zuge des Vault-Repo-Force-Push (Vault-v1.x → v1.4 Restructure). Solange der unten beschriebene Code-Update nicht passiert, kommt kein Briefing.

KomponenteStatus
Stack DailyBriefingStack deployed
Lambda-Code (gmail/calendar/github/briefing/telegram + main)⚠️ verweist auf alte Pfade
Schedule-Trick implementiert + getestet
Erstes Briefing via Telegram angekommen
Vault-Archiv-Test (sobald GitHub-PAT eingespielt)✅ erledigt (12.-14.05. Snapshots erzeugt, jetzt gerettet unter archive/)
EventBridge-Rule🔴 disabled seit 14.05.2026
Pfade alt → neu🔴 Lambda muss umgestellt werden

Pfad-Migration nach Vault-v1.4

Die Lambda lebt auf alten Pfaden, der Vault hat sich neu strukturiert. Vor Re-Enable des EventBridge-Triggers muss eine der zwei Optionen umgesetzt werden:

Env-VarAlter WertNeuer Wert
ACTION_ITEMS_PATHoperations/action-items.md(leer/entfernen) — Option Y
BRIEFING_ARCHIVE_DIRoperations/briefingsintern/projekte/daily-briefing/archive

Option Y (entschieden 14.05.2026): Action-Items-Block faellt aus dem Briefing raus. Marvin will TODO-Erinnerung eh anders bauen (siehe Eat-the-frog-Briefing — TODOs morgens im Kalender). Lambda-Code muss leeren oder fehlenden Pfad tolerieren.

Naechste Schritte (Iteration 2) — wenn Briefings wieder gewollt sind

  1. Lambda-Code in agents-platform-Repo anpassen:
    • Action-Items-Lesung optional/tolerant gegen 404 oder leeren ACTION_ITEMS_PATH
    • BRIEFING_ARCHIVE_DIR Env-Default auf neuen Pfad
  2. Deploy: cdk deploy DailyBriefingStack --profile av-production
  3. Env-Vars in der deployten Lambda updaten (siehe Tabelle oben)
  4. Smoke-Test via Manueller Invoke (unten)
  5. EventBridge-Rule re-enablen:
    aws events enable-rule --name agent-daily-briefing-schedule \
      --region eu-central-1 --profile av-production
  6. Sanity-Check naechsten Mo-Fr 9:30 Berlin: Telegram-Push ankommt
  7. Eat-the-frog-Idee promotion entscheiden (siehe ideas-backlog)

Andere offene Punkte (waren schon offen)

  • Privat-Calendar mit dazu, falls Marvin auch marvinkuehlmann@-Termine sehen will
  • Pending-Belege-Counter aus Papierkram-MCP optional dazu („3 Belege warten auf Klassifikation”)
  • Trello/Linear/etc. wenn Marvin externe Action-Item-Quellen dazunehmen will

Manueller Test-Invoke

Der Berlin-Zeitcheck wird mit force_run=true im Payload uebersprungen:

aws --profile av-production --region eu-central-1 lambda invoke \
  --function-name agent-daily-briefing \
  --cli-binary-format raw-in-base64-out \
  --payload '{"force_run":true,"source":"manual-smoke"}' \
  /tmp/db-out.json && cat /tmp/db-out.json | python3 -m json.tool
  • agents-platform — Plattform-Konstrukt
  • SKILL — der Skill der diese Routine erzeugt hat
  • _index — Beleg-Pipeline (erste Routine auf der Plattform)

1 Datei in diesem Ordner.