skills/xc-cli/SKILL.md
X/Twitter CLI using the official API v2 with OAuth 2.0. Read, search, post, manage engagement, blocks, mutes, DMs, bookmarks, bookmark sync/search, lists, followers, trends, and track API costs.
npx skillsauth add cryppadotta/xc xcInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use xc to interact with X (Twitter) via the official API. Pay-per-use with built-in cost tracking — no cookie scraping.
npm install -g @dotta/xc
Requires Node.js >= 18.
xc requires OAuth 2.0 credentials from the X Developer Portal.
http://127.0.0.1:3391/callback# Interactive OAuth login (opens browser)
xc auth login --client-id <YOUR_CLIENT_ID>
# With client secret (enables automatic token refresh)
xc auth login --client-id <YOUR_CLIENT_ID> --client-secret <YOUR_SECRET>
# Check auth status
xc auth status
# App-only Bearer token (read-only, for streaming/usage)
xc auth token <BEARER_TOKEN>
xc auth login --account work --client-id <CLIENT_ID>
xc auth switch work
xc search "query" --account work
Config stored in ~/.xc/ (or $XC_CONFIG_DIR).
After upgrading: re-authenticate with xc auth login to grant new scopes (block, mute, tweet.moderate).
# Identity
xc whoami # Who am I?
xc auth status # Auth status for all accounts
# Reading
xc get <post-id-or-url> # Get a post by ID or URL (articles show full body)
xc get https://x.com/user/status/123 # Get a post by URL
xc search "query" -n 10 # Search recent posts (7-day window)
xc search "from:username" -n 5 # Search by author
xc user <username> # Look up user profile
xc usersearch "query" # Search for users by keyword
xc timeline -n 10 # Home timeline
xc timeline <username> -n 10 # User's posts
xc mentions # Your mentions timeline
xc mentions <username> # Another user's mentions
# Posting
xc post "Hello world" # Create a post
xc post "Reply" --reply <post-id> # Reply to a post
xc post "Look" --quote <post-id> # Quote a post
xc post "1/3" --thread "2/3" "3/3" # Post a thread
xc post "Photo" --media image.jpg # Post with media (paid tier)
xc delete <post-id> # Delete a post
# Engagement
xc like <post-id> # Like a post
xc unlike <post-id> # Unlike a post
xc repost <post-id> # Repost a post
xc unrepost <post-id> # Undo a repost
xc bookmark <post-id-or-url> # Bookmark a post and hydrate it into the local cache
xc unbookmark <post-id-or-url> # Remove bookmark from X (cache entry stays local)
# Bookmarks
xc bookmarks remote # List bookmarks directly from X
xc bookmarks remote --limit 50 # Larger remote page
xc bookmarks local sync # Sync local bookmark cache (default 30-day post window)
xc bookmarks local sync --days 60 # Extend coverage window
xc bookmarks local sync --max-pages 3
xc bookmarks local list # Browse cached bookmarks
xc bookmarks local list --author dotta --has-link
xc bookmarks local search "agent memory"
xc bookmarks local show <post-id-or-url>
xc bookmarks local status # Local cache counts, sync window, oldest cached post
xc bookmarks local sql 'select count(*) from bookmark_posts'
# Engagement lookups
xc quotes <post-id> # List quote tweets of a post
xc likes <post-id> # List users who liked a post
xc reposts <post-id> # List users who reposted a post
xc liked # Posts you've liked
xc liked <username> # Posts a user has liked
# Reply moderation
xc hide <post-id> # Hide a reply
xc unhide <post-id> # Unhide a reply
# Social
xc followers <username> -n 20 # List followers
xc following <username> -n 20 # List following
xc follow <username> # Follow a user
xc unfollow <username> # Unfollow a user
# Blocking & Muting
xc block <username> # Block a user
xc unblock <username> # Unblock a user
xc blocked # List blocked users
xc mute <username> # Mute a user
xc unmute <username> # Unmute a user
xc muted # List muted users
# Lists
xc lists # List owned lists
xc list view <list-id> # View posts in a list
xc list create "My List" # Create a list
xc list create "Private" --private # Create a private list
xc list update <id> --name "New" # Update a list
xc list delete <id> # Delete a list
xc list members <id> # List members
xc list add <id> <username> # Add member
xc list remove <id> <username> # Remove member
xc list follow <id> # Follow a list
xc list unfollow <id> # Unfollow a list
xc list pin <id> # Pin a list
xc list unpin <id> # Unpin a list
# Trends
xc trends # Personalized trends
xc trends --global # Worldwide trends
xc trends <woeid> # Trends by location (WOEID)
# DMs (paid tier required)
xc dm list # List DM conversations
xc dm history <username> # DM history with user
xc dm send <username> "message" # Send a DM
# Streaming (requires Bearer Token auth)
xc stream rules # List stream rules
xc stream add "query" # Add filter rule
xc stream remove <rule-id> # Remove rule
xc stream clear # Remove all rules
xc stream connect # Connect to live stream
# Cost tracking
xc cost # Spending summary (1h/24h/7d/30d)
xc cost --daily # Day-by-day breakdown
xc cost log # Raw request log
# Budget
xc budget show # Current budget and spend
xc budget set --daily 2.00 # Set $2/day limit (warns when exceeded)
xc budget set --daily 5.00 --action block # Block when over budget
# API usage
xc usage # X API usage stats (Bearer Token only)
--quiet.--json for machine-readable output.--account <name> on any command, or xc auth switch <name>.block.read/write, mute.read/write, tweet.moderate.write. If you get 403 errors, re-authenticate to pick up new scopes.stream and usage commands require app-only Bearer Token auth (xc auth token <TOKEN>), not OAuth 2.0.-n value.xc bookmarks local ... reads from per-account SQLite at ~/.xc/bookmarks/<account>.db (or $XC_CONFIG_DIR/bookmarks/<account>.db).xc bookmarks local sync prints Request cost this sync: $... for the current run.--days refers to bookmarked posts' created_at, not when you bookmarked them. X does not expose bookmarked_at.xc bookmarks remote and xc bookmarks local sync can only ingest what the API returns.Always confirm with the user before posting. Never post, like, repost, follow, block, mute, or send DMs without explicit approval. Read operations (search, timeline, user lookup, mentions, trends) are safe to run freely.
When composing posts:
--thread for longer contentxc delete <id># Search and summarize recent discussion about a topic
xc search "topic" -n 10 --json | jq '.[] | {text: .text, author: .author}'
# Post a thread
xc post "1/ Here's a thread about..." --thread "2/ Second point" "3/ Final thought"
# Check spending before a batch operation
xc budget show
xc cost --daily
# See who engaged with a post
xc likes <post-id>
xc reposts <post-id>
xc quotes <post-id>
# Manage your block/mute lists
xc blocked --json
xc muted --json
# Build a local bookmark archive and search it offline
xc bookmarks local sync --days 30
xc bookmarks local search "paperclip agents"
xc bookmarks local list --has-link --has-media
xc bookmarks local show https://x.com/user/status/123
# Inspect local bookmark storage directly
xc bookmarks local status
xc bookmarks local sql 'select count(*) from bookmark_posts'
Use this when the user wants bookmark search, bookmark archive stats, or cheap repeated access after an initial sync.
xc bookmarks remote reads live from X and costs API calls every time.xc bookmarks local ... reads from the local SQLite cache after sync and is effectively free after ingestion.xc bookmarks local status
xc bookmarks local sync --days 30
xc bookmarks local search "query"
xc bookmarks local show <post-id-or-url>
xc bookmarks local sync [--days N] [--max-pages N] [--account NAME] [--json]
xc bookmarks local status [--account NAME] [--json]
xc bookmarks local list [--author QUERY] [--days N|--since RFC3339] [--before RFC3339] [--has-link] [--has-media] [-n N] [--account NAME] [--json]
xc bookmarks local search <query> [--author QUERY] [--days N|--since RFC3339] [--before RFC3339] [--has-link] [--has-media] [-n N] [--account NAME] [--json]
xc bookmarks local show <post-id-or-url> [--account NAME] [--json]
xc bookmarks local sql '<read-only sql>' [--account NAME] [--json]
note_tweet) when availablestatus or sqlunbookmark removes from X but does not purge the cached local archive rowsql is read-only by designtools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.