Un copilote IA qui agit sur WordPress, sans jamais dépasser vos droits

Un assistant qui répond, c'est confortable. Un assistant qui publie, c'est une autre responsabilité. Voici comment le copilote StormPress passe de la conversation à l'action — et les quatre garde-fous qui l'empêchent d'aller plus loin que vous.

La plupart des « assistants IA » pour WordPress rédigent du texte que vous copiez ensuite à la main. Le copilote StormPress dispose d'outils : des fonctions du site qu'il appelle lui-même. Quand vous lui demandez « quels articles ne reçoivent aucun lien interne ? », il ne devine pas : il interroge le graphe de contenus de votre site, lit la réponse et vous la résume.

C'est utile. C'est aussi exactement le moment où il faut se demander ce qui l'empêche de faire autre chose que ce que vous vouliez.

Ce que le copilote sait faire aujourd'hui

StormPress 4.2 livre huit outils intégrés. La liste reste courte à dessein : chaque outil est une porte, et nous préférons en ouvrir peu, bien gardées.

OutilCe qu'il faitCapacité requise
Statistiques du siteCompte les articles publiés et en brouillon, les pages, les médias, les commentaires en attente et, si WooCommerce est actif, les commandes du jour et celles en attenteedit_posts
Graphe de contenusRenvoie le maillage interne : contenus, liens, orphelins (au-delà de 300 articles publiés, le calcul se fait en arrière-plan et la réponse arrive vide en attendant, au premier appel comme après chaque modification de contenu ou expiration du cache, au bout de six heures)edit_posts
Lire un articleRenvoie le contenu d'un article que vous pouvez modifier et, si Yoast SEO est actif, son titre SEO, sa méta-description et son expression cléedit_posts
Suggérer des liensPropose des cibles de liens internes parmi les contenus publiés du site (voir plus bas)edit_posts
Lister les dossiers médiasRenvoie les dossiers de la médiathèque, avec leur chemin completupload_files
Rapport de gouvernanceLit l'inventaire des extensions : doublons probables, signaux de maintenance avec leur source et leur date, ordre de traitement. Ne contacte aucun serviceactivate_plugins
Déplacer un médiaRange un média dans un dossier existant, à la place de son dossier actuelupload_files
PublierPublie un article existantpublish_posts

Six outils sur huit ne font que lire. Les deux qui modifient le site contrôlent aussi l'objet visé : publier exige le droit de publier cet article, déplacer un média exige le droit de modifier ce média. Le déplacement ne crée jamais de dossier : si le nom compris par le modèle ne correspond à aucun dossier existant, l'outil refuse et l'invite à consulter d'abord la liste. Quant au rapport de gouvernance, il est réservé aux administrateurs : l'inventaire des extensions n'a pas à être lu par un rédacteur.

Les abilities de votre site, sous conditions

Depuis WordPress 6.9, le cœur propose l'API Abilities : chaque extension peut y déclarer des actions qu'elle sait accomplir, avec leurs paramètres et leurs droits. Quand cette API est présente, le copilote StormPress 4.2 transforme ces abilities en outils supplémentaires, à trois exceptions près :

  • une ability que son auteur a annotée comme destructive n'est pas exposée par défaut ;
  • celles de StormPress lui-même sont écartées : la publication et les suggestions de liens passent par les outils intégrés, et la génération d'extrait comme la mise à jour du stock WooCommerce ne sont pas proposées au copilote ;
  • celles du connecteur Stormeo ne passent que si elles figurent dans la liste qu'il expose à son serveur MCP en lecture seule : le copilote n'ouvre pas ce que ce serveur retient délibérément.

Sur ce dernier point, une précision : avant la version 3.13.7 du connecteur, embarquée dans StormPress 4.2, ses abilities n'étaient pas enregistrées sur WordPress 6.9 et ultérieur, si bien qu'aucune ne pouvait arriver au copilote par ce chemin. Depuis cette version, elles sont enregistrées, ce que nous avons constaté sur un WordPress 7.1 réel, et un test qui démarre l'extension sur un vrai WordPress vérifie qu'elles sont toutes enregistrées et qu'une lecture exposée, l'intégrité du cœur, arrive bien parmi les outils du copilote. Leur appel auprès d'un vrai fournisseur d'IA n'a pas encore été éprouvé : nous ne l'affirmons pas.

Une ability ainsi exposée subit deux contrôles : la capacité edit_posts côté StormPress, puis, lors de son exécution, la vérification de droits propre à l'ability, prévue par l'API du cœur. Pour les lectures du connecteur, dont le droit ne dépend que de l'utilisateur, cette vérification est aussi consultée avant de présenter l'outil : un auteur ne se voit pas proposer l'intégrité du cœur, réservée aux administrateurs.

// N'exposer au copilote que les abilities que vous avez choisies
add_filter( 'stormpress_ai_expose_ability', function ( $expose, $ability ) {
    return $expose && in_array( $ability->get_name(), [ 'mon-extension/lire-rapport' ], true );
}, 10, 2 );

Premier garde-fou : les capacités WordPress, vérifiées deux fois

WordPress a déjà un système de droits éprouvé : les rôles et leurs capacités. Le copilote ne réinvente rien : chaque outil déclare la capacité qu'il exige, et le copilote agit avec l'identité de la personne connectée. La vérification a lieu deux fois :

  1. Avant de parler au modèle. Un outil que vous n'avez pas le droit d'utiliser n'est pas présenté au modèle comme outil disponible : il ne peut pas l'appeler normalement. Une nuance : le message système par défaut cite l'outil de gouvernance des extensions par son nom, quel que soit l'utilisateur ; si le modèle tente de s'en servir pour quelqu'un qui n'a pas activate_plugins, c'est la seconde vérification qui l'arrête. Pour une ability d'une autre extension, dont le droit peut dépendre de l'objet visé, ce premier filtre se limite à edit_posts : c'est son propre contrôle de droits qui tranche à l'exécution.
  2. Au moment de l'exécution. Si le modèle demande malgré tout un outil — par erreur, ou parce qu'un contenu lu en chemin l'y a incité —, la capacité est contrôlée à nouveau. En cas de refus, le modèle reçoit « permission refusée » et rien ne se passe sur le site.

Un outil qui ne déclare aucune capacité hérite de edit_posts : l'oubli fait pencher du côté prudent. Et pour les outils qui visent un article ou un média, le droit sur cet objet est vérifié en plus, dans l'outil lui-même.

Deuxième garde-fou : une boucle bornée à dix tours

Un agent fonctionne en boucle : il appelle un outil, lit le résultat, décide de la suite — et chaque tour coûte un appel à votre fournisseur d'IA. Le copilote StormPress s'arrête au bout de dix tours par demande, sur le message « Limite de tours atteinte sans réponse finale ». Ce qui a déjà été fait pendant ces tours reste fait : la limite est un disjoncteur pour les boucles qui s'égarent, pas une annulation.

Troisième garde-fou : vingt requêtes par minute et par utilisateur

Le point d'entrée du copilote applique une limite de débit : vingt requêtes par minute et par utilisateur par défaut. Au-delà, le serveur répond « trop de requêtes » avec le délai d'attente restant. La valeur se règle dans les réglages IA (de 1 à 200), ou par code :

// Resserrer la limite sur un site partagé par de nombreux rédacteurs
add_filter( 'stormpress_ai_rate_limit', fn() => 10 );
add_filter( 'stormpress_ai_rate_window', fn() => 60 ); // secondes

Cette limite protège votre facture, puisque ce sont vos clés qui sont utilisées. Gardez en tête qu'une requête peut enchaîner jusqu'à dix tours, chacun facturé par votre fournisseur. Un outil qui interroge lui-même le modèle, comme la suggestion de liens lorsque le résultat n'est pas déjà en cache, ajoute ses propres appels : une seule demande peut donc en coûter plus de dix.

C'est aussi le modèle que vous avez choisi qui répond. Jusqu'à la 4.1.8, le copilote utilisait toujours le modèle par défaut du fournisseur, quel que soit le réglage ; depuis la 4.2.0, le modèle sélectionné dans les réglages IA est celui qui est appelé, et c'est lui qu'affiche l'en-tête de l'écran Copilote. Le modèle par défaut ne sert que si aucun n'est choisi.

Quatrième garde-fou : vos conversations ne sont pas conservées sur votre serveur WordPress

Votre serveur WordPress ne garde pas d'historique de vos conversations. L'historique vit dans l'onglet de votre navigateur et accompagne chaque requête ; le bouton « Effacer » le fait disparaître. Rien n'est envoyé à Stormeo.

Deux données sont en revanche gardées un temps dans votre propre base, sous forme de données temporaires de WordPress : le compteur de la limite de débit, et les suggestions de liens calculées par le modèle, conservées douze heures pour ne pas vous faire payer un nouvel appel à chaque ouverture. Une suggestion est recalculée si le titre ou le début de l'article change, ou si vous changez de fournisseur.

Les requêtes partent de votre serveur vers le fournisseur que vous avez choisi — Anthropic ou OpenAI —, avec la clé que vous avez saisie. Ce que le fournisseur conserve de son côté relève de ses propres règles : avec OpenAI, StormPress utilise l'API Responses sans désactiver la conservation des réponses, que cette API pratique par défaut, et s'appuie sur elle pour enchaîner les tours d'une même demande. Ce qui transite, et comment ces clés sont protégées, fait l'objet d'un article dédié.

Des suggestions de liens qui lisent l'article

Quand une clé est configurée pour le fournisseur actif et que vous avez le droit de modifier l'article, l'outil de suggestion de liens envoie au modèle le titre de l'article, un extrait de son texte (1 500 caractères au plus) et une liste d'au plus trente contenus publiés du site : une partie parmi les plus cités, une partie parmi ceux qui partagent une catégorie ou une étiquette avec l'article. Le modèle choisit ses cibles dans cette liste, propose une ancre et justifie son choix.

Sa réponse est filtrée avant d'être affichée : une cible absente des candidats, ou qui n'est plus publiée, est écartée. Le modèle ne peut pas inventer une page, et rien n'est modifié dans l'article : c'est vous qui insérez les liens.

Sans clé, sans le droit de modifier l'article, ou si le modèle ne répond pas à temps, l'outil revient à l'ordre par popularité : les contenus publiés qui reçoivent déjà le plus de liens internes. La réponse précise toujours laquelle des deux méthodes a servi.

Ce que le copilote ne fait pas

  • Aucun outil intégré ne supprime de contenu, ne modifie vos réglages, ni n'active, ne désactive ou ne met à jour une extension. Le rapport de gouvernance lit l'inventaire ; il n'agit pas dessus.
  • Il ne fonctionne pas sans clé Anthropic ou OpenAI : il répond alors qu'aucune clé n'est configurée. Le reste de StormPress fonctionne normalement, hormis la génération d'extrait, qui demande elle aussi une IA ; les suggestions de liens retombent sur l'ordre par popularité.
  • Par défaut, il n'exécute pas les abilities annotées destructives. Pour celles des autres extensions, c'est leur auteur qui en fixe la portée, et le filtre présenté plus haut vous permet de restreindre la liste.

Et si vous avez besoin d'un outil de plus ?

Vous pouvez en ajouter un en quelques lignes de PHP, avec les mêmes garanties : capacité déclarée, contrôle à l'exécution, réponse renvoyée au modèle. Nous montrons comment dans un pas-à-pas complet, avec un exemple réel : planifier un article à une date donnée.

Un bon copilote n'est pas celui qui peut tout faire. C'est celui dont vous savez exactement ce qu'il peut faire.

StormPress Lite est gratuit, sous licence GPL, et se désactive en un clic. Deux minutes pour l'essayer sur votre site.

Télécharger StormPress Lite