From xactions
Automates X/Twitter engagement actions: like/unlike/reply/bookmark tweets, auto-like by keyword, hide replies, bulk-unlike all likes. Use for scripting interactions or clearing like history.
npx claudepluginhub nirholas/xactionsThis skill uses the workspace's default tool permissions.
Browser automation for X/Twitter engagement — liking, replying, bookmarking, hiding replies, and bulk unlike.
Automates X/Twitter growth using browser console JavaScript scripts for auto-liking tweets by filters, auto-commenting on targets, following by keywords/engagement/audiences, algorithm training, and growth suites. Paste core.js first.
Automates X (Twitter) interactions—post tweets, like, reply, retweet, quote—via Playwright browser automation in ClaudeClaw. Useful for setup, testing, troubleshooting Twitter functionality.
Interact with Twitter/X via twclaw CLI: read tweets/threads/replies/users, manage timelines/mentions/likes, search/trends, post/reply/quote with media, like/retweet/bookmark, follow/unfollow, lists. Requires Bearer Token.
Share bugs, ideas, or general feedback.
Browser automation for X/Twitter engagement — liking, replying, bookmarking, hiding replies, and bulk unlike.
| 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 |
File: src/engagementManager.js
Puppeteer-based module for individual and bulk engagement actions.
| 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 |
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',
});
Navigates to a tweet, types a reply, optionally attaches media, and submits.
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.
x.com/YOUR_USERNAME/likesmaxUnlikes: Infinity — cap on unlikesskipKeywords: [] — keep likes containing these wordsonlyKeywords: [] — only unlike posts matching these wordsdryRun: false — preview without unlikingwindow.XActions.pause() / .resume() / .abort() / .status()| 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"] |
[data-testid="toast"] with 60s cooldowndryRun: true to preview first| 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 |