/engagement-interaction
Automates X/Twitter engagement actions — like, unlike, reply, bookmark, hide replies, and auto-like by keyword. Also bulk-unlikes all posts. Use when users want to automate likes, send replies, manage bookmarks on tweets, hide replies, or clear their entire likes history.
$ npx -y skills add nirholas/XActions --skill engagement-interaction --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/engagement-interaction
Context preview
The summary Claude sees to decide when to auto-load this skill.
Automates X/Twitter engagement actions — like, unlike, reply, bookmark, hide replies, and auto-like by keyword. Also bulk-unlikes all posts. Use when users want to automate likes, send replies, manage bookmarks on tweets, hide replies, or clear their entire likes history.
SKILL.md
engagement-interaction.SKILL.mdname: engagement-interaction
description: Automates X/Twitter engagement actions — like, unlike, reply, bookmark, hide replies, and auto-like by keyword. Also bulk-unlikes all posts. Use when users want to automate likes, send replies, manage bookmarks on tweets, hide replies, or clear their entire likes history.
license: Apache-2.0
metadata:
author: nichxbt
version: "3.0"
Engagement & Interaction
Browser automation for X/Twitter engagement — liking, replying, bookmarking, hiding replies, and bulk unlike.
Script Selection
| Goal | File | Navigate to | |------|------|-------------| | Like/unlike/reply/bookmark tweets | `src/engagementManager.js` | Tweet URL or timeline | | Auto-like by keyword | `src/engagementManager.js` | `x.com/home` or search page | | Get engagement analytics for a post | `src/engagementManager.js` | Tweet URL | | Hide replies on your posts | `src/engagementManager.js` | Reply URL | | Unlike ALL liked posts | `src/unlikeAllPosts.js` | `x.com/USERNAME/likes` |
Engagement Manager
**File:** `src/engagementManager.js`
Puppeteer-based module for individual and bulk engagement actions.
Functions
| Function | Purpose | |----------|---------| | `likeTweet(page, tweetUrl)` | Like a specific tweet (skips if already liked) | | `unlikeTweet(page, tweetUrl)` | Unlike a specific tweet | | `replyToTweet(page, tweetUrl, text, { media? })` | Reply with text and optional media | | `bookmarkTweet(page, tweetUrl)` | Bookmark a tweet | | `unbookmarkTweet(page, tweetUrl)` | Remove a bookmark | | `hideReply(page, replyUrl)` | Hide a reply on your post | | `autoLikeByKeyword(page, { keywords, limit, delay, url })` | Auto-like posts matching keywords | | `getEngagementAnalytics(page, tweetUrl)` | Get likes, reposts, replies, impressions |
Auto-Like by Keyword
Scrolls a timeline or search page and likes posts containing any of the specified keywords. Empty keywords array likes all posts.
await autoLikeByKeyword(page, {
keywords: ['AI', 'javascript'],
limit: 20,
delay: 2000,
url: 'https://x.com/home',
});Reply to Tweet
Navigates to a tweet, types a reply, optionally attaches media, and submits.
Unlike All Posts
**File:** `src/unlikeAllPosts.js`
Browser console script that unlikes every post in your Likes tab. Supports keyword filters, dry run mode, rate limit detection, and exports a log.
How to Use
1. Navigate to `x.com/YOUR_USERNAME/likes` 2. Open DevTools (F12) → Console 3. Paste the script → Enter
Configuration
- `maxUnlikes: Infinity` — cap on unlikes
- `skipKeywords: []` — keep likes containing these words
- `onlyKeywords: []` — only unlike posts matching these words
- `dryRun: false` — preview without unliking
Controls
- `window.XActions.pause()` / `.resume()` / `.abort()` / `.status()`
DOM Selectors
| Element | Selector | |---------|----------| | Like button | `[data-testid="like"]` | | Unlike button | `[data-testid="unlike"]` | | Reply button | `[data-testid="reply"]` | | Reply input | `[data-testid="tweetTextarea_0"]` | | Reply submit | `[data-testid="tweetButton"]` | | Share button | `[data-testid="share"]` | | Bookmark | `[data-testid="bookmark"]` | | Remove bookmark | `[data-testid="removeBookmark"]` | | Hide reply | `[data-testid="hideReply"]` | | Tweet | `article[data-testid="tweet"]` | | Tweet text | `[data-testid="tweetText"]` |
Rate Limiting & Safety
- **Engagement Manager:** 1.5–2s delay between actions, 2s default for auto-like
- **Unlike All:** 1–2.5s between unlikes (gaussian randomized), 1.8s scroll delay
- Rate limit detection via `[data-testid="toast"]` with 60s cooldown
- **Unlike All is irreversible** — use `dryRun: true` to preview first
- X may restrict after ~400 like/unlike actions per day
Troubleshooting
| Problem | Solution | |---------|----------| | Like button not found | Tweet may already be liked — check for unlike button | | Reply not posting | Verify `tweetTextarea_0` selector; tweet may have reply restrictions | | Auto-like stops early | Rate limit hit — script waits 60s and retries | | Unlike All stops after ~20 | Rate limit — wait 1 hour and re-run |
Read more
name: engagement-interaction description: Automates X/Twitter engagement actions — like, unlike, reply, bookmark, hide replies, and auto-like by keyword. Also bulk-unlikes all posts. Use when users want to automate likes, send replies, manage bookmarks on tweets, hide replies, or clear their entire likes history. license: Apache-2.0 metadata: author: nichxbt version: "3.0"
Engagement & Interaction
Browser automation for X/Twitter engagement — liking, replying, bookmarking, hiding replies, and bulk unlike.
Script Selection
| Goal | File | Navigate to | |------|------|-------------| | Like/unlike/reply/bookmark tweets | `src/engagementManager.js` | Tweet URL or timeline | | Auto-like by keyword | `src/engagementManager.js` | `x.com/home` or search page | | Get engagement analytics for a post | `src/engagementManager.js` | Tweet URL | | Hide replies on your posts | `src/engagementManager.js` | Reply URL | | Unlike ALL liked posts | `src/unlikeAllPosts.js` | `x.com/USERNAME/likes` |
Engagement Manager
**File:** `src/engagementManager.js`
Puppeteer-based module for individual and bulk engagement actions.
Functions
| Function | Purpose | |----------|---------| | `likeTweet(page, tweetUrl)` | Like a specific tweet (skips if already liked) | | `unlikeTweet(page, tweetUrl)` | Unlike a specific tweet | | `replyToTweet(page, tweetUrl, text, { media? })` | Reply with text and optional media | | `bookmarkTweet(page, tweetUrl)` | Bookmark a tweet | | `unbookmarkTweet(page, tweetUrl)` | Remove a bookmark | | `hideReply(page, replyUrl)` | Hide a reply on your post | | `autoLikeByKeyword(page, { keywords, limit, delay, url })` | Auto-like posts matching keywords | | `getEngagementAnalytics(page, tweetUrl)` | Get likes, reposts, replies, impressions |
Auto-Like by Keyword
Scrolls a timeline or search page and likes posts containing any of the specified keywords. Empty keywords array likes all posts.
await autoLikeByKeyword(page, {
keywords: ['AI', 'javascript'],
limit: 20,
delay: 2000,
url: 'https://x.com/home',
});Reply to Tweet
Navigates to a tweet, types a reply, optionally attaches media, and submits.
Unlike All Posts
**File:** `src/unlikeAllPosts.js`
Browser console script that unlikes every post in your Likes tab. Supports keyword filters, dry run mode, rate limit detection, and exports a log.
How to Use
1. Navigate to `x.com/YOUR_USERNAME/likes` 2. Open DevTools (F12) → Console 3. Paste the script → Enter
Configuration
- `maxUnlikes: Infinity` — cap on unlikes
- `skipKeywords: []` — keep likes containing these words
- `onlyKeywords: []` — only unlike posts matching these words
- `dryRun: false` — preview without unliking
Controls
- `window.XActions.pause()` / `.resume()` / `.abort()` / `.status()`
DOM Selectors
| Element | Selector | |---------|----------| | Like button | `[data-testid="like"]` | | Unlike button | `[data-testid="unlike"]` | | Reply button | `[data-testid="reply"]` | | Reply input | `[data-testid="tweetTextarea_0"]` | | Reply submit | `[data-testid="tweetButton"]` | | Share button | `[data-testid="share"]` | | Bookmark | `[data-testid="bookmark"]` | | Remove bookmark | `[data-testid="removeBookmark"]` | | Hide reply | `[data-testid="hideReply"]` | | Tweet | `article[data-testid="tweet"]` | | Tweet text | `[data-testid="tweetText"]` |
Rate Limiting & Safety
- **Engagement Manager:** 1.5–2s delay between actions, 2s default for auto-like
- **Unlike All:** 1–2.5s between unlikes (gaussian randomized), 1.8s scroll delay
- Rate limit detection via `[data-testid="toast"]` with 60s cooldown
- **Unlike All is irreversible** — use `dryRun: true` to preview first
- X may restrict after ~400 like/unlike actions per day
Troubleshooting
| Problem | Solution | |---------|----------| | Like button not found | Tweet may already be liked — check for unlike button | | Reply not posting | Verify `tweetTextarea_0` selector; tweet may have reply restrictions | | Auto-like stops early | Rate limit hit — script waits 60s and retries | | Unlike All stops after ~20 | Rate limit — wait 1 hour and re-run |
⚡ The Complete X/Twitter Automation Toolkit — Scrapers, MCP server for AI agents (Claude/GPT), CLI, browser scripts. No API fees. Open source. Unfollow people who don't follow back. Monitor real-time analytics. Auto follow, like, comment, scrape, without API. Follow Bot. Like bot. Grow your account automatically.
Repo: nirholas/XActions
Other skills on xactions.
- /a2a-multi-agent
Turn XActions into an A2A-compatible agent that can discover, communicate with, and delegate tasks to other AI agents using Google's Agent-to-Agent protocol.
Open skill - /account-backup
Export and backup your X/Twitter account data — tweets, likes, bookmarks, followers, and following — as downloadable JSON. Also triggers X's official data archive download. Use when users want to backup, export, or archive their X account data.
Open skill - /account-tools
Miscellaneous account utilities — view join date, login history, connected accounts, appeal suspension, QR code sharing, share/embed tweets, upload contacts, and calculate account age. Use when users need account info tools not covered by other skills.
Open skill - /algorithm-cultivation
Trains an X/Twitter account's algorithmic feed to surface niche-relevant content and positions the account as a thought leader. Browser scripts for manual operation, Persona Engine for identity management, and 24/7 Algorithm Builder with LLM-powered engagement via Puppeteer. Use
Open skill - /analytics-insights
Analyze X/Twitter engagement, hashtags, competitors, best posting times, follower demographics, tweet performance, viral detection, content calendar gaps, A/B testing, and engagement leaderboards. Browser console scripts for data-driven X optimization. Use when users want
Open skill - /articles-longform
Compose, preview, publish, and manage long-form Articles on X/Twitter. Premium+ feature. Includes article creation, formatting, media insertion, and performance tracking. Use when users want to write, publish, manage, or analyze X Articles.
Open skill

