| name | x-account-management |
| description | X/Twitter account management via GeeLark cloud phone automation. Covers posting, engagement, profile setup, account health, warming schedules, and phone lifecycle management. |
X Account Management Skill
Manage X/Twitter accounts via GeeLark cloud phone automation. All operations execute through Chrome on Android cloud phones, bypassing Castle.io fingerprint detection that blocks headless browsers.
When to Use This Skill
- Posting tweets or replies from managed accounts
- Executing warming schedules for new accounts
- Engaging with content (likes, follows, retweets, quotes)
- Creating and onboarding new X accounts
- Setting up account profiles (avatar, banner, bio)
- Health checking accounts for suspension/lock detection
- Refreshing session cookies for API compatibility
Available Tools
X Operations (Async -- returns job_id)
| Tool | Purpose | Key Params |
|---|
geelark_post_tweet | Post a tweet | account_id, phone_id, text |
geelark_like_tweet | Like a tweet | phone_id, tweet_id |
geelark_unlike_tweet | Remove a like | account_id, phone_id, tweet_id |
geelark_reply_to_tweet | Reply to a tweet | phone_id, tweet_id, text |
geelark_follow_user | Follow a user | phone_id, username |
geelark_unfollow_user | Unfollow a user | phone_id, username |
geelark_retweet | Repost a tweet | phone_id, tweet_id |
geelark_unretweet | Undo a repost | phone_id, tweet_id |
geelark_quote_tweet | Quote tweet with comment | phone_id, tweet_id, text |
Account Management (Async -- returns job_id)
| Tool | Purpose | Key Params |
|---|
geelark_create_x_account | Create new X account | email, email_password, phone_id |
geelark_login_x_account | Login to existing account | account_id, phone_id |
geelark_check_account_health | Deep health check via Chrome | account_id, phone_id |
geelark_setup_profile | Update name/bio/avatar/banner | account_id, phone_id, avatar_url, banner_url |
geelark_change_handle | Change @username | phone_id, account_id, new_handle |
geelark_purchase_premium | Buy X Premium subscription | account_id, phone_id, card details |
Account Management (Synchronous)
| Tool | Purpose | Key Params |
|---|
geelark_refresh_cookies | Extract fresh session cookies | account_id, phone_id |
Phone Lifecycle
| Tool | Purpose | Key Params |
|---|
geelark_launch_phone | Start a cloud phone (30-90s) | phone_id |
geelark_stop_phone | Stop a running phone | phone_id |
geelark_list_phones | List all phone profiles | (none) |
geelark_create_phone | Create new phone profile | (optional: name, proxy_country) |
geelark_destroy_phone | Delete phone profile | phone_id |
geelark_update_proxy | Rotate proxy IP | phone_id |
Debugging
| Tool | Purpose | Key Params |
|---|
geelark_take_screenshot | Screenshot for debugging | phone_id |
geelark_ui_dump | Get UI state as JSON | phone_id |
geelark_shell_execute | Run Android shell command | phone_id, command |
geelark_navigate_chrome | Open URL in Chrome | phone_id, url |
Content Discovery (x-research-mcp -- no auth required)
| Tool | Purpose | Key Params |
|---|
xr_search_tweets | Search tweets by query | query |
xr_find_reply_targets | Find tweets good for replies | topic |
xr_get_user_tweets | Get user's recent tweets | username |
xr_get_tweet | Get single tweet by ID | tweet_id |
xr_get_trending_topics | Get trending topics | (optional: niche) |
xr_analyze_engagement | Analyze tweet viral potential | tweet_id |
xr_get_account_analytics | Account-level analytics | username |
xr_get_tweet_metrics | Track tweet metrics over time | tweet_id |
Vault Management (vault-mcp)
| Tool | Purpose | Notes |
|---|
| Account listing | List vault accounts with state | Via vault-mcp tools |
| Account details | Get account credentials/metadata | From encrypted vault |
Async Polling Pattern
Most GeeLark operations are asynchronous. They return a job_id immediately.
Poll geelark_check_job_status every 10-15 seconds until the job completes.
const result = geelark_post_tweet({
account_id: "vault-uuid",
phone_id: "PHONE_ID",
text: "Tweet content",
auto_stop: true
})
let status = "running"
while (status !== "completed" && status !== "failed") {
const check = geelark_check_job_status({ job_id: result.job_id })
status = check.status
}
if (status === "completed") {
} else {
}
Exceptions (synchronous -- no polling needed):
geelark_refresh_cookies -- returns immediately (~10 seconds)
geelark_list_phones -- returns immediately
Phone Lifecycle Patterns
Single-Operation Flow (Use auto_stop)
For one-off operations, let GeeLark handle phone shutdown automatically:
geelark_post_tweet({
account_id: "uuid",
phone_id: "PHONE_ID",
text: "Hello world",
auto_stop: true
})
Multi-Operation Flow (Explicit Lifecycle)
For batch operations or multiple actions on the same account, manage the phone
lifecycle explicitly to avoid repeated start/stop overhead:
geelark_launch_phone({ phone_id: "PHONE_ID" })
const loginJob = geelark_login_x_account({
account_id: "uuid",
phone_id: "PHONE_ID",
auto_stop: false
})
const postJob = geelark_post_tweet({
account_id: "uuid",
phone_id: "PHONE_ID",
text: "...",
auto_stop: false
})
const likeJob = geelark_like_tweet({
phone_id: "PHONE_ID",
tweet_id: "...",
auto_stop: false
})
geelark_refresh_cookies({
account_id: "uuid",
phone_id: "PHONE_ID"
})
geelark_stop_phone({ phone_id: "PHONE_ID" })
Session Batching Pattern
When performing multiple actions across accounts or multiple actions on one
account, use session batching to minimize phone churn:
Key principle: Set auto_stop: false on ALL operations within a batch,
then call geelark_stop_phone once at the end.
Example: Warming batch for one account
geelark_launch_phone({ phone_id: "PHONE_ID" })
const login = geelark_login_x_account({
account_id: "uuid", phone_id: "PHONE_ID", auto_stop: false
})
for (const target of warmingTargets) {
const job = geelark_like_tweet({
phone_id: "PHONE_ID",
tweet_id: target.tweet_id,
auto_stop: false
})
}
geelark_refresh_cookies({ account_id: "uuid", phone_id: "PHONE_ID" })
geelark_stop_phone({ phone_id: "PHONE_ID" })
Example: Health check batch across accounts
geelark_launch_phone({ phone_id: "PHONE_ID" })
for (const account of accounts) {
const job = geelark_check_account_health({
account_id: account.id,
phone_id: "PHONE_ID",
auto_stop: false
})
}
geelark_stop_phone({ phone_id: "PHONE_ID" })
Warming Schedule
New accounts must be gradually warmed over 21 days to avoid X's detection systems.
Warming is agent-level orchestration -- the agent selects and executes individual
GeeLark actions based on account age.
| Day Range | Max Actions/Day | Allowed Actions (GeeLark Tools) |
|---|
| 0-3 | 2 | geelark_like_tweet only |
| 4-7 | 5 | geelark_like_tweet, geelark_follow_user |
| 8-14 | 10 | Above + geelark_reply_to_tweet |
| 15-21 | 15 | Above + geelark_post_tweet, geelark_retweet |
| 21+ | Unlimited | Full access -- account is warmed |
Warming Orchestration Steps
- Determine account age from
creation_date in vault
- Look up allowed actions and max count from schedule above
- Use
xr_search_tweets or xr_find_reply_targets to find engagement targets
- Launch phone, login, execute allowed actions via GeeLark tools
- Add 60-120 second random delays between actions
- Track daily action count to respect limits
- Stop phone after completing warming session
Content Discovery (Read-Only)
Use x-research-mcp tools (xr_*) to find content for engagement. These tools
do not require authentication and work independently of GeeLark sessions.
xr_search_tweets({ query: "topic relevant to account niche", count: 20 })
xr_find_reply_targets({ topic: "AI", max_age_hours: 2, count: 10 })
xr_get_user_tweets({ username: "target_user", count: 20 })
xr_get_tweet({ tweet_id: "1234567890" })
Safety Guardrails
Rate Limiting
- Warming accounts: Follow the warming schedule strictly (see table above)
- Active accounts: Max 50 actions per day recommended
- Delays between actions: 60-120 seconds (randomized) within a session
Unfollow Safety
geelark_unfollow_user carries the highest suspension risk on X:
- Never unfollow more per day than you follow
- Never unfollow accounts followed within 48 hours
- Maximum safe rate: 5-10 unfollows/day with 5-minute gaps
Suspension Detection
Use geelark_check_account_health to detect:
- Account suspension
- Account lock
- Challenge/verification requirements
- Run health checks at least once daily for active accounts
Cookie Freshness
- Call
geelark_refresh_cookies after every login/operation session
- Stale cookies cause API failures in other tools that may still use them
- Cookie refresh is synchronous (~10 seconds, no polling needed)
Capabilities NOT Available
These features from the old HTTP API layer are not available via GeeLark:
| Old Feature | Status | Workaround |
|---|
Thread posting (x_post_thread) | No direct tool | Post tweets sequentially with geelark_post_tweet + geelark_reply_to_tweet chaining |
Media upload (x_upload_media) | No equivalent | Deferred to V2 |
Timeline reading (x_get_timeline) | Use xr_* instead | xr_get_user_tweets for user timelines, xr_search_tweets for topic search |
Notifications (x_get_notifications) | No equivalent | Use xr_search_tweets with @handle mentions filter |
Single-tool warming (x_warming_step) | Agent-level | Agent implements warming logic using schedule + individual GeeLark tools |
Required Environment Variables
X_VAULT_PASSPHRASE # Encryption key for account vault
Prerequisites
- GeeLark cloud phone profiles must be created and have Chrome installed
- Accounts must be logged in via
geelark_login_x_account before operations
- Proxy should be configured at phone profile level via
geelark_update_proxy