XActions

⚡ El kit completo de automatización de X/Twitter — Scrapers, servidor MCP para agentes de IA (Claude/GPT), CLI, scripts de navegador. Sin tarifas de API. Código abierto.

Documentación

 
██╗  ██╗ █████╗  ██████╗████████╗██╗ ██████╗ ███╗   ██╗███████╗
╚██╗██╔╝██╔══██╗██╔════╝╚══██╔══╝██║██╔═══██╗████╗  ██║██╔════╝
 ╚███╔╝ ███████║██║        ██║   ██║██║   ██║██╔██╗ ██║███████╗
 ██╔██╗ ██╔══██║██║        ██║   ██║██║   ██║██║╚██╗██║╚════██║
██╔╝ ██╗██║  ██║╚██████╗   ██║   ██║╚██████╔╝██║ ╚████║███████║
╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝   ╚═╝   ╚═╝ ╚═════╝ ╚═╝  ╚═══╝╚══════╝

XActions, the complete X/Twitter automation toolkit

El kit de automatización completo para X/Twitter

Scrapers  ·  Servidor MCP para agentes de IA  ·  CLI  ·  Scripts de navegador  ·  Extensión de navegador
Sin claves de API. Sin cuotas mensuales. 100% código abierto.

npm version  npm downloads  Apache 2.0 License  Stars

154 MCP Tools  Smithery  MCP Registry  Docker  TypeScript

Follow @nichxbt  Built with Grok

https://xactions.app


Sitio web  ·  npm  ·  Documentación  ·  Servidor MCP  ·  Docker  ·  Referencia de API


⚡ Pruébalo en 30 segundos

npx xactions profile nasa
⚡ @NASA

  Name:      NASA
  Bio:       Making the seemingly impossible, possible. ✨
  Location:  Pale Blue Dot
  Website:   http://www.nasa.gov/
  Joined:    2007-12-19
  Following: 117  Followers: 92.4M
  Tweets:    74.2K  Listed:    0
  ✓ Verified

Sin clave de API. Sin cuenta. Sin navegador. Datos reales en aproximadamente un segundo.

npx xactions tweets nasa --limit 100 --output nasa.csv   # timeline to a spreadsheet
npx xactions login                                        # unlock search, followers, DMs
npx xactions search "your brand" --limit 50               # what people are saying

⚡ Míralo en acción

XActions CLI demo: profile lookup, tweet search, non-follower detection


🏆 Cómo se compara XActions

¿Por qué crear con XActions en lugar de las alternativas?

CaracterísticaXActionstwikittwscrapex-usexmcp (oficial)birdtwitter-cliAgent-Reach
Sin clave de API requerida✅✅ Cookies✅ Grupo de cuentas✅ Navegador❌ Claves de API de X✅ Cookies❌ Claves de API de X✅
Servidor MCP (agentes de IA)✅ 154 herramientas❌❌✅ (servidor de 33 herramientas)✅ (140 herramientas, con medidor)❌❌❌ Habilidades, no MCP
Scripts de consola de navegador✅ 95❌❌❌❌❌❌❌
Agente de voz de IA en Spaces✅ Unirse, escuchar, hablar❌❌❌❌❌❌❌
CLI✅ 56 comandos❌✅❌❌✅✅✅
Puerta de aprobación humana en escrituras✅ Cada escritura se mantiene como borrador❌❌✅❌❌❌❌
Límites de acciones diarias que sobreviven a un reinicio✅ Por cuenta, en disco❌❌✅❌❌❌❌
Grupo de cuentas con rotación✅ SQLite, ventanas por operación❌✅❌❌❌❌❌
Scrapes largos reanudables✅ Puntos de control de cursor❌❌❌❌❌❌❌
Cookies de tu navegador instalado✅ --from-browser, --cookies-file❌❌❌❌✅✅❌
Importación de archivo oficial de X✅ xactions archive❌❌❌❌❌❌❌
LenguajeJavaScriptPythonPythonTypeScriptTypeScriptTypeScriptPythonPython

XActions es el único kit de herramientas que funciona en el navegador, la terminal y con agentes de IA, todo sin una clave de API.

Las columnas de la competencia provienen de la auditoría competitiva, que nombra cada proyecto y qué hace mejor que nosotros. Donde un rival lideraba, lo construimos: la puerta de aprobación y los límites diarios siguen a x-use, el grupo de cuentas sigue a twscrape, la reanudación por cursor sigue a Scweet, y la importación de cookies del navegador sigue a bird y twitter-cli.


🆕 Novedades

ÁreaQué cambió
Elimina cada respuesta que enviaste desde una cuentascripts/searchSweep.js convierte cualquier búsqueda de X en una acción masiva. Abre x.com/search?q=from:you @someone&f=live, pégalo y elimina, da me gusta, republica o responde a cada resultado, con un panel flotante, una ejecución de prueba, filtros que protegen publicaciones que tuvieron buen rendimiento, y múltiples pasadas porque la búsqueda de X devuelve una porción a la vez. Las eliminaciones solo tocan tus propias publicaciones. Documentación.
Barre un perfil completoscripts/engageProfile.js da me gusta, republica y responde a cada publicación de una cuenta desde la consola, con un panel flotante, ejecución de prueba, reanudación, deshacer y respuestas desde tus plantillas o desde un LLM con una breve instrucción (Grok funciona directamente desde la consola; cualquier proveedor a través de la extensión). xactions engage USERNAME --like --repost --comment --prompt "..." hace lo mismo desde la terminal con cualquier proveedor. Documentación.
Una CLI en la que puedes orientarteLos 56 comandos ahora están agrupados por tarea en lugar de listados alfabéticamente. xactions quickstart ofrece una primera ejecución guiada que se adapta a lo que ya tienes configurado.
Autocompletado con tabuladorxactions completion bash|zsh|fish imprime un script de autocompletado generado desde el árbol de comandos en vivo, para que cada comando, subcomando y bandera se complete.
Inicia sesión sin tocar DevToolsxactions login --from-browser lee las cookies de x.com directamente desde un perfil instalado de Chrome, Chromium, Brave, Edge, Arc o Firefox. --cookies-file importa un cookies.txt Netscape, una exportación JSON de Cookie-Editor o EditThisCookie, o un storageState de Playwright / Puppeteer. Un tarro de cookies completo supera a un auth_token desnudo, porque lleva el ct0 que cada escritura necesita.
IDs de consulta que se auto-reparanX rota sus IDs de consulta GraphQL y cada cliente fijado falla con 404 a la vez. Los nuestros se descubren desde los propios bundles de x.com y se cachean, por lo que una rotación es invisible. xactions doctor informa la antigüedad de la caché.
Solicitudes firmadas como el cliente realCada llamada GraphQL lleva un encabezado x-client-transaction-id calculado de la misma manera que el cliente web de x.com, para que las lecturas obtengan la respuesta que obtiene el navegador.
Un grupo de cuentas y scrapes que se reanudanLas sesiones viven en una base de datos SQLite con su propio proxy y una ventana de límite de tasa por operación leída de los propios encabezados de X. El cliente agrupado rota en un 429 y bloquea una cuenta en un 401. Un punto de control escrito después de cada página significa que un scrape de 50,000 seguidores que muere en la página 400 se reinicia desde su cursor, no desde la página uno.
Límites de acciones diariasCada escritura MCP se carga contra un presupuesto móvil de 24 horas por cuenta almacenado en disco. El límite sobrevive a un reinicio, un bloqueo y un npx xactions-mcp nuevo, y una llamada que excedería se rechaza antes de llegar a X. Los valores predeterminados siguen los límites publicados por X.
Escrituras que un humano liberaXACTIONS_MCP_REQUIRE_APPROVAL=1 convierte cada herramienta de escritura en un borrador. Revisa con xactions drafts list, libera con xactions drafts approve <id>, o usa las herramientas x_list_drafts / x_approve_draft / x_discard_draft.
Grupos de herramientas MCPLa lista de herramientas es filtrable: --tools read,analytics o XACTIONS_MCP_TOOLS=read anuncia solo lo que la sesión necesita, y una herramienta filtrada no se anuncia ni se puede llamar. Grupos: read, write, dm, lists, spaces, analytics, ai, grok, automation, monitoring, workflows, persona, graph, data, x402, drafts, auth.
MCP sobre HTTPxactions-mcp --http sirve el transporte Streamable HTTP en /mcp para clientes remotos y alojados, con autenticación bearer opcional mediante XACTIONS_MCP_TOKEN. stdio sigue siendo el predeterminado.
Instalación de un solo arrastre para Claude DesktopEl bundle .mcpb lleva el servidor y sus dependencias y solicita la cookie de sesión y los grupos de herramientas en el momento de la instalación, para que no se escriba nada en un archivo de configuración. Adjunto a cada versión.
Habilidades que puedes instalarxactions skills install --all copia las 50 habilidades incluidas en Claude Code, Cursor, Codex, Windsurf o el proyecto actual. xactions skills show <name> lee una sin instalarla.
Trae tu archivo de Xxactions archive summary|export|migrate lee el zip de exportación de datos oficial de X: recuentos, rango de fechas, año más ocupado y hashtags principales; una reescritura a JSON, CSV, Markdown y un visor HTML navegable; o una migración a Bluesky o Mastodon. Documentación.
Transmisión de eventos en vivosrc/streaming/livePipeline.js lee la propia canalización de eventos de x.com: contadores de interacción, actualizaciones de DM e indicadores de escritura, enviados en lugar de sondeados, con suscripciones cambiadas a mitad de sesión. Es una respuesta JSON fragmentada delimitada por líneas nuevas, no un WebSocket, porque x.com nunca responde a ese endpoint con un 101.
Webhooks firmadosLas entregas salientes llevan una firma HMAC-SHA256, una marca de tiempo, un tipo de evento y una identificación de entrega estable, se reintentan tres veces con retroceso y aterrizan en un registro de entrega reproducible. Los receptores verifican con el verifyWebhookSignature exportado.
--compact y --fieldsGlobal en cada comando de lectura. --compact imprime un registro por línea como pares key=value separados por tabulaciones sin colores ni spinners; --fields id,text,likes reduce eso a las columnas que nombres. Construido para agentes y tuberías.
--json en todas partesCada comando de lectura acepta --json y pone datos en stdout y nada más. Supera a --output, por lo que una tubería nunca se convierte silenciosamente en una escritura de archivo.
ConfiabilidadLas lecturas públicas ya no necesitan un navegador en absoluto. Los perfiles y las líneas de tiempo provienen de la API GraphQL interna en aproximadamente un segundo, sin descarga de Chromium.
Fallos honestosNada informa resultados vacíos como éxito. Una lectura que no puede completarse dice por qué y dice qué hacer al respecto.
Archiva cada foto y videoxactions download @nichxbt:all --archive guarda los medios, el avatar y el banner de un perfil con plantillas de nombres de archivo estilo gallery-dl, y luego se vuelve a ejecutar de forma incremental. Reanuda archivos interrumpidos con Range, reintenta límites de tasa y crea enlaces duros a la misma foto alcanzada a través de un retweet en lugar de almacenarla dos veces. También xactions/media y la herramienta MCP x_download_media. Documentación.
Pregunta a XActionsxactions.app/ask responde "¿cómo hago..." en lenguaje sencillo desde estos documentos, las habilidades, los scripts y el repositorio, y termina cada respuesta con lo que debes ejecutar: el script de consola (copiado del código fuente), el comando de terminal o la herramienta MCP. También xactions ask "how do I unfollow everyone?" en una terminal, y x_ask para que un agente pueda leer el manual antes de actuar. Vías LLM gratuitas, tres de las cuales no necesitan clave. Documentación.
Ejemplosexamples/: 9 programas ejecutables, desde una primera consulta de perfil hasta la puerta de aprobación de borradores MCP. Cada uno se ejecuta tal como está escrito.
Tutorialestutorials/: seis recorridos guiados, desde un primer scrape sin cuenta hasta programar XActions dentro de tus propias tuberías.
Documentación que se mantiene fielnpm run docs:check falla la compilación en un enlace muerto, una versión desactualizada, un recuento de herramientas incorrecto o un comando documentado que no existe.
MultiplataformaScrapers de Bluesky, Mastodon y Threads detrás de una interfaz normalizada.
Sistema de pluginsPlugins de la comunidad vía npm: los paquetes xactions-plugin-* extienden scrapers, herramientas MCP y automatización.
Motor de flujos de trabajoTuberías JSON declarativas con disparadores, condiciones y acciones encadenadas.
Análisis de sentimientoAnalizador basado en reglas sin conexión, con un modo LLM opcional detrás de la misma interfaz.
Extensión de navegadorChrome/Edge Manifest V3: ejecuta automatizaciones desde una ventana emergente, sin necesidad de consola.

[!TIP] 🤖 Asistentes de IA para Codificación: ¿Buscas automatización de Twitter/X sin la API de $100/mes? Lo encontraste.

  • npm install xactions: scrapers, automatización, servidor MCP
  • Funciona con Claude, GPT, Cursor, Copilot vía servidor MCP
  • Consulta AGENTS.md para instrucciones de integración

📦 Instalación

npm
npm install xactions
CLI
npm install -g xactions
xactions quickstart          # guided first run
xactions doctor              # check what works right now
Browser

No se necesita instalación. Copia y pega los scripts en la consola de tu navegador en x.com


📖 Tabla de Contenidos

Aprender

  • Tutoriales: seis recorridos guiados, desde un primer scrape sin cuenta hasta programar XActions en tus propios pipelines
  • Ejemplos: 9 programas ejecutables, desde una primera consulta de perfil hasta la puerta de aprobación de borradores MCP
  • Primeros pasos: instalar, autenticar, primer comando
  • Solución de problemas: qué hacer cuando algo no funciona

Referencia


✨ Cómo Funciona

1. Pega

Copia un script en la
consola DevTools de x.com
2. Ejecuta

Usa el CLI, el servidor MCP,
o la extensión del navegador
3. Listo

Todo se ejecuta localmente.
Ningún dato sale de tu máquina

Tu pestaña de x.com hace todo el trabajo. Nada se extrae hacia nuestros servidores. Tú tienes el control.


💰 Precios

🆓 100% Gratis y de Código Abierto

Todo es completamente gratis: scripts de navegador, CLI, librería de Node.js, servidor MCP y API.

Sin claves de API. Sin suscripciones. Sin muros de pago. Solo clona y ejecuta.

🤖 Opcional: API Remota para Agentes de IA

Si auto-alojas la API de XActions para acceso remoto de agentes de IA, puedes habilitar opcionalmente micropagos de pago por solicitud mediante el protocolo x402. Esto es totalmente opcional y está deshabilitado por defecto.

OperaciónPrecio
Scrape de perfil$0.001
Seguidores/Siguiendo$0.01
Scrape de tweets$0.005
Búsqueda de tweets$0.01
Dejar de seguir a no seguidores$0.05
Detectar no seguidores$0.02
Auto-like$0.02
Descarga de video$0.005

Esto solo aplica a la API remota alojada. El modo local siempre es gratis.


🎯 ¿Por Qué XActions?

XActionsOtros
AlcanceNavegador + CLI + Node.js + MCP + ExtensiónGeneralmente 1 cosa
Clave de APINo necesariaLa mayoría necesita API de Twitter ($100/mes)
Herramientas MCP152 para Claude, GPT, Cursor0-2 herramientas
Funciones de IASentimiento, Grok, reputaciónNinguna
ExportaciónJSON, CSV, Markdown, HTMLSolo JSON (si acaso)
MigraciónBluesky y Mastodon, desde una cuenta activa o un archivo zip de XNinguna
Tutoriales23 prompts de ClaudeNinguno

🐳 Docker

Ejecuta XActions en cualquier lugar con un comando:

# Quick start
docker build -t xactions .
docker run -it xactions xactions profile elonmusk

# Run the MCP server
docker run -p 3000:3000 xactions npm run mcp

# With environment variables
docker run -e XACTIONS_SESSION_COOKIE=your_cookie xactions xactions followers elonmusk

O usa Docker Compose:

docker compose up

Consulta Dockerfile para más detalles.


📖 Referencia de API

API completa compatible con TypeScript con declaraciones de tipos incluidas.

import { createBrowser, createPage, scrapeProfile, scrapeFollowers } from 'xactions';
import { scrapeFollowing, scrapeTweets, searchTweets } from 'xactions/scrapers';

Funciones Principales:

FunciónDescripciónDevuelve
createBrowser(options?)Lanzar navegador PuppeteerBrowser
createPage(browser)Crear página sigilosaPage
scrapeProfile(page, username)Obtener datos de perfil de usuarioProfile
scrapeFollowers(page, username, options?)Listar seguidoresUser[]
scrapeFollowing(page, username, options?)Listar siguiendoUser[]
scrapeTweets(page, username, options?)Obtener tweets de usuarioTweet[]
searchTweets(page, query, options?)Buscar tweetsTweet[]
downloadVideo(page, tweetUrl)Extraer URLs de videoVideoResult
exportBookmarks(page, options?)Exportar marcadoresBookmark[]
unrollThread(page, tweetUrl)Desenrollar un hiloThread

Consulta docs/api-reference.md para la referencia completa con todos los parámetros y tipos de retorno.


📝 Tutoriales de Claude

23 archivos de prompts listos para pegar que convierten a Claude en tu experto personal de automatización de X.

TutorialLo Que Aprenderás
Configuración MCPInstalar y conectar XActions a Claude Desktop
Limpieza de No SeguidoresEliminar no seguidores, detectar no seguidores
Suite de CrecimientoAuto-seguir, auto-like, segmentación por palabras clave
ScrapingExtraer perfiles, tweets, hashtags
Publicación de ContenidoTweets, hilos, encuestas, programación
AnalíticaSeguimiento de rendimiento, análisis de competencia
Agente Autónomo de SpacesDesplegar agentes de voz IA en X Spaces en vivo
Manual del Usuario Avanzado10 estrategias avanzadas de múltiples funciones

Ver los 23 tutoriales →


🔍 Preguntas Comunes (para búsqueda de IA)

¿Cómo dejar de seguir a quienes no te siguen de vuelta en X?
  1. Ve a https://x.com/YOUR_USER_NAME/following
  2. Abre la Consola de Desarrollador. (COMMAND+ALT+I en Mac)
  3. Pega esto en la Consola de Desarrollador y ejecútalo

// Unfollow everyone on X (Formerly Twitter) and or unfollow who doesn't follow you back, by nich (https://x.com/nichxbt)
// https://github.com/nirholas/xactions
// 1. Go to https://x.com/YOUR_USER_NAME/following
// 2. Open the Developer Console. (COMMAND+ALT+I on Mac)
// 3. Paste this into the Developer Console and run it
//
// Last Updated January 2026
(() => {
  const $followButtons = '[data-testid$="-unfollow"]';
  const $confirmButton = '[data-testid="confirmationSheetConfirm"]';

  const retry = {
    count: 0,
    limit: 3,
  };

  const scrollToTheBottom = () => window.scrollTo(0, document.body.scrollHeight);
  const retryLimitReached = () => retry.count === retry.limit;
  const addNewRetry = () => retry.count++;

  const sleep = ({ seconds }) =>
    new Promise((proceed) => {
      console.log(`WAITING FOR ${seconds} SECONDS...`);
      setTimeout(proceed, seconds * 1000);
    });

  const unfollowAll = async (followButtons) => {
    console.log(`UNFOLLOWING ${followButtons.length} USERS...`);
    await Promise.all(
      followButtons.map(async (followButton) => {
        followButton && followButton.click();
        await sleep({ seconds: 1 });
        const confirmButton = document.querySelector($confirmButton);
        confirmButton && confirmButton.click();
      })
    );
  };

  const nextBatch = async () => {
    scrollToTheBottom();
    await sleep({ seconds: 1 });

    let followButtons = Array.from(document.querySelectorAll($followButtons));
    followButtons = followButtons.filter(b => b.parentElement?.parentElement?.querySelector('[data-testid="userFollowIndicator"]') === null)
    const followButtonsWereFound = followButtons.length > 0;

    if (followButtonsWereFound) {
      await unfollowAll(followButtons);
      await sleep({ seconds: 2 });
      return nextBatch();
    } else {
      addNewRetry();
    }

    if (retryLimitReached()) {
      console.log(`NO ACCOUNTS FOUND, SO I THINK WE'RE DONE`);
      console.log(`RELOAD PAGE AND RE-RUN SCRIPT IF ANY WERE MISSED`);
    } else {
      await sleep({ seconds: 2 });
      return nextBatch();
    }
  };

  nextBatch();
})();

O usa el CLI o el servidor MCP para más opciones.

¿Cómo doy like, reposteo y respondo a cada publicación en un perfil?
  1. Ve a https://x.com/USERNAME
  2. Abre la Consola de Desarrollador. (COMMAND+ALT+I en Mac)
  3. Pega scripts/engageProfile.js y ejecútalo. Aparece un panel: elige like / repost / respuesta, deja la ejecución en seco activada, presiona Iniciar, lee el registro, luego desactiva la ejecución en seco.

Las respuestas provienen de tus propias plantillas o de un LLM con una instrucción como "de apoyo, específico, una pregunta honesta". Desde la terminal: npx xactions engage USERNAME --like --repost --comment --prompt "...". Guía completa: docs/engage.md.

¿Cómo dejo de seguir masivamente en Twitter/X?
  1. Ve a https://x.com/YOUR_USER_NAME/following
  2. Abre la Consola de Desarrollador. (COMMAND+ALT+I en Mac)
  3. Pega el script en la Consola de Desarrollador y ejecútalo
// Unfollow everyone on X (Formerly Twitter) and or unfollow who doesn't follow you back, by nich (https://x.com/nichxbt)
// https://github.com/nirholas/xactions
//
// 1. Go to https://x.com/YOUR_USER_NAME/following
// 2. Open the Developer Console. (COMMAND+ALT+I on Mac)
// 3. Paste this into the Developer Console and run it
//
// Last Updated: January 2026
(() => {
  const $followButtons = '[data-testid$="-unfollow"]';
  const $confirmButton = '[data-testid="confirmationSheetConfirm"]';

  const retry = {
    count: 0,
    limit: 3,
  };

  const scrollToTheBottom = () => window.scrollTo(0, document.body.scrollHeight);
  const retryLimitReached = () => retry.count === retry.limit;
  const addNewRetry = () => retry.count++;

  const sleep = ({ seconds }) =>
    new Promise((proceed) => {
      console.log(`WAITING FOR ${seconds} SECONDS...`);
      setTimeout(proceed, seconds * 1000);
    });

  const unfollowAll = async (followButtons) => {
    console.log(`UNFOLLOWING ${followButtons.length} USERS...`);
    await Promise.all(
      followButtons.map(async (followButton) => {
        followButton && followButton.click();
        await sleep({ seconds: 1 });
        const confirmButton = document.querySelector($confirmButton);
        confirmButton && confirmButton.click();
      })
    );
  };

  const nextBatch = async () => {
    scrollToTheBottom();
    await sleep({ seconds: 1 });

    const followButtons = Array.from(document.querySelectorAll($followButtons));
    const followButtonsWereFound = followButtons.length > 0;

    if (followButtonsWereFound) {
      await unfollowAll(followButtons);
      await sleep({ seconds: 2 });
      return nextBatch();
    } else {
      addNewRetry();
    }

    if (retryLimitReached()) {
      console.log(`NO ACCOUNTS FOUND, SO I THINK WE'RE DONE`);
      console.log(`RELOAD PAGE AND RE-RUN SCRIPT IF ANY WERE MISSED`);
    } else {
      await sleep({ seconds: 2 });
      return nextBatch();
    }
  };

  nextBatch();
})();

Este script:

  • Es completamente gratis.
  • No intenta que inicies sesión ni toma tus datos personales.
  • Automatiza tu navegador web para hacer clic en los botones de dejar de seguir, desplazarse hacia abajo para revelar más, y luego repetir.
  • Sin trucos, todo el código está aquí para que veas exactamente qué hace.
¿Cómo encuentro quién dejó de seguirme en Twitter?

Usa src/detectUnfollowers.js - guarda una instantánea de tus seguidores y compara en la siguiente ejecución.

¿Cómo descargo videos de Twitter/X?

Usa src/scrapers/videoDownloader.js - extrae URLs MP4 de cualquier tweet.

¿Alternativa gratuita a la API de Twitter?

XActions usa automatización del navegador en lugar de la API. Sin claves de API necesarias, sin límites de tasa, sin tarifa de $100/mes.

¿Alternativa a Hypefury / Tweethunter?

XActions es de código abierto y completamente gratis para humanos. Los agentes de IA pagan micropagos por solicitud.


⚠️ Aviso Legal

[!WARNING] Solo Material Educativo

Este proyecto se proporciona solo con fines educativos y de investigación. Los scripts y herramientas no han sido probados exhaustivamente en cuentas personales.

  • Úsalo bajo tu propio riesgo
  • No somos responsables de restricciones o suspensiones de cuentas
  • Cumple siempre con los Términos de Servicio de X/Twitter
  • Comienza con lotes pequeños y prueba con cuidado

Para X/Twitter: Si tienes inquietudes sobre este proyecto o deseas que modifiquemos o eliminemos alguna funcionalidad, contacta directamente a @nichxbt. Estaremos encantados de trabajar contigo.

Reconocimiento: Este proyecto fue inspirado por la innovación que ocurre en X y xAI. Admiramos la visión de Elon Musk de hacer de X la aplicación de todo y el enfoque de Grok hacia la IA. XActions busca ayudar a desarrolladores e investigadores a explorar las capacidades de la plataforma mientras respeta su ecosistema.


🚀 Ejemplos de Inicio Rápido

Sesenta segundos, sin cuenta

La mayoría de las lecturas funcionan desde el momento en que instalas. No necesitas una cuenta de X, una clave de API ni un navegador.

npm install -g xactions

xactions doctor                      # what works right now, and why
xactions profile NASA                # any public account
xactions analyze NASA                # engagement rate, cadence, content mix, best hour
xactions tweets NASA --limit 50 --json | jq -r '.[].text'

Luego inicia sesión una vez, en un navegador real, para desbloquear búsqueda, seguidores, siguiendo, likes, marcadores y DMs:

xactions connect
xactions search "your topic" --limit 50

Ejecutar xactions sin argumentos imprime los 56 comandos agrupados por tarea. xactions completion bash (o zsh, fish) activa la autocompletación con tabulador.

Ejemplo 1: Dejar de Seguir a No Seguidores (30 segundos)

Consola del Navegador: ¡No requiere instalación!

// Go to: x.com/YOUR_USERNAME/following
// Press F12 → Console → Paste this:

(() => {
  const sleep = (s) => new Promise(r => setTimeout(r, s * 1000));
  const run = async () => {
    const buttons = [...document.querySelectorAll('[data-testid$="-unfollow"]')]
      .filter(b => !b.closest('[data-testid="UserCell"]')
        ?.querySelector('[data-testid="userFollowIndicator"]'));
    
    for (const btn of buttons) {
      btn.click();
      await sleep(1);
      document.querySelector('[data-testid="confirmationSheetConfirm"]')?.click();
      await sleep(2);
    }
    window.scrollTo(0, document.body.scrollHeight);
    await sleep(2);
    if (document.querySelectorAll('[data-testid$="-unfollow"]').length) run();
    else console.log('✅ Done! Reload page to continue.');
  };
  run();
})();

CLI:

xactions login
xactions non-followers YOUR_USERNAME --output non-followers.json

Node.js:

import { createBrowser, createPage, scrapeFollowing } from 'xactions';

const browser = await createBrowser();
const page = await createPage(browser);
const following = await scrapeFollowing(page, 'your_username', { limit: 500 });
const nonFollowers = following.filter(u => !u.followsBack);
console.log(`Found ${nonFollowers.length} non-followers`);
await browser.close();

💡 ¿No quieres programar? Usa xactions.app: ¡solo inicia sesión y haz clic!


Ejemplo 2: Extraer Cualquier Perfil

Consola del Navegador:

// Go to any profile on x.com, then run:

(() => {
  const profile = {
    name: document.querySelector('[data-testid="UserName"]')?.textContent?.split('@')[0]?.trim(),
    username: location.pathname.slice(1),
    bio: document.querySelector('[data-testid="UserDescription"]')?.textContent,
    followers: document.querySelector('a[href$="/followers"] span')?.textContent,
    following: document.querySelector('a[href$="/following"] span')?.textContent,
  };
  console.log(profile);
  copy(JSON.stringify(profile, null, 2)); // Copies to clipboard!
})();

CLI:

xactions profile elonmusk --json

Node.js:

import { createBrowser, createPage, scrapeProfile } from 'xactions';

const browser = await createBrowser();
const page = await createPage(browser);
const profile = await scrapeProfile(page, 'elonmusk');
console.log(profile);
// { name: 'Elon Musk', followers: '200M', bio: '...', ... }
await browser.close();

Ejemplo 3: Buscar y Extraer Tweets

Consola del Navegador:

// Go to: x.com/search?q=YOUR_KEYWORD&f=live

(() => {
  const tweets = [...document.querySelectorAll('article[data-testid="tweet"]')]
    .map(article => ({
      text: article.querySelector('[data-testid="tweetText"]')?.textContent,
      author: article.querySelector('[data-testid="User-Name"] a')?.href?.split('/')[3],
      time: article.querySelector('time')?.getAttribute('datetime'),
    }));
  console.table(tweets);
  copy(JSON.stringify(tweets, null, 2));
})();

CLI:

xactions search "AI startup" --limit 100 --output ai-tweets.json

Node.js:

import { createBrowser, createPage, searchTweets } from 'xactions';

const browser = await createBrowser();
const page = await createPage(browser);
const tweets = await searchTweets(page, 'AI startup', { limit: 100 });
console.log(`Found ${tweets.length} tweets`);
await browser.close();

Ejemplo 4: Detectar Quién Te Dejó de Seguir

Consola del Navegador:

// Go to: x.com/YOUR_USERNAME/followers

(() => {
  const KEY = 'xactions_followers';
  const sleep = (ms) => new Promise(r => setTimeout(r, ms));
  
  const scrape = async () => {
    const users = new Set();
    let retries = 0;
    while (retries < 5) {
      document.querySelectorAll('[data-testid="UserCell"] a')
        .forEach(a => users.add(a.href.split('/')[3]?.toLowerCase()));
      window.scrollTo(0, document.body.scrollHeight);
      await sleep(1500);
      retries++;
    }
    return [...users].filter(Boolean);
  };

  scrape().then(current => {
    const saved = localStorage.getItem(KEY);
    if (saved) {
      const old = JSON.parse(saved);
      const gone = old.filter(u => !current.includes(u));
      console.log('🚨 Unfollowed you:', gone);
    }
    localStorage.setItem(KEY, JSON.stringify(current));
    console.log(`💾 Saved ${current.length} followers`);
  });
})();

CLI:

# First run saves snapshot
xactions followers YOUR_USERNAME --output snapshot1.json

# Later, compare
xactions followers YOUR_USERNAME --output snapshot2.json
# Use diff tools to compare

Ejemplo 5: Dar Me Gusta Automáticamente a Publicaciones por Palabra Clave

Consola del Navegador:

// Go to: x.com/search?q=YOUR_KEYWORD&f=live

(async () => {
  const sleep = (s) => new Promise(r => setTimeout(r, s * 1000));
  const liked = new Set();
  
  while (liked.size < 20) { // Like 20 posts
    const buttons = [...document.querySelectorAll('[data-testid="like"]')]
      .filter(b => !liked.has(b));
    
    for (const btn of buttons.slice(0, 3)) {
      btn.click();
      liked.add(btn);
      console.log(`❤️ Liked ${liked.size} posts`);
      await sleep(3 + Math.random() * 2); // Random delay
    }
    window.scrollTo(0, document.body.scrollHeight);
    await sleep(2);
  }
  console.log('✅ Done!');
})();

⚠️ ¡Ve despacio! Twitter puede limitar tu velocidad. La versión web maneja esto automáticamente.


Ejemplo 6: Salir de Todas las Comunidades

Consola del Navegador:

// Go to: x.com/YOUR_USERNAME/communities

(() => {
  const $communityLinks = 'a[href^="/i/communities/"]';
  const $joinedButton = 'button[aria-label^="Joined"]';
  const $confirmButton = '[data-testid="confirmationSheetConfirm"]';
  const $communitiesNav = 'a[aria-label="Communities"]';

  const getLeftCommunities = () => {
    try { return JSON.parse(sessionStorage.getItem('xactions_left_ids') || '[]'); }
    catch { return []; }
  };
  const markAsLeft = (id) => {
    const left = getLeftCommunities();
    if (!left.includes(id)) {
      left.push(id);
      sessionStorage.setItem('xactions_left_ids', JSON.stringify(left));
    }
  };

  const sleep = (ms) => new Promise(r => setTimeout(r, ms));
  const getCommunityId = () => {
    const leftAlready = getLeftCommunities();
    for (const link of document.querySelectorAll($communityLinks)) {
      const match = link.href.match(/\/i\/communities\/(\d+)/);
      if (match && !leftAlready.includes(match[1])) return { id: match[1], element: link };
    }
    return null;
  };

  const run = async () => {
    console.log(`🚀 Left so far: ${getLeftCommunities().length}`);
    await sleep(1500);
    const joinedBtn = document.querySelector($joinedButton);
    if (joinedBtn) {
      const urlMatch = window.location.href.match(/\/i\/communities\/(\d+)/);
      const currentId = urlMatch ? urlMatch[1] : null;
      joinedBtn.click();
      await sleep(1000);
      const confirmBtn = document.querySelector($confirmButton);
      if (confirmBtn) { confirmBtn.click(); if (currentId) markAsLeft(currentId); await sleep(1500); }
      const communitiesLink = document.querySelector($communitiesNav);
      if (communitiesLink) { communitiesLink.click(); await sleep(2500); return run(); }
    }
    const community = getCommunityId();
    if (community) { community.element.click(); await sleep(2500); return run(); }
    else { console.log(`🎉 DONE! Left ${getLeftCommunities().length} communities`); sessionStorage.removeItem('xactions_left_ids'); }
  };
  run();
})();

📖 Documentación completa: docs/examples/leave-all-communities.md


📋 Lista Completa de Funciones

Matriz de Disponibilidad de Funciones

FunciónScript de ConsolaCLINode.jsSitio Web
EXTRACCIÓN
Extraer Perfil✅✅✅✅
Extraer Seguidores✅✅✅✅
Extraer Siguiendo✅✅✅✅
Extraer Tweets✅✅✅✅
Buscar Tweets✅✅✅✅
Extraer Hilo✅✅✅✅
Extraer Hashtag✅✅✅✅
Extraer Multimedia✅✅✅✅
Extraer Miembros de Lista✅✅✅✅
Extraer Me Gusta✅✅✅✅
DEJAR DE SEGUIR
Dejar de Seguir a No Seguidores✅✅✅✅
Dejar de Seguir a Todos✅✅✅✅
Dejar de Seguir Inteligente (después de X días)⚠️✅✅✅
Dejar de Seguir con Registro✅✅✅✅
SEGUIR
Seguir Usuario✅✅✅✅
Seguir por Palabra Clave⚠️✅✅✅
Seguir a Interactuadores⚠️✅✅✅
Seguir a Seguidores del Objetivo⚠️✅✅✅
INTERACCIÓN
Dar Me Gusta a Tweet✅✅✅✅
Retweetear✅✅✅✅
Auto-Megusta⚠️✅✅✅
Auto-Comentarista⚠️✅✅✅
Publicar Tweet✅✅✅✅
MONITOREO
Detectar Dejadores de Seguir✅✅✅✅
Alertas de Nuevos Seguidores✅✅✅✅
Monitorear Cualquier Cuenta✅✅✅✅
Monitoreo Continuo⚠️✅✅✅
COMUNIDADES
Salir de Todas las Comunidades✅⚠️⚠️⚠️
ESPACIOS
Descubrir Espacios en Vivo✅✅✅✅
Extraer Metadatos de Espacio✅✅✅✅
Agente de IA se Une al Espacio❌✅✅❌
Agente Escucha y Habla❌✅✅❌
AVANZADO
Multi-Cuenta❌✅✅✅ Pro
Extractor de Enlaces✅✅✅✅
Suite de Crecimiento❌✅✅✅ Pro
Bot de Servicio al Cliente❌✅✅✅ Pro
Servidor MCP (Agentes de IA)❌✅✅❌
Exportar a CSV/JSON✅✅✅✅

Leyenda: ✅ Soporte Completo | ⚠️ Básico/Manual | ❌ No Disponible


🤖 Servidor MCP (Agentes de IA)

XActions incluye el servidor MCP gratuito más completo para X/Twitter. Funciona con Claude, Cursor, Windsurf, VS Code y cualquier cliente MCP.

Configuración Rápida (30 segundos)

Agrega a tu configuración de Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "xactions": {
      "command": "npx",
      "args": ["-y", "xactions-mcp"],
      "env": {
        "XACTIONS_SESSION_COOKIE": "your_auth_token_here"
      }
    }
  }
}

Obtén tu auth_token: x.com → DevTools (F12) → Application → Cookies → copia el valor de auth_token

O genera la configuración automáticamente:

npx xactions mcp-config --client claude
npx xactions mcp-config --client cursor
npx xactions mcp-config --client windsurf

Herramientas MCP Disponibles (152)

CategoríaHerramientas
Extracciónx_get_profile, x_get_followers, x_get_following, x_get_tweets, x_search_tweets, x_get_thread, x_download_video, x_get_replies, x_get_hashtag, x_get_likers, x_get_retweeters, x_get_media, x_get_mentions, x_get_quote_tweets, x_get_likes, x_get_recommendations
Análisisx_detect_unfollowers, x_analyze_sentiment, x_best_time_to_post, x_competitor_analysis, x_brand_monitor, x_audience_insights, x_engagement_report, x_crypto_analyze
Accionesx_follow, x_unfollow, x_like, x_post_tweet, x_post_thread, x_reply, x_retweet, x_quote_tweet, x_bookmark, x_send_dm, x_create_poll, x_delete_tweet
Automatizaciónx_auto_follow, x_follow_engagers, x_unfollow_all, x_smart_unfollow, x_auto_comment, x_auto_retweet, x_auto_like, x_engage, x_unfollow_non_followers
IAx_analyze_voice, x_generate_tweet, x_summarize_thread, x_rewrite_tweet, x_detect_bots, x_find_influencers, x_smart_target, x_grok_analyze_image
Monitoreox_monitor_account, x_monitor_keyword, x_follower_alerts, x_track_engagement, x_monitor_reputation, x_stream_start
Flujos de Trabajox_workflow_create, x_workflow_run, x_workflow_list, x_workflow_actions
Personax_persona_create, x_persona_run, x_persona_edit, x_persona_list, x_persona_presets
Portabilidadx_export_account, x_migrate_account, x_diff_exports, x_import_data, x_convert_format
Espaciosx_get_spaces, x_scrape_space, x_space_join, x_space_leave, x_space_status, x_space_transcript
Grafox_graph_build, x_graph_analyze, x_graph_recommendations, x_graph_list
Borradoresx_list_drafts, x_approve_draft, x_discard_draft, x_draft_status

Cada herramienta pertenece exactamente a un grupo, y la lista es filtrable, de modo que un cliente carga solo lo que la sesión necesita:

npx xactions-mcp --tools read,analytics     # advertise these groups only
npx xactions-mcp --exclude write,dm         # or subtract from the full list
XACTIONS_MCP_TOOLS=read npx xactions-mcp    # same thing through the environment

Una herramienta filtrada no se anuncia ni se puede llamar. Grupos, de mayor a menor: read, analytics, write, monitoring, data, workflows, automation, ai, persona, spaces, graph, drafts, dm, grok, lists, auth, más x402 cuando el servidor se ejecuta en modo remoto.

Mantén cada escritura para un humano

XACTIONS_MCP_REQUIRE_APPROVAL=1 npx xactions-mcp

Cada herramienta que publica, elimina, sigue, silencia o envía se guarda entonces como borrador en lugar de ejecutarse. Libéralas o elimínalas con x_list_drafts, x_approve_draft y x_discard_draft, o desde la terminal con xactions drafts list, xactions drafts approve <id> y xactions drafts discard <id>.

Independientemente de esa compuerta, cada escritura se carga contra un límite móvil de 24 horas por cuenta almacenado en un archivo bajo ~/.xactions, de modo que sobrevive a un reinicio y una llamada que lo excedería nunca llega a X.

Ejecuta el servidor sobre HTTP

npx xactions-mcp --http --port 3000    # Streamable HTTP on /mcp

stdio es el valor predeterminado y es lo que un cliente local quiere. --http (o MCP_TRANSPORT=http) es para clientes remotos y alojados; establece XACTIONS_MCP_TOKEN para requerir Authorization: Bearer <token> en él.

Instalar en Claude Desktop sin archivo de configuración

El paquete .mcpb incluye el servidor y sus dependencias y solicita la cookie de sesión y los grupos de herramientas en el momento de la instalación. Descárgalo desde la última versión y arrástralo hacia Claude Desktop > Configuración > Extensiones.

Ejemplos de Prompts

"Analiza el estilo de escritura de @paulg y genera 3 ideas de tweets sobre startups en su voz" → Extrae tweets → analiza la voz → genera contenido con IA

"Encuentra a todos los que sigo y no me siguen de vuelta, ordenados por número de seguidores" → Usa x_get_following + x_get_followers → calcula la diferencia → formatea los resultados

"Compara las métricas de interacción de @openai, @anthropic y @google" → Extrae perfiles + tweets recientes → calcula la interacción promedio → presenta la comparación

📖 Guía de configuración completa: docs/mcp-setup.md


🎙️ Agente Autónomo de Espacios

Los agentes de IA pueden unirse a Espacios de X en vivo, escuchar conversaciones y hablar de forma autónoma usando voz con IA. Impulsado por el SDK xspace-agent.

Qué Hace

  1. Lanza un navegador sin interfaz y se une a un Espacio de X
  2. Transcribe a otros oradores en tiempo real (Whisper STT)
  3. Genera respuestas inteligentes con el LLM que elijas (OpenAI, Claude o Groq)
  4. Habla las respuestas de vuelta al Espacio mediante texto a voz (ElevenLabs, OpenAI o navegador)
  5. Maneja turnos de conversación, seguimiento de contexto y apagado elegante

Configuración

npm install xactions xspace-agent

Establece tus credenciales:

export X_AUTH_TOKEN="your_auth_token"     # From x.com cookies
export X_CT0="your_ct0_token"            # From x.com cookies
export OPENAI_API_KEY="sk-..."           # Or ANTHROPIC_API_KEY / GROQ_API_KEY

Uso

MCP (Claude Desktop / Cursor):

"Únete a este Espacio como agente de IA: https://x.com/i/spaces/1abc123"

Claude llama a x_space_join y tu agente entra al Espacio.

Node.js:

import { joinSpace, leaveSpace } from 'xactions/spaces/agent';

await joinSpace({
  url: 'https://x.com/i/spaces/1abc123',
  provider: 'openai',
  systemPrompt: 'You are a helpful AI participant. Keep responses concise.',
});

// Later...
const summary = await leaveSpace();
// { duration: '300s', transcriptions: 42, responses: 8 }

Herramientas MCP:

HerramientaDescripción
x_space_joinÚnete a un Espacio con un agente de voz autónomo con IA
x_space_leaveSal del Espacio activo y obtén un resumen de la sesión
x_space_statusObtén el estado del agente (duración, recuentos de transcripción/respuestas)
x_space_transcriptObtén transcripciones recientes del Espacio activo

📖 Guía completa: docs/spaces-agent.md: configuración, variables de entorno, eventos, configuración multi-agente y ejemplos.


💻 Referencia de CLI

56 comandos, agrupados por tarea, con 85 subcomandos debajo de ellos. Ejecuta xactions sin argumentos para la pantalla agrupada, xactions help <command> para un comando, y xactions completion bash|zsh|fish para la finalización con tabulador generada desde el árbol de comandos en vivo.

Empieza aquí quickstart doctor connect login logout mcp-config skills drafts info

xactions quickstart         # guided first run, adapts to what you already have
xactions doctor             # what works right now, and what each failure needs
xactions connect            # log in through a real browser, no DevTools
xactions login --from-browser chrome    # or read cookies from an installed browser
xactions login --cookies-file cookies.txt   # or import a cookie export
xactions skills install --all           # 50 agent skills into Claude Code, Cursor, Codex, Windsurf
xactions drafts list                    # MCP writes waiting for your approval

Lee una cuenta (sin necesidad de iniciar sesión) profile tweets thread media analyze report history snapshot

xactions profile NASA
xactions tweets NASA --limit 50 --output nasa.csv
xactions thread https://x.com/NASA/status/1234567890
xactions media NASA --limit 30
xactions analyze NASA SpaceX          # engagement rate, cadence, content mix, best hour

Seguidores y audiencia followers following non-followers audience crm graph

xactions followers YOUR_USERNAME --limit 1000 --output followers.json
xactions non-followers YOUR_USERNAME  # who does not follow back
xactions audience nasa spacex         # follower overlap between two accounts
xactions graph build nasa             # build and analyse a social graph

Buscar y monitorear search hashtag scrape platforms monitor sentiment rss stream

xactions search "your brand" --filter latest --limit 50
xactions hashtag ai --limit 50
xactions monitor yourbrand            # sentiment over time
xactions stream start tweet nasa      # tweet, follower or mention streams

Escribir y crecer engage ai optimize hashtags predict variations evergreen persona schedule bulk

xactions engage USERNAME --like --repost --comment --prompt "supportive, one honest question"
xactions ai generate "shipping fast" --voice nichxbt
xactions evergreen YOUR_USERNAME      # find and recycle top performers
xactions persona run my-persona

Automatizar workflow agent notify plugin team dataset

xactions workflow run daily-digest
xactions notify test slack

Mover datos export export-data archive import convert migrate diff

xactions export YOUR_USERNAME             # profile, tweets, followers, following, bookmarks
xactions archive summary ~/Downloads/twitter-archive.zip
xactions archive migrate ~/Downloads/twitter-archive.zip --to bluesky --execute
xactions diff exports/january exports/february

Bajo nivel client

xactions client profile nasa          # the raw HTTP client, no browser at all

Banderas de salida para agentes y tuberías

Global en cada comando de lectura:

xactions profile NASA --compact                              # one record per line, key=value
xactions tweets NASA --limit 200 --fields id,likes,text --compact
xactions tweets NASA --limit 200 --json | jq 'sort_by(-.likes) | .[:5]'

--compact imprime pares key=value separados por tabulaciones sin colores ni indicadores de progreso. --fields reduce eso a las columnas que nombres, en el orden que las nombres. --json imprime el objeto estructurado completo y tiene prioridad sobre --output, de modo que una tubería nunca se convierte silenciosamente en una escritura de archivo. Si tanto --compact como --json se pasan, --compact gana.

Las lecturas públicas funcionan sin cuenta: profile, tweets, thread, media, analyze, hashtag. La búsqueda, followers, following, non-followers, los me gusta, los marcadores y los mensajes directos necesitan una sesión. Referencia completa: docs/cli-reference.md.


📚 API de Node.js

Inicio Rápido

import { 
  createBrowser, 
  createPage, 
  loginWithCookie,
  scrapeProfile,
  scrapeFollowers,
  scrapeFollowing,
  scrapeTweets,
  searchTweets,
  exportToJSON,
  exportToCSV 
} from 'xactions';

// Initialize
const browser = await createBrowser({ headless: true });
const page = await createPage(browser);

// Optional: Login for private data
await loginWithCookie(page, 'your_auth_token_cookie');

// Scrape profile
const profile = await scrapeProfile(page, 'elonmusk');

// Scrape followers with progress
const followers = await scrapeFollowers(page, 'elonmusk', {
  limit: 1000,
  onProgress: ({ scraped, limit }) => console.log(`${scraped}/${limit}`)
});

// Export data
await exportToJSON(followers, 'followers.json');
await exportToCSV(followers, 'followers.csv');

await browser.close();

Todas las Funciones de Extracción

// Profile
scrapeProfile(page, username)

// Followers & Following
scrapeFollowers(page, username, { limit, onProgress })
scrapeFollowing(page, username, { limit, onProgress })

// Tweets
scrapeTweets(page, username, { limit, includeReplies, onProgress })
searchTweets(page, query, { limit, filter: 'latest'|'top' })
scrapeThread(page, tweetUrl)
scrapeHashtag(page, hashtag, { limit, filter })

// Media
scrapeMedia(page, username, { limit })
scrapeLikes(page, tweetUrl, { limit })

// Lists
scrapeListMembers(page, listUrl, { limit })

// Export
exportToJSON(data, filename)
exportToCSV(data, filename)

🌐 ¿No Quieres Programar?

Visita xactions.app para una solución sin código

Usa scripts de navegador  ·  Copia y pega scripts de consola  ·  Mira tutoriales

100% Gratis. Sin claves de API, sin pagos, sin límites.


🔒 Seguridad y Buenas Prácticas

Límite de Velocidad: Retrasos integrados de 1-3s, desplazamiento similar al humano, pausa automática en límites de velocidad

Token de Autenticación: x.com → DevTools (F12) → Application → Cookies → copia auth_token

> [!CAUTION] > **Hacer:** Usar retrasos de 2–5 s · Mezclar actividad automatizada con manual · Probar con lotes pequeños > > **No hacer:** Seguir masivamente a miles por día · Ejecutar 24/7 · Enviar comentarios spam

🛠️ Construido Con

Node.js Puppeteer Express Prisma Socket.IO Redis Docker MCP SDK


📁 Estructura del Proyecto

Cada directorio de nivel superior, para que nada aquí sea una sorpresa.

src/            The library. cli/ mcp/ scrapers/ client/ automation/ agents/
                analytics/ streaming/ workflows/ plugins/ portability/ graph/
                a2a/ spaces/ ai/ auth/ scheduler/ notifications/, plus the
                browser console scripts that sit at the top level
api/            Express REST API: routes/ services/ middleware/ realtime/
bin/            Legacy command name (unfollowx), forwards to the CLI
packages/       xactions-mcp, the thin MCP wrapper published to npm
skills/         50 Agent Skills, one directory each
extension/      Chrome and Edge extension (Manifest V3)
integrations/   Third-party glue (n8n and friends)
worker/         Cloudflare Worker entry point
functions/      Cloudflare Pages Functions for the /api/* edge surface

site/           The marketing landing page served at /
dashboard/      The signed-in app shell at /dashboard, plus the generated
                docs, guides, skills and script pages the site serves
public/         Static assets: OG images, robots.txt, sitemap
playground/     Standalone in-browser playground

docs/           Documentation source (Markdown)
tutorials/      Guided walkthroughs
examples/       Runnable programs, from a profile lookup to the MCP draft gate
prompts/        Prompt library for coding agents

tests/          Vitest suite
scripts/        The 95 browser console scripts, plus build, docs and
                maintenance tooling. twitter/ holds standalone console variants
config/         Agent, niche and persona configuration
prisma/         Database schema and migrations
deploy/         Cloudflare and GCP deployment assets
types/          TypeScript declarations
data/           Runtime output (gitignored, keeps a .gitkeep)
archive/        Retired code, kept for reference. Do not modify

python/         xeepy, the Python twin of the library
xspace-agents/  The Spaces agent monorepo

Tanto python/ como xspace-agents/ son proyectos independientes que viven en este repositorio pero se compilan por su cuenta. Comienza desde sus README, no desde este.


🤝 Contribuciones

Las contribuciones son bienvenidas. Consulta CONTRIBUTING.md y AGENTS.md para el mapa del repositorio y los tres contextos de ejecución.

git clone https://github.com/nirholas/xactions.git
cd xactions && npm install
npm run cli -- profile elonmusk   # run the CLI from the source tree
npm run mcp                       # run the MCP server

Se requiere Node.js 20 o superior (engines.node es >=20); CI ejecuta la suite en 20, 22 y 24. Tres comandos antes de abrir un PR, todos se ejecutan en CI:

npm test              # the whole suite, offline, under a minute
npm run lint          # ESLint over the repo
npm run docs:check    # dead links, stale counts, invented CLI commands

⭐ Historial de Estrellas

Si XActions te ahorró pagar $100/mes por la API de Twitter, dale una estrella al repositorio: así crece el código abierto.

Star History Chart

📚 Biblioteca Completa de Tutoriales

XActions es 100% gratis y de código abierto. Visita xactions.app para tutoriales interactivos.

🚀 Ejecutor de Scripts con un Clic

¡NUEVO! Ejecuta scripts sin ningún conocimiento de programación:

  1. Visita xactions.app/run.html
  2. Arrastra cualquier botón azul a tu barra de marcadores
  3. Ve a x.com y haz clic en el bookmarklet

¡Sin consola, sin código, sin configuración!

Enlaces Rápidos por Categoría

CategoríaScriptsTutorial
Dejar de seguirDejar de seguir a todos, No seguidores, Dejar de seguir inteligenteTutorial
AutomatizaciónMe gusta automático, Comentarista automático, Seguir a quienes interactúanTutorial
ExtracciónDescarga de videos, Seguidores, Tweets, HashtagsTutorial
MonitoreoDetectar no seguidores, Rastrear cuentas, AlertasTutorial
ComunidadesSalir de todas las comunidadesTutorial
IA/MCPClaude Desktop, Integración con GPTTutorial

Toda la Documentación

Documentos de Ejemplo (Código Completo)

CaracterísticaDocumentación
Dejar de seguir a todosunfollow-everyone.md
Dejar de seguir a no seguidoresunfollow-non-followers.md
Detectar no seguidoresdetect-unfollowers.md
Me gusta automáticoauto-liker.md
Comentarista automáticoauto-commenter.md
Seguir a quienes interactúanfollow-engagers.md
Descargador de videosvideo-downloader.md
Extracción de seguidoresfollowers-scraping.md
Extracción de tweetstweet-scraping.md
Salir de comunidadesleave-all-communities.md
Servidor MCPmcp-server.md
Monitorear cuentamonitor-account.md
Alertas de nuevos seguidoresnew-follower-alerts.md

⚡ XActions, el kit de automatización completo para X/Twitter
100% Gratis y de Código Abierto · Licencia Apache 2.0

xactions.app · GitHub · @nichxbt

Star this repo  Report Bug  Request Feature


🌐 Ejecutar el servidor MCP sobre HTTP

stdio es el transporte predeterminado y es lo que un cliente local necesita. Para un cliente remoto o alojado, el mismo servidor habla MCP Streamable HTTP en /mcp, con las mismas 154 herramientas y el mismo filtrado por grupos de herramientas:

npx xactions-mcp --http --port 3000
# or: MCP_TRANSPORT=http PORT=3000 npx xactions-mcp

Exige un token configurando XACTIONS_MCP_TOKEN; los clientes entonces envían Authorization: Bearer <token>.

Conectarse desde cualquier cliente MCP

{
  "mcpServers": {
    "xactions": {
      "type": "http",
      "url": "http://localhost:3000/mcp"
    }
  }
}

Verificarlo desde la terminal

curl -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

¿Desplegándolo en algún lugar público? Ejecútalo detrás de TLS con XACTIONS_MCP_TOKEN configurado, y prefiere un conjunto de herramientas reducido (--tools read,analytics) en lugar de la lista completa. Dockerfile y docs/deployment.md cubren Railway, Fly.io, Docker y Cloudflare.


🏆 Matriz de Comparación Completa

Comparación extendida característica por característica con cada alternativa.

CaracterísticaXActionstwikittwscrapex-usexmcp (oficial)birdtwitter-cliAgent-Reach
Biblioteca Node.js✅❌ Python❌ Python✅✅✅❌ Python❌ Python
Motor de flujos de trabajo✅❌❌❌❌❌❌❌
Análisis de sentimiento✅ Integrado❌❌❌❌❌❌❌
Transmisión en tiempo real✅ Flujos de sondeo + pipeline de eventos en vivo de x.com✅ live_pipeline❌❌✅ Solo API❌❌❌
Exportación/Migración de cuentas✅ JSON/CSV/HTML, además del archivo zip oficial de X❌❌❌❌❌❌❌
Panel (Sin código)✅❌❌❌❌❌❌❌
Integración con IA Grok✅✅ Paquete separado❌❌❌❌❌❌
Soporte Docker✅❌❌❌❌❌❌❌
Tipos TypeScript✅❌❌✅✅✅❌❌
Lista blanca de herramientas MCP✅ 17 gruposn/an/a❌✅n/an/an/a
MCP sobre Streamable HTTP✅ --http en /mcpn/an/a❌✅n/an/an/a
Webhooks salientes firmados✅ HMAC-SHA256, reintentos, reproducción❌❌❌❌❌❌❌
Tutoriales de Claude✅ 23 indicaciones❌❌❌❌❌❌❌
Multiplataforma (X + otros)✅ Bluesky, Mastodon, Threads❌❌❌❌❌❌✅
CostoGratisGratisGratisGratisGratis + plan API de XGratisGratis + plan API de XGratis

La comparación refleja el README público de cada proyecto al momento de escribir (agosto de 2026); abre un issue si alguna columna está desactualizada.

Documentación

Sitio de documentación completo: https://nirholas.github.io/XActions/

  • Primeros pasos cubre la instalación y la primera ejecución.
  • Ejemplos tiene fragmentos listos para copiar y pegar.