← Tous les articles

J'ai automatisé ce blog bilingue avec un agent IA

Cet article a été rédigé par un agent IA, puis publié automatiquement une fois passé mon délai de validation de douze heures. Autant commencer par là : c'est le sujet.

Depuis juin, ce blog fonctionne en semi-automatique. Tous les dix jours, un agent choisit un sujet dans un backlog éditorial, écrit la version française puis l'anglaise, génère un aperçu privé et m'envoie un mail. Je valide ou je corrige. Ensuite seulement, l'article part en ligne. Voici comment c'est construit — et pourquoi la partie intéressante n'est pas celle qu'on imagine.

Le plan initial n'a pas survécu à l'hébergement

Ma spécification de départ tenait en une ligne : Astro, bilingue, hébergé chez Hostinger. Astro est un excellent générateur de sites statiques et j'avais déjà tout le contenu en Markdown.

Sauf qu'Astro a besoin de Node pour compiler. J'ai ouvert un shell sur l'hébergement mutualisé et vérifié : pas de node, pas de npm. Du PHP 8.3 et du git, oui. Node, non.

Deux options. Compiler ailleurs et n'envoyer que le résultat — ça fonctionne, mais ça déplace le problème et ça rend le blog dépendant d'une machine extérieure. Ou générer le site avec ce que le serveur sait déjà faire.

J'ai écrit un générateur en PHP. Trois cent cinquante lignes. Il lit les fichiers Markdown, en extrait le frontmatter, et écrit les pages d'articles, les deux index et les flux RSS. Pas de framework, pas de node_modules, aucune dépendance à installer. Une commande : php build.php.

Sur le papier, c'est moins élégant qu'Astro. En pratique, c'est beaucoup plus simple à faire tourner à trois heures du matin sans personne devant l'écran.

Ce que fait l'agent, étape par étape

Une tâche planifiée réveille l'agent. Il se connecte au serveur en SSH et déroule toujours la même séquence.

  1. Il vérifie s'il existe un marqueur d'attente. Si un article attend déjà ma validation, il ne lance rien de nouveau.
  2. Sinon il regarde la date du dernier article publié. Moins de dix jours, il s'arrête.
  3. Il prend le sujet suivant dans le backlog éditorial — douze sujets écrits à l'avance, avec l'angle et la requête visée.
  4. Il rédige le français, puis l'anglais. Même slug, même translationKey : c'est ce qui relie les deux versions pour les balises hreflang.
  5. Il envoie les deux fichiers sur le serveur, génère l'aperçu et m'écrit.

Le mail contient les liens d'aperçu et le texte intégral des deux versions. J'ai douze heures pour répondre. Passé ce délai, l'agent publie — parce qu'un blog qui attend indéfiniment ma validation n'est pas un blog automatisé, c'est un dossier de brouillons.

Les garde-fous comptent plus que la rédaction

Faire écrire un texte à un modèle de langage n'a plus rien de remarquable. Ce qui demande du travail, c'est de l'autoriser à toucher un site en production sans surveillance.

Le brouillon est l'état par défaut. Chaque article naît avec draft: true dans son frontmatter, et le générateur ignore les brouillons. Un bug dans l'agent ne peut pas publier par accident : il faudrait qu'il modifie explicitement ce champ.

L'aperçu est isolé. Le mode aperçu écrit dans un dossier séparé, injecte une balise noindex et ne touche ni l'index, ni le RSS, ni les articles déjà en ligne. Je vois le rendu final exact, les moteurs ne voient rien.

Le périmètre est écrit noir sur blanc. L'agent a une consigne explicite : ne toucher qu'à ce domaine, ne jamais modifier le .htaccess. C'est là que vivent la CSP et les en-têtes de sécurité. Un agent capable d'éditer la configuration serveur est un agent capable de casser le site.

Chaque publication passe par git. Un commit par article. Si quelque chose dérape, l'historique dit quoi et quand.

Il a le droit de s'arrêter. Récemment, un mot de passe SSH avait changé et la connexion a été refusée. L'agent n'a rien publié, rien deviné, rien réparé de travers : il m'a envoyé une alerte et s'est arrêté. C'est exactement le comportement que j'attends d'un processus qui tourne sans moi.

Ce que j'en retire

L'automatisation utile n'est pas celle qui remplace le jugement. C'est celle qui supprime la friction autour du jugement.

Le vrai obstacle à la tenue d'un blog n'a jamais été d'écrire mille mots. C'est de choisir le sujet, de faire la version anglaise, de vérifier le frontmatter, de régénérer le site, de mettre à jour le sitemap. Dix petites tâches ennuyeuses qui font qu'on reporte à la semaine prochaine. Ce sont exactement celles qu'une machine fait bien.

Ce qu'elle ne fait pas : savoir ce que j'ai réellement vécu sur un projet. Les études de cas de mon backlog attendent toujours, parce qu'elles demandent des chiffres et des captures d'écran réels. L'agent a pour consigne de ne jamais les inventer, et de décaler un sujet plutôt que de meubler. C'est une limite, et elle est voulue.

Vous avez un processus répétitif qui vous coûte du temps chaque semaine, ou un site à construire pour qu'il tienne tout seul ? Parlons-en.

Un projet en tête ? Parlons-en.

Me contacter