~/docs/getting-started
Primeros pasos
bugzero es un agente de IA que corrige bugs, y la sala de control para dirigirlo. Cuando algo falla, ya sea que lo reporte Sentry, PostHog o tu propia app mediante un webhook, el agente se ejecuta en tus propias GitHub Actions y abre un pull request con la corrección; tú lo diriges desde un solo panel. Tu código nunca sale de tu infraestructura. Aquí tienes todo lo que necesitas configurar y por qué importa cada paso.
Cómo un error se convierte en un pull request.
7 pasos hasta tu primera corrección.
Crea tu cuenta
obligatorioSolo necesitas un correo electrónico y una contraseña. Tendrás un espacio de trabajo de equipo en el plan Gratis: 5 correcciones al mes, sin tarjeta.
Conecta GitHub
obligatorioEn la página Integraciones, instala la GitHub App de bugzero, elige la cuenta u organización y selecciona los repositorios en los que bugzero puede iniciar correcciones.
Conecta una fuente de errores
obligatorioEn Integraciones → Fuentes de errores, conecta el monitor de errores que ya usas y elige los proyectos que bugzero debe vigilar, o envía los errores desde tu propia app. Puedes usar más de una fuente.
- Sentry: conecta tu organización mediante OAuth.
- PostHog: elige tu región y pega una clave de API personal con los permisos
project:read,hog_function:writeyquery:read. - Webhook personalizado: crea un endpoint para cada app y envía los errores a su URL secreta desde cualquier lenguaje o herramienta; consulta Webhook personalizado más abajo.
Vincula cada proyecto a un repositorio
obligatorioPara cada proyecto que vigilas, elige el repositorio de GitHub que el agente debe corregir. Lo configuras justo al lado de cada proyecto, en la página Integraciones. Para un endpoint de webhook personalizado, eliges el repositorio al crearlo.
Agrega el workflow de bugzero
obligatorioEn Integraciones → Configuración del runner, haz clic en Agregar workflow junto a cada repositorio. GitHub se abre con .github/workflows/bugzero.yml ya completado: revísalo y haz commit en tu rama predeterminada. Luego haz clic en Verificar de nuevo.
Agrega tu clave de IA como secreto de Actions
obligatorioEn cada repositorio conectado, abre Settings → Secrets and variables → Actions y agrega un secreto nuevo llamado ANTHROPIC_API_KEY (o OPENAI_API_KEY) con tu propia clave de IA.
Permite que Actions abra pull requests
obligatorioEn cada repositorio conectado, abre Settings → Actions → General, baja hasta Workflow permissions, marca Allow GitHub Actions to create and approve pull requests y guarda. Si la opción aparece atenuada, un propietario de la organización tiene que permitirla antes en los Settings → Actions → General de la propia organización.
pull-requests: write del propio workflow no lo anula. Sin él, el agente igualmente sube su corrección a una rama, pero GitHub se niega a abrir el pull request: tendrías una rama en lugar de un PR.Opcionales, pero recomendados.
Elige los entornos adecuados
opcionalEn cada vinculación de proyecto, marca los entornos a los que debe reaccionar; por ejemplo, solo producción. Si no marcas ninguno, se vigilan todos los entornos. Los endpoints de webhook personalizado tienen el mismo filtro opcional.
Configura el agente
opcionalEn la página Agente, elige el modelo y el esfuerzo (los modelos más recientes de Claude o GPT), escribe instrucciones con las convenciones de tu equipo y define un límite de seguridad diario. Cada vez que publicas instrucciones se crea una versión nueva: compara versiones, mira cómo rinde cada una y revierte con un clic.
Pásate a Pro cuando lo necesites
opcionalEl plan Gratis incluye 5 correcciones al mes. Cuando necesites más, pásate desde Facturación a Pro: correcciones ilimitadas por 9 US$ al mes, y administra o cancela tu suscripción en el portal de facturación.
Recibe tu primera corrección
opcionalCuando un error nuevo llega a un proyecto y entorno vigilados, bugzero inicia una ejecución que termina en un pull request. Sigue el progreso en la página Ejecuciones; después abre el PR, lee el diff y el resumen de la causa raíz, y haz merge si está bien.
Envía errores desde cualquier lugar.
¿Errores que tu monitor no captura (un worker, un cron job, un script) o no usas ningún monitor de errores? Envíalos directamente a bugzero: una petición HTTP desde cualquier lenguaje o herramienta, sin SDK.
En Integraciones → Fuentes de errores, agrega un endpoint de Webhook personalizado para cada app: un nombre, el repositorio que corrige el agente, su rama base y, opcionalmente, los entornos a los que debe reaccionar. Cada endpoint tiene su propia URL secreta.
crear un endpoint →Autenticación
El token al final de la URL del endpoint lo identifica. Llama a la URL tal cual o, si tus herramientas registran las URL, envía el token en el encabezado Authorization a la URL fija.
# token en la URL POST https://bugzero.dev/api/webhooks/custom/bzc_… # o bien: token en un encabezado POST https://bugzero.dev/api/webhooks/custom Authorization: Bearer bzc_…
Payload
Envía un objeto JSON con Content-Type: application/json, de hasta 256 KB. Solo message es obligatorio.
- messagestring · obligatorio
- El mensaje del error.
- typestring
- La clase del error, p. ej.
TypeError. Predeterminado:Error. - titlestring
- Reemplaza el título predeterminado,
type: message. - stacktracestring | array
- Un texto, o un array de líneas o de frames
{ file, line, column, function }, con la llamada más reciente primero. - environmentstring
- Se compara con el filtro de entornos del endpoint. Los eventos sin entorno siempre pasan.
- fingerprintstring
- Agrupa los eventos del mismo error (consulta “Una corrección por error” más abajo). Predeterminado: se calcula a partir del tipo, el mensaje y el primer frame del stack trace.
- urlstring
- Un enlace al error en tu sistema (http o https), que se muestra en la ejecución y en el pull request.
- contextobject
- Cualquier detalle adicional para el agente (petición, usuario, etiquetas…), que se envía como JSON y se recorta a 4000 caracteres.
- testboolean
- Una prueba: indica qué pasaría sin iniciar nada.
Los campos desconocidos se ignoran, null cuenta como ausente y los textos largos se recortan.
Ejemplos
Con curl, desde una terminal o un script:
curl -X POST "$BUGZERO_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{
"message": "order.customer is undefined",
"type": "TypeError",
"environment": "production",
"stacktrace": [
{ "file": "src/orders/receipt.ts", "line": 42, "function": "sendReceipt" },
{ "file": "src/orders/checkout.ts", "line": 88, "function": "completeOrder" }
],
"url": "https://logs.example.com/errors/8812",
"context": { "orderId": "ord_8812", "plan": "pro" }
}'Desde Node.js, por ejemplo en un bloque catch:
export async function reportError(error, context = {}) {
await fetch(process.env.BUGZERO_WEBHOOK_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
type: error.name,
message: error.message || String(error),
stacktrace: error.stack,
environment: process.env.NODE_ENV,
context,
}),
signal: AbortSignal.timeout(5000),
}).catch(() => {});
}
try {
await completeOrder(order);
} catch (error) {
await reportError(error, { orderId: order.id });
throw error;
}Una corrección por error
El agente se inicia una sola vez por error: tras el primer evento, los eventos con el mismo fingerprint en el mismo endpoint se omiten, aunque esa ejecución haya fallado. Si falló, corrige la configuración (por ejemplo, si falta el workflow o la clave de IA) y haz clic en Reintentar en la página de la ejecución.
De forma predeterminada, los números y los identificadores del mensaje se ignoran, así que “Usuario 123 no encontrado” y “Usuario 456 no encontrado” son el mismo error. ¿Quieres una nueva corrección cuando un error reaparece en una versión posterior? Envía un fingerprint que incluya la versión, p. ej. "send-receipt@2.4.1". Reemplaza al predeterminado, así que mantén fijo el resto: sin identificadores ni marcas de tiempo.
Pruébalo
Agrega "test": true para probar la URL y tu payload sin iniciar nada. La respuesta te indica si un evento real iniciaría el agente y, si no, por qué:
curl -X POST "$BUGZERO_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{"message": "order.customer is undefined", "test": true}'{
"ok": true,
"outcome": "test",
"wouldStart": true,
"fingerprint": "5d0c41a7e2b9f8c3a1d6e4b2c9f07a18",
"title": "Error: order.customer is undefined"
}Respuestas
Todas las respuestas son JSON. Reintenta solo ante un 5xx: el mismo error nunca inicia el agente dos veces, así que reintentar es seguro.
- 202 outcome: "started"
- El agente se inició. El cuerpo incluye el
runIdy elstatusde la ejecución. - 200 outcome: "skipped"
- No se inició nada;
reasonindica por qué (ver abajo). - 200 outcome: "test"
- Una prueba: no se inició nada (consulta “Pruébalo”).
- 400 error: "invalid_json"
- El cuerpo no es un JSON válido.
- 400 error: "invalid_payload"
- Falta un campo o tiene un tipo incorrecto;
issuesenumera cada problema con su ruta. - 401 error: "unauthorized"
- Token desconocido: revisa la URL, o puede que el endpoint tenga una URL nueva o se haya eliminado.
- 413 error: "payload_too_large"
- El cuerpo supera los 256 KB.
- 5xx
- Algo falló de nuestro lado. Puedes reintentar sin problema.
- reason: "duplicate"
- Este error ya se procesó;
runIdes su ejecución. - reason: "environment"
- El entorno del evento no está en el filtro del endpoint.
- reason: "repo_not_connected"
- El repositorio del endpoint no está seleccionado en la tarjeta de GitHub.
- reason: "limit"
- Se alcanzó el límite mensual del plan Gratis o el límite de seguridad diario;
codeesfree_limitodaily_cap.
Mantén el token en secreto
- Envía los eventos solo desde tu servidor, nunca desde un navegador: ahí cualquiera podría leer el token.
- Si tus proxies o registros guardan las URL, envía el token en el encabezado
Authorization. - Si la URL se filtra, genera una nueva para el endpoint; la anterior deja de funcionar de inmediato.
- Todo lo que envías se guarda con la ejecución y lo ve el agente de IA, así que no incluyas contraseñas, claves ni datos personales.
¿Lo configuraste todo y no aparece ningún pull request?
Casi siempre es por una de estas causas:
- Aún no hay ninguna vinculación proyecto → repo (paso 04): es, con diferencia, la causa más común.
- El workflow de bugzero no está en la rama predeterminada, o falta el secreto ANTHROPIC_API_KEY / OPENAI_API_KEY (pasos 05 y 06). Las ejecuciones fallidas muestran el motivo en su página.
- La corrección se subió a una rama pero no se abrió ningún pull request: GitHub no deja que Actions los cree (paso 07).
- El entorno del error no está en tu lista de entornos vigilados (paso 08).
- Todavía no ha ocurrido ningún error nuevo: bugzero reacciona a incidencias nuevas, no a las antiguas.
- Ya usaste las 5 correcciones del plan Gratis de este mes, o se alcanzó el límite de seguridad diario: revisa el Panel.
- El repositorio no está seleccionado en la tarjeta de GitHub (paso 02).
- ¿Envías errores a un webhook personalizado? Su respuesta JSON indica por qué se omitió un evento; agrega
"test": truepara comprobarlo sin iniciar nada.
¿Todo listo para empezar?
Crea tu cuenta y conecta tu primer repositorio: el plan Gratis incluye 5 correcciones al mes.