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
- Gmail beide Konten (
hello@+marvinkuehlmann@gmail.com) seit letztem Briefing (Mo zieht „seit Freitag”, Di-Fr „seit gestern”). Filter: keine Spam/Trash/Promotions/Social. - Google Calendar
primaryaushello@-Konto, Events heute zwischen 00:00 und 23:59 Berlin. - Action-Items aus dem Vault-Repo via GitHub-API:
marvin-khl/agentic-ventures/operations/action-items.md. - Bedrock-Haiku-Summary baut strukturiertes Briefing — max 5 Bullets pro Sektion, plus ein Satz Top-Fokus. Schema-erzwungen via Converse API + Tool-Use.
- Telegram-Push an Marvin’s privaten Bot (
marvin_aiops_17332026_bot) mit formatiertem Text. - Vault-Archiv als
operations/briefings/<YYYY-MM-DD>.mdvia 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-Var | Wert | Quelle |
|---|---|---|
TELEGRAM_CHAT_ID | 8257793678 | hardcoded in app.ts |
TELEGRAM_SECRET_NAME | agent-platform/telegram-bot-token | Secret in av-production |
GMAIL_SECRET_NAME | agent-platform/gmail-oauth-refresh | Secret (JSON-Bundle hello+privat mit refresh_token+client_id+secret) |
GITHUB_SECRET_NAME | agent-platform/github-pat | Secret (Fine-Grained PAT, Contents Read+Write auf agentic-ventures) |
GITHUB_OWNER | marvin-khl | hardcoded |
GITHUB_REPO | agentic-ventures | hardcoded |
ACTION_ITEMS_PATH | operations/action-items.md | hardcoded |
BRIEFING_ARCHIVE_DIR | operations/briefings | hardcoded |
BEDROCK_MODEL_ID | eu.anthropic.claude-haiku-4-5-20251001-v1:0 | hardcoded |
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.
| Komponente | Status |
|---|---|
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-Var | Alter Wert | Neuer Wert |
|---|---|---|
ACTION_ITEMS_PATH | operations/action-items.md | (leer/entfernen) — Option Y |
BRIEFING_ARCHIVE_DIR | operations/briefings | intern/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
- Lambda-Code in
agents-platform-Repo anpassen:- Action-Items-Lesung optional/tolerant gegen 404 oder leeren
ACTION_ITEMS_PATH BRIEFING_ARCHIVE_DIREnv-Default auf neuen Pfad
- Action-Items-Lesung optional/tolerant gegen 404 oder leeren
- Deploy:
cdk deploy DailyBriefingStack --profile av-production - Env-Vars in der deployten Lambda updaten (siehe Tabelle oben)
- Smoke-Test via Manueller Invoke (unten)
- EventBridge-Rule re-enablen:
aws events enable-rule --name agent-daily-briefing-schedule \ --region eu-central-1 --profile av-production - Sanity-Check naechsten Mo-Fr 9:30 Berlin: Telegram-Push ankommt
- 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.toolRelated
- agents-platform — Plattform-Konstrukt
- SKILL — der Skill der diese Routine erzeugt hat
- _index — Beleg-Pipeline (erste Routine auf der Plattform)