{
  "schema": "ldwf",
  "version": 1,
  "name": "Daily Standup Vorbereitung",
  "meta": {
    "exportedAt": "2025-11-16T16:54:43.340Z",
    "exporter": "client"
  },
  "graph": {
    "nodes": [
      {
        "type": "trigger",
        "data": {
          "comment": "📅 SCHRITT 1: ZEITGESTEUERTER START\n\nBESCHREIBUNG:\nDieser Trigger startet den Workflow automatisch jeden Morgen um 8:00 Uhr - perfekt getimed vor dem Daily Standup.\n\nSETUP:\n• Cron-Expression: '0 8 * * *' bedeutet täglich um 8:00 Uhr\n• Keine manuelle Ausführung erforderlich\n• Läuft automatisch an Wochentagen und Wochenenden\n\nPERSONALISIERUNG:\n• Zeit ändern: Passen Sie die Cron-Expression an (z.B. '0 9 * * *' für 9 Uhr)\n• Nur Werktage: Verwenden Sie '0 8 * * 1-5' (Montag-Freitag)\n• Mehrmals täglich: z.B. '0 8,14 * * *' für 8 Uhr und 14 Uhr",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "dailyStandupTrigger",
          "name": "Täglich 8 Uhr",
          "kind": "scheduled",
          "cron": "0 8 * * *"
        },
        "id": "fae382b9-0eb6-405a-bc15-3d958c43f9a0",
        "position": {
          "x": 20,
          "y": 4010
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "💬 SCHRITT 5: SLACK-POSTING\n\nBESCHREIBUNG:\nPostet die fertige Standup-Zusammenfassung automatisch in den definierten Slack-Channel. Zeigt die Anzahl der Blockaden prominent im Header.\n\nSETUP:\n• Slack-Connection auswählen (erforderlich)\n• Channel: '#standup' (anpassbar)\n• Nachricht enthält: Header mit Blockaden-Anzahl + vollständige Zusammenfassung\n• Verwendet strukturierte Daten vom KI-Agent\n\nPERSONALISIERUNG:\n• Channel ändern: Ersetzen Sie '#standup' durch Ihren Channel (z.B. '#team-updates', '#daily')\n• Mehrere Channels: Duplizieren Sie diesen Schritt für verschiedene Channels\n• Nachricht anpassen: Ändern Sie Emoji, Formatierung oder fügen Sie @mentions hinzu\n• Bedingte Benachrichtigung: Verwenden Sie eine Condition vorher, um nur bei Blockaden zu posten\n• Format: Nutzen Sie Slack-Markdown für *fett*, _kursiv_, `code` etc.",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "slackStandupPost",
          "actionId": "26a39d11-d5fe-4f46-b776-973dd20b8147",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "64776bd9-4c58-42d0-8301-2c8a4566e68c",
            "fields": {
              "text": {
                "mode": "manual",
                "value": "🌞 *Daily Standup Briefing - {{standupAnalyzer.output.structured.blockers_found}} Blockade(n) identifiziert*\n\n{{standupAnalyzer.output.structured.summary}}"
              },
              "channelId": {
                "mode": "manual",
                "value": "#standup"
              }
            }
          }
        },
        "id": "62ec3c4b-126d-45bb-9ef6-f308e37fa159",
        "position": {
          "x": 1680,
          "y": 4010
        }
      },
      {
        "type": "agent",
        "data": {
          "comment": "🤖 SCHRITT 4: KI-ANALYSE & BLOCKADEN-IDENTIFIKATION\n\nBESCHREIBUNG:\nDer KI-Agent analysiert beide Datensätze (gestern + heute) und erstellt eine strukturierte Standup-Zusammenfassung pro Team-Mitglied. Identifiziert automatisch Probleme und Blockaden.\n\nSETUP:\n• Wartet auf beide vorherigen Schritte (automatische Synchronisation)\n• Analysiert Tasks und gruppiert nach Team-Mitglied\n• Erkennt: Überfällige Tasks, Abhängigkeiten, Überlastung, unassigned Tasks\n• Strukturierte Ausgabe: summary (Text), blockers_found (Anzahl), success (Boolean)\n\nPERSONALISIERUNG:\n• Fokus ändern: Passen Sie den Prompt an (z.B. 'fokussiere auf kritische Bugs')\n• Detailgrad: Fügen Sie 'mit Links zu den Issues' für direkte Verlinkung hinzu\n• Gruppierung: Ändern Sie 'PRO TEAM-MITGLIED' zu 'PRO PROJEKT' oder 'PRO PRIORITÄT'\n• Metriken: Ergänzen Sie 'berechne Velocity' oder 'zeige Story Points'\n• Ton anpassen: Fügen Sie 'verwende motivierenden Ton' oder 'sei prägnant' hinzu",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "standupAnalyzer",
          "assistantId": null,
          "mode": "create",
          "name": "Standup Analyzer",
          "prompt": {
            "mode": "manual",
            "value": "Analysiere die folgenden Daten aus Linear:\n\n**Gestern abgeschlossene Tasks:**\n{{gesternAbgeschlosseneTasks.output}}\n\n**Heute geplante Tasks:**\n{{heuteGeplanteTasks.output}}\n\nDeine Aufgabe:\n1. Erstelle eine übersichtliche Standup-Zusammenfassung PRO TEAM-MITGLIED\n2. Identifiziere potenzielle Blockaden:\n   - Überfällige Tasks\n   - Abhängigkeiten zwischen Tasks\n   - Hohe Auslastung einzelner Personen\n   - Tasks ohne Assignee\n3. Formatiere die Zusammenfassung klar strukturiert mit:\n   - Name des Team-Mitglieds\n   - Gestern abgeschlossen (kurze Liste)\n   - Heute geplant (kurze Liste)\n   - Blockaden/Hinweise (falls vorhanden)\n\nDie Zusammenfassung sollte kompakt und für ein morgendliches Standup geeignet sein."
          },
          "attachmentIds": [],
          "output": "structured",
          "connectionOverrides": {},
          "outputSchema": [
            {
              "id": "355a2dad-fde0-4280-8b2f-4b92aa952c38",
              "name": "summary",
              "description": "Die vollständige formatierte Standup-Zusammenfassung für Slack",
              "type": "string",
              "required": true
            },
            {
              "id": "527f64c7-1e0b-4530-997c-f3438ece49b7",
              "name": "blockers_found",
              "description": "Anzahl der identifizierten Blockaden",
              "type": "number",
              "required": true
            },
            {
              "id": "96f4540d-f5fc-4ea4-80ad-7d5c3db959f4",
              "name": "success",
              "description": "Ob die Analyse erfolgreich war",
              "type": "boolean",
              "required": true
            }
          ],
          "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
          "tools": [],
          "maxSteps": 25
        },
        "id": "aff3fac8-d013-46f5-af41-c351bcdd8623",
        "position": {
          "x": 1120,
          "y": 4010
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "📋 SCHRITT 3: HEUTE GEPLANTE TASKS\n\nBESCHREIBUNG:\nRuft alle für heute geplanten Linear-Issues ab. Zeigt, woran das Team heute arbeitet und was ansteht. Läuft parallel zu Schritt 2 für schnellere Ausführung.\n\nSETUP:\n• Linear-Connection auswählen (erforderlich)\n• KI-gestützte Suche nach heute fälligen oder aktiven Tasks\n• Kein Status-Filter (erfasst alle Stati)\n• Limit: 100 Tasks (anpassbar)\n\nPERSONALISIERUNG:\n• Status-Filter: Fügen Sie spezifische Stati hinzu (z.B. 'in_progress', 'todo')\n• Team-Filter: Setzen Sie 'teamId' für Team-spezifische Berichte\n• Zeitraum erweitern: Ändern Sie den Prompt auf 'heute und morgen' für längere Planung\n• Prioritäts-Filter: Ergänzen Sie den Prompt um 'nur hohe Priorität'",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "heuteGeplanteTasks",
          "actionId": "f9a79db8-bac2-4fe9-a3f6-0e3f3dae1ccd",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "limit": {
                "mode": "manual",
                "value": "100"
              },
              "query": {
                "mode": "prompt",
                "prompt": "Suche nach Issues, die für heute geplant sind (dueDate = heute oder in Progress)"
              },
              "status": {
                "mode": "none"
              },
              "teamId": {
                "mode": "none"
              },
              "assigneeId": {
                "mode": "none"
              }
            }
          }
        },
        "id": "eaca2ba3-533e-4902-ad97-035e81a8d6e4",
        "position": {
          "x": 560,
          "y": 3820
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "✅ SCHRITT 2: GESTERN ABGESCHLOSSENE TASKS\n\nBESCHREIBUNG:\nRuft alle Linear-Issues ab, die gestern von Team-Mitgliedern abgeschlossen wurden. Diese Daten zeigen die Produktivität und Erfolge des Vortags.\n\nSETUP:\n• Linear-Connection auswählen (erforderlich)\n• Status-Filter: 'done' (abgeschlossene Tasks)\n• KI-gestützte Suche nach gestern abgeschlossenen Items\n• Limit: 100 Tasks (anpassbar)\n\nPERSONALISIERUNG:\n• Team-Filter: Fügen Sie 'teamId' hinzu, um nur ein bestimmtes Team zu tracken\n• Assignee-Filter: Setzen Sie 'assigneeId' für individuelle Berichte\n• Limit erhöhen: Ändern Sie '100' auf einen höheren Wert bei großen Teams\n• Status anpassen: Ändern Sie 'done' auf Ihren Custom-Status (z.B. 'completed', 'shipped')",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "gesternAbgeschlosseneTasks",
          "actionId": "f9a79db8-bac2-4fe9-a3f6-0e3f3dae1ccd",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "limit": {
                "mode": "manual",
                "value": "100"
              },
              "query": {
                "mode": "prompt",
                "prompt": "Suche nach Issues, die gestern abgeschlossen wurden (Status 'done' oder 'completed', updatedAt oder completedAt = gestern)"
              },
              "status": {
                "mode": "manual",
                "value": "done"
              },
              "teamId": {
                "mode": "none"
              },
              "assigneeId": {
                "mode": "none"
              }
            }
          }
        },
        "id": "d8f53fa7-d5fc-4fa2-b88c-a4e3d375ca14",
        "position": {
          "x": 555,
          "y": 4680
        }
      }
    ],
    "edges": [
      {
        "id": "d8f53fa7-d5fc-4fa2-b88c-a4e3d375ca14",
        "source": "d8f53fa7-d5fc-4fa2-b88c-a4e3d375ca14",
        "target": "aff3fac8-d013-46f5-af41-c351bcdd8623",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "07796e91-0a88-4137-a76c-720f594c048d",
        "source": "fae382b9-0eb6-405a-bc15-3d958c43f9a0",
        "target": "eaca2ba3-533e-4902-ad97-035e81a8d6e4",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "85d52e47-b9a9-4cdc-adda-d0a3e9f0c76f",
        "source": "fae382b9-0eb6-405a-bc15-3d958c43f9a0",
        "target": "d8f53fa7-d5fc-4fa2-b88c-a4e3d375ca14",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "17705672-cb6e-4278-876c-c80b1cf92853",
        "source": "eaca2ba3-533e-4902-ad97-035e81a8d6e4",
        "target": "aff3fac8-d013-46f5-af41-c351bcdd8623",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "7904a743-21d4-4899-af58-d4867a2768e6",
        "source": "aff3fac8-d013-46f5-af41-c351bcdd8623",
        "target": "62ec3c4b-126d-45bb-9ef6-f308e37fa159",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      }
    ]
  }
}