~/docs/getting-started
Premiers pas
bugzero est un agent IA qui corrige les bugs, et la salle de contrôle pour le piloter. Quand quelque chose casse — signalé par Sentry, PostHog ou votre propre app via un webhook — l’agent s’exécute dans vos propres GitHub Actions et ouvre une pull request avec un correctif ; vous le pilotez depuis un seul tableau de bord. Votre code ne quitte jamais votre infrastructure. Voici tout ce qu’il faut configurer, et pourquoi chaque étape compte.
Comment une erreur devient une pull request.
7 étapes jusqu’à votre premier correctif.
Créez votre compte
obligatoireInscrivez-vous avec votre e-mail et un mot de passe. Vous obtenez un espace d’équipe sur le forfait Gratuit — 5 correctifs par mois, sans carte bancaire.
Connectez GitHub
obligatoireSur la page Intégrations, installez la GitHub App de bugzero, choisissez le compte ou l’organisation, puis sélectionnez les dépôts dans lesquels bugzero peut lancer des correctifs.
Connectez une source d’erreurs
obligatoireDans Intégrations → Sources d’erreurs, connectez l’outil de suivi des erreurs que vous utilisez déjà et choisissez les projets que bugzero doit surveiller, ou envoyez des erreurs depuis votre propre app. Vous pouvez utiliser plusieurs sources.
- Sentry — connectez votre organisation via OAuth.
- PostHog — choisissez votre région et collez une clé d’API personnelle avec les scopes
project:read,hog_function:writeetquery:read. - Webhook personnalisé — créez un endpoint par app et envoyez les erreurs à son URL secrète depuis n’importe quel langage ou outil ; voir Webhook personnalisé plus bas.
Associez chaque projet à un dépôt
obligatoirePour chaque projet surveillé, choisissez le dépôt GitHub que l’agent doit corriger. Ce réglage se fait juste à côté de chaque projet, sur la page Intégrations. Un endpoint de webhook personnalisé reçoit son dépôt dès sa création.
Ajoutez le workflow bugzero
obligatoireDans Intégrations → Configuration du runner, cliquez sur Ajouter le workflow à côté de chaque dépôt. GitHub s’ouvre avec .github/workflows/bugzero.yml prérempli — relisez-le et commitez-le sur votre branche par défaut. Cliquez ensuite sur Vérifier à nouveau.
Ajoutez votre clé d’IA en secret Actions
obligatoireDans chaque dépôt connecté, ouvrez Settings → Secrets and variables → Actions et ajoutez un nouveau secret nommé ANTHROPIC_API_KEY (ou OPENAI_API_KEY) contenant votre propre clé d’IA.
Autorisez Actions à ouvrir des pull requests
obligatoireDans chaque dépôt connecté, ouvrez Settings → Actions → General, descendez jusqu’à Workflow permissions, cochez Allow GitHub Actions to create and approve pull requests puis enregistrez. Si l’option est grisée, un propriétaire de l’organisation doit d’abord l’autoriser dans les Settings → Actions → General de l’organisation.
pull-requests: write du workflow lui-même ne la contourne pas. Sans elle, l’agent pousse tout de même son correctif sur une branche, mais GitHub refuse d’ouvrir la pull request — vous obtenez une branche au lieu d’une PR.Facultatif, mais recommandé.
Limitez aux bons environnements
facultatifSur chaque association de projet, cochez les environnements à prendre en compte — par exemple production uniquement. Laissez tout décoché pour surveiller tous les environnements. Les endpoints de webhook personnalisé disposent du même filtre facultatif.
Configurez l’agent
facultatifSur la page Agent, choisissez le modèle et l’effort (les derniers modèles Claude ou GPT), rédigez des instructions reprenant les conventions de votre équipe et définissez un plafond de sécurité quotidien. Chaque publication d’instructions crée une nouvelle version — comparez les versions, voyez les résultats de chacune et revenez en arrière en un clic.
Passez à Pro le moment venu
facultatifLe forfait Gratuit inclut 5 correctifs par mois. Quand il vous en faut plus, passez à Pro — 9 $US/mois pour des correctifs illimités — depuis Facturation, et gérez ou résiliez votre abonnement via le portail client.
Obtenez votre premier correctif
facultatifQuand une nouvelle erreur touche un projet et un environnement surveillés, bugzero lance une exécution qui aboutit à une pull request. Suivez la progression sur la page Exécutions, puis ouvrez la PR, lisez le diff et le résumé de la cause racine, et mergez si c’est bon.
Envoyez des erreurs depuis n’importe où.
Des erreurs que votre outil de suivi ne capte pas — un worker, une tâche cron, un script — ou pas d’outil de suivi du tout ? Envoyez-les vous-même à bugzero : une seule requête HTTP, depuis n’importe quel langage ou outil, sans SDK.
Dans Intégrations → Sources d’erreurs, ajoutez un endpoint Webhook personnalisé pour chaque app : un nom, le dépôt que l’agent corrige, sa branche de base et, si besoin, les environnements à prendre en compte. Chaque endpoint reçoit sa propre URL secrète.
créer un endpoint →Authentification
Le token à la fin de l’URL de l’endpoint l’identifie. Appelez l’URL telle quelle, ou envoyez plutôt le token dans l’en-tête Authorization vers l’URL stable — préférable si vos outils journalisent les URL.
# token dans l’URL POST https://bugzero.dev/api/webhooks/custom/bzc_… # ou : token dans un en-tête POST https://bugzero.dev/api/webhooks/custom Authorization: Bearer bzc_…
Payload
Envoyez un objet JSON avec Content-Type: application/json, jusqu’à 256 Ko. Seul message est obligatoire.
- messagestring · obligatoire
- Le message d’erreur.
- typestring
- La classe d’erreur, p. ex.
TypeError. Par défaut :Error. - titlestring
- Remplace le titre par défaut,
type: message. - stacktracestring | array
- Une chaîne, ou un tableau de lignes ou de frames
{ file, line, column, function }, l’appel le plus récent en premier. - environmentstring
- Comparé au filtre d’environnements de l’endpoint. Les événements qui n’en ont pas passent toujours.
- fingerprintstring
- Regroupe les événements d’une même erreur (voir « Un correctif par erreur » plus bas). Par défaut : dérivé du type, du message et de la première frame de la stack trace.
- urlstring
- Un lien vers l’erreur dans votre système (http ou https), affiché sur l’exécution et dans la pull request.
- contextobject
- Tout détail supplémentaire pour l’agent (requête, utilisateur, tags…), envoyé en JSON et tronqué à 4 000 caractères.
- testboolean
- Un essai à blanc : indique ce qui se passerait, sans rien lancer.
Les champs inconnus sont ignorés, null équivaut à une absence et les textes trop longs sont tronqués.
Exemples
Avec curl, depuis un terminal ou 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" }
}'Depuis Node.js, par exemple dans un bloc 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;
}Un correctif par erreur
L’agent ne se lance qu’une fois par erreur : après le premier événement, les événements portant le même fingerprint sur le même endpoint sont ignorés, même si cette exécution a échoué. Dans ce cas, corrigez la configuration (par exemple, un workflow ou une clé d’IA manquants) et cliquez sur Réessayer sur la page de l’exécution.
Par défaut, les nombres et les identifiants présents dans le message sont ignorés : « Utilisateur 123 introuvable » et « Utilisateur 456 introuvable » sont donc la même erreur. Vous voulez un nouveau correctif quand une erreur réapparaît dans une version ultérieure ? Envoyez un fingerprint qui inclut la version, p. ex. "send-receipt@2.4.1". Il remplace celui par défaut : gardez donc le reste stable — pas d’identifiants ni d’horodatages.
Testez-le
Ajoutez "test": true pour vérifier l’URL et votre payload sans rien lancer. La réponse vous indique si un vrai événement lancerait l’agent et, sinon, pourquoi :
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"
}Réponses
Chaque réponse est en JSON. Ne réessayez qu’en cas de 5xx : une même erreur ne lance jamais l’agent deux fois, réessayer est donc sans risque.
- 202 outcome: "started"
- L’agent a démarré. Le corps inclut le
runIdet lestatusde l’exécution. - 200 outcome: "skipped"
- Rien n’a été lancé ;
reasonindique pourquoi (voir ci-dessous). - 200 outcome: "test"
- Un essai à blanc ; rien n’a été lancé (voir « Testez-le »).
- 400 error: "invalid_json"
- Le corps n’est pas du JSON valide.
- 400 error: "invalid_payload"
- Un champ est manquant ou n’a pas le bon type ;
issuesliste chaque problème avec son chemin. - 401 error: "unauthorized"
- Token inconnu : vérifiez l’URL — ou bien l’endpoint a reçu une nouvelle URL ou a été supprimé.
- 413 error: "payload_too_large"
- Le corps dépasse 256 Ko.
- 5xx
- Une erreur s’est produite de notre côté. Vous pouvez réessayer sans risque.
- reason: "duplicate"
- Cette erreur a déjà été traitée ;
runIdest son exécution. - reason: "environment"
- L’environnement de l’événement ne figure pas dans le filtre de l’endpoint.
- reason: "repo_not_connected"
- Le dépôt de l’endpoint n’est pas sélectionné dans la carte GitHub.
- reason: "limit"
- La limite mensuelle du forfait Gratuit ou le plafond de sécurité quotidien a été atteint ;
codevautfree_limitoudaily_cap.
Gardez le token secret
- Envoyez les événements uniquement depuis votre serveur, jamais depuis un navigateur — n’importe qui pourrait y lire le token.
- Si vos proxys ou vos logs enregistrent les URL, envoyez plutôt le token dans l’en-tête
Authorization. - Si l’URL fuite, générez-en une nouvelle pour l’endpoint ; l’ancienne cesse immédiatement de fonctionner.
- Tout ce que vous envoyez est stocké avec l’exécution et montré à l’agent IA : n’y mettez ni mots de passe, ni clés, ni données personnelles.
Tout est configuré, mais aucune pull request ?
C’est presque toujours l’une de ces causes :
- Aucune association projet → dépôt pour l’instant (étape 04) — de loin la cause la plus fréquente.
- Le workflow bugzero n’est pas sur la branche par défaut, ou le secret ANTHROPIC_API_KEY / OPENAI_API_KEY est manquant (étapes 05 et 06). Les exécutions échouées affichent le motif sur leur page.
- Le correctif a été poussé sur une branche mais aucune pull request ne s’est ouverte — GitHub n’autorise pas Actions à en créer (étape 07).
- L’environnement de l’erreur ne fait pas partie de votre liste surveillée (étape 08).
- Aucune nouvelle erreur ne s’est encore produite — bugzero réagit aux nouvelles issues, pas aux anciennes.
- Vous avez épuisé vos 5 correctifs gratuits du mois, ou le plafond de sécurité quotidien a été atteint — consultez le tableau de bord.
- Le dépôt n’est pas sélectionné dans la carte GitHub (étape 02).
- Vous envoyez des erreurs à un webhook personnalisé ? Sa réponse JSON indique pourquoi un événement a été ignoré ; ajoutez
"test": truepour vérifier sans rien lancer.
Envie de vous lancer ?
Créez votre compte et connectez votre premier dépôt — le forfait Gratuit inclut 5 correctifs par mois.