A floating, draggable control panel for running XActions automations directly on x.com — no terminal needed.
The Control Panel injects a dark-themed floating UI onto x.com that lets you:
- Start / Pause / Resume / Stop any automation
- Configure inputs (keywords, targets, limits, delays) via form fields
- Queue multiple tasks to run sequentially (e.g., like 200 on @user1, then follow engagers of @user2)
- Export results as JSON or CSV
- Share configurations as copy-paste JSON
- Monitor live progress with activity log and progress bar
No terminal, no setup — just paste two scripts into DevTools and go.
- Go to x.com (logged in)
- Open DevTools (F12 or Cmd+Option+I) → Console tab
- Paste
core.jsfirst, then pastecontrolPanel.js - The panel appears in the top-right corner
Paste order:
1. src/automation/core.js
2. src/automation/controlPanel.js
| Automation | Description |
|---|---|
| ❤️ Like Timeline | Like posts on a user's timeline or your home feed |
| 👥 Follow Engagers | Follow people who engage with a target account's posts |
| 🚫 Smart Unfollow | Unfollow accounts that don't follow you back |
| 📋 Scrape Followers | Collect follower usernames, bios, and stats |
| 🧠 Algorithm Builder | 24/7 niche algorithm builder with LLM-powered comments |
Select an automation from the dropdown, fill in the fields, then click ▶ Start.
Each automation exposes different inputs:
Like Timeline:
- Target @username (blank = home feed)
- Max likes, keyword filter, skip replies, also retweet
- Min/max delay between actions
Follow Engagers:
- Target @username (required)
- Max follows, bio keyword filter
- Min/max delay
Smart Unfollow:
- Max unfollows, keep verified, keep by bio keywords
- Min/max delay
Scrape Followers:
- Target @username, max to collect
Algorithm Builder:
- Niche keywords (comma-separated)
- Persona description (for LLM comments)
- Bio filter keywords, target @accounts
- OpenRouter API key (optional — enables LLM comments)
- Session length in minutes
Build a multi-step task queue:
- Configure an automation
- Click + Add to Queue (instead of Start)
- Repeat for more tasks
- Click ▶ Run Queue — tasks execute sequentially
Example queue:
1. ❤️ Like 200 posts on @nichxbt's timeline
2. 👥 Follow 50 engagers of @VitalikButerin
3. 📋 Scrape 500 followers of @jack
Tasks show status indicators: ⬤ pending, 🔵 active, ✅ done.
Live activity feed showing every action taken:
✅ [14:32:01] Liked tweet
✅ [14:32:04] Liked tweet
➕ [14:32:08] Followed @user123
⚠️ [14:32:12] Rate limit approaching
Color-coded by type: green (success), blue (action), yellow (warning), red (error).
| Button | Action |
|---|---|
| ▶ Start | Begin the selected automation |
| ⏸ Pause | Pause mid-run (resumes from the same position) |
| ▶ Resume | Continue after pause |
| ⏹ Stop | Abort the current run |
| 🔄 Restart | Stop and re-run from scratch |
| 📥 Export | Download results as JSON or CSV |
| 📋 Share | Copy current config to clipboard as JSON |
| ─ Minimize | Collapse the panel to just the header |
| ✕ Close | Remove the panel from the page |
Every automation supports an optional time limit (in minutes). When the time limit is reached, the automation stops gracefully — finishing the current action before halting.
After (or during) a run, click 📥 Export to download:
- JSON — Full structured data (tweet IDs, usernames, timestamps, action types)
- CSV — Spreadsheet-friendly format
All collected data is stored in the panel and available for export even after the automation completes.
Click 📋 Share to copy the current automation configuration (selected automation, all input values) to your clipboard as JSON. This lets you share setups with teammates or save them for later.
The panel exposes a JavaScript API on window.XActions.Panel:
// Add a task to the queue
window.XActions.Panel.addTask('like-timeline', { target: 'nichxbt', limit: 100 });
// Run the queue
window.XActions.Panel.runQueue();
// Export results
window.XActions.Panel.exportResults('json');
// Share current config
window.XActions.Panel.shareConfig();- Drag: The panel header is draggable — click and drag to reposition
- Abort: Uses
AbortControllerfor clean cancellation (no zombie loops) - Pause: Implemented via a
Promisethat resolves when the user clicks Resume - Z-index:
999999— stays above all X/Twitter UI elements - Double-inject protection: Pasting the script again won't create a second panel
- Dependencies: Requires
core.js(SELECTORS, sleep, randomDelay, clickElement, etc.)