> ## 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.

# Tägliche Behebung von Sentry-Fehlern

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="Tägliche Sentry-Fehlerbehebungen" description="Plane eine tägliche Devin-Session, die über Nacht neue Sentry-Fehler abruft, für jeden eine Fehlerbehebungs-Session startet und PRs bis zum Morgen bereitstellt." prompt="Verwende den Sentry MCP, um alle ungelösten Fehler der letzten 24 Stunden im Projekt payments-api nach Ereignisanzahl sortiert abzurufen. Untersuche für die 5 häufigsten Fehler den Stacktrace und die zugrunde liegende Ursache und starte dann für jeden eine Devin-Session, um einen PR mit Fix und Regressionstest zu erstellen. Überspringe Fehler mit den Tags wontfix oder expected-behavior." category="Automatisierungen" features="Zeitpläne, MCP, Advanced" type="schedule" agent="advanced" />

<div className="uc-detail-wrapper">
  <Tip>Für eine ausführlichere Anleitung zur Sentry-Integration [klicken Sie hier](/de/enterprise/integrations/sentry).</Tip>

  <Steps>
    <Step title="Sentry-MCP verbinden">
      Bevor Sie Ihren Zeitplan erstellen, benötigt Devin Zugriff auf Ihre Sentry-Daten.

      1. Gehen Sie zu **Settings > Connections > MCP servers** und suchen Sie nach **Sentry**
      2. Klicken Sie auf **Enable** und authentifizieren Sie sich über OAuth – dadurch erhält Devin Lesezugriff auf Ihre Sentry-Issues, Events und Stack Traces
      3. Klicken Sie auf **Test listing tools**, um zu überprüfen, ob die Verbindung funktioniert

      Sobald die Verbindung hergestellt ist, kann Devin Ihre Sentry-Projekte abfragen, Issue-Details und Stack Traces abrufen und Breadcrumbs lesen – alles innerhalb einer Sitzung. Erfahren Sie mehr über das [Konfigurieren von MCP-Servern](/de/work-with-devin/mcp).
    </Step>

    <Step title="Zeitplan erstellen">
      Gehe zu **Settings > [Schedules](/de/product-guides/scheduled-sessions)** und klicke auf **Create schedule**.

      * **Name**: `Daily Sentry remediation — payments-api`
      * **Frequency**: Täglich um 6:00 Uhr (damit Fix-PRs vor dem Standup bereit sind)
      * **Agent**: Devin — damit kann Devin für jeden Fehler eine separate Session starten, sodass Fixes parallel ausgeführt werden
      * **Slack channel**: Wähle einen Channel (z. B. `#sentry-fixes`), damit dein Team benachrichtigt wird, wenn der Lauf abgeschlossen ist und PRs zur Überprüfung bereitstehen
      * **Prompt**:

      <PromptBlock type="schedule" agent="advanced">
        ```txt Daily Sentry remediation theme={null}
        Verwende die Sentry-MCP, um alle ungelösten Fehler der letzten
        24 Stunden im payments-api-Projekt abzurufen, sortiert nach Ereignisanzahl.
        Überspringe Fehler mit den Tags `wontfix` oder `expected-behavior`.

        Für die 5 wichtigsten Fehler:
        1. Rufe den vollständigen Stacktrace und die Breadcrumbs ab
        2. Finde die relevanten Quellcodedateien in unserem Repo
        3. Identifiziere die eigentliche Ursache
        4. Starte eine Devin-Session, um einen PR mit einem Fix und einem
           Regressionstest zu eröffnen, und verlinke die Sentry-Issue-URL in
           der PR-Beschreibung

        Veröffentliche eine Zusammenfassung aller Fehler und ihrer PRs in Slack.

        Wenn ich zu einem der PRs Feedback hinterlasse (z. B. indem ich einen
        Fix als False Positive markiere, einen anderen Ansatz anfordere oder
        ein Pattern genehmige), erstelle einen Knowledge-Eintrag mit diesem
        Feedback, damit zukünftige Läufe ähnliche Fehler korrekt behandeln.
        ```
      </PromptBlock>
    </Step>

    <Step title="Befüllen Sie Knowledge mit Ihrer Codebasis und früheren Fehlerbehebungen">
      Devin schreibt bessere Fixes, wenn es die Fehlermuster deiner App versteht. Anstatt Knowledge-Einträge selbst zu schreiben, bitte Devin in einer beliebigen Sitzung, deine Codebasis und frühere Fixes zu untersuchen, und lass Devin anschließend das Knowledge erstellen:

      <PromptBlock agent="advanced">
        ```txt Learn our error patterns and create Knowledge theme={null}
        Investigate our payments-api codebase and build Knowledge entries
        for common error patterns:

        1. Read recent merged PRs that fixed Sentry errors — look for
           patterns in what broke and how it was fixed
        2. Check resolved Sentry issues for recurring root causes
           (null checks, N+1 queries, missing error boundaries)
        3. Review our error handling conventions in the codebase —
           which wrapper classes we use, how we log errors, our
           retry/fallback patterns

        For each pattern you find, create a Knowledge entry with a
        specific trigger (e.g., "TypeError in checkout", "database
        timeout in reports") and actionable fix guidance.
        ```
      </PromptBlock>

      Diese Einträge werden automatisch abgerufen, wenn Devin während geplanter Durchläufe auf passende Fehler stößt – und der oben stehende geplante Prompt weist Devin an, Knowledge basierend auf deinem PR-Feedback zu aktualisieren, sodass Devin im Laufe der Zeit besser wird.
    </Step>

    <Step title="Was ein typischer Durchlauf liefert">
      Jeden Morgen verarbeitet Devin die über Nacht aufgelaufene Fehlerwarteschlange und eröffnet gezielte Pull Requests (PRs). So sieht die Ausgabe einer echten Sitzung aus:

      ```
      Processed 5 Sentry errors from payments-api (past 24h):

      1. TypeError: Cannot read property 'last4' of null (1,892 events)
         Root cause: Stripe webhook delivers `payment_method: null` for
         bank transfer payments. CheckoutReceipt.tsx:34 destructures
         without a null check.
         PR #612: Add null safety to CheckoutReceipt, show "Bank Transfer"
         fallback for non-card payments.

      2. TimeoutError: Query timeout after 30s on /api/invoices (743 events)
         Root cause: N+1 query in InvoiceService.getMonthly() — each
         line item triggers a separate product lookup.
         PR #613: Add eager loading for invoice line items with
         Sequelize `include`.

      3. RangeError: Maximum call stack size exceeded (412 events)
         Root cause: Circular reference in refund.toJSON() when a
         refund references its parent transaction which references
         the refund.
         PR #614: Break circular ref with a custom serializer,
         add max-depth test.

      4-5. Two lower-frequency validation errors — PRs #615, #616.
      ```

      Jede PR enthält den Link zum Sentry-Issue, eine Beschreibung der eigentlichen Ursache, die Korrektur sowie einen Test, der den ursprünglichen Fehler aufgedeckt hätte.
    </Step>

    <Step title="Feinabstimmen und iterieren">
      Nach einer Woche mit Durchläufen sollten Sie überprüfen, was funktioniert, und Anpassungen vornehmen:

      **Begrenzen Sie die Fehleranzahl.** Starten Sie mit den `top 5` Fehlern pro Durchlauf. Wenn Devin konsistent mergebare PRs erstellt, erhöhen Sie auf 8–10. Wenn die Fixes stark überarbeitet werden müssen, reduzieren Sie auf 3.

      **Nach Projekt oder Tag filtern.** Beschränken Sie den Prompt auf bestimmte Sentry-Projekte (`payments-api`, `web-frontend`) oder schließen Sie störende Tags aus. Sie können separate Zeitpläne pro Projekt erstellen, wenn sich das Fehleraufkommen unterscheidet.

      **Aus Ergebnissen lernen.** Bitten Sie Devin nach ein paar Wochen, zu analysieren, welche Fixes tatsächlich ausgeliefert wurden, und überführen Sie diese Erkenntnisse in Knowledge:

      <PromptBlock agent="advanced">
        ```txt Analyze Sentry fix outcomes and update Knowledge theme={null}
        Look at all PRs Devin opened for Sentry errors in the last 2 weeks.
        For each PR, check whether it was merged or closed.

        Identify themes and learnings — which fix patterns worked, which
        approaches were rejected, what types of errors were false positives,
        and where Devin lacked context. Then update your Knowledge
        accordingly: create new entries, edit existing ones, or delete
        entries that led to bad fixes.
        ```
      </PromptBlock>
    </Step>
  </Steps>
</div>
