Communitygithub.com

Lord1Egypt/awesome-skill-forge

X/Twitter via l'interface en ligne de commande xurl : publier, rechercher, MP, médias, API v2.

Qu'est-ce que awesome-skill-forge ?

Cette compétence permet à un agent IA (comme Claude Code, Cursor, ou Codex) d'interagir avec l'API X (anciennement Twitter) via l'outil officiel en ligne de commande `xurl`. Elle offre un accès complet à l'API v2, incluant des raccourcis pour les actions courantes (publier, répondre, liker, suivre, envoyer des messages directs, uploader des médias) ainsi qu'un mode brut similaire à curl pour les endpoints non couverts. La compétence est conçue pour être utilisée dans un environnement d'agent, avec des règles de sécurité strictes pour ne jamais exposer les secrets d'authentification. Elle remplace l'ancienne compétence `xitter` et est maintenue par l'équipe de la plateforme X. L'utilisateur doit configurer manuellement ses identifiants en dehors de la session de l'agent en suivant une procédure unique d'inscription d'application et d'authentification OAuth 2.0. L'agent peut ensuite émettre des commandes structurées, analyser les réponses JSON, et orchestrer des workflows complexes comme la publication d'images, la recherche et l'engagement, ou la gestion de plusieurs comptes.

Compatible avec✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/Lord1Egypt/awesome-skill-forge/tree/HEAD/skills/xurl

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

xurl — API X (Twitter) via l'interface en ligne de commande officielle

xurl est l'interface en ligne de commande officielle de la plateforme de développeurs X pour l'API X. Elle prend en charge des commandes raccourcies pour les actions courantes ET un accès brut de type curl à tout endpoint v2. Toutes les commandes renvoient du JSON sur la sortie standard.

Utilisez cette compétence pour :

  • publier, répondre, citer, supprimer des publications
  • rechercher des publications et lire les timelines/mentions
  • liker, republier, mettre en favori
  • suivre, ne plus suivre, bloquer, mettre en sourdine
  • messages directs
  • upload de médias (images et vidéos)
  • accès brut à tout endpoint de l'API X v2
  • workflows multi-applications / multi-comptes

Cette compétence remplace l'ancienne compétence xitter (qui utilisait une interface Python tierce). xurl est maintenu par l'équipe de la plateforme de développeurs X, prend en charge OAuth 2.0 PKCE avec auto-rafraîchissement, et couvre une surface d'API considérablement plus large.


Sécurité des secrets (OBLIGATOIRE)

Règles critiques lors de l'utilisation dans une session agent/LLM :

  • Ne jamais lire, afficher, analyser, résumer, télécharger ou envoyer ~/.xurl dans le contexte du LLM.
  • Ne jamais demander à l'utilisateur de coller des identifiants/tokens dans le chat.
  • L'utilisateur doit remplir ~/.xurl avec les secrets manuellement sur sa propre machine. Dans Docker, cela doit être le ~ vu par les sous-processus de l'outil Hermes ; voir la note Docker ci-dessous.
  • Ne jamais recommander ou exécuter des commandes d'authentification avec des secrets en ligne dans les sessions d'agent.
  • Ne jamais utiliser --verbose / -v dans les sessions d'agent — cela peut exposer les en-têtes/tokens d'authentification.
  • Pour vérifier l'existence des identifiants, utilisez uniquement : xurl auth status.

Drapeaux interdits dans les commandes d'agent (ils acceptent des secrets en ligne) : --bearer-token, --consumer-key, --consumer-secret, --access-token, --token-secret, --client-id, --client-secret

L'enregistrement des identifiants d'application et la rotation des identifiants doivent être effectués par l'utilisateur manuellement, en dehors de la session de l'agent. Après l'enregistrement des identifiants, l'utilisateur s'authentifie avec xurl auth oauth2 — également en dehors de la session de l'agent. Les tokens persistent dans ~/.xurl au format YAML. Chaque application a des tokens isolés. Les tokens OAuth 2.0 s'auto-rafraîchissent.


Installation

Choisissez UNE méthode. Sous Linux, le script shell ou go install sont les plus simples.

# Script shell (installe dans ~/.local/bin, pas besoin de sudo, fonctionne sous Linux + macOS)
curl -fsSL https://raw.githubusercontent.com/xdevplatform/xurl/main/install.sh | bash

# Homebrew (macOS)
brew install --cask xdevplatform/tap/xurl

# npm
npm install -g @xdevplatform/xurl

# Go
go install github.com/xdevplatform/xurl@latest

Vérification :

xurl --help
xurl auth status

Si xurl est installé mais que auth status n'affiche aucune application ou token, l'utilisateur doit effectuer l'authentification manuellement — voir la section suivante.


Configuration utilisateur unique (l'utilisateur exécute ces étapes en dehors de l'agent)

Ces étapes doivent être effectuées par l'utilisateur directement, PAS par l'agent, car elles impliquent le collage de secrets. Dirigez l'utilisateur vers ce bloc ; ne l'exécutez pas pour lui.

  1. Créez ou ouvrez une application sur https://developer.x.com/en/portal/dashboard

  2. Définissez l'URI de redirection sur http://localhost:8080/callback

  3. Copiez l'ID client et le secret client de l'application

  4. Enregistrez l'application localement (l'utilisateur exécute ceci) :

    xurl auth apps add my-app --client-id VOTRE_ID_CLIENT --client-secret VOTRE_SECRET_CLIENT
    
  5. Authentifiez-vous (spécifiez --app pour lier le token à votre application) :

    xurl auth oauth2 --app my-app
    

    (Ceci ouvre un navigateur pour le flux OAuth 2.0 PKCE.)

    Si X renvoie une erreur UsernameNotFound ou 403 lors de la recherche /2/users/me post-OAuth, passez votre pseudo explicitement (xurl v1.1.0+) :

    xurl auth oauth2 --app my-app VOTRE_PSEUDO
    

    Cela lie le token à votre pseudo et ignore l'appel /2/users/me défaillant.

  6. Définissez l'application comme application par défaut pour que toutes les commandes l'utilisent :

    xurl auth default my-app
    
  7. Vérifiez :

    xurl auth status
    xurl whoami
    

Après cela, l'agent peut utiliser n'importe quelle commande ci-dessous sans configuration supplémentaire. Les tokens OAuth 2.0 s'auto-rafraîchissent.

Piège courant : Si vous omettez --app my-app de xurl auth oauth2, le token OAuth est enregistré dans le profil d'application default intégré — qui n'a ni client-id ni client-secret. Les commandes échoueront avec des erreurs d'authentification même si le flux OAuth a semblé réussir. Si vous rencontrez ce problème, relancez xurl auth oauth2 --app my-app et xurl auth default my-app.

Piège Docker HOME : Dans la disposition Docker officielle d'Hermes, /opt/data est HERMES_HOME, mais les sous-processus de l'outil Hermes utilisent /opt/data/home comme HOME. Cela signifie que ~/.xurl se résout en /opt/data/home/.xurl pour les commandes xurl exécutées par Hermes, et non /opt/data/.xurl. Exécutez la configuration utilisateur avec le même HOME :

HOME=/opt/data/home xurl auth apps add my-app --client-id VOTRE_ID_CLIENT --client-secret VOTRE_SECRET_CLIENT
HOME=/opt/data/home xurl auth oauth2 --app my-app VOTRE_PSEUDO
HOME=/opt/data/home xurl auth default my-app VOTRE_PSEUDO
HOME=/opt/data/home xurl auth status

Si HOME=/opt/data xurl auth status réussit mais que HOME=/opt/data/home xurl auth status n'affiche aucune application ou token, les appels d'outils Hermes ne verront pas les identifiants.


Référence rapide

ActionCommande
Publierxurl post "Bonjour le monde !"
Répondrexurl reply ID_POST "Belle publication !"
Citerxurl quote ID_POST "Mon avis"
Supprimer une publicationxurl delete ID_POST
Lire une publicationxurl read ID_POST
Rechercher des publicationsxurl search "REQUETE" -n 10
Qui suis-jexurl whoami
Rechercher un utilisateurxurl user @pseudo
Fil d'actualitéxurl timeline -n 20
Mentionsxurl mentions -n 10
Liker / Ne plus likerxurl like ID_POST / xurl unlike ID_POST
Republier / Annulerxurl repost ID_POST / xurl unrepost ID_POST
Mettre en favori / Retirerxurl bookmark ID_POST / xurl unbookmark ID_POST
Lister les favoris / likesxurl bookmarks -n 10 / xurl likes -n 10
Suivre / Ne plus suivrexurl follow @pseudo / xurl unfollow @pseudo
Abonnements / Abonnésxurl following -n 20 / xurl followers -n 20
Bloquer / Débloquerxurl block @pseudo / xurl unblock @pseudo
Mettre en sourdine / Réactiverxurl mute @pseudo / xurl unmute @pseudo
Envoyer un MPxurl dm @pseudo "message"
Lister les MPxurl dms -n 10
Uploader un médiaxurl media upload chemin/vers/fichier.mp4
Statut du médiaxurl media status ID_MEDIA
Lister les applicationsxurl auth apps list
Supprimer une applicationxurl auth apps remove NOM
Définir l'application par défautxurl auth default NOM_APP [PSEUDO]
Application par requêtexurl --app NOM /2/users/me
Statut de l'authentificationxurl auth status

Notes :

  • ID_POST accepte également les URL complètes (par ex. https://x.com/user/status/1234567890) — xurl extrait l'ID.
  • Les pseudos fonctionnent avec ou sans @ au début.

Détails des commandes

Publication

xurl post "Bonjour le monde !"
xurl post "Regarde ça" --media-id ID_MEDIA
xurl post "Pics du fil" --media-id 111 --media-id 222

xurl reply 1234567890 "Bonne remarque !"
xurl reply https://x.com/user/status/1234567890 "D'accord !"
xurl reply 1234567890 "Regarde ça" --media-id ID_MEDIA

xurl quote 1234567890 "J'ajoute mes réflexions"
xurl delete 1234567890

Lecture et recherche

xurl read 1234567890
xurl read https://x.com/user/status/1234567890

xurl search "golang"
xurl search "from:elonmusk" -n 20
xurl search "#buildinpublic lang:en" -n 15

Pour les articles X, utilisez le mode API brut au lieu du raccourci read. xurl read s'attend à un ID de publication ou une URL de publication ; ne mettez pas read avant un endpoint /2/tweets/.... Demandez le champ article du tweet et ingérez data.article.plain_text depuis la réponse JSON :

xurl --app NOM_APP '/2/tweets/2057909493250539891?expansions=author_id,attachments.media_keys,referenced_tweets.id&tweet.fields=created_at,lang,public_metrics,context_annotations,entities,possibly_sensitive,conversation_id,in_reply_to_user_id,referenced_tweets,article'

Utilisateurs, fil d'actualité, mentions

xurl whoami
xurl user elonmusk
xurl user @XDevelopers

xurl timeline -n 25
xurl mentions -n 20

Engagement

xurl like 1234567890
xurl unlike 1234567890

xurl repost 1234567890
xurl unrepost 1234567890

xurl bookmark 1234567890
xurl unbookmark 1234567890

xurl bookmarks -n 20
xurl likes -n 20

Graphe social

xurl follow @XDevelopers
xurl unfollow @XDevelopers

xurl following -n 50
xurl followers -n 50

# Graphe d'un autre utilisateur
xurl following --of elonmusk -n 20
xurl followers --of elonmusk -n 20

xurl block @spammer
xurl unblock @spammer
xurl mute @agacant
xurl unmute @agacant

Messages directs

xurl dm @quelquun "Hé, j'ai vu ta publication !"
xurl dms -n 25

Upload de médias

# Détection automatique du type
xurl media upload photo.jpg
xurl media upload video.mp4

# Type/catégorie explicite
xurl media upload --media-type image/jpeg --category tweet_image photo.jpg

# Les vidéos nécessitent un traitement côté serveur — vérifiez le statut (ou interrogez)
xurl media status ID_MEDIA
xurl media status --wait ID_MEDIA

# Workflow complet
xurl media upload meme.png                  # renvoie l'id du média
xurl post "lol" --media-id ID_MEDIA

Accès brut à l'API

Les raccourcis couvrent les opérations courantes. Pour tout le reste, utilisez le mode brut de type curl contre tout endpoint de l'API X v2 :

# GET
xurl /2/users/me

# POST avec corps JSON
xurl -X POST /2/tweets -d '{"text":"Bonjour le monde !"}'

# DELETE / PUT / PATCH
xurl -X DELETE /2/tweets/1234567890

# En-têtes personnalisés
xurl -H "Content-Type: application/json" /2/some/endpoint

# Forcer le streaming
xurl -s /2/tweets/search/stream

# Les URL complètes fonctionnent aussi
xurl https://api.x.com/2/users/me

Drapeaux globaux

DrapeauCourtDescription
--appUtiliser une application enregistrée spécifique (remplace la valeur par défaut)
--authForcer le type d'authentification : oauth1, oauth2, ou app
--username-uQuel compte OAuth2 utiliser (si plusieurs existent)
--verbose-vInterdit dans les sessions d'agent — fuit les en-têtes d'authentification
--trace-tAjouter l'en-tête de trace X-B3-Flags: 1

Streaming

Les endpoints de streaming sont détectés automatiquement. Les plus connus sont :

  • /2/tweets/search/stream
  • /2/tweets/sample/stream
  • /2/tweets/sample10/stream

Forcez le streaming sur n'importe quel endpoint avec -s.


Format de sortie

Toutes les commandes renvoient du JSON sur la sortie standard. La structure reflète l'API X v2 :

{ "data": { "id": "1234567890", "text": "Bonjour le monde !" } }

Les erreurs sont également en JSON :

{ "errors": [ { "message": "Non autorisé", "code": 403 } ] }

Workflows courants

Publier avec une image

xurl media upload photo.jpg
xurl post "Regarde cette photo !" --media-id ID_MEDIA

Répondre à une conversation

xurl read https://x.com/user/status/1234567890
xurl reply 1234567890 "Voici mes réflexions..."

Rechercher et interagir

xurl search "sujet d'intérêt" -n 10
xurl like ID_POST_DES_RESULTATS
xurl reply ID_POST_DES_RESULTATS "Bonne remarque !"

Vérifier votre activité

xurl whoami
xurl mentions -n 20
xurl timeline -n 20

Applications multiples (identifiants préconfigurés manuellement)

xurl auth default prod alice               # application prod, utilisateur alice
xurl --app staging /2/users/me             # utilisation ponctuelle sur staging

Gestion des erreurs

  • Code de sortie non nul en cas d'erreur.
  • Les erreurs de l'API sont toujours affichées en JSON sur la sortie standard, vous pouvez donc les analyser.
  • Erreurs d'authentification → demandez à l'utilisateur de relancer xurl auth oauth2 en dehors de la session de l'agent.
  • Les commandes qui ont besoin de l'ID utilisateur de l'appelant (like, repost, bookmark, follow, etc.) le récupéreront automatiquement via /2/users/me. Un échec d'authentification se présente comme une erreur d'authentification.

Workflow de l'agent

  1. Vérifiez les prérequis : xurl --help et xurl auth status.
  2. Vérifiez que l'application par défaut a des identifiants. Analysez la sortie de auth status. L'application par défaut est marquée par ▸. Si l'application par défaut affiche oauth2: (aucun) mais qu'une autre application a un utilisateur oauth2 valide, dites à l'utilisateur d'exécuter xurl auth default <cette-app> pour corriger le problème. C'est l'erreur de configuration la plus courante — l'utilisateur a ajouté une application avec un nom personnalisé mais ne l'a jamais définie comme application par défaut, donc xurl continue d'essayer le profil default vide.
  3. Si l'authentification est totalement absente, arrêtez-vous et dirigez l'utilisateur vers la section "Configuration utilisateur unique" — N'essayez PAS d'enregistrer vous-même des applications ou de passer des secrets.
  4. Commencez par une lecture peu coûteuse (xurl whoami, xurl user @pseudo, xurl search ... -n 3) pour confirmer l'accessibilité.
  5. Confirmez la publication/utilisateur cible et l'intention de l'utilisateur avant toute action d'écriture (poster, répondre, liker, republier, MP, suivre, bloquer, supprimer).
  6. Utilisez directement la sortie JSON — chaque réponse est déjà structurée.
  7. Ne collez jamais le contenu de ~/.xurl dans la conversation.

Dépannage

SymptômeCauseCorrectif
Erreurs d'authentification après un flux OAuth réussiToken enregistré dans l'application default (sans client-id/secret) au lieu de votre application nomméexurl auth oauth2 --app my-app puis xurl auth default my-app
unauthorized_client lors de l'OAuthType d'application défini sur "Application native" dans le tableau de bord XPassez à "Application web, application automatisée ou bot" dans les paramètres d'authentification utilisateur
UsernameNotFound ou 403 sur /2/users/me juste après l'OAuthX ne renvoie pas le pseudo de manière fiable depuis /2/users/meRelancez xurl auth oauth2 --app my-app VOTRE_PSEUDO (xurl v1.1.0+) pour passer le pseudo explicitement
401 sur chaque requêteToken expiré ou mauvaise application par défautVérifiez xurl auth status — assurez-vous que ▸ pointe vers une application avec des tokens oauth2
client-forbidden / client-not-enrolledProblème d'inscription à la plateforme XTableau de bord → Applications → Gérer → Passer au forfait "Pay-per-use" → Environnement de production
CreditsDepletedSolde $0 sur l'API XAchetez des crédits (min. $5) dans la Console développeur → Facturation
media processing failed lors de l'upload d'imageLa catégorie par défaut est amplify_videoAjoutez --category tweet_image --media-type image/png
Deux valeurs "Client Secret" dans le tableau de bord XBug de l'interface — la première est en fait le Client IDConfirmez sur la page "Clés et tokens" ; l'ID se termine par MTpjaQ

Notes

  • Limites de débit : X applique des limites de débit par endpoint. Un 429 signifie attendre et réessayer. Les endpoints d'écriture (poster, répondre, liker, republier) ont des limites plus strictes que les lectures.
  • Portées : Les tokens OAuth 2.0 utilisent des portées étendues

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a insurance agency. Use when handling offer...

Lord1Egypt/awesome-skill-forge

Generates a complete landing page with copy, layout, hero image, and responsive design from a text description. Use when launching a product quickly.

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a family law practice. Use when handling offer...

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a fractional CFO firm. Use when handling offer...

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a home remodeling company. Use when handling offer...

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a HVAC service company. Use when handling offer...

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a immigration law firm. Use when handling offer...

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a CPA tax advisory firm. Use when handling offer...

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a estate planning law firm. Use when handling...

Lord1Egypt/awesome-skill-forge

Fastest way to create or update a pawr.link profile. One curl command, $19 USDC to create, $0.10 to update. Patch-style update-links endpoint lets you add, remove, or move individual links without replacing the whole profile.

Lord1Egypt/awesome-skill-forge

Use this skill when the user wants to review today, look back on yesterday, reflect on this week, or wrap things up with a gentle, low-pressure reflection.

Lord1Egypt/awesome-skill-forge

Read-only queue dashboard for workspace-aware ship. (gstack)

Lord1Egypt/awesome-skill-forge

Landing page quality assessment for paid advertising campaigns. Evaluates message match, page speed, mobile experience, trust signals, form optimization, and conversion rate potential. Use when user says landing page, post-click experience, landing page audit, LP audit, conversion rate, landing page CRO, post-click CRO, or landing page optimization.

Lord1Egypt/awesome-skill-forge

Create HTML-based video compositions, animated title cards, social overlays, captioned talking-head videos, audio-reactive visuals, and shader transitions using HyperFrames. HTML is the source of truth for video. Use when the user wants a rendered MP4/WebM from an HTML composition, wants to animate text/logos/charts over media, needs captions synced to audio, wants TTS narration, or wants to convert a website into a video.

Lord1Egypt/awesome-skill-forge

Search arXiv papers by keyword, author, category, or ID.

Lord1Egypt/awesome-skill-forge

Delegate coding to OpenAI Codex CLI (features, PRs).

Lord1Egypt/awesome-skill-forge

Track Apple devices/AirTags via FindMy.app on macOS.

Lord1Egypt/awesome-skill-forge

Jailbreak LLMs: Parseltongue, GODMODE, ULTRAPLINIAN.

Lord1Egypt/awesome-skill-forge

Geocode, POIs, routes, timezones via OpenStreetMap/OSRM.

Lord1Egypt/awesome-skill-forge

Notion API + ntn CLI: pages, databases, markdown, Workers.

Skills associés