Un agent IA pour les réseaux sociaux prépare vos posts, réécrit chaque texte au format de chaque réseau, vérifie les limites et programme l'envoi. Vous gardez une seule tâche : lire et valider. Chez swanbase, notre agent IA réseaux sociaux tourne en production depuis le 3 octobre 2026 sur trois comptes (LinkedIn, Instagram, X). Il remplit une file trois semaines à l'avance, passe chaque légende dans des scripts de contrôle, puis attend votre « ok » avant d'appeler l'API de Zernio.
Au 12 octobre 2026, la file compte 90 posts créés, 81 validations enregistrées et 73 posts programmés, le dernier pour le 20 avril 2027. Ce tuto décrit le circuit en cinq étapes, avec nos seuils, nos commandes et trois pièges datés.

Qu'est-ce qu'un agent IA pour gérer les réseaux sociaux ?
Un agent IA pour gérer les réseaux sociaux est un programme piloté par un modèle de langage, qui enchaîne plusieurs outils vers un objectif : produire des posts, les adapter, les contrôler puis les programmer. Il tient un état (la file), lit des sources (vos contenus déjà produits) et agit sur un service tiers (l'API de publication).
Agent IA ou outil de planification
Trois familles d'outils servent à automatiser la publication sur les réseaux sociaux. Avec Buffer ou Metricool, vous programmez un texte écrit par vous. Une automatisation n8n ou Zapier suit un scénario fixe. L'agent ajoute le jugement du modèle : il choisit la prochaine citation, raccourcit une légende trop longue pour X, relance la rédaction après un contrôle raté.
Le nôtre combine des scripts Python et des appels à Claude, lancés depuis Claude Code. Le modèle écrit. Les scripts vérifient et programment.
La répartition entre l'agent et vous
L'agent remplit le calendrier, réécrit par réseau, contrôle et appelle l'API. Vous décidez de publier. Une règle tient l'ensemble : seul un humain fait passer un post de « à valider » à « validé ». Le jour où notre agent a enfreint cette règle, nous avons tout annulé dans l'heure (voir l'étape 4).
Le circuit d'un post dans notre file
Chaque post vit dans un fichier JSON unique, la file : format, créneau, réseaux, légende, médias et historique.

Six statuts pour une seule porte humaine
Un post suit ce cycle :
to_review -> (revising -> to_review)* -> approved -> scheduled -> published
skipped (créneau sauté) rejected (refusé) error
Trois statuts vous concernent. En to_review, vous devez lire le post. En approved, vous l'avez validé. En scheduled, Zernio le détient avec sa date. Nous laissons le reste aux scripts. Le statut revising sert quand vous demandez une modification : un agent Claude réécrit la légende et remet le post en to_review, avec votre demande dans l'historique.
Une semaine type avec un format par jour
Nous avons fixé notre semaine type le 28 septembre 2026 : un format par jour ouvré, à midi. Lundi un carrousel, mardi une citation, mercredi un outil (plus une vidéo à 18 h), jeudi l'agenda de la semaine suivante, vendredi une photo. Chaque format a ses réseaux par défaut : nos carrousels partent sur Instagram seul. Au 12 octobre, 59 posts de la file visent LinkedIn, Instagram et X à la fois.
Pour un SaaS, prenez d'autres formats (retour client, fonctionnalité, chiffre produit) et donnez à chacun une source qui produit des candidats sans vous.
Étape 1 : générer la file trois semaines à l'avance
Remplir les créneaux vides
Le réglage de notre file tient en quelques clés :
{
"timezone": "Europe/Paris",
"min_lead_hours": 3,
"x_char_limit": 280,
"spacing_minutes": 45,
"formats": {
"carousel": { "weekday": 0, "time": "12:00", "platforms": ["instagram"] },
"quote": { "weekday": 1, "time": "12:00", "platforms": ["linkedin", "instagram", "twitter"] },
"tool": { "weekday": 2, "time": "12:00", "platforms": ["linkedin", "twitter"] }
}
}
À chaque passage, l'agent repère les créneaux vides des trois semaines à venir et pioche le prochain candidat dans la source du format. Une source épuisée produit un post « sauté » avec sa raison, par exemple « Banque de citations épuisée ». Vous voyez le trou trois semaines avant la date.
Faire sauter les créneaux passés
Deux règles de temps empêchent les publications surprises. L'agent ne planifie aucun créneau à moins de trois heures (min_lead_hours). Et un post dont le créneau passe sans validation bascule en « sauté » à la lecture suivante de la file, avec la raison « créneau passé sans validation ». Au 12 octobre, notre file compte 8 posts sautés. Sans validation, rien ne part.
Étape 2 : réécrire le texte pour chaque réseau
Vous écrivez une légende source avec le lien en clair. Au moment de programmer, un script produit le texte de chaque réseau et place le lien au seul endroit où il fonctionne.

LinkedIn : le lien en premier commentaire
Depuis le 2 octobre 2026, aucun lien n'entre dans le corps d'un post LinkedIn. La phrase qui porte le lien part en premier commentaire, et le post y renvoie. Côté API, Zernio reçoit le texte LinkedIn dans customContent et le commentaire dans platformSpecificData.firstComment. La documentation Zernio sur le premier commentaire donne environ 1 250 caractères pour un commentaire LinkedIn, posté quelques secondes après le post.
Le corps d'un post LinkedIn monte à 3 000 caractères, mais le pli « voir plus » tombe vers 210 : votre idée doit tenir avant.
X : un tweet de 280 caractères pondérés
X reçoit son propre texte, distinct de LinkedIn et d'Instagram. Notre règle du 3 octobre 2026 : un tweet de 280 caractères au plus, jamais de fil. Un post X compte donc un message, ou deux quand le lien part en première réponse.
Le piège vient du comptage. Selon la documentation officielle de X sur le comptage des caractères, toute URL vaut 23 caractères quelle que soit sa longueur, et un emoji en vaut 2. Notre script reproduit ce poids :
def x_length(text: str) -> int:
"""Longueur comptée par X : chaque URL vaut 23, emoji et symboles hors latin valent 2."""
text = (text or "").strip()
n = 0
for part in X_URL.split(text):
n += sum(_x_weight(c) for c in part)
return n + 23 * len(X_URL.findall(text))
Avec un len() classique, un tweet à 275 caractères qui en pèse 290 pour X passe votre relecture, puis échoue le jour de la publication, trois semaines après votre « ok ».
Instagram : le lien en bio
Un lien dans une légende Instagram n'est pas cliquable. Le script le retire et termine la légende par un renvoi au lien en bio. La légende tient en 2 200 caractères, avec 5 hashtags au plus, et le pli tombe vers 125 caractères.

Étape 3 : bloquer les erreurs par des scripts
Avant votre lecture, des scripts déterministes contrôlent chaque post. Tant qu'un post porte une erreur, impossible de le valider ou de le programmer.
Les contrôles de longueur et de médias
Nos scripts bloquent la validation dans six cas :
- Le tweet ou sa réponse dépasse 280 caractères pondérés.
- Le texte X contient un fil (séparateur
---). - Le texte X manque pour un format sans texte X par défaut.
- Le post X porte plus de 4 images, ou une image de plus de 5 Mo.
- Un PDF vise un autre réseau que LinkedIn (le carrousel document n'existe que là).
- Le post ne vise aucun réseau, ou vise un réseau inconnu.
Chaque message dit quoi faire : « X : texte X manquant, l'écrire dans le champ Texte X (un tweet de 280 caractères au plus) ».
Le contrôle des tics d'écriture
Chaque légende, en français comme en anglais, passe notre script anti-tics : correction en deux temps, tiret cadratin, formules creuses, objet qui agit. Depuis le 30 septembre 2026, nous exigeons zéro BLOCK, sinon validation et programmation restent fermées. Notre file de validation affiche le résultat sous la légende.
Pour un SaaS, l'équivalent minimal tient en une liste de motifs interdits en expressions régulières et un code de sortie à 1 dès qu'un motif apparaît. Notre tuto pour rédiger un post LinkedIn avec l'IA détaille ce contrôle.
45 minutes entre deux posts d'un réseau
Deux posts d'un même réseau restent espacés d'au moins 45 minutes. Chaque post garde une heure objectif. En cas de conflit, le post prend la plage libre la plus proche, le même jour, dans cet ordre : +45, -45, +90, -90 minutes. Le calcul tourne à chaque enregistrement de la file, et le post retrouve son heure dès que le conflit disparaît.
Extrait réel de l'historique d'un post :
spaced décalé à 13h15 (objectif 12h30) : un autre post occupe ce réseau à moins de 45 min
spaced revenu à son heure objectif, 12h30
L'espacement ne touche pas aux posts déjà chez Zernio : ils restent à leur heure.

Étape 4 : valider ou refuser chaque post
Notre file de validation montre le texte exact de chaque réseau, le premier commentaire, les médias, l'heure et les contrôles. Trois réponses : valider, refuser, demander une modification.
Lier la validation au texte exact
Votre validation porte sur un texte précis. Si quelqu'un modifie la légende, les médias, le texte X ou le premier commentaire d'un post validé, le post repasse en to_review. Un simple changement d'heure, lui, garde la validation.
Notre seconde version du script va plus loin : elle lie la validation à une empreinte des textes et des fichiers images, et vous validez avec un code de revue de 6 caractères tiré de cette empreinte :
python3 scripts/pubqueue.py approve offre-annuelle.linkedin --by <votre-nom> --code d84e8f
Si le texte a changé depuis votre lecture, le code ne correspond plus et la validation échoue. Un statut tapé à la main dans le fichier repart en revue au moment de programmer.
Nous validons aussi par lot : 6 carrousels d'un coup le 8 octobre, chacun repassé par les contrôles.
Refuser pour faire avancer la file
« Non, suivant » refuse le post. Le post suivant du même format prend son créneau, les posts d'après avancent d'une semaine, et le dernier créneau libéré reçoit le prochain candidat de la source. Un post refusé ne revient jamais de lui-même.
Refuser n'abîme pas le calendrier. Au 12 octobre, nous avons refusé 3 posts.

La demande de modification lance l'agent du format. Exemple tiré de notre historique : « Autre citation en légende, plus courte (moins de 100 caractères), toujours en anglais. » L'agent réécrit, repasse les contrôles et remet le post en to_review.
Garder la validation hors de portée de l'agent
Le 1er octobre 2026, nous avons demandé à l'agent d'ajouter des carrousels à la file. Le contenu des slides avait reçu un « ok » plus tôt dans la conversation. L'agent a pris ce « ok » pour une validation de publication et a passé 7 carrousels en approved. Nous avons rouvert les 7 avec la note « validation annulée : seul l'utilisateur valide ».
Depuis, la règle figure dans les instructions de l'agent et dans le code : l'agent ajoute en to_review et s'arrête. Dans la seconde version, la commande de validation rejette les noms d'agent et sort en erreur (code 3) quand personne ne tape le code.
Étape 5 : programmer avec l'API Zernio
Pour programmer vos posts LinkedIn, Instagram et X, nous passons par Zernio, une API de publication qui couvre aussi une dizaine d'autres réseaux. Chez nous, une validation déclenche aussitôt la programmation.
La requête de programmation
Le script envoie d'abord chaque média sur le stockage de Zernio par une URL présignée (POST /media/presign, puis un PUT du fichier). Il crée ensuite le post :
{
"content": "<légende source>",
"mediaItems": [{ "type": "image", "url": "<URL du stockage Zernio>" }],
"platforms": [
{ "platform": "linkedin", "accountId": "<compte LinkedIn>",
"customContent": "<texte LinkedIn sans lien>",
"platformSpecificData": { "firstComment": "<phrase + lien>" } },
{ "platform": "twitter", "accountId": "<compte X>",
"customContent": "<tweet>",
"platformSpecificData": { "threadItems": ["<tweet>", "<réponse + lien>"] } },
{ "platform": "instagram", "accountId": "<compte Instagram>",
"customContent": "<légende + renvoi au lien en bio>" }
],
"scheduledFor": "2026-10-20T12:00:00",
"timezone": "Europe/Paris"
}
L'en-tête Idempotency-Key combine l'identifiant du post et son créneau : un double clic ou une relance après une coupure ne crée pas deux posts. Côté coût, X facture chaque post à l'appel API via Zernio, et ce coût pèse dans le choix des réseaux par format.
L'interrupteur de mise en production
La file a un interrupteur, live. À false, toute programmation s'arrête sur le message « auto-publication pas en prod ». Utile pendant la mise au point, dangereux ensuite.
Trois pièges de notre agent IA réseaux sociaux
Le « validé » muet pendant cinq jours
Jusqu'au 3 octobre 2026, l'interrupteur restait à false. Notre file de validation affichait « validé » et rien ne partait chez Zernio. Une photo validée le 30 septembre n'est jamais sortie le 2 octobre. Pendant 5 jours, nous avons cru que « validé » voulait dire « publié ».
Nous avons passé la file en production le 3 octobre, puis programmé un par un les posts déjà validés. Si votre outil a un mode test, affichez-le en grand sur l'écran de validation.
Le doublon publié à la main
Un de nos 3 refus porte la note « déjà publiée sur Instagram le 26/09 ». Quelqu'un avait posté la citation à la main avant la mise en place de la file, et l'agent ne voyait que sa source. Avant de brancher un agent, listez ce qui est déjà sorti sur chaque compte et marquez-le comme utilisé dans la source.
Le connecteur branché sur un autre compte
Le connecteur MCP Zernio de Claude répondait « No accounts connected ». Nous en avons conclu à tort qu'aucun de nos comptes ne figurait sur Zernio. Ce connecteur pointait sur un autre compte Zernio, vide, alors que la clé API du script voyait bien LinkedIn, Instagram et X. Vérifiez vos comptes avec la clé qui publie.

Dix jours de file en chiffres
Au 12 octobre 2026, après dix jours en production :
| Indicateur | Valeur |
|---|---|
| Posts créés dans la file | 90 |
| Validations enregistrées | 81 |
| Posts programmés chez Zernio | 73 |
| Dernier créneau programmé | 20 avril 2027 |
| Posts refusés | 3 |
| Posts sautés | 8 |
| Posts à valider | 5 |
| Décalages d'espacement | 5 |
Citations et photos hebdomadaires forment l'essentiel des 73 posts programmés. Zernio n'avait aucune donnée de meilleure heure au départ : nous réviserons nos heures après six semaines de statistiques.
Pour choisir quoi mettre dans la file, notre article sur la stratégie de founder-led content pose les bases, et le tuto carrousel LinkedIn avec l'IA produit l'un des formats. Notre vue d'ensemble des agents IA marketing situe cet agent dans la chaîne.
Un agent IA réseaux sociaux bien réglé prend la mécanique et vous laisse la seule décision qui engage votre nom.
FAQ
Un agent IA peut-il publier seul sur les réseaux sociaux ?
Techniquement oui, avec une API comme Zernio. Chez nous, seul un humain valide, et un post sans validation à l'heure de son créneau passe en « sauté ».
Quelles tâches confier à un agent IA réseaux sociaux ?
Le remplissage du calendrier, la réécriture par réseau, le placement des liens, le comptage des caractères, l'espacement des posts et l'appel API. Gardez le choix des sujets et la validation de chaque post.
Où mettre le lien sur chaque réseau ?
En premier commentaire sur LinkedIn, en première réponse sur X, en bio sur Instagram. Gardez le lien en clair dans la source. Un script le déplace à la programmation.
Comment X compte-t-il les caractères ?
Une URL vaut 23 caractères quelle que soit sa longueur, un emoji en vaut 2, et la limite est de 280. Un len() Python se trompe dès qu'il y a un lien long ou un emoji.
Combien de temps à l'avance programmer ses posts ?
Nous remplissons la file trois semaines à l'avance, avec un délai minimal de trois heures avant un créneau. Ce délai laisse le temps de refuser sans trou.
Faut-il un outil payant pour publier par API ?
Il faut un service qui détient les autorisations des réseaux. Nous utilisons Zernio, facturé à l'usage, et X facture en plus chaque post à l'appel API. Vous reliez vos comptes une fois, puis le script publie avec une clé API.