> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# PRs nach jedem Anruf erstellen

export const UseCaseHero = ({title, description, prompt, category, features, devinUrl, agent, intent, playbookId, type}) => {
  const encodedPrompt = encodeURIComponent(prompt || '');
  const tag = 'docs-use-case-gallery';
  const utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=hero-cta';
  const agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  const devinHref = type === 'schedule' ? 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + (prompt ? '&prompt=' + encodedPrompt : '') : type === 'review' ? 'https://app.devin.ai/review?' + utm : agent === 'ada' ? 'https://app.devin.ai/search?' + utm + '&noSubmit=true' + (prompt ? '&prompt=' + encodedPrompt : '') : devinUrl ? devinUrl.includes('?') ? devinUrl + '&' + utm + agentParams : devinUrl + '?' + utm + agentParams : prompt ? 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encodedPrompt : 'https://app.devin.ai/?' + utm + agentParams;
  const buttonLabel = type === 'schedule' ? 'Schedule in Devin ↗' : type === 'review' ? 'Set Up Devin Review ↗' : agent === 'advanced' ? 'Try in Devin ↗' : agent === 'dana' ? 'Try in Dana ↗' : agent === 'ada' ? 'Try in Ask Devin ↗' : 'Try in Devin ↗';
  const featureList = features ? features.split(',').map(f => f.trim()) : [];
  return <div className="uc-hero">
      <div className="uc-hero-inner">
        <div className="uc-hero-left">
          <h1 className="uc-hero-title">{title}</h1>
          <p className="uc-hero-desc">{description}</p>
          <div>
            <a href={devinHref} target="_blank" rel="noopener noreferrer" className="try-in-devin-btn">
              {buttonLabel}
            </a>
          </div>
        </div>
        <div className="uc-hero-meta">
          <div className="uc-meta-item">
            <span className="uc-meta-label">Author</span>
            <span className="uc-meta-value">Cognition</span>
          </div>
          <div className="uc-meta-item">
            <span className="uc-meta-label">Category</span>
            <span className="uc-meta-value">{category}</span>
          </div>
          {featureList.length > 0 && <div className="uc-meta-item">
              <span className="uc-meta-label">Features</span>
              <span className="uc-meta-value">{featureList.join(', ')}</span>
            </div>}
        </div>
      </div>
    </div>;
};

export const PromptBlock = ({children, type, agent, intent, playbookId}) => {
  var utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=prompt-block';
  var tag = 'docs-use-case-gallery';
  var agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  var label = type === 'schedule' ? 'Schedule in Devin' : type === 'playbook' ? 'Create Playbook' : type === 'knowledge' ? 'Add to Knowledge' : agent === 'advanced' ? 'Try in Devin' : agent === 'dana' ? 'Try in Dana' : agent === 'ada' ? 'Try in Ask Devin' : 'Try in Devin';
  var buildUrl = function (text) {
    var encoded = encodeURIComponent(text);
    if (type === 'schedule') return 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + '&prompt=' + encoded;
    if (type === 'playbook') return 'https://app.devin.ai/settings/playbooks/create?' + utm + '&body=' + encoded;
    if (type === 'knowledge') return 'https://app.devin.ai/knowledge?' + utm + '&body=' + encoded;
    if (agent === 'ada') return 'https://app.devin.ai/search?' + utm + '&noSubmit=true&prompt=' + encoded;
    return 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encoded;
  };
  const ref = React.useRef(null);
  const [href, setHref] = React.useState('#');
  React.useEffect(() => {
    if (!ref.current) return;
    var codeEl = ref.current.querySelector('pre code');
    if (codeEl) {
      var text = codeEl.textContent.trim();
      if (text) setHref(buildUrl(text));
    }
    var header = ref.current.querySelector('[data-component-part="code-block-header"]');
    if (header && !header.querySelector('.prompt-block-devin-link')) {
      var link = document.createElement('a');
      link.href = href;
      link.target = '_blank';
      link.rel = 'noopener noreferrer';
      link.className = 'prompt-block-devin-link';
      link.style.cssText = 'display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:#fff;font-size:11px;font-weight:500;padding:4px 10px;border-radius:6px;white-space:nowrap;background:#317CFF;transition:background 0.2s;margin-left:8px;';
      link.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg> ' + label;
      link.onmouseenter = function () {
        link.style.background = '#2968D9';
      };
      link.onmouseleave = function () {
        link.style.background = '#317CFF';
      };
      header.appendChild(link);
    }
    var existingLink = ref.current.querySelector('.prompt-block-devin-link');
    if (existingLink && href !== '#') existingLink.href = href;
  });
  return <div className="prompt-block" ref={ref}>{children}</div>;
};

<UseCaseHero title="PRs nach jedem Anruf erstellen" description="Ein stündlicher Devin-Zeitplan fragt Granola nach neuen Meetings ab, extrahiert Engineering-Aufgaben aus Transkripten und startet Kind-Devin-Sitzungen, um PRs zu erstellen." prompt="Richte einen stündlichen Devin-Zeitplan ein, der Granola über den Granola MCP-Server nach neuen Meetings abfragt. Extrahiere für jedes Meeting mit einem fertigen Transkript Engineering-Aufgaben und starte Kind-Devin-Sitzungen, um PRs zu erstellen. Verwende einen Knowledge-Hinweis, um verarbeitete Meetings zu protokollieren." category="Automatisierungen" features="Zeitpläne, MCP, Playbooks, Erweitert" type="schedule" agent="devin" />

<div className="uc-detail-wrapper">
  <Tip>Keine Lust auf manuelle Einrichtung? Fügen Sie einen Link zu dieser Seite in eine Devin-Sitzung ein und bitten Sie Devin, alles für Sie einzurichten.</Tip>

  Granola zeichnet Ihre Meetings auf und wandelt sie in Notizen, Zusammenfassungen und Transkripte um. Sobald Sie den Granola MCP verbinden, kann Devin diese Meeting-Artefakte genauso nutzen wie ein Teammitglied: nachlesen, was besprochen wurde, konkrete technische Folgeaufgaben identifizieren und die Arbeit aufnehmen.

  Führen Sie dies als stündlichen Zeitplan aus, damit Aufgaben direkt starten können, sobald Sie ein Gespräch beenden. Die gesamte Schleife läuft innerhalb Ihrer Devin-Instanz und verwendet einen Zeitplan, das Granola MCP, Knowledge und Kind-Sitzungen.

  ```
  Geplante Devin-Sitzung (stündlich)
    → Aktuelle Granola-Meetings via MCP auflisten
    → Für jedes neue Meeting (ältestes zuerst):
        → Metadaten, Notizen, KI-Zusammenfassung und Transkript abrufen
        → Technische Aufgaben aus der Diskussion identifizieren
        → Untergeordnete Devin-Sitzungen für konkrete Aufgaben starten
        → Das verarbeitete Meeting in Knowledge protokollieren
  ```

  <Steps>
    <Step title="Granola MCP verbinden">
      Devin benötigt Zugriff auf Ihre Granola-Meetings, um Transkripte und Notizen zu lesen.

      1. Gehen Sie zu **Settings > Connections > MCP servers** und suchen Sie nach **Granola**
      2. Klicken Sie auf **Enable** und authentifizieren Sie sich — dadurch erhält Devin Lesezugriff auf Ihre Meetings, Transkripte und Notizen
      3. Klicken Sie auf **Test listing tools**, um zu überprüfen, ob die Verbindung funktioniert

      Sobald die Verbindung hergestellt ist, kann Devin `list_meetings`, `get_meetings` und `get_meeting_transcript` aufrufen, um während einer Sitzung Daten zu Meetings abzurufen. Weitere Informationen finden Sie unter [Konfigurieren von MCP-Servern](/de/work-with-devin/mcp).
    </Step>

    <Step title="Erstellen Sie einen Knowledge-Hinweis zu processed-meetings">
      Devin verwendet eine einzelne [Knowledge](/de/product-guides/knowledge)-Notiz, um zu protokollieren, welche Meetings bereits verarbeitet wurden. So wird verhindert, dass sie bei stündlichen Ausführungen doppelt verarbeitet werden.

      Gehen Sie zu **Settings > Knowledge** und erstellen Sie eine neue Notiz:

      * **Name**: `Granola Post-call Processor Meeting Log`
      * **Trigger**: `Verwenden Sie diese Notiz beim Ausführen der geplanten Sitzung des Granola-Post-Call-Prozessors, um bereits verarbeitete Meetings zu verfolgen.`
      * **Inhalt**:

      ```json Granola Post-call Processor Meeting Log theme={null}
      {
        "last_processed_meeting_id": null,
        "last_processed_meeting_time": null,
        "last_processed_title": null,
        "updated_at": null
      }
      ```

      Die geplante Sitzung protokolliert jedes erfolgreich verarbeitete Meeting in diesem Hinweis, sodass der nächste Durchlauf dort weitermacht, wo der letzte aufgehört hat.
    </Step>

    <Step title="Erstellen Sie das Playbook für den Post-call-Operator">
      Erstellen Sie ein [Playbook](/de/product-guides/creating-playbooks), das Devin vorgibt, wie jedes Meeting verarbeitet werden soll. Gehen Sie zu [**Settings > Playbooks**](https://app.devin.ai/settings/playbooks/create?utm_source=docs\&utm_medium=use-case-gallery) und erstellen Sie ein neues Playbook:

      <PromptBlock type="playbook">
        ```txt Nachbereitungs-Operator theme={null}
        Wandle ein abgeschlossenes Granola-Meeting in konkrete Entwicklungsarbeit um.
        Lies das Transkript, identifiziere alle umsetzbaren Code-Aufgaben und starte
        Devin-Kind-Sitzungen, um PRs zu erstellen. Lege den Schwerpunkt klar auf Umsetzung —
        wenn etwas zu einer PR werden kann, starte sie.

        Für jedes Meeting:
        1. Lies das Transkript, die KI-Zusammenfassung und alle privaten Notizen
        2. Identifiziere jede erwähnte oder implizierte Engineering-Aufgabe:
           - Besprochene Fehlerbehebungen
           - Feature-Anfragen mit ausreichend Details für eine Spezifikation
           - Vereinbarte Refactorings oder Verbesserungen
           - Recherche- oder Untersuchungsaufgaben
           - Aktualisierungen der Dokumentation
           - Änderungen an Infrastruktur oder DevOps
        3. Erstelle für jede Aufgabe eine konkrete Spezifikation:
           - In welchem Repo bzw. welchen Repos gearbeitet werden soll
           - Was die Änderung bewirken soll
           - Akzeptanzkriterien
           - Wichtiger Kontext aus dem Meeting (sparsam zitieren)
        4. Starten Sie für jede Aufgabe, die konkret genug ist, um
           eine PR zu erzeugen, eine Devin-Kind-Sitzung. Fügen Sie die vollständige Spezifikation als Prompt ein.
        5. Für Aufgaben, die für eine PR zu vage sind, führen Sie sie als empfohlene Maßnahmen
           auf und vermerken den fehlenden Kontext.
        6. Geben Sie eine strukturierte Zusammenfassung der gestarteten Sitzungen und
           Empfehlungen zurück.

        Starten Sie keine Sitzungen für vage Ideen. Wenn eine Aufgabe
        noch Klärung erfordert, führen Sie sie stattdessen als Empfehlung auf.
        ```
      </PromptBlock>

      Hinweis: Notieren Sie sich nach dem Speichern die Playbook-ID — Sie werden sie im Prompt für den Zeitplan referenzieren.
    </Step>

    <Step title="Stündlichen Zeitplan erstellen">
      Gehen Sie zu [**Settings > Zeitpläne**](/de/product-guides/scheduled-sessions) und klicken Sie auf **Zeitplan erstellen**.

      * **Name**: `Granola post-call processor`
      * **Frequenz**: Stündlich (`0 * * * *`)
      * **Agent**: Devin — damit kann Devin für jede Aufgabe Kind-Sitzungen starten, sodass Korrekturen parallel ausgeführt werden
      * **Slack Channel** (optional): Wählen Sie einen Channel aus, damit Ihr Team benachrichtigt wird, wenn Meetings verarbeitet und PRs erstellt werden
      * **Prompt**:

      <PromptBlock type="schedule" agent="devin">
        ```txt Granola post-call processor theme={null}
        Führe den Granola post-call processor aus.

        Verwende den Granola MCP-Server und den Knowledge-Hinweis mit dem Namen
        "Granola Post-call Processor Meeting Log".

        1. Prüfe das Besprechungsprotokoll, um die ID/Uhrzeit des zuletzt verarbeiteten Meetings zu finden.
        2. Liste die Granola-Meetings der letzten 24 Stunden auf.
        3. Wähle Meetings aus, die neuer sind als das neueste Meeting im Protokoll. Sortiere sie von alt nach neu.
        4. Für jedes Meeting:
           a. Rufe Metadaten, private Notizen und die KI-Zusammenfassung über MCP ab
           b. Rufe das vollständige Transkript über MCP ab
           c. Wenn das Transkript nicht verfügbar ist, STOPPE die Verarbeitung des Stapels
              hier — überspringe nichts. Beim nächsten Durchlauf wird es erneut versucht.
           d. Führe das Playbook Post-call Operator für dieses Meeting aus
           e. Starte Kind-Sitzungen von Devin für konkrete Engineering-Aufgaben
           f. Protokolliere dieses verarbeitete Meeting im Knowledge-Hinweis
        5. Veröffentliche eine Zusammenfassung in Slack: verarbeitete Meetings, gestartete Sitzungen
           und alle Meetings, die wegen fehlender Transkripte übersprungen wurden.

        Wenn es seit dem neuesten Meeting im Protokoll keine neuen Meetings gibt, beende den Vorgang ohne weitere Aktion.
        ```
      </PromptBlock>

      Setzen Sie **bypass approval** auf `true`, wenn Sie einen vollständig autonomen Betrieb wünschen — es sind keine manuellen Genehmigungen für MCP-Tools, Knowledge-Aktualisierungen oder das Erstellen von Kind-Sitzungen erforderlich.
    </Step>

    <Step title="Was ein typischer Durchlauf liefert">
      Jede Stunde verarbeitet Devin neue Meetings und öffnet gezielte PRs. So sieht die Ausgabe einer echten Sitzung aus:

      ```
      Processed 1 new Granola meeting since the latest meeting log entry:

      Meeting: "Backend API planning" (2026-04-29 2:00 PM)

      Child sessions started (3):
      1. Fix N+1 query in /api/invoices endpoint
         Repo: acme/api-server
         PR: Eager-load invoice line items to fix timeout
         Session: https://app.devin.ai/sessions/abc123

      2. Add rate limiting to webhook endpoints
         Repo: acme/api-server
         PR: Per-key rate limits on /webhooks/*
         Session: https://app.devin.ai/sessions/def456

      3. Update API docs for new billing endpoints
         Repo: acme/docs
         PR: Add billing endpoint reference docs
         Session: https://app.devin.ai/sessions/ghi789

      Recommended actions (1):
      - Investigate auth token refresh flow — mentioned as "sometimes
        flaky" but no specific error or repo identified. Needs more
        context from the team.

      Knowledge meeting log updated to "Backend API planning" (2026-04-29).
      ```

      Jede untergeordnete Sitzung läuft unabhängig und erstellt einen eigenen Pull Request (PR), wobei der Besprechungskontext bereits in die Beschreibung eingearbeitet ist.
    </Step>

    <Step title="Feinabstimmen und iterieren">
      Nach einigen Tagen mit mehreren Durchläufen sollten Sie prüfen, was gut funktioniert, und Anpassungen vornehmen:

      **Mit Verzögerungen bei Transkripten umgehen.** Der Zeitplan stoppt die Verarbeitung, sobald er auf ein Meeting ohne verfügbares Transkript stößt — so wird verhindert, dass Meetings mit verzögerter Verarbeitung übersprungen werden. Wenn Transkripte regelmäßig nur langsam bereitstehen, erhöhen Sie das Intervall im Zeitplan oder fügen Sie dem Prompt einen Verzögerungspuffer hinzu.

      **Nach Meeting-Typ eingrenzen.** Nicht jedes Meeting führt zu Engineering-Arbeit. Fügen Sie dem Prompt Filter hinzu, um bestimmte Meeting-Typen zu überspringen:

      <PromptBlock agent="advanced">
        ```txt Meetings nach Typ filtern theme={null}
        Aktualisiere den Zeitplan-Prompt: Überspringe Meetings mit Titeln, die
        "1:1", "Stand-up" oder "social" enthalten. Verarbeite nur Meetings, die
        wahrscheinlich technische Diskussionen enthalten — Planungssitzungen,
        Fehler-Triage, Design-Reviews und Kundengespräche.
        ```
      </PromptBlock>

      **Aus den Ergebnissen lernen.** Bitten Sie Devin nach ein paar Wochen zu analysieren, welche Kind-Sitzungen zu zusammengeführten PRs geführt haben und welche ohne Zusammenführung geschlossen wurden. Nutzen Sie dieses Feedback, um die Kriterien zur Aufgabenextraktion im Playbook zu verfeinern:

      <PromptBlock agent="advanced">
        ```txt Ergebnisse nach Calls analysieren und Playbook aktualisieren theme={null}
        Prüfe alle Kind-Sitzungen, die in den letzten 2 Wochen vom Granola-Post-call-
        Prozessor gestartet wurden. Prüfe für jede Sitzung, ob
        die PR zusammengeführt oder geschlossen wurde.

        Identifiziere Muster — welche Aufgabentypen zuverlässig
        zusammenführbare PRs erzeugen, welche zu vage sind und wo das Playbook
        mehr Kontext braucht. Schlage dann auf Grundlage dieser Erkenntnisse
        Aktualisierungen für das Post-call Operator-Playbook vor.
        ```
      </PromptBlock>
    </Step>
  </Steps>
</div>
