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

# Clasificación automática de bugs mediante Linear

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="Clasificación automática de errores con Linear" description="Devin investiga automáticamente los errores en cuanto se aplica una etiqueta en Linear." prompt="Lee el informe de error en este ticket de Linear. Busca en el código base las rutas de ejecución relevantes e identifica la causa raíz." category="Gestión de proyectos" features="Integraciones, Playbooks" devinUrl="https://app.devin.ai/settings/connections/linear" />

<div className="uc-detail-wrapper">
  <Tip>¿Prefieres no configurarlo manualmente? Pega un enlace a esta página en una sesión de Devin y pídele que lo configure todo por ti.</Tip>

  <Steps>
    <Step title="Crea una guía de triaje">
      La automatización necesita un playbook que le diga a Devin *cómo* tu equipo hace el triage de bugs: no solo «arregla el bug», sino los pasos específicos que seguiría un ingeniero.

      Empieza duplicando el `!triage` [playbook de plantilla](https://app.devin.ai/settings/playbooks/14fed18b89d44713a26e673cf258f548?utm_source=docs\&utm_medium=use-case-gallery) y personalizándolo para tu stack. O ve a [**Settings > Playbooks**](https://app.devin.ai/settings/playbooks?utm_source=docs\&utm_medium=use-case-gallery) y crea un nuevo playbook con la macro `!triage-bug`. Aquí tienes un ejemplo:

      <PromptBlock type="playbook">
        ```txt Ejemplo de playbook de triage theme={null}
        Lee el informe de error en este ticket de Linear. Luego:

        1. Busca en la base de código las rutas de código relevantes mencionadas en el informe
        2. Revisa el git log para ver cambios recientes en esos archivos
        3. Identifica la causa raíz y resume tus hallazgos: causa raíz,
           archivos afectados, cambios recientes que puedan haberla causado y
           un enfoque sugerido para la solución
        ```
      </PromptBlock>

      Cuanto más específico sea tu playbook, mejor hará Devin el triage de errores. Haz referencia a los patrones reales de tu equipo: convenciones de registro de errores, frameworks de pruebas, reglas de nomenclatura de ramas. Consulta la [documentación de playbooks](/es/product-guides/creating-playbooks) para más información sobre cómo escribir playbooks eficaces, o pídele a Devin que genere un playbook por ti.

      <Tip>Conecta el [Datadog MCP](/es/work-with-devin/mcp#datadog) (u otros servicios de logging/monitorización) y da a Devin acceso de solo lectura a la base de datos para que pueda revisar logs, métricas y consultar datos como parte de su investigación.</Tip>
    </Step>

    <Step title="Conecta el disparador de la automatización">
      Ahora conecta el playbook a Linear para que se ejecute automáticamente cuando se le asigne una etiqueta a un bug.

      1. Ve a [**Settings > Connections > Linear**](https://app.devin.ai/settings/connections/linear?utm_source=docs\&utm_medium=use-case-gallery) (primero conecta la integración si aún no lo has hecho — [guía de configuración](/es/integrations/linear))
      2. En **Synced playbook labels**, haz clic en **Add playbook** y selecciona `!triage-bug` — esto crea una etiqueta correspondiente en el grupo de etiquetas **"Devin Playbooks"** de Linear
      3. Desplázate hasta **Automation triggers** y haz clic en **Add trigger**:
         * **Teams**: Selecciona el equipo donde se registran los bugs (por ejemplo, "Engineering")
         * **Labels**: Selecciona `Bug` (o la etiqueta que tu equipo use para reportar bugs)
         * **Playbook**: Selecciona `!triage-bug`
      4. Guarda el trigger

      Los triggers usan **edge detection**: solo se activan cuando un ticket *pasa* a cumplir la condición (por ejemplo, cuando alguien agrega la etiqueta `Bug`), no para tickets que ya la tienen. Esto significa que no activarás Devin por accidente en todo tu backlog existente.

      <Note>Para que las etiquetas de playbooks se sincronicen automáticamente con Linear, tu espacio de trabajo de Linear debe tener **Manage workspace labels** configurado como **All members** (se encuentra en **Settings > Security** de Linear). Si eso no está habilitado, tendrás que crear las etiquetas manualmente en Linear.</Note>
    </Step>

    <Step title="Etiqueta un error y observa cómo Devin lo investiga">
      Cuando un ingeniero agrega la etiqueta `Bug` a un ticket de Linear como este:

      > **ENG-487**: Los usuarios ven un error 500 al enviar el formulario de contacto en /contact. Empezó después del despliegue del viernes pasado. El stack trace apunta a `validateEmail()` en `src/lib/forms.ts`.

      Devin inicia automáticamente una sesión y sigue tu playbook de triaje:

      * **Lee el ticket** — extrae el título, la descripción y cualquier comentario en Linear
      * **Busca en la base de código** — encuentra `src/lib/forms.ts`, el controlador de la ruta en `src/routes/contact.ts` y las pruebas de validación del formulario
      * **Revisa los cambios recientes** — ejecuta `git log --since="last Friday" -- src/lib/forms.ts` y detecta un commit que refactorizó la expresión regular del email

      Los hallazgos de Devin se sincronizan automáticamente de vuelta al ticket de Linear mediante la integración. Todo esto sucede sin que nadie asigne el ticket a Devin: solo la etiqueta desencadena todo el flujo de trabajo.

      <Tip>Con la integración de Linear instalada, Devin tiene acceso nativo a las herramientas de Linear, por lo que tu playbook puede instruir a Devin para actualizar las etiquetas de los tickets según sus hallazgos. Por ejemplo, tu playbook de triaje podría indicar a Devin que agregue una etiqueta `Clear Fix`, `Needs Review` o `Lacking Context` según el resultado. Dado que las etiquetas pueden activar otras automatizaciones, puedes encadenar flujos de trabajo; por ejemplo, una etiqueta `Clear Fix` podría iniciar una segunda sesión de Devin que escriba la corrección.</Tip>
    </Step>

    <Step title="Optimiza el ciclo">
      Después de algunas triages, perfecciona el sistema en función de lo que Devin hace bien y de dónde necesita más orientación.

      **Mejora el playbook basándote en sesiones reales.** Si Devin omite sistemáticamente algo (por ejemplo, no revisar los logs o pasar por alto un servicio relacionado), añade ese paso a tu playbook de `!triage-bug`. Puedes pedirle a Devin que analice sesiones anteriores y mejore automáticamente tu playbook o cree entradas de [Knowledge](/es/product-guides/knowledge) para patrones que Devin deba seguir en todas las sesiones, como "siempre revisa primero el panel de seguimiento de errores" o "nuestros logs del servicio de auth están en CloudWatch, no en Datadog."

      **Añade un playbook de corrección cuando estés listo.** Una vez que confíes en el triage de Devin, crea un segundo playbook como `!fix-bug` que vaya más lejos: escribir una corrección, añadir una prueba de regresión y abrir un PR. Asígnalo a una etiqueta independiente para que tu equipo pueda elegir entre "solo dime qué está mal" y "arréglalo por mí":

      <PromptBlock type="playbook">
        ```txt Fix playbook example theme={null}
        Lee el informe del bug en este ticket de Linear. Luego:

        1. Busca en la base de código las rutas de código relevantes mencionadas en el informe
        2. Revisa el git log para ver cambios recientes en esos archivos
        3. Identifica la causa raíz
        4. Escribe una corrección que aborde la causa raíz
        5. Añade una prueba de regresión que habría detectado este bug
        6. Ejecuta la suite de pruebas existente para asegurarte de que nada más se rompa
        7. Abre un PR vinculado al ticket de Linear — incluye "Fixes ENG-XXX" en
           la descripción del PR
        ```
      </PromptBlock>
    </Step>
  </Steps>
</div>
