Publier sur X (Twitter)
Publie du texte, des images, des vidéos et des articles longs sur X via un vrai navigateur Chrome.
Dans Codex, ne confondez pas ces chemins de navigateur :
- Plugin Chrome Codex /
@chrome/ Extension Chrome : utilisez la compétencechrome:Chromeintégrée et son client de navigateur Node REPL. Ceci est requis lorsque l'utilisateur dit « Plugin Chrome Codex », « Codex 自带的 Chrome 插件 »,@chrome, ou similaire. - Chrome Computer Use : utilisez
mcp__computer_use__.*contre l'interface utilisateur visible de Google Chrome uniquement lorsque l'utilisateur demande Computer Use ou qu'aucune préférence de plugin Chrome n'est exprimée et que Computer Use est disponible. - Mode script CDP : à utiliser uniquement en tant que solution de repli lorsque le mode sélectionné est indisponible ou que l'utilisateur demande explicitement le mode CDP/script.
Répertoire des scripts
Important : Tous les scripts se trouvent dans le sous-répertoire scripts/ de cette compétence.
Instructions d'exécution pour l'agent :
- Déterminez le chemin du répertoire de ce fichier SKILL.md comme
{baseDir} - Chemin du script =
{baseDir}/scripts/<script-name>.ts - Remplacez tous les
{baseDir}dans ce document par le chemin réel. - Résoudre l'environnement d'exécution
${BUN_X}: sibunest installé →bun; sinpxest disponible →npx -y bun; sinon suggérez d'installer bun.
Référence des scripts :
| Script | Objectif |
|---|---|
scripts/x-browser.ts | Publications normales (texte + images), repli CDP |
scripts/x-video.ts | Publications vidéo (texte + vidéo), repli CDP |
scripts/x-quote.ts | Tweet de citation avec commentaire, repli CDP |
scripts/x-article.ts | Publication d'articles longs (Markdown), repli CDP |
scripts/md-to-html.ts | Conversion Markdown → HTML |
scripts/copy-to-clipboard.ts | Copier le contenu dans le presse-papiers |
scripts/paste-from-clipboard.ts | Envoyer une vraie frappe de collage |
scripts/check-paste-permissions.ts | Vérifier l'environnement et les autorisations |
Sélection du mode d'exécution (obligatoire)
Choisissez exactement un mode avant d'interagir avec X :
- Si l'utilisateur demande explicitement le plugin Chrome Codex,
@chrome, l'extension Chrome, ou « Codex 自带的 Chrome 插件 », utilisez le Mode Plugin Chrome Codex. N'appelez pas Computer Use en premier. - Si l'utilisateur demande explicitement Chrome Computer Use, utilisez le Mode Chrome Computer Use. Ne revenez pas à CDP, Playwright, le Navigateur intégré à l'application ou le plugin Chrome sans en informer l'utilisateur et obtenir son accord.
- Si l'utilisateur demande explicitement le mode CDP/script, utilisez le Mode Script CDP.
- Sinon, préférez le Mode Chrome Computer Use. Pour les Articles X avec images de contenu locales en Markdown, utilisez le flux de l'éditeur X testé : insérez chaque image du corps à partir de la barre d'outils (
Insert->Media-> bouton d'icône de dialogueAdd photos or video) à son espace réservé, puis supprimez le texte de l'espace réservé. Utilisez le Mode Script CDP uniquement lorsque le mode de contrôle du navigateur sélectionné est indisponible ou que le flux de téléchargement/sélection de l'interface utilisateur n'est pas fiable.
N'utilisez jamais le Navigateur intégré à l'application pour les flux de publication sur X.
Mode Plugin Chrome Codex
Utilisez ce mode chaque fois que l'utilisateur demande le plugin Chrome Codex, @chrome, ou le chemin de l'extension Chrome. Cela utilise le profil Chrome réel de l'utilisateur et sa session X via le plugin Chrome intégré, pas Computer Use ni CDP.
Configuration
- Chargez la compétence
chrome:Chromeavant le travail sur le navigateur. - Utilisez
tool_searchpournode_repl jssi l'outil Node REPLjsn'est pas déjà visible. - Initialisez le client du navigateur Chrome exactement comme spécifié par la compétence Chrome, puis exécutez un appel léger tel que
browser.user.openTabs()pour vérifier la connexion de l'extension. - Si le premier appel léger échoue, attendez 2 secondes et réessayez une fois. S'il échoue encore, suivez les étapes de vérification et de récupération de l'extension de la compétence Chrome. Si les vérifications réussissent mais que la communication échoue toujours, demandez à l'utilisateur avant d'ouvrir une nouvelle fenêtre Chrome. Ne passez pas à Computer Use ou CDP silencieusement.
Règles générales
- Utilisez les API
browser.tabs.*,tab.playwright.*,tab.cua.*du plugin Chrome et le sélecteur de fichiers pour les actions sur l'interface utilisateur de X. - Les commandes shell sont autorisées pour le prétraitement du Markdown et la préparation du presse-papiers en HTML enrichi. Pour les images du corps des Articles X, ne vous fiez pas au collage d'image depuis le presse-papiers ; utilisez le flux de téléchargement
Insert->Mediade l'éditeur. - Si un téléchargement de fichier échoue avec
Not allowed, dites à l'utilisateur :Pour activer le téléchargement de fichiers, accédez à chrome://extensions dans Chrome, cliquez sur Détails sous l'extension Codex, et activez « Autoriser l'accès aux URL de fichiers ». Voir https://developers.openai.com/codex/app/chrome-extension#upload-files pour plus de détails. - Si le plugin Chrome signale
native pipe is closed, réessayez l'appel léger au navigateur une fois après 2 secondes, puis exécutez les vérifications de santé de la compétence Chrome. Si Chrome est en cours d'exécution, que l'extension est activée et que le manifeste de l'hôte natif est correct, demandez la permission d'ouvrir une nouvelle fenêtre Chrome et réessayez. Ne continuez pas à envoyer des actions de navigateur via le tuyau cassé. - Ne cliquez jamais sur
Publier,Posterou toute action de soumission visible de l'extérieur sans une confirmation finale explicite de l'utilisateur dans la conversation en cours.
Articles X
- Convertissez le Markdown et conservez la carte des images :
${BUN_X} {baseDir}/scripts/md-to-html.ts article.md --save-html /tmp/x-article-body.html > /tmp/x-article.json - Lisez la sortie JSON pour
title,coverImageetcontentImages(placeholder→localPath). - Ouvrez ou créez le brouillon de l'article à
https://x.com/compose/articles. - Téléchargez la couverture avec le flux de sélection de fichiers du plugin Chrome. Si le téléchargement est bloqué par les permissions de l'extension, arrêtez-vous et signalez la correction de permission exacte ci-dessus.
- Remplissez le titre, puis copiez le HTML enrichi :
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html - Collez dans le corps de l'article avec une vraie frappe de collage via le plugin Chrome. Sur macOS, utilisez
Meta+V. - Vérifiez que le texte de l'éditeur contient le corps de l'article et les espaces réservés
XIMGPH_. Ne vous fiez pas àtab.clipboard.readText()comme preuve du presse-papiers système après des écritures shell dans le presse-papiers ; sur macOS, vérifiez avecpbpastesi nécessaire. - Pour chaque élément
contentImagesdans l'ordre des espaces réservés :- Localisez le texte visible de l'espace réservé (
XIMGPH_N) et cliquez dessus pour y placer le curseur. - Ouvrez le menu de la barre d'outils
Insert->Media. - Dans la fenêtre modale, cliquez sur le bouton d'icône avec
aria-label="Add photos or video"; ne cliquez pas sur le texte/zone de dépôt ou sur le champ de fichier masqué. - Utilisez le sélecteur de fichiers pour télécharger le
localPathde cette image. - Après l'apparition de l'image, si
XIMGPH_Nreste au-dessus, sélectionnez exactement cet espace réservé et appuyez d'abord surSuppr. UtilisezRetour arrièreuniquement siSuppréchoue et que le texte sélectionné est confirmé comme étant exactement l'espace réservé. - Vérifiez que le nombre d'espaces réservés pour ce
XIMGPH_Nest0.
- Localisez le texte visible de l'espace réservé (
- Ouvrez l'aperçu et vérifiez le titre, la couverture, le corps, les liens et les images.
- Demandez une confirmation explicite avant de cliquer sur
Publier.
Préférences (EXTEND.md)
Vérifiez EXTEND.md par ordre de priorité — le premier trouvé l'emporte :
| Priorité | Chemin | Portée |
|---|---|---|
| 1 | .baoyu-skills/baoyu-post-to-x/EXTEND.md | Projet |
| 2 | ${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-post-to-x/EXTEND.md | XDG |
| 3 | $HOME/.baoyu-skills/baoyu-post-to-x/EXTEND.md | Répertoire utilisateur |
Si aucun n’est trouvé, utilisez les valeurs par défaut.
EXTEND.md prend en charge : Profil Chrome par défaut
Prérequis
- Google Chrome ou Chromium
- environnement d'exécution
bun - Première exécution : connectez-vous à X manuellement (session sauvegardée)
Vérification préliminaire (facultative)
Avant la première utilisation, suggérez d'exécuter la vérification de l'environnement. L'utilisateur peut l'ignorer s'il le préfère.
${BUN_X} {baseDir}/scripts/check-paste-permissions.ts
Vérifications : Chrome, isolation du profil, Bun, Accessibilité, presse-papiers, frappe de collage, conflits Chrome.
Si une vérification échoue, fournissez des conseils de correction par élément :
| Vérification | Correction |
|---|---|
| Chrome | Installer Chrome ou définir la variable d'environnement X_BROWSER_CHROME_PATH |
| Répertoire de profil | Profil partagé à baoyu-skills/chrome-profile (voir la section Profil Chrome de CLAUDE.md) |
| Environnement d'exécution Bun | brew install oven-sh/bun/bun (macOS) ou npm install -g bun |
| Accessibilité (macOS) | Réglages Système → Confidentialité et sécurité → Accessibilité → activez l'application du terminal |
| Copie dans le presse-papiers | Assurez-vous que Swift/AppKit est disponible (outils CLI Xcode macOS : xcode-select --install) |
| Frappe de collage (macOS) | Identique à la correction d'Accessibilité ci-dessus |
| Frappe de collage (Linux) | Installer xdotool (X11) ou ydotool (Wayland) |
Références
- Publications normales : Voir
references/regular-posts.mdpour le flux de travail manuel, le dépannage et les détails techniques. - Articles X : Voir
references/articles.mdpour le guide de publication d'articles longs.
Mode Chrome Computer Use
Utilisez ce mode lorsque l'utilisateur demande explicitement Chrome Computer Use, ou lorsqu'aucune préférence de plugin Chrome n'est exprimée et que Codex peut contrôler Google Chrome avec Computer Use. Cela utilise la fenêtre Chrome existante de l'utilisateur, les cookies, la session X, les extensions, etc.
Règles générales :
- Commencez chaque tour d'assistant qui contrôle Chrome en appelant
get_app_statepourGoogle Chrome. - Préférez les actions par index d'élément lorsqu'elles sont disponibles ; utilisez les coordonnées uniquement pour la sélection de texte dans l'éditeur ou la sélection par glissement.
- N'utilisez pas le Navigateur intégré à l'application, le plugin Chrome, Playwright ou CDP pour les actions sur l'interface utilisateur de X dans ce mode, sauf si l'utilisateur approuve un changement de mode.
- Ne cliquez jamais sur
Publier,Posterou toute action de soumission visible de l'extérieur sans une confirmation finale explicite de l'utilisateur dans la conversation en cours.
Publications normales :
- Ouvrez ou accédez à Chrome sur
https://x.com/compose/post. - Tapez le texte de la publication dans l'éditeur en utilisant Computer Use.
- Pour chaque image, exécutez :
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts image /absolute/path/to/image.png - Collez avec Computer Use (
super+vsur macOS,control+vsur Windows/Linux), puis attendez que X ait fini de télécharger le média. - Demandez une confirmation avant de cliquer sur
Poster.
Publications vidéo :
- Ouvrez ou accédez à Chrome sur
https://x.com/compose/post. - Tapez le texte de la publication dans l'éditeur.
- Utilisez l'interface utilisateur visible de téléchargement de média/sélecteur de fichier pour joindre la vidéo.
- Attendez la fin du téléchargement et du traitement.
- Demandez une confirmation avant de cliquer sur
Poster.
Tweets de citation :
- Ouvrez l'URL du tweet dans Chrome.
- Utilisez l'interface utilisateur visible de citation/repost pour choisir Citer.
- Tapez le commentaire.
- Demandez une confirmation avant de cliquer sur
Poster.
Articles X :
- Convertissez le Markdown et conservez la carte des images :
${BUN_X} {baseDir}/scripts/md-to-html.ts article.md --save-html /tmp/x-article-body.html > /tmp/x-article.json - Lisez la sortie JSON pour
title,coverImageetcontentImages(placeholder→localPath). - Dans Chrome, ouvrez
https://x.com/compose/articles, créez ou ouvrez le brouillon, téléchargez la couverture si présente et remplissez le titre. - Copiez le HTML enrichi dans le presse-papiers :
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html - Collez dans le corps de l'article avec Computer Use.
- Pour chaque entrée
contentImagesdans l'ordre des espaces réservés :- Localisez le texte exact visible de l'espace réservé, tel que
XIMGPH_3, et cliquez dessus pour définir le point d'insertion. - Ouvrez le menu déroulant
Insertde la barre d'outils, choisissezMedia, puis cliquez sur le bouton d'icône de la fenêtre modale étiquetéAdd photos or video. - Utilisez le sélecteur de fichier natif pour choisir le
localPathde l'image. - Attendez que le bloc d'image apparaisse et que toute activité de téléchargement soit terminée.
- Si l'espace réservé reste au-dessus de l'image insérée, resélectionnez exactement ce texte d'espace réservé et appuyez d'abord sur
Suppr. UtilisezRetour arrièreuniquement siSuppréchoue et que le texte sélectionné est confirmé comme étant exactement l'espace réservé.
- Localisez le texte exact visible de l'espace réservé, tel que
- Vérifiez qu'il ne reste aucun espace réservé
XIMGPH_et que les images attendues apparaissent. - Ouvrez l'aperçu et vérifiez le titre, la couverture, le corps, les liens et les images.
- Demandez une confirmation explicite avant de cliquer sur
Publier.
Si la sélection de Computer Use, le téléchargement via la barre d'outils ou le contrôle du sélecteur de fichiers devient peu fiable, arrêtez-vous et signalez le blocage au lieu de passer silencieusement au plugin Chrome ou à CDP.
Mode Script CDP (Solution de repli)
Utilisez les sections de script ci-dessous uniquement lorsque le mode de contrôle de navigateur sélectionné est indisponible, non fiable ou explicitement non demandé. Ces scripts lancent ou réutilisent une instance Chrome réelle via CDP et gardent le navigateur ouvert pour révision.
N'utilisez pas le Mode Script CDP lorsque l'utilisateur exige explicitement le plugin Chrome Codex ou Chrome Computer Use, à moins que l'utilisateur n'approuve la solution de repli après que vous ayez expliqué le blocage.
Sélection du type de publication
Sauf si l'utilisateur spécifie explicitement le type de publication :
- Texte brut + dans la limite de 10 000 caractères → Publication normale (les membres Premium prennent en charge jusqu'à 10 000 caractères, non-Premium : 280)
- Fichier Markdown (.md) → Article X
Publications normales
${BUN_X} {baseDir}/scripts/x-browser.ts "Hello!" --image ./photo.png
Paramètres :
| Paramètre | Description |
|---|---|
<texte> | Contenu de la publication (positionnel) |
--image <chemin> | Fichier image (répétable, max 4) |
--profile <répertoire> | Profil Chrome personnalisé |
Remarque : Le script ouvre le navigateur avec le contenu rempli. L'utilisateur examine et publie manuellement.
Remarque sur le mode Codex : Si l'utilisateur a explicitement demandé le plugin Chrome Codex, utilisez le Mode Plugin Chrome Codex. Sinon, si Chrome Computer Use est activé, utilisez le Mode Chrome Computer Use au lieu d'exécuter x-browser.ts.
Publications vidéo
Texte + fichier vidéo.
${BUN_X} {baseDir}/scripts/x-video.ts "Check this out!" --video ./clip.mp4
Paramètres :
| Paramètre | Description |
|---|---|
<texte> | Contenu de la publication (positionnel) |
--video <chemin> | Fichier vidéo (MP4, MOV, WebM) |
--profile <répertoire> | Profil Chrome personnalisé |
Remarque : Le script ouvre le navigateur avec le contenu rempli. L'utilisateur examine et publie manuellement.
Remarque sur le mode Codex : Si l'utilisateur a explicitement demandé le plugin Chrome Codex, utilisez le Mode Plugin Chrome Codex. Sinon, si Chrome Computer Use est activé, utilisez le Mode Chrome Computer Use au lieu d'exécuter x-video.ts.
Limites : Normal 140 s max, Premium 60 min. Traitement : 30-60 s.
Tweets de citation
Citer un tweet existant avec un commentaire.
${BUN_X} {baseDir}/scripts/x-quote.ts https://x.com/user/status/123 "Great insight!"
Paramètres :
| Paramètre | Description |
|---|---|
<url-du-tweet> | URL à citer (positionnel) |
<commentaire> | Texte du commentaire (positionnel, facultatif) |
--profile <répertoire> | Profil Chrome personnalisé |
Remarque : Le script ouvre le navigateur avec le contenu rempli. L'utilisateur examine et publie manuellement.
Remarque sur le mode Codex : Si l'utilisateur a explicitement demandé le plugin Chrome Codex, utilisez le Mode Plugin Chrome Codex. Sinon, si Chrome Computer Use est activé, utilisez le Mode Chrome Computer Use au lieu d'exécuter x-quote.ts.
Articles X
Articles Markdown longs (nécessite X Premium).
${BUN_X} {baseDir}/scripts/x-article.ts article.md
${BUN_X} {baseDir}/scripts/x-article.ts article.md --cover ./cover.jpg
Paramètres :
| Paramètre | Description |
|---|---|
<markdown> | Fichier Markdown (positionnel) |
--cover <chemin> | Image de couverture |
--title <texte> | Remplacer le titre |
Frontmatter : title, cover_image pris en charge dans l'en-tête YAML.
Remarque sur le mode Codex : Si l'utilisateur a explicitement demandé le plugin Chrome Codex, suivez le Mode Plugin Chrome Codex ci-dessus. Si l'utilisateur a explicitement demandé Chrome Computer Use, suivez le Mode Chrome Computer Use. Sinon, préférez Chrome Computer Use ; pour les articles Markdown avec des images de contenu locales, utilisez le flux de téléchargement d'image via la barre d'outils Insert -> Media avant de revenir à x-article.ts en Mode Script CDP.
Remarque sur la solution de repli CDP : Le script ouvre le navigateur avec l'article rempli. L'utilisateur examine et publie manuellement sauf si --submit est utilisé.
Sécurité de publication : N'utilisez pas --submit et ne cliquez pas sur Publier sauf si l'utilisateur confirme explicitement l'action finale de publication publique.
Vérification après composition : Le script vérifie automatiquement après l'insertion de toutes les images :
- Les espaces réservés
XIMGPH_restants dans le contenu de l'éditeur - Nombre d'images attendu par rapport au nombre réel
Si la vérification échoue (avertissements dans la sortie), alertez l'utilisateur avec les problèmes spécifiques avant qu'il ne publie.
Dépannage
Port de débogage Chrome non prêt
Solution de repli CDP uniquement : si un script échoue avec Chrome debug port not ready ou Unable to connect, tuez d'abord les instances Chrome CDP existantes, puis réessayez :
pkill -f "Chrome.*remote-debugging-port" 2>/dev/null; pkill -f "Chromium.*remote-debugging-port" 2>/dev/null; sleep 2
Important : Cela doit être fait automatiquement — lors de la rencontre de cette erreur, tuez les instances Chrome CDP et réessayez la commande sans demander à l'utilisateur.
Remarques
- Première exécution : connexion manuelle requise (la session persiste)
- En Mode Plugin Chrome Codex et Mode Chrome Computer Use, utilisez la session Chrome existante de l'utilisateur et ne lancez pas de profil CDP séparé.
- Les scripts CDP ne remplissent que le contenu dans le navigateur par défaut ; l'utilisateur doit examiner et publier manuellement sauf si
--submitest utilisé explicitement. - Multiplateforme : macOS, Linux, Windows
Prise en charge des extensions
Configurations personnalisées via EXTEND.md. Voir la section Préférences pour les chemins et les options prises en charge.


