xurl

Tool A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply,…
📦 Install
npx clawhub@latest install xurl

xurl — Agent Skill Reference

xurl is a CLI tool for the X API. It supports both shortcut commands (human/agent‑friendly one‑liners) and raw curl‑style access to any v2 endpoint. All commands return JSON to stdout.

---

Installation

Homebrew (macOS)

brew install --cask xdevplatform/tap/xurl

npm

npm install -g @xdevplatform/xurl

Shell script

curl -fsSL https://raw.githubusercontent.com/xdevplatform/xurl/main/install.sh | bash

Installs to ~/.local/bin. If it's not in your PATH, the script will tell you what to add.

Go

go install github.com/xdevplatform/xurl@latest

---

Prerequisites

This skill requires the xurl CLI utility: .

Before using any command you must be authenticated. Run xurl auth status to check.

Secret Safety (Mandatory)

Register an app (recommended)

App credential registration must be done manually by the user outside the agent/LLM session.

After credentials are registered, authenticate with:

xurl auth oauth2

For multiple pre-configured apps, switch between them:

xurl auth default prod-app          # set default app

xurl auth default prod-app alice # set default app + user

xurl --app dev-app /2/users/me # one-off override

Other auth methods

Examples with inline secret flags are intentionally omitted. If OAuth1 or app-only auth is needed, the user must run those commands manually outside agent/LLM context.

Tokens are persisted to ~/.xurl in YAML format. Each app has its own isolated tokens. Do not read this file through the agent/LLM. Once authenticated, every command below will auto‑attach the right Authorization header.

---

Quick Reference

ActionCommand
Postxurl post "Hello world!"
Replyxurl reply POST_ID "Nice post!"
Quotexurl quote POST_ID "My take"
Delete a postxurl delete POST_ID
Read a postxurl read POST_ID
Search postsxurl search "QUERY" -n 10
Who am Ixurl whoami
Look up a userxurl user @handle
Home timelinexurl timeline -n 20
Mentionsxurl mentions -n 10
Likexurl like POST_ID
Unlikexurl unlike POST_ID
Repostxurl repost POST_ID
Undo repostxurl unrepost POST_ID
Bookmarkxurl bookmark POST_ID
Remove bookmarkxurl unbookmark POST_ID
List bookmarksxurl bookmarks -n 10
List likesxurl likes -n 10
Followxurl follow @handle
Unfollowxurl unfollow @handle
List followingxurl following -n 20
List followersxurl followers -n 20
Blockxurl block @handle
Unblockxurl unblock @handle
Mutexurl mute @handle
Unmutexurl unmute @handle
Send DMxurl dm @handle "message"
List DMsxurl dms -n 10
Upload mediaxurl media upload path/to/file.mp4
Media statusxurl media status MEDIA_ID
App Management
Register appManual, outside agent (do not pass secrets via agent)
List appsxurl auth apps list
Update app credsManual, outside agent (do not pass secrets via agent)
Remove appxurl auth apps remove NAME
Set default (interactive)xurl auth default
Set default (command)xurl auth default APP_NAME [USERNAME]
Use app per-requestxurl --app NAME /2/users/me
Auth statusxurl auth status

> Post IDs vs URLs: Anywhere POST_ID appears above you can also paste a full post URL (e.g. https://x.com/user/status/1234567890) — xurl extracts the ID automatically.

> Usernames: Leading @ is optional. @elonmusk and elonmusk both work.

---

Command Details

Posting

# Simple post

xurl post "Hello world!"

Post with media (upload first, then attach)

xurl media upload photo.jpg # → note the media_id from response

xurl post "Check this out" --media-id MEDIA_ID

Multiple media

xurl post "Thread pics" --media-id 111 --media-id 222

Reply to a post (by ID or URL)

xurl reply 1234567890 "Great point!"

xurl reply https://x.com/user/status/1234567890 "Agreed!"

Reply with media

xurl reply 1234567890 "Look at this" --media-id MEDIA_ID

Quote a post

xurl quote 1234567890 "Adding my thoughts"

Delete your own post

xurl delete 1234567890

Reading

# Read a single post (returns author, text, metrics, entities)

xurl read 1234567890

xurl read https://x.com/user/status/1234567890

Search recent posts (default 10 results)

xurl search "golang"

xurl search "from:elonmusk" -n 20

xurl search "#buildinpublic lang:en" -n 15

User Info

# Your own profile

xurl whoami

Look up any user

xurl user elonmusk

xurl user @XDevelopers

Timelines & Mentions

# Home timeline (reverse chronological)

xurl timeline

xurl timeline -n 25

Your mentions

xurl mentions

xurl mentions -n 20

Engagement

# Like / unlike

xurl like 1234567890

xurl unlike 1234567890

Repost / undo

xurl repost 1234567890

xurl unrepost 1234567890

Bookmark / remove

xurl bookmark 1234567890

xurl unbookmark 1234567890

List your bookmarks / likes

xurl bookmarks -n 20

xurl likes -n 20

Social Graph

# Follow / unfollow

xurl follow @XDevelopers

xurl unfollow @XDevelopers

List who you follow / your followers

xurl following -n 50

xurl followers -n 50

List another user's following/followers

xurl following --of elonmusk -n 20

xurl followers --of elonmusk -n 20

Block / unblock

xurl block @spammer

xurl unblock @spammer

Mute / unmute

xurl mute @annoying

xurl unmute @annoying

Direct Messages

# Send a DM

xurl dm @someuser "Hey, saw your post!"

List recent DM events

xurl dms

xurl dms -n 25

Media Upload

# Upload a file (auto‑detects type for images/videos)

xurl media upload photo.jpg

xurl media upload video.mp4

Specify type and category explicitly

xurl media upload --media-type image/jpeg --category tweet_image photo.jpg

Check processing status (videos need server‑side processing)

xurl media status MEDIA_ID

xurl media status --wait MEDIA_ID # poll until done

Full workflow: upload then post

xurl media upload meme.png # response includes media id

xurl post "lol" --media-id MEDIA_ID

---

Global Flags

These flags work on every command:

FlagShortDescription
--appUse a specific registered app for this request (overrides default)
--authForce auth type: oauth1, oauth2, or app
--username-uWhich OAuth2 account to use (if you have multiple)
--verbose-vForbidden in agent/LLM sessions (can leak auth headers/tokens)
--trace-tAdd X-B3-Flags: 1 trace header

---

Raw API Access

The shortcut commands cover the most common operations. For anything else, use xurl's raw curl‑style mode — it works with any X API v2 endpoint:

# GET request (default)

xurl /2/users/me

POST with JSON body

xurl -X POST /2/tweets -d '{"text":"Hello world!"}'

PUT, PATCH, DELETE

xurl -X DELETE /2/tweets/1234567890

Custom headers

xurl -H "Content-Type: application/json" /2/some/endpoint

Force streaming mode

xurl -s /2/tweets/search/stream

Full URLs also work

xurl https://api.x.com/2/users/me

---

Streaming

Streaming endpoints are auto‑detected. Known streaming endpoints include:

You can force streaming on any endpoint with -s:

xurl -s /2/some/endpoint

---

Output Format

All commands return JSON to stdout, pretty‑printed with syntax highlighting. The output structure matches the X API v2 response format. A typical response looks like:

{

"data": {

"id": "1234567890",

"text": "Hello world!"

}

}

Errors are also returned as JSON:

{

"errors": [

{

"message": "Not authorized",

"code": 403

}

]

}

---

Common Workflows

Post with an image

# 1. Upload the image

xurl media upload photo.jpg

2. Copy the media_id from the response, then post

xurl post "Check out this photo!" --media-id MEDIA_ID

Reply to a conversation

# 1. Read the post to understand context

xurl read https://x.com/user/status/1234567890

2. Reply

xurl reply 1234567890 "Here are my thoughts..."

Search and engage

# 1. Search for relevant posts

xurl search "topic of interest" -n 10

2. Like an interesting one

xurl like POST_ID_FROM_RESULTS

3. Reply to it

xurl reply POST_ID_FROM_RESULTS "Great point!"

Check your activity

# See who you are

xurl whoami

Check your mentions

xurl mentions -n 20

Check your timeline

xurl timeline -n 20

Set up multiple apps

# App credentials must already be configured manually outside agent/LLM context.

Authenticate users on each pre-configured app

xurl auth default prod

xurl auth oauth2 # authenticates on prod app

xurl auth default staging

xurl auth oauth2 # authenticates on staging app

Switch between them

xurl auth default prod alice # prod app, alice user

xurl --app staging /2/users/me # one-off request against staging

---

Error Handling

---

Notes

← Back to all skills

Get openclaw-cli free

Install in one command and start monitoring your AI gateway.

npm install -g openclaw-cli