xurl
Official CLI for the X API.
Primary upstream: https://github.com/xdevplatform/xurl
Install
Homebrew:
bashbrew install --cask xdevplatform/tap/xurl
npm:
bashnpm install -g @xdevplatform/xurl
Shell script:
bashcurl -fsSL https://raw.githubusercontent.com/xdevplatform/xurl/main/install.sh | bash
Go:
bashgo install github.com/xdevplatform/xurl@latest
Safety
- Never read, print, summarize, upload, or paste
~/.xurlinto LLM context. - Never ask the user to paste client secrets, bearer tokens, or OAuth tokens into chat.
- Never use
--verbosein agent runs; it can expose auth headers. - Do not run auth commands with inline secret flags in an agent session.
- The user must register app credentials manually on their machine outside the agent session.
Auth
Check current state:
bashxurl auth status
If an app is already registered, complete OAuth 2.0:
bashxurl auth oauth2
Multi-app:
bashxurl auth apps list xurl auth default my-app xurl auth default my-app alice xurl --app dev-app /2/users/me
Notes:
xurlstores app config and tokens in~/.xurl.- OAuth 2.0 redirect URI in the X developer portal should be
http://localhost:8080/callback. - App registration examples with inline secrets are intentionally omitted here. Do that outside the agent session.
Common shortcuts
bashxurl post "Hello world!" xurl reply 1234567890 "Nice post" xurl quote 1234567890 "My take" xurl delete 1234567890 xurl read 1234567890 xurl search "from:elonmusk" -n 10 xurl whoami xurl user @XDevelopers xurl timeline -n 20 xurl mentions -n 10 xurl like 1234567890 xurl unlike 1234567890 xurl repost 1234567890 xurl unrepost 1234567890 xurl bookmark 1234567890 xurl unbookmark 1234567890 xurl bookmarks -n 10 xurl likes -n 10 xurl follow @handle xurl unfollow @handle xurl following -n 20 xurl followers -n 20 xurl dm @handle "message" xurl dms -n 10 xurl media upload path/to/file.mp4 xurl media status MEDIA_ID
POST_ID can also be a full X status URL.
Raw endpoint mode
GET:
bashxurl /2/users/me
POST JSON:
bashxurl -X POST /2/tweets -d '{"text":"Hello world!"}'
Headers:
bashxurl -H "Content-Type: application/json" /2/tweets
Choose auth type:
bashxurl --auth oauth2 /2/users/me xurl --auth oauth1 /2/tweets xurl --auth app /2/users/me
Choose OAuth2 account:
bashxurl --username alice /2/users/me
Streaming:
bashxurl /2/tweets/search/stream xurl -s /2/users/me
Quick checks
Install:
bashxurl version
Auth:
bashxurl auth status
Live request after auth:
bashxurl whoami

