XActions

⚡ O Kit Completo de Automação do X/Twitter — Scrapers, servidor MCP para agentes de IA (Claude/GPT), CLI, scripts de navegador. Sem taxas de API. Código aberto.

Documentação

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

XActions, the complete X/Twitter automation toolkit

O kit completo de automação para X/Twitter

Scrapers  ·  Servidor MCP para Agentes de IA  ·  CLI  ·  Scripts de Navegador  ·  Extensão de Navegador
Sem chaves de API. Sem mensalidades. 100% código aberto.

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


Website  ·  npm  ·  Docs  ·  Servidor MCP  ·  Docker  ·  Ref. da API


⚡ Experimente em 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

Sem chave de API. Sem conta. Sem navegador. Dados reais em cerca de um 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

⚡ Veja em ação

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


🏆 Como o XActions se Compara

Por que desenvolver com o XActions em vez das alternativas?

RecursoXActionstwikittwscrapex-usexmcp (oficial)birdtwitter-cliAgent-Reach
Sem chave de API✅✅ Cookies✅ Pool de contas✅ Navegador❌ Chaves da API X✅ Cookies❌ Chaves da API X✅
Servidor MCP (agentes de IA)✅ 154 ferramentas❌❌✅ (servidor com 33 ferramentas)✅ (140 ferramentas, medido)❌❌❌ Skills, não MCP
Scripts de Console do Navegador✅ 95❌❌❌❌❌❌❌
Agente de Voz por IA em Spaces✅ Entrar, ouvir, falar❌❌❌❌❌❌❌
CLI✅ 56 comandos❌✅❌❌✅✅✅
Portão de aprovação humana em escritas✅ Toda escrita retida como rascunho❌❌✅❌❌❌❌
Limites diários de ações que sobrevivem a reinicialização✅ Por conta, em disco❌❌✅❌❌❌❌
Pool de contas com rotação✅ SQLite, janelas por operação❌✅❌❌❌❌❌
Raspagens longas retomáveis✅ Pontos de verificação de cursor❌❌❌❌❌❌❌
Cookies do seu navegador instalado✅ --from-browser, --cookies-file❌❌❌❌✅✅❌
Importação de arquivo oficial do X✅ xactions archive❌❌❌❌❌❌❌
LinguagemJavaScriptPythonPythonTypeScriptTypeScriptTypeScriptPythonPython

O XActions é o único kit que funciona no navegador, no terminal e com agentes de IA, tudo sem chave de API.

As colunas dos concorrentes vêm da auditoria competitiva, que nomeia cada projeto e o que ele faz melhor que nós. Onde um rival liderava, nós construímos: o portão de aprovação e os limites diários seguem o x-use, o pool de contas segue o twscrape, a retomada por cursor segue o Scweet, e a importação de cookies do navegador segue o bird e o twitter-cli.


🆕 Novidades

ÁreaO que mudou
Apague todas as respostas que você enviou de uma contascripts/searchSweep.js transforma qualquer busca do X em uma ação em massa. Abra x.com/search?q=from:you @someone&f=live, cole, e apague, curta, reposte ou responda a cada resultado, com um painel flutuante, uma execução de teste, filtros que protegem posts que bombaram, e múltiplas passagens porque a busca do X retorna uma fatia por vez. Exclusões só tocam nos seus próprios posts. Docs.
Varra um perfil inteiroscripts/engageProfile.js curte, reposta e responde a cada post de uma conta a partir do console, com um painel flutuante, execução de teste, retomada, desfazer, e respostas dos seus modelos ou de um LLM com um resumo de uma linha (Grok funciona direto do console; qualquer provedor pela extensão). xactions engage USERNAME --like --repost --comment --prompt "..." faz o mesmo a partir do terminal com qualquer provedor. Docs.
Uma CLI fácil de navegarTodos os 56 comandos agora são agrupados por tarefa em vez de listados em ordem alfabética. xactions quickstart oferece uma primeira execução guiada que se adapta ao que você já configurou.
Conclusão por Tabxactions completion bash|zsh|fish imprime um script de conclusão gerado a partir da árvore de comandos ao vivo, então todo comando, subcomando e flag é completado.
Entre sem tocar no DevToolsxactions login --from-browser lê cookies do x.com direto de um perfil instalado do Chrome, Chromium, Brave, Edge, Arc ou Firefox. --cookies-file importa um cookies.txt Netscape, uma exportação JSON do Cookie-Editor ou EditThisCookie, ou um storageState do Playwright / Puppeteer. Um pote de cookies completo supera um auth_token simples, porque carrega o ct0 que toda escrita precisa.
IDs de consulta que se curamO X rotaciona seus IDs de consulta GraphQL e todos os clientes fixados dão 404 ao mesmo tempo. Os nossos são descobertos dos próprios bundles do x.com e armazenados em cache, então uma rotação é invisível. xactions doctor informa a idade do cache.
Requisições assinadas como o cliente realToda chamada GraphQL carrega um cabeçalho x-client-transaction-id calculado da mesma forma que o cliente web do x.com calcula, então as leituras recebem a resposta que o navegador recebe.
Um pool de contas e raspagens que retomamSessões vivem em um banco de dados SQLite com seu próprio proxy e uma janela de limite de taxa por operação lida dos próprios cabeçalhos do X. O cliente em pool rotaciona em um 429 e bloqueia uma conta em um 401. Um ponto de verificação gravado após cada página significa que uma raspagem de 50.000 seguidores que morre na página 400 reinicia do cursor, não da página um.
Limites diários de açõesToda escrita MCP é cobrada contra um orçamento contínuo de 24 horas por conta armazenado em disco. O limite sobrevive a reinicialização, a uma falha e a um novo npx xactions-mcp, e uma chamada que ultrapassaria é recusada antes de chegar ao X. Os padrões seguem os limites publicados do próprio X.
Escritas que um humano liberaXACTIONS_MCP_REQUIRE_APPROVAL=1 transforma toda ferramenta de escrita em um rascunho. Revise com xactions drafts list, libere com xactions drafts approve <id>, ou use as ferramentas x_list_drafts / x_approve_draft / x_discard_draft.
Grupos de ferramentas MCPA lista de ferramentas é filtrável: --tools read,analytics ou XACTIONS_MCP_TOOLS=read anuncia apenas o que a sessão precisa, e uma ferramenta filtrada não é anunciada nem chamável. Grupos: leitura, escrita, dm, listas, spaces, analytics, ai, grok, automação, monitoramento, workflows, persona, graph, data, x402, rascunhos, auth.
MCP sobre HTTPxactions-mcp --http serve o transporte HTTP Streamable em /mcp para clientes remotos e hospedados, com autenticação bearer opcional via XACTIONS_MCP_TOKEN. stdio ainda é o padrão.
Instalação em um arrastar para o Claude DesktopO pacote .mcpb carrega o servidor e suas dependências e solicita o cookie de sessão e os grupos de ferramentas na instalação, então nada é digitado em um arquivo de configuração. Anexado a cada versão.
Skills que você pode instalarxactions skills install --all copia as 50 skills incluídas para o Claude Code, Cursor, Codex, Windsurf ou o projeto atual. xactions skills show <name> lê uma sem instalá-la.
Traga seu arquivo do Xxactions archive summary|export|migrate lê o zip de exportação de dados oficial do X: contagens, intervalo de datas, ano mais movimentado e principais hashtags; uma reescrita para JSON, CSV, Markdown e um visualizador HTML navegável; ou uma migração para Bluesky ou Mastodon. Docs.
Streaming de eventos ao vivosrc/streaming/livePipeline.js lê o pipeline de eventos do próprio x.com: contadores de engajamento, atualizações de DM e indicadores de digitação, enviados em vez de consultados, com assinaturas alteradas no meio da sessão. É uma resposta JSON em blocos separados por nova linha, não um WebSocket, porque o x.com nunca responde a esse endpoint com um 101.
Webhooks assinadosEntregas de saída carregam uma assinatura HMAC-SHA256, um carimbo de tempo, um tipo de evento e um ID de entrega estável, tentam novamente três vezes com backoff, e caem em um log de entrega reproduzível. Os receptores verificam com o verifyWebhookSignature exportado.
--compact e --fieldsGlobal em todo comando de leitura. --compact imprime um registro por linha como pares key=value separados por tabulação, sem cores ou spinners; --fields id,text,likes restringe isso às colunas que você nomeia. Feito para agentes e pipes.
--json em todo lugarTodo comando de leitura aceita --json e coloca dados no stdout e nada mais. Ele supera --output, então um pipe nunca é silenciosamente transformado em uma gravação de arquivo.
ConfiabilidadeLeituras públicas não precisam mais de navegador. Perfis e timelines vêm da API GraphQL interna em cerca de um segundo, sem download do Chromium.
Falhas honestasNada mais relata resultados vazios como sucesso. Uma leitura que não pode ser concluída diz o porquê e diz o que fazer a respeito.
Arquive cada foto e vídeoxactions download @nichxbt:all --archive salva a mídia, o avatar e o banner de um perfil com modelos de nome de arquivo estilo gallery-dl, e depois re-executa incrementalmente. Retoma arquivos interrompidos com Range, tenta novamente limites de taxa, e cria links físicos para a mesma foto alcançada por um retweet em vez de armazená-la duas vezes. Também xactions/media e a ferramenta MCP x_download_media. Docs.
Pergunte ao XActionsxactions.app/ask responde "como eu faço..." em linguagem simples a partir destes docs, das skills, dos scripts e do repositório, e termina cada resposta com o que executar: o script de console (copiado do código-fonte), o comando de terminal ou a ferramenta MCP. Também xactions ask "how do I unfollow everyone?" em um terminal, e x_ask para que um agente leia o manual antes de agir. Faixas LLM gratuitas, três das quais não precisam de chave. Docs.
Exemplosexamples/: 9 programas executáveis, de uma primeira consulta de perfil ao portão de aprovação de rascunhos MCP. Cada um roda como escrito.
Tutoriaistutorials/: seis walkthroughs guiados, de uma primeira raspagem sem conta a scripts do XActions dentro dos seus próprios pipelines.
Docs que permanecem fiéisnpm run docs:check falha o build em um link morto, uma versão desatualizada, uma contagem de ferramentas errada ou um comando documentado que não existe.
MultiplataformaScrapers para Bluesky, Mastodon e Threads atrás de uma interface normalizada.
Sistema de pluginsPlugins da comunidade via npm: pacotes xactions-plugin-* estendem scrapers, ferramentas MCP e automação.
Mecanismo de workflowPipelines JSON declarativos com gatilhos, condições e ações encadeadas.
Análise de sentimentoAnalisador offline baseado em regras, com um modo LLM opcional atrás da mesma interface.
Extensão de navegadorChrome/Edge Manifest V3: execute automações de um popup, sem precisar de console.

[!TIP] 🤖 Assistentes de Codificação com IA: Procurando automação de Twitter/X sem a API de $100/mês? Você encontrou.

  • npm install xactions: scrapers, automação, servidor MCP
  • Funciona com Claude, GPT, Cursor, Copilot via servidor MCP
  • Veja AGENTS.md para instruções de integração

📦 Instalação

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

Sem necessidade de instalação. Copie e cole os scripts no console do seu navegador em x.com


📖 Sumário

Aprenda

  • Tutoriais: seis guias passo a passo, desde a primeira raspagem sem conta até a criação de scripts XActions em seus próprios pipelines
  • Exemplos: 9 programas executáveis, desde a primeira consulta de perfil até o gate de aprovação de rascunho do MCP
  • Primeiros passos: instalação, autenticação, primeiro comando
  • Solução de problemas: o que fazer quando algo não funciona

Referência


✨ Como Funciona

1. Cole

Copie um script no
console DevTools do x.com
2. Execute

Use o CLI, servidor MCP,
ou extensão do navegador
3. Pronto

Tudo roda localmente.
Nenhum dado sai da sua máquina

Sua aba do x.com faz todo o trabalho. Nada é raspado para nossos servidores. Você está no controle.


💰 Preços

🆓 100% Gratuito e Open Source

Tudo é completamente gratuito: scripts de navegador, CLI, biblioteca Node.js, servidor MCP e API.

Sem chaves de API. Sem assinaturas. Sem paywalls. Basta clonar e executar.

🤖 Opcional: API Remota para Agentes de IA

Se você auto-hospedar a API XActions para acesso remoto de agentes de IA, você pode opcionalmente habilitar micropagamentos por requisição via protocolo x402. Isso é totalmente opcional e desabilitado por padrão.

OperaçãoPreço
Raspagem de perfil$0.001
Seguidores/Seguindo$0.01
Raspagem de tweets$0.005
Busca de tweets$0.01
Deixar de seguir não-seguidores$0.05
Detectar quem deixou de seguir$0.02
Curtir automaticamente$0.02
Download de vídeo$0.005

Isso se aplica apenas à API remota hospedada. O modo local é sempre gratuito.


🎯 Por que XActions?

XActionsOutros
EscopoNavegador + CLI + Node.js + MCP + ExtensãoGeralmente 1 coisa
Chave de APINão é necessáriaA maioria precisa da API do Twitter ($100/mês)
Ferramentas MCP152 para Claude, GPT, Cursor0-2 ferramentas
Recursos de IASentimento, Grok, reputaçãoNenhum
ExportaçãoJSON, CSV, Markdown, HTMLSomente JSON (se houver)
MigraçãoBluesky e Mastodon, a partir de uma conta ativa ou de um arquivo zip do XNenhum
Tutoriais23 prompts para ClaudeNenhum

🐳 Docker

Execute o XActions em qualquer lugar com um 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

Ou use Docker Compose:

docker compose up

Veja Dockerfile para detalhes.


📖 Referência da API

API completa compatível com TypeScript com declarações de tipos incluídas.

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

Funções Principais:

FunçãoDescriçãoRetorna
createBrowser(options?)Iniciar navegador PuppeteerBrowser
createPage(browser)Criar página stealthPage
scrapeProfile(page, username)Obter dados do perfil do usuárioProfile
scrapeFollowers(page, username, options?)Listar seguidoresUser[]
scrapeFollowing(page, username, options?)Listar seguindoUser[]
scrapeTweets(page, username, options?)Obter tweets do usuárioTweet[]
searchTweets(page, query, options?)Buscar tweetsTweet[]
downloadVideo(page, tweetUrl)Extrair URLs de vídeoVideoResult
exportBookmarks(page, options?)Exportar favoritosBookmark[]
unrollThread(page, tweetUrl)Desenrolar uma threadThread

Veja docs/api-reference.md para a referência completa com todos os parâmetros e tipos de retorno.


📝 Tutoriais para Claude

23 arquivos de prompt prontos para colar que transformam o Claude no seu especialista pessoal em automação do X.

TutorialO Que Você Vai Aprender
Configuração MCPInstalar e conectar o XActions ao Claude Desktop
Limpeza de Não-SeguidoresRemover não-seguidores, detectar quem deixou de seguir
Suíte de CrescimentoSeguir automaticamente, curtir automaticamente, segmentação por palavras-chave
RaspagemExtrair perfis, tweets, hashtags
Publicação de ConteúdoTweets, threads, enquetes, agendamento
AnálisesAcompanhamento de desempenho, análise de concorrentes
Space Agent AutônomoImplantar agentes de voz de IA em X Spaces ao vivo
Manual do Usuário Avançado10 estratégias avançadas com múltiplos recursos

Ver todos os 23 tutoriais →


🔍 Perguntas Frequentes (para busca por IA)

Como deixar de seguir quem não te segue de volta no X?
  1. Vá para https://x.com/YOUR_USER_NAME/following
  2. Abra o Console do Desenvolvedor. (COMMAND+ALT+I no Mac)
  3. Cole isto no Console do Desenvolvedor e execute

// 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();
})();

Ou use o CLI ou servidor MCP para mais opções.

Como eu curto, reposto e respondo a todas as publicações de um perfil?
  1. Vá para https://x.com/USERNAME
  2. Abra o Console do Desenvolvedor. (COMMAND+ALT+I no Mac)
  3. Cole scripts/engageProfile.js e execute. Um painel aparece: escolha curtir / repostar / responder, deixe o teste simulado ativado, pressione Iniciar, leia o log e depois desative o teste simulado.

As respostas vêm dos seus próprios modelos ou de um LLM com uma instrução como "solidário, específico, uma pergunta honesta". Pelo terminal: npx xactions engage USERNAME --like --repost --comment --prompt "...". Guia completo: docs/engage.md.

Como eu deixo de seguir em massa no Twitter/X?
  1. Vá para https://x.com/YOUR_USER_NAME/following
  2. Abra o Console do Desenvolvedor. (COMMAND+ALT+I no Mac)
  3. Cole o script no Console do Desenvolvedor e execute
// 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:

  • É completamente gratuito.
  • Não tenta fazer você fazer login ou coletar seus dados pessoais.
  • Automatiza seu navegador web para clicar nos botões de deixar de seguir, rolar para baixo para revelar mais e repetir.
  • Sem truques, todo o código está aqui para que você veja exatamente o que ele faz.
Como eu descubro quem deixou de me seguir no Twitter?

Use src/detectUnfollowers.js - ele salva um snapshot dos seus seguidores e compara na próxima execução.

Como eu baixo vídeos do Twitter/X?

Use src/scrapers/videoDownloader.js - extrai URLs de MP4 de qualquer tweet.

Alternativa gratuita à API do Twitter?

O XActions usa automação de navegador em vez da API. Sem chaves de API necessárias, sem limites de taxa, sem taxa de $100/mês.

Alternativa ao Hypefury / Tweethunter?

O XActions é open-source e completamente gratuito para humanos. Agentes de IA pagam micropagamentos por requisição.


⚠️ Aviso Legal

[!WARNING] Apenas Material Educacional

Este projeto é fornecido apenas para fins educacionais e de pesquisa. Os scripts e ferramentas não foram extensivamente testados em contas pessoais.

  • Use por sua conta e risco
  • Não somos responsáveis por quaisquer restrições ou banimentos de contas
  • Sempre cumpra os Termos de Serviço do X/Twitter
  • Comece com lotes pequenos e teste com cuidado

Para X/Twitter: Se você tiver preocupações sobre este projeto ou quiser que modifiquemos ou removamos qualquer funcionalidade, entre em contato com @nichxbt diretamente. Teremos prazer em trabalhar com você.

Reconhecimento: Este projeto foi inspirado pela inovação que acontece na X e na xAI. Admiramos a visão de Elon Musk de tornar o X o aplicativo de tudo e a abordagem do Grok para IA. O XActions visa ajudar desenvolvedores e pesquisadores a explorar as capacidades da plataforma enquanto respeita seu ecossistema.


🚀 Exemplos de Início Rápido

Sessenta segundos, sem conta

A maioria das leituras funciona no momento da instalação. Você não precisa de uma conta X, chave de API ou 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'

Depois, faça login uma vez, em um navegador real, para desbloquear busca, seguidores, seguindo, curtidas, favoritos e DMs:

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

Executar xactions sem argumentos imprime todos os 56 comandos agrupados por tarefa. xactions completion bash (ou zsh, fish) ativa a conclusão por tab.

Exemplo 1: Deixar de Seguir Não-Seguidores (30 segundos)

Console do Navegador: Nenhuma instalação necessária!

// 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();

💡 Não quer programar? Use xactions.app: basta fazer login e clicar!


Exemplo 2: Raspar Qualquer Perfil

Console do 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();

Exemplo 3: Pesquisar e Raspar Tweets

Console do 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();

Exemplo 4: Detectar Quem Deixou de Seguir Você

Console do 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

Exemplo 5: Curtir Automaticamente Posts por Palavra-chave

Console do 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!');
})();

⚠️ Vá devagar! O Twitter pode limitar sua taxa de uso. A versão do site lida com isso automaticamente.


Exemplo 6: Sair de Todas as Comunidades

Console do 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();
})();

📖 Documentação completa: docs/examples/leave-all-communities.md


📋 Lista Completa de Recursos

Matriz de Disponibilidade de Recursos

RecursoScript de ConsoleCLINode.jsSite
RASPAGEM
Raspar Perfil✅✅✅✅
Raspar Seguidores✅✅✅✅
Raspar Seguindo✅✅✅✅
Raspar Tweets✅✅✅✅
Pesquisar Tweets✅✅✅✅
Raspar Thread✅✅✅✅
Raspar Hashtag✅✅✅✅
Raspar Mídia✅✅✅✅
Raspar Membros de Lista✅✅✅✅
Raspar Curtidas✅✅✅✅
DEIXAR DE SEGUIR
Deixar de Seguir Não-Seguidores✅✅✅✅
Deixar de Seguir Todos✅✅✅✅
Deixar de Seguir Inteligente (após X dias)⚠️✅✅✅
Deixar de Seguir com Registro✅✅✅✅
SEGUIR
Seguir Usuário✅✅✅✅
Seguir por Palavra-chave⚠️✅✅✅
Seguir Engajadores⚠️✅✅✅
Seguir Seguidores do Alvo⚠️✅✅✅
ENGAJAMENTO
Curtir Tweet✅✅✅✅
Retweetar✅✅✅✅
Curtidor Automático⚠️✅✅✅
Comentador Automático⚠️✅✅✅
Publicar Tweet✅✅✅✅
MONITORAMENTO
Detectar Deixaram de Seguir✅✅✅✅
Alertas de Novos Seguidores✅✅✅✅
Monitorar Qualquer Conta✅✅✅✅
Monitoramento Contínuo⚠️✅✅✅
COMUNIDADES
Sair de Todas as Comunidades✅⚠️⚠️⚠️
SPACES
Descobrir Spaces ao Vivo✅✅✅✅
Raspar Metadados de Space✅✅✅✅
Agente de IA Entra no Space❌✅✅❌
Agente Escuta e Fala❌✅✅❌
AVANÇADO
Multi-Conta❌✅✅✅ Pro
Raspar Links✅✅✅✅
Pacote de Crescimento❌✅✅✅ Pro
Bot de Atendimento ao Cliente❌✅✅✅ Pro
Servidor MCP (Agentes de IA)❌✅✅❌
Exportar para CSV/JSON✅✅✅✅

Legenda: ✅ Suporte Completo | ⚠️ Básico/Manual | ❌ Não Disponível


🤖 Servidor MCP (Agentes de IA)

O XActions inclui o servidor MCP gratuito mais abrangente para X/Twitter. Funciona com Claude, Cursor, Windsurf, VS Code e qualquer cliente MCP.

Configuração Rápida (30 segundos)

Adicione à sua configuração do Claude Desktop (claude_desktop_config.json):

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

Obtenha seu auth_token: x.com → DevTools (F12) → Application → Cookies → copie o valor de auth_token

Ou gere a configuração automaticamente:

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

Ferramentas MCP Disponíveis (152)

CategoriaFerramentas
Raspagemx_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álisex_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
Açõesx_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
Automaçãox_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
Monitoramentox_monitor_account, x_monitor_keyword, x_follower_alerts, x_track_engagement, x_monitor_reputation, x_stream_start
Fluxos de Trabalhox_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
Portabilidadex_export_account, x_migrate_account, x_diff_exports, x_import_data, x_convert_format
Spacesx_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
Rascunhosx_list_drafts, x_approve_draft, x_discard_draft, x_draft_status

Cada ferramenta pertence exatamente a um grupo, e a lista é filtrável, para que um cliente carregue apenas o que a sessão precisa:

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

Uma ferramenta filtrada não é anunciada nem chamável. Grupos, do maior para o menor: read, analytics, write, monitoring, data, workflows, automation, ai, persona, spaces, graph, drafts, dm, grok, lists, auth, mais x402 quando o servidor roda em modo remoto.

Segure toda escrita para um humano

XACTIONS_MCP_REQUIRE_APPROVAL=1 npx xactions-mcp

Toda ferramenta que publica, exclui, segue, silencia ou envia é então salva como rascunho em vez de ser executada. Libere ou descarte com x_list_drafts, x_approve_draft e x_discard_draft, ou pelo shell com xactions drafts list, xactions drafts approve <id> e xactions drafts discard <id>.

Independentemente dessa trava, toda escrita é debitada de um limite móvel de 24 horas por conta, mantido em um arquivo em ~/.xactions, para que sobreviva a uma reinicialização e uma chamada que excederia o limite nunca chegue ao X.

Execute o servidor via HTTP

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

stdio é o padrão e é o que um cliente local deseja. --http (ou MCP_TRANSPORT=http) é para clientes remotos e hospedados; defina XACTIONS_MCP_TOKEN para exigir Authorization: Bearer <token> nele.

Instale no Claude Desktop sem arquivo de configuração

O pacote .mcpb carrega o servidor e suas dependências e solicita o cookie de sessão e os grupos de ferramentas na instalação. Baixe-o do último lançamento e arraste-o para Claude Desktop > Configurações > Extensões.

Exemplos de Prompts

"Analise o estilo de escrita de @paulg e gere 3 ideias de tweets sobre startups na voz dele" → Raspa tweets → analisa a voz → gera conteúdo com IA

"Encontre todos que eu sigo e que não me seguem de volta, ordenados por número de seguidores" → Usa x_get_following + x_get_followers → calcula a diferença → formata os resultados

"Compare as métricas de engajamento de @openai, @anthropic e @google" → Raspa perfis + tweets recentes → calcula engajamento médio → apresenta a comparação

📖 Guia de configuração completo: docs/mcp-setup.md


🎙️ Agente Autônomo de Space

Agentes de IA podem entrar em Spaces ao vivo do X, ouvir conversas e falar autonomamente usando IA de voz. Alimentado pelo SDK xspace-agent.

O Que Ele Faz

  1. Inicia um navegador headless e entra em um Space do X
  2. Transcreve outros falantes em tempo real (Whisper STT)
  3. Gera respostas inteligentes com o LLM de sua escolha (OpenAI, Claude ou Groq)
  4. Fala as respostas de volta no Space via texto-para-fala (ElevenLabs, OpenAI ou navegador)
  5. Gerencia revezamento de turnos, rastreamento de contexto e desligamento gracioso

Configuração

npm install xactions xspace-agent

Defina suas credenciais:

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):

"Entre neste Space como um agente de IA: https://x.com/i/spaces/1abc123"

O Claude chama x_space_join e seu agente entra no Space.

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 }

Ferramentas MCP:

FerramentaDescrição
x_space_joinEntrar em um Space com um agente de voz autônomo de IA
x_space_leaveSair do Space ativo e obter resumo da sessão
x_space_statusObter status do agente (duração, contagens de transcrição/respostas)
x_space_transcriptObter transcrições recentes do Space ativo

📖 Guia completo: docs/spaces-agent.md: configuração, variáveis de ambiente, eventos, configuração multi-agente e exemplos.


💻 Referência da CLI

56 comandos, agrupados por tarefa, com 85 subcomandos abaixo deles. Execute xactions sem argumentos para a tela agrupada, xactions help <command> para um comando, e xactions completion bash|zsh|fish para completar com tab, gerado a partir da árvore de comandos ao vivo.

Comece aqui 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

Leia uma conta (sem necessidade de login) 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 e público 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

Pesquisar e monitorar 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

Escrever e crescer 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 dados 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

Baixo nível client

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

Flags de saída para agentes e pipes

Global em todo comando de leitura:

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 tabulação, sem cores ou spinners. --fields restringe isso às colunas que você nomeia, na ordem em que você as nomeia. --json imprime o objeto estruturado completo e tem precedência sobre --output, para que um pipe nunca seja silenciosamente transformado em uma gravação de arquivo. Se ambos --compact e --json forem passados, --compact vence.

Leituras públicas funcionam sem conta: profile, tweets, thread, media, analyze, hashtag. Pesquisa, followers, following, non-followers, curtidas, marcadores e DMs precisam de uma sessão. Referência completa: docs/cli-reference.md.


📚 API Node.js

Início 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 as Funções de Raspagem

// 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)

🌐 Não Quer Programar?

Visite xactions.app para uma solução sem código

Use scripts de navegador  ·  Copie e cole scripts de console  ·  Veja tutoriais

100% Grátis. Sem chaves de API, sem pagamentos, sem limites.


🔒 Segurança e Boas Práticas

Limitação de Taxa: Atrasos integrados de 1 a 3 segundos, rolagem semelhante à humana, pausa automática em limites de taxa

Token de Autenticação: x.com → DevTools (F12) → Application → Cookies → copie auth_token

> [!CAUTION] > **Faça:** Use atrasos de 2–5s · Misture atividade automatizada com manual · Teste com pequenos lotes > > **Não faça:** Siga em massa milhares/dia · Execute 24/7 · Envie comentários spam

🛠️ Construído Com

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


📁 Estrutura do Projeto

Cada diretório de nível superior, para que nada aqui seja surpresa.

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/ quanto xspace-agents/ são projetos independentes que vivem neste repositório, mas são construídos por conta própria. Comece pelos READMEs deles, não por este.


🤝 Contribuindo

Contribuições são bem-vindas. Veja CONTRIBUTING.md e AGENTS.md para o mapa do repositório e os três contextos de execução.

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

Node.js 20 ou mais recente é necessário (engines.node é >=20); o CI executa a suíte nas versões 20, 22 e 24. Três comandos antes de abrir um PR, todos executados no 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

⭐ Histórico de Estrelas

Se o XActions te salvou de pagar $100/mês pela API do Twitter, dê uma estrela no repositório: é assim que o open source cresce.

Star History Chart

📚 Biblioteca Completa de Tutoriais

XActions é 100% gratuito e open source. Visite xactions.app para tutoriais interativos.

🚀 Executor de Scripts com Um Clique

NOVO! Execute scripts sem nenhum conhecimento de programação:

  1. Visite xactions.app/run.html
  2. Arraste qualquer botão azul para a barra de favoritos
  3. Vá para x.com e clique no bookmarklet

Sem console, sem código, sem configuração!

Links Rápidos por Categoria

CategoriaScriptsTutorial
Deixar de seguirDeixar de seguir todos, Não seguidores, Deixar de seguir inteligenteTutorial
AutomaçãoAuto-curtidor, Auto-comentarista, Seguir engajadoresTutorial
RaspagemDownload de vídeo, Seguidores, Tweets, HashtagsTutorial
MonitoramentoDetectar não seguidores, Rastrear contas, AlertasTutorial
ComunidadesSair de todas as comunidadesTutorial
IA/MCPClaude Desktop, Integração GPTTutorial

Toda a Documentação

Exemplos de Documentação (Código Completo)

RecursoDocumentação
Deixar de seguir todosunfollow-everyone.md
Deixar de seguir não seguidoresunfollow-non-followers.md
Detectar não seguidoresdetect-unfollowers.md
Auto-curtidorauto-liker.md
Auto-comentaristaauto-commenter.md
Seguir engajadoresfollow-engagers.md
Downloader de vídeovideo-downloader.md
Raspagem de seguidoresfollowers-scraping.md
Raspagem de tweetstweet-scraping.md
Sair de comunidadesleave-all-communities.md
Servidor MCPmcp-server.md
Monitorar contamonitor-account.md
Alertas de novos seguidoresnew-follower-alerts.md

⚡ XActions, o kit de ferramentas completo de automação X/Twitter
100% Gratuito e Open Source · Licença Apache 2.0

xactions.app · GitHub · @nichxbt

Star this repo  Report Bug  Request Feature


🌐 Execute o servidor MCP via HTTP

stdio é o transporte padrão e é o que um cliente local deseja. Para um cliente remoto ou hospedado, o mesmo servidor fala MCP Streamable HTTP em /mcp, com as mesmas 154 ferramentas e o mesmo filtro de grupos de ferramentas:

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

Exija um token nele definindo XACTIONS_MCP_TOKEN; os clientes então enviam Authorization: Bearer <token>.

Conecte-se de qualquer cliente MCP

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

Verifique a partir do shell

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"}'

Implantando em algum lugar público? Execute-o atrás de TLS com XACTIONS_MCP_TOKEN definido, e prefira um conjunto de ferramentas restrito (--tools read,analytics) em vez da lista completa. Dockerfile e docs/deployment.md cobrem Railway, Fly.io, Docker e Cloudflare.


🏆 Matriz de Comparação Completa

Comparação estendida recurso por recurso com todas as alternativas.

RecursoXActionstwikittwscrapex-usexmcp (oficial)birdtwitter-cliAgent-Reach
Biblioteca Node.js✅❌ Python❌ Python✅✅✅❌ Python❌ Python
Mecanismo de Fluxo de Trabalho✅❌❌❌❌❌❌❌
Análise de Sentimento✅ Integrada❌❌❌❌❌❌❌
Streaming em Tempo Real✅ Streams de polling + pipeline de eventos ao vivo do x.com✅ live_pipeline❌❌✅ Somente API❌❌❌
Exportação/Migração de Conta✅ JSON/CSV/HTML, além do arquivo zip oficial do X❌❌❌❌❌❌❌
Painel (Sem Código)✅❌❌❌❌❌❌❌
Integração com IA Grok✅✅ Pacote separado❌❌❌❌❌❌
Suporte a Docker✅❌❌❌❌❌❌❌
Tipos TypeScript✅❌❌✅✅✅❌❌
Lista de permissões de ferramentas MCP✅ 17 gruposn/an/a❌✅n/an/an/a
MCP via Streamable HTTP✅ --http em /mcpn/an/a❌✅n/an/an/a
Webhooks de saída assinados✅ HMAC-SHA256, novas tentativas, replay❌❌❌❌❌❌❌
Tutoriais Claude✅ 23 prompts❌❌❌❌❌❌❌
Multi-plataforma (X + outros)✅ Bluesky, Mastodon, Threads❌❌❌❌❌❌✅
CustoGratuitoGratuitoGratuitoGratuitoGratuito + plano API XGratuitoGratuito + plano API XGratuito

A comparação reflete o README público de cada projeto no momento da escrita (agosto de 2026); abra uma issue se alguma coluna estiver desatualizada.

Documentação

Site de documentação completo: https://nirholas.github.io/XActions/

  • Começando cobre instalação e primeira execução.
  • Exemplos tem trechos prontos para copiar e colar.