Communitygithub.com

Lord1Egypt/awesome-skill-forge

Interactúa con X/Twitter a través de la CLI oficial xurl: publica, busca, envía mensajes directos, sube contenido multimedia y usa la API v2.

¿Qué es awesome-skill-forge?

Este skill habilita a agentes de IA (como Claude Code, Cursor, Codex) para interactuar programáticamente con X (Twitter) mediante la CLI oficial `xurl`. Proporciona comandos abreviados para acciones comunes (publicar, responder, citar, eliminar, buscar, dar like, republicar, seguir, bloquear, silenciar, enviar DMs, subir imágenes/video) y acceso raw a cualquier endpoint de la API v2 de X. Está mantenido por el equipo de la plataforma de desarrolladores de X, soporta OAuth 2.0 PKCE con renovación automática de tokens y permite flujos multi-aplicación y multi-cuenta. Es una actualización directa del skill `xitter` anterior, ofreciendo una superficie de API significativamente mayor. Su uso principal es en sistemas autónomos donde un agente realiza acciones en X previa verificación y autorización del usuario, siguiendo estrictas reglas de seguridad para no exponer credenciales.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

xurl — API de X (Twitter) a través de la CLI oficial

xurl es la CLI oficial de la plataforma de desarrolladores de X para la API de X. Soporta comandos abreviados para acciones comunes Y acceso raw estilo curl a cualquier endpoint v2. Todos los comandos devuelven JSON a stdout.

Usa este skill para:

  • publicar, responder, citar, eliminar publicaciones
  • buscar publicaciones y leer timelines/menciones
  • dar like, republicar, marcar como favorito
  • seguir, dejar de seguir, bloquear, silenciar
  • mensajes directos
  • subir contenido multimedia (imágenes y video)
  • acceso raw a cualquier endpoint de la API v2 de X
  • flujos multi-aplicación / multi-cuenta

Este skill reemplaza el skill anterior xitter (que envolvía una CLI Python de terceros). xurl es mantenido por el equipo de la plataforma de desarrolladores de X, soporta OAuth 2.0 PKCE con renovación automática y cubre una superficie de API sustancialmente mayor.


Seguridad de Secretos (OBLIGATORIO)

Reglas críticas al operar dentro de una sesión de agente/LLM:

  • Nunca leas, imprimas, analices, resumas, subas o envíes ~/.xurl al contexto del LLM.
  • Nunca pidas al usuario que pegue credenciales/tokens en el chat.
  • El usuario debe llenar ~/.xurl con secretos manualmente en su propia máquina. En Docker, este debe ser el ~ visto por los subprocesos de la herramienta Hermes; consulta la nota de Docker a continuación.
  • Nunca recomiendes o ejecutes comandos de autenticación con secretos en línea en sesiones de agente.
  • Nunca uses --verbose / -v en sesiones de agente — puede exponer tokens/cabeceras de autenticación.
  • Para verificar que existen credenciales, solo usa: xurl auth status.

Banderas prohibidas en comandos de agente (aceptan secretos en línea): --bearer-token, --consumer-key, --consumer-secret, --access-token, --token-secret, --client-id, --client-secret

El registro de credenciales de aplicación y la rotación de credenciales deben ser realizados por el usuario manualmente, fuera de la sesión del agente. Después de registrar las credenciales, el usuario se autentica con xurl auth oauth2 — también fuera de la sesión del agente. Los tokens persisten en ~/.xurl en YAML. Cada aplicación tiene tokens aislados. Los tokens OAuth 2.0 se renuevan automáticamente.


Instalación

Elige UN método. En Linux, el script de shell o go install son los más fáciles.

# Script de shell (instala en ~/.local/bin, sin sudo, funciona en 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

Verifica:

xurl --help
xurl auth status

Si xurl está instalado pero auth status no muestra aplicaciones ni tokens, el usuario debe completar la autenticación manualmente — consulta la siguiente sección.


Configuración Única del Usuario (el usuario ejecuta esto fuera del agente)

Estos pasos deben ser realizados por el usuario directamente, NO por el agente, porque implican pegar secretos. Dirige al usuario a este bloque; no lo ejecutes por él.

  1. Crea o abre una aplicación en https://developer.x.com/en/portal/dashboard

  2. Establece la URI de redireccionamiento a http://localhost:8080/callback

  3. Copia el ID de Cliente y el Secreto de Cliente de la aplicación

  4. Registra la aplicación localmente (el usuario ejecuta esto):

    xurl auth apps add mi-app --client-id TU_CLIENT_ID --client-secret TU_CLIENT_SECRET
    
  5. Autentica (especifica --app para vincular el token a tu aplicación):

    xurl auth oauth2 --app mi-app
    

    (Esto abre un navegador para el flujo OAuth 2.0 PKCE.)

    Si X devuelve un error UsernameNotFound o 403 en la búsqueda /2/users/me posterior al OAuth, pasa tu identificador explícitamente (xurl v1.1.0+):

    xurl auth oauth2 --app mi-app TU_USUARIO
    

    Esto vincula el token a tu identificador y omite la llamada /2/users/me defectuosa.

  6. Establece la aplicación como predeterminada para que todos los comandos la usen:

    xurl auth default mi-app
    
  7. Verifica:

    xurl auth status
    xurl whoami
    

Después de esto, el agente puede usar cualquier comando a continuación sin configuración adicional. Los tokens OAuth 2.0 se renuevan automáticamente.

Error común: Si omites --app mi-app de xurl auth oauth2, el token OAuth se guarda en el perfil de aplicación default incorporado — que no tiene client-id ni client-secret. Los comandos fallarán con errores de autenticación aunque el flujo OAuth parezca exitoso. Si te encuentras con esto, vuelve a ejecutar xurl auth oauth2 --app mi-app y xurl auth default mi-app.

Error de HOME en Docker: En la disposición oficial de Hermes Docker, /opt/data es HERMES_HOME, pero los subprocesos de la herramienta Hermes usan /opt/data/home como HOME. Eso significa que ~/.xurl se resuelve a /opt/data/home/.xurl para los comandos xurl ejecutados por Hermes, no /opt/data/.xurl. Ejecuta la configuración del usuario con el mismo HOME:

HOME=/opt/data/home xurl auth apps add mi-app --client-id TU_CLIENT_ID --client-secret TU_CLIENT_SECRET
HOME=/opt/data/home xurl auth oauth2 --app mi-app TU_USUARIO
HOME=/opt/data/home xurl auth default mi-app TU_USUARIO
HOME=/opt/data/home xurl auth status

Si HOME=/opt/data xurl auth status tiene éxito pero HOME=/opt/data/home xurl auth status no muestra aplicaciones ni tokens, las llamadas de la herramienta Hermes no verán las credenciales.


Referencia Rápida

AcciónComando
Publicarxurl post "¡Hola mundo!"
Responderxurl reply ID_DEL_POST "¡Buen post!"
Citarxurl quote ID_DEL_POST "Mi opinión"
Eliminar un postxurl delete ID_DEL_POST
Leer un postxurl read ID_DEL_POST
Buscar postsxurl search "CONSULTA" -n 10
Quién soyxurl whoami
Buscar un usuarioxurl user @usuario
Timeline principalxurl timeline -n 20
Mencionesxurl mentions -n 10
Like / Unlikexurl like ID_DEL_POST / xurl unlike ID_DEL_POST
Republicar / Deshacerxurl repost ID_DEL_POST / xurl unrepost ID_DEL_POST
Marcar / Desmarcarxurl bookmark ID_DEL_POST / xurl unbookmark ID_DEL_POST
Listar favoritos / likesxurl bookmarks -n 10 / xurl likes -n 10
Seguir / Dejar de seguirxurl follow @usuario / xurl unfollow @usuario
Siguiendo / Seguidoresxurl following -n 20 / xurl followers -n 20
Bloquear / Desbloquearxurl block @usuario / xurl unblock @usuario
Silenciar / Reactivar sonidoxurl mute @usuario / xurl unmute @usuario
Enviar MDxurl dm @usuario "mensaje"
Listar MDsxurl dms -n 10
Subir multimediaxurl media upload ruta/al/archivo.mp4
Estado de multimediaxurl media status MEDIA_ID
Listar aplicacionesxurl auth apps list
Eliminar aplicaciónxurl auth apps remove NOMBRE
Establecer app predeterminadaxurl auth default NOMBRE_APP [USUARIO]
App por solicitudxurl --app NOMBRE /2/users/me
Estado de autenticaciónxurl auth status

Notas:

  • ID_DEL_POST también acepta URLs completas (ej. https://x.com/usuario/status/1234567890) — xurl extrae el ID.
  • Los nombres de usuario funcionan con o sin @ al inicio.

Detalles de Comandos

Publicación

xurl post "¡Hola mundo!"
xurl post "Mira esto" --media-id MEDIA_ID
xurl post "Hilo de fotos" --media-id 111 --media-id 222

xurl reply 1234567890 "¡Buen punto!"
xurl reply https://x.com/usuario/status/1234567890 "¡De acuerdo!"
xurl reply 1234567890 "Mira esto" --media-id MEDIA_ID

xurl quote 1234567890 "Añadiendo mis pensamientos"
xurl delete 1234567890

Lectura y Búsqueda

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

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

Para X Articles, usa el modo API raw en lugar del acceso directo read. xurl read espera un ID de post o URL de post; no pongas read delante de un endpoint /2/tweets/.... Solicita el campo de tweet article e ingiere data.article.plain_text de la respuesta JSON:

xurl --app NOMBRE_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'

Usuarios, Timeline, Menciones

xurl whoami
xurl user elonmusk
xurl user @XDevelopers

xurl timeline -n 25
xurl mentions -n 20

Interacción

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

Grafo Social

xurl follow @XDevelopers
xurl unfollow @XDevelopers

xurl following -n 50
xurl followers -n 50

# Grafo de otro usuario
xurl following --of elonmusk -n 20
xurl followers --of elonmusk -n 20

xurl block @spammer
xurl unblock @spammer
xurl mute @molesto
xurl unmute @molesto

Mensajes Directos

xurl dm @algunusuario "¡Oye, vi tu post!"
xurl dms -n 25

Subida de Multimedia

# Detección automática de tipo
xurl media upload foto.jpg
xurl media upload video.mp4

# Tipo/categoría explícitos
xurl media upload --media-type image/jpeg --category tweet_image foto.jpg

# Los videos necesitan procesamiento del lado del servidor — verifica el estado (o haz polling)
xurl media status MEDIA_ID
xurl media status --wait MEDIA_ID

# Flujo completo
xurl media upload meme.png                  # devuelve id de media
xurl post "jajaja" --media-id MEDIA_ID

Acceso Raw a la API

Los accesos directos cubren operaciones comunes. Para cualquier otra cosa, usa el modo raw estilo curl contra cualquier endpoint de la API v2 de X:

# GET
xurl /2/users/me

# POST con cuerpo JSON
xurl -X POST /2/tweets -d '{"text":"¡Hola mundo!"}'

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

# Cabeceras personalizadas
xurl -H "Content-Type: application/json" /2/some/endpoint

# Forzar streaming
xurl -s /2/tweets/search/stream

# URLs completas también funcionan
xurl https://api.x.com/2/users/me

Banderas Globales

BanderaCortaDescripción
--appUsa una aplicación registrada específica (anula la predeterminada)
--authForzar tipo de autenticación: oauth1, oauth2, o app
--username-uQué cuenta OAuth2 usar (si existen varias)
--verbose-vProhibido en sesiones de agente — filtra cabeceras de autenticación
--trace-tAñade cabecera de traza X-B3-Flags: 1

Streaming

Los endpoints de streaming se detectan automáticamente. Los conocidos incluyen:

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

Fuerza streaming en cualquier endpoint con -s.


Formato de Salida

Todos los comandos devuelven JSON a stdout. La estructura refleja la API v2 de X:

{ "data": { "id": "1234567890", "text": "¡Hola mundo!" } }

Los errores también son JSON:

{ "errors": [ { "message": "No autorizado", "code": 403 } ] }

Flujos de Trabajo Comunes

Publicar con una imagen

xurl media upload foto.jpg
xurl post "¡Mira esta foto!" --media-id MEDIA_ID

Responder a una conversación

xurl read https://x.com/usuario/status/1234567890
xurl reply 1234567890 "Aquí van mis pensamientos..."

Buscar e interactuar

xurl search "tema de interés" -n 10
xurl like ID_DEL_POST_DE_RESULTADOS
xurl reply ID_DEL_POST_DE_RESULTADOS "¡Buen punto!"

Revisar tu actividad

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

Múltiples aplicaciones (credenciales preconfiguradas manualmente)

xurl auth default prod alice               # app prod, usuario alice
xurl --app staging /2/users/me             # uso único contra staging

Manejo de Errores

  • Código de salida distinto de cero en cualquier error.
  • Los errores de API aún se imprimen como JSON a stdout, por lo que puedes analizarlos.
  • Errores de autenticación → haz que el usuario vuelva a ejecutar xurl auth oauth2 fuera de la sesión del agente.
  • Los comandos que necesitan el ID de usuario del llamante (like, repost, bookmark, follow, etc.) lo obtendrán automáticamente mediante /2/users/me. Un fallo de autenticación allí se manifiesta como un error de autenticación.

Flujo de Trabajo del Agente

  1. Verifica los prerrequisitos: xurl --help y xurl auth status.
  2. Comprueba que la app predeterminada tenga credenciales. Analiza la salida de auth status. La app predeterminada está marcada con ▸. Si la app predeterminada muestra oauth2: (none) pero otra app tiene un usuario oauth2 válido, dile al usuario que ejecute xurl auth default <esa-app> para solucionarlo. Este es el error de configuración más común — el usuario añadió una app con un nombre personalizado pero nunca la estableció como predeterminada, por lo que xurl sigue intentando usar el perfil vacío default.
  3. Si la autenticación falta por completo, detente y dirige al usuario a la sección "Configuración Única del Usuario" — NO intentes registrar aplicaciones ni pasar secretos tú mismo.
  4. Comienza con una lectura barata (xurl whoami, xurl user @usuario, xurl search ... -n 3) para confirmar la accesibilidad.
  5. Confirma el post/usuario objetivo y la intención del usuario antes de cualquier acción de escritura (post, reply, like, repost, DM, follow, block, delete).
  6. Usa la salida JSON directamente — cada respuesta ya está estructurada.
  7. Nunca pegues el contenido de ~/.xurl de vuelta en la conversación.

Solución de Problemas

SíntomaCausaSolución
Errores de autenticación después de un flujo OAuth exitosoToken guardado en la app default (sin client-id/secret) en lugar de tu app nombradaxurl auth oauth2 --app mi-app y luego xurl auth default mi-app
unauthorized_client durante OAuthTipo de app configurado como "Native App" en el panel de XCambia a "Web app, automated app or bot" en Configuración de Autenticación de Usuario
UsernameNotFound o 403 en /2/users/me justo después del OAuthX no devuelve el nombre de usuario de forma fiable desde /2/users/meVuelve a ejecutar xurl auth oauth2 --app mi-app TU_USUARIO (xurl v1.1.0+) para pasar el identificador explícitamente
401 en cada solicitudToken caducado o app predeterminada incorrectaVerifica xurl auth status — confirma que ▸ apunta a una app con tokens oauth2
client-forbidden / client-not-enrolledProblema de suscripción en la plataforma XPanel → Apps → Gestionar → Mover al paquete "Pay-per-use" → Entorno de producción
CreditsDepletedSaldo $0 en la API de XCompra créditos (mín. $5) en Consola de Desarrollador → Facturación
media processing failed en subida de imagenLa categoría predeterminada es amplify_videoAñade --category tweet_image --media-type image/png
Dos valores de "Client Secret" en el panel de XError de interfaz de usuario — el primero es en realidad el Client IDConfirma en la página "Keys and tokens"; el ID termina en MTpjaQ

Notas

  • Límites de tasa: X impone límites de tasa por endpoint. Un 429 significa esperar y reintentar. Los endpoints de escritura (post, reply, like, repost) tienen límites más estrictos que los de lectura.
  • Ámbitos (Scopes): Los tokens OAuth 2.0 usan ámbitos amplios que cubren lectura/escritura/DM/offline. La configuración del agente no debe requerir ámbitos más específicos.
  • Tokens sin app: El perfil de app default incorporado no tiene client-id ni client-secret, por lo que solo puede usar OAuth 1.0 o Bearer Token. Las apps registradas con credenciales pueden usar OAuth 2.0 con renovación automática o OAuth 1.0.
  • Versión de la API: xurl solo apunta a la API v2 de X ("X API v2"). Los endpoints v1.1 no son compatibles. Casi todas las funciones modernas de X están disponibles en v2, pero algunas API heredadas (transmisión de anuncios, analytics v1.1) pueden no funcionar.

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 relacionados