Communitygithub.com

Lord1Egypt/awesome-skill-forge

通过 xurl CLI 操作 X/Twitter:发帖、搜索、私信、媒体上传、v2 API。

awesome-skill-forge 是什么?

xurl 是 X(Twitter)开发者平台官方发布的 CLI 工具,用于调用 X API。它提供了常见操作的快捷命令,同时也支持对任何 v2 端点进行类似 curl 的原始访问。所有命令均以 JSON 格式输出到标准输出。此技能支持发推、回复、引用、删除帖子、搜索、查看时间线/提及、点赞、转发、收藏、关注/取关、屏蔽/静音、私信、媒体上传以及多应用/多账户工作流等全面功能。它替代了旧版基于第三方 Python CLI 的 xitter 技能,由 X 开发者平台团队维护,支持 OAuth 2.0 PKCE(自动刷新令牌),API 覆盖范围显著扩大。在使用时,必须严格遵守安全规范:切勿读取、打印或分享 `~/.xurl` 文件内容,禁止在聊天中要求用户粘贴凭据,所有认证步骤需由用户在 agent 会话外手动完成。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/Lord1Egypt/awesome-skill-forge/tree/HEAD/skills/xurl

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

xurl — 通过官方 CLI 使用 X (Twitter) API

xurl 是 X 开发者平台为 X API 提供的官方 CLI。它支持常见操作的快捷命令,同时也可以像 curl 一样直接访问任意 v2 端点。所有命令均以 JSON 格式输出到标准输出。

此技能适用于:

  • 发布、回复、引用、删除帖子
  • 搜索帖子、阅读时间线/提及
  • 点赞、转发、收藏
  • 关注、取关、屏蔽、静音
  • 私信
  • 媒体上传(图片和视频)
  • 原始访问任意 X API v2 端点
  • 多应用/多账户工作流

此技能替代了旧的 xitter 技能(它包装了一个第三方 Python CLI)。xurl 由 X 开发者平台团队维护,支持带有自动刷新的 OAuth 2.0 PKCE,并覆盖了更大的 API 范围。


秘密安全(必读)

在 agent/LLM 会话中操作时的关键规则:

  • 永远不要读取、打印、解析、总结、上传或发送 ~/.xurl 到 LLM 上下文。
  • 永远不要要求用户将凭据/令牌粘贴到聊天中。
  • 用户必须手动在自己的机器上填写 ~/.xurl 文件中的秘密。在 Docker 中,这必须是 Hermes 工具子进程看到的 ~ 目录;请参见下面的 Docker 说明。
  • 永远不要在 agent 会话中推荐或执行带有内联秘密的身份验证命令。
  • 永远不要在 agent 会话中使用 --verbose / -v —— 它可能会暴露身份验证头/令牌。
  • 要验证凭据是否存在,只能使用:xurl auth status。

在 agent 命令中禁止使用以下标志(因为它们接受内联秘密): --bearer-token, --consumer-key, --consumer-secret, --access-token, --token-secret, --client-id, --client-secret

应用凭据注册和凭据轮换必须由用户在 agent 会话外手动完成。注册凭据后,用户在 agent 会话外通过 xurl auth oauth2 进行身份验证。令牌以 YAML 格式持久化到 ~/.xurl。每个应用都有独立的令牌。OAuth 2.0 令牌会自动刷新。


安装

选择一种方法。在 Linux 上,shell 脚本或 go install 是最简单的。

# Shell 脚本(安装到 ~/.local/bin,无需 sudo,适用于 Linux 和 macOS)
curl -fsSL https://raw.githubusercontent.com/xdevplatform/xurl/main/install.sh | bash

# Homebrew(macOS)
brew install --cask xdevplatform/tap/xurl

# npm
npm install -g @xdevplatform/xurl

# Go
go install github.com/xdevplatform/xurl@latest

验证:

xurl --help
xurl auth status

如果 xurl 已安装但 auth status 显示没有应用或令牌,用户需要手动完成身份验证 —— 请参见下一节。


一次性用户设置(用户在 agent 外运行)

这些步骤必须由用户直接执行,而不是 agent,因为它们涉及粘贴秘密。请将用户引导到此块;不要为他们执行。

  1. 在 https://developer.x.com/en/portal/dashboard 创建或打开一个应用

  2. 将重定向 URI 设置为 http://localhost:8080/callback

  3. 复制应用的客户端 ID 和客户端密钥

  4. 在本地注册应用(用户运行此命令):

    xurl auth apps add my-app --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET
    
  5. 进行身份验证(指定 --app 将令牌绑定到您的应用):

    xurl auth oauth2 --app my-app
    

    (这将打开浏览器,用于 OAuth 2.0 PKCE 流程。)

    如果 X 在 OAuth 后的 /2/users/me 查找中返回 UsernameNotFound 错误或 403,请显式传递您的用户名(xurl v1.1.0+):

    xurl auth oauth2 --app my-app YOUR_USERNAME
    

    这会将令牌绑定到您的用户名,并跳过有问题的 /2/users/me 调用。

  6. 将应用设置为默认,以便所有命令使用它:

    xurl auth default my-app
    
  7. 验证:

    xurl auth status
    xurl whoami
    

完成此操作后,agent 无需进一步设置即可使用以下任何命令。OAuth 2.0 令牌会自动刷新。

常见陷阱: 如果您在 xurl auth oauth2 中省略了 --app my-app,OAuth 令牌将保存到内置的 default 应用配置文件中 —— 该配置文件没有客户端 ID 或客户端密钥。即使 OAuth 流程看似成功,命令也将因身份验证错误而失败。如果遇到此问题,请重新运行 xurl auth oauth2 --app my-app 和 xurl auth default my-app。

Docker HOME 陷阱: 在官方的 Hermes Docker 布局中,/opt/data 是 HERMES_HOME,但 Hermes 工具子进程使用 /opt/data/home 作为 HOME。这意味着对于 Hermes 运行的 xurl 命令,~/.xurl 解析为 /opt/data/home/.xurl,而不是 /opt/data/.xurl。使用相同的 HOME 运行用户设置:

HOME=/opt/data/home xurl auth apps add my-app --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET
HOME=/opt/data/home xurl auth oauth2 --app my-app YOUR_USERNAME
HOME=/opt/data/home xurl auth default my-app YOUR_USERNAME
HOME=/opt/data/home xurl auth status

如果 HOME=/opt/data xurl auth status 成功但 HOME=/opt/data/home xurl auth status 显示没有应用或令牌,则 Hermes 工具调用将看不到这些凭据。


快速参考

操作命令
发布xurl post "Hello world!"
回复xurl reply POST_ID "Nice post!"
引用xurl quote POST_ID "My take"
删除帖子xurl delete POST_ID
读取帖子xurl read POST_ID
搜索帖子xurl search "QUERY" -n 10
我是谁xurl whoami
查找用户xurl user @handle
主页时间线xurl timeline -n 20
提及xurl mentions -n 10
点赞 / 取消点赞xurl like POST_ID / xurl unlike POST_ID
转发 / 取消转发xurl repost POST_ID / xurl unrepost POST_ID
收藏 / 移除xurl bookmark POST_ID / xurl unbookmark POST_ID
列出收藏 / 点赞xurl bookmarks -n 10 / xurl likes -n 10
关注 / 取关xurl follow @handle / xurl unfollow @handle
关注中 / 粉丝xurl following -n 20 / xurl followers -n 20
屏蔽 / 取消屏蔽xurl block @handle / xurl unblock @handle
静音 / 取消静音xurl mute @handle / xurl unmute @handle
发送私信xurl dm @handle "message"
列出私信xurl dms -n 10
上传媒体xurl media upload path/to/file.mp4
媒体状态xurl media status MEDIA_ID
列出应用xurl auth apps list
移除应用xurl auth apps remove NAME
设置默认应用xurl auth default APP_NAME [USERNAME]
按请求指定应用xurl --app NAME /2/users/me
身份验证状态xurl auth status

注意:

  • POST_ID 也接受完整 URL(例如 https://x.com/user/status/1234567890)—— xurl 会提取 ID。
  • 用户名带或不带前导 @ 均可。

命令详情

发布

xurl post "Hello world!"
xurl post "Check this out" --media-id MEDIA_ID
xurl post "Thread pics" --media-id 111 --media-id 222

xurl reply 1234567890 "Great point!"
xurl reply https://x.com/user/status/1234567890 "Agreed!"
xurl reply 1234567890 "Look at this" --media-id MEDIA_ID

xurl quote 1234567890 "Adding my thoughts"
xurl delete 1234567890

阅读与搜索

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

xurl search "golang"
xurl search "from:elonmusk" -n 20
xurl search "#buildinpublic lang:en" -n 15

对于 X Articles,请使用原始 API 模式而不是 read 快捷方式。xurl read 期望帖子 ID 或帖子 URL;不要在 read 之前放 /2/tweets/... 端点。请求 article 推文字段并从 JSON 响应中提取 data.article.plain_text:

xurl --app APP_NAME '/2/tweets/2057909493250539891?expansions=author_id,attachments.media_keys,referenced_tweets.id&tweet.fields=created_at,lang,public_metrics,context_annotations,entities,possibly_sensitive,conversation_id,in_reply_to_user_id,referenced_tweets,article'

用户、时间线、提及

xurl whoami
xurl user elonmusk
xurl user @XDevelopers

xurl timeline -n 25
xurl mentions -n 20

互动

xurl like 1234567890
xurl unlike 1234567890

xurl repost 1234567890
xurl unrepost 1234567890

xurl bookmark 1234567890
xurl unbookmark 1234567890

xurl bookmarks -n 20
xurl likes -n 20

社交图谱

xurl follow @XDevelopers
xurl unfollow @XDevelopers

xurl following -n 50
xurl followers -n 50

# 其他用户的图谱
xurl following --of elonmusk -n 20
xurl followers --of elonmusk -n 20

xurl block @spammer
xurl unblock @spammer
xurl mute @annoying
xurl unmute @annoying

私信

xurl dm @someuser "Hey, saw your post!"
xurl dms -n 25

媒体上传

# 自动检测类型
xurl media upload photo.jpg
xurl media upload video.mp4

# 显式类型/类别
xurl media upload --media-type image/jpeg --category tweet_image photo.jpg

# 视频需要服务端处理 — 检查状态(或轮询)
xurl media status MEDIA_ID
xurl media status --wait MEDIA_ID

# 完整工作流
xurl media upload meme.png                  # 返回媒体 ID
xurl post "lol" --media-id MEDIA_ID

原始 API 访问

快捷方式覆盖了常见操作。对于其他操作,请使用原始 curl 风格模式访问任何 X API v2 端点:

# GET
xurl /2/users/me

# POST 带 JSON 主体
xurl -X POST /2/tweets -d '{"text":"Hello world!"}'

# DELETE / PUT / PATCH
xurl -X DELETE /2/tweets/1234567890

# 自定义请求头
xurl -H "Content-Type: application/json" /2/some/endpoint

# 强制流式传输
xurl -s /2/tweets/search/stream

# 完整 URL 也可用
xurl https://api.x.com/2/users/me

全局标志

标志短名描述
--app使用特定的已注册应用(覆盖默认)
--auth强制认证类型:oauth1、oauth2 或 app
--username-u使用哪个 OAuth2 账户(如果存在多个)
--verbose-vagent 会话中禁止使用 — 泄露认证头
--trace-t添加 X-B3-Flags: 1 跟踪头

流式传输

流式端点会自动检测。已知的包括:

  • /2/tweets/search/stream
  • /2/tweets/sample/stream
  • /2/tweets/sample10/stream

使用 -s 在任何端点上强制流式传输。


输出格式

所有命令以 JSON 格式输出到标准输出。结构遵循 X API v2:

{ "data": { "id": "1234567890", "text": "Hello world!" } }

错误也以 JSON 格式输出:

{ "errors": [ { "message": "Not authorized", "code": 403 } ] }

常见工作流

发布带图片的帖子

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

回复对话

xurl read https://x.com/user/status/1234567890
xurl reply 1234567890 "Here are my thoughts..."

搜索并互动

xurl search "topic of interest" -n 10
xurl like POST_ID_FROM_RESULTS
xurl reply POST_ID_FROM_RESULTS "Great point!"

检查您的活动

xurl whoami
xurl mentions -n 20
xurl timeline -n 20

多个应用(凭据已手动预配置)

xurl auth default prod alice               # prod 应用, alice 用户
xurl --app staging /2/users/me             # 一次性针对 staging 应用

错误处理

  • 任何错误都会导致非零退出码。
  • API 错误仍然以 JSON 格式打印到标准输出,以便您解析。
  • 认证错误 → 让用户在 agent 会话外重新运行 xurl auth oauth2。
  • 需要调用者用户 ID 的命令(如点赞、转发、收藏、关注等)将通过 /2/users/me 自动获取。如果认证失败,会显示为认证错误。

Agent 工作流

  1. 验证先决条件:xurl --help 和 xurl auth status。
  2. 检查默认应用是否有凭据。 解析 auth status 输出。默认应用用 ▸ 标记。如果默认应用显示 oauth2: (none) 但另一个应用有有效的 oauth2 用户,请告诉用户运行 xurl auth default <that-app> 来修复。这是最常见的设置错误 —— 用户添加了一个自定义名称的应用但从未将其设置为默认,因此 xurl 一直尝试空的 default 配置文件。
  3. 如果完全缺少认证,请停止并引导用户到“一次性用户设置”部分 —— 不要尝试自行注册应用或传递秘密。
  4. 从一个廉价的读取操作开始(xurl whoami、xurl user @handle、xurl search ... -n 3)以确认可达性。
  5. 在任何写操作(发帖、回复、点赞、转发、私信、关注、屏蔽、删除)之前,确认目标帖子/用户以及用户的意图。
  6. 直接使用 JSON 输出 —— 每个响应已经是结构化的。
  7. 永远不要将 ~/.xurl 的内容粘贴回对话中。

故障排除

症状原因修复
OAuth 流程成功后出现认证错误令牌保存到 default 应用(没有客户端 ID/密钥)而不是您的命名应用xurl auth oauth2 --app my-app 然后 xurl auth default my-app
OAuth 期间出现 unauthorized_clientX 控制面板中将应用类型设置为“Native App”在用户认证设置中更改为“Web app, automated app or bot”
OAuth 后立即出现 UsernameNotFound 或 403 在 /2/users/meX 未从 /2/users/me 可靠地返回用户名重新运行 xurl auth oauth2 --app my-app YOUR_USERNAME(xurl v1.1.0+)以显式传递用户名
每个请求都返回 401令牌过期或默认应用错误检查 xurl auth status — 验证 ▸ 指向具有 oauth2 令牌的应用
client-forbidden / client-not-enrolledX 平台注册问题控制面板 → 应用 → 管理 → 移至“按使用量付费”套餐 → 生产环境
CreditsDepletedX API 余额为 $0在开发者控制台 → 账单中购买积分(最少 $5)
图片上传时出现 media processing failed默认类别是 amplify_video添加 --category tweet_image --media-type image/png
X 控制面板中有两个“客户端密钥”值UI 错误 — 第一个实际上是客户端 ID在“密钥和令牌”页面上确认;ID 以 MTpjaQ 结尾

备注

  • 速率限制: X 对每个端点强制执行速率限制。429 表示等待并重试。写入端点(发帖、回复、点赞、转发)的限制比读取更严格。
  • 作用域: OAuth 2.0 令牌使用广泛的作用域

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a insurance agency. Use when handling offer...

Lord1Egypt/awesome-skill-forge

Generates a complete landing page with copy, layout, hero image, and responsive design from a text description. Use when launching a product quickly.

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a family law practice. Use when handling offer...

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a fractional CFO firm. Use when handling offer...

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a home remodeling company. Use when handling offer...

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a HVAC service company. Use when handling offer...

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a immigration law firm. Use when handling offer...

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a CPA tax advisory firm. Use when handling offer...

Lord1Egypt/awesome-skill-forge

Generate a conversion-focused landing page that compares offers, pricing cues, and trust signals for a estate planning law firm. Use when handling...

Lord1Egypt/awesome-skill-forge

Fastest way to create or update a pawr.link profile. One curl command, $19 USDC to create, $0.10 to update. Patch-style update-links endpoint lets you add, remove, or move individual links without replacing the whole profile.

Lord1Egypt/awesome-skill-forge

Use this skill when the user wants to review today, look back on yesterday, reflect on this week, or wrap things up with a gentle, low-pressure reflection.

Lord1Egypt/awesome-skill-forge

Read-only queue dashboard for workspace-aware ship. (gstack)

Lord1Egypt/awesome-skill-forge

Landing page quality assessment for paid advertising campaigns. Evaluates message match, page speed, mobile experience, trust signals, form optimization, and conversion rate potential. Use when user says landing page, post-click experience, landing page audit, LP audit, conversion rate, landing page CRO, post-click CRO, or landing page optimization.

Lord1Egypt/awesome-skill-forge

Create HTML-based video compositions, animated title cards, social overlays, captioned talking-head videos, audio-reactive visuals, and shader transitions using HyperFrames. HTML is the source of truth for video. Use when the user wants a rendered MP4/WebM from an HTML composition, wants to animate text/logos/charts over media, needs captions synced to audio, wants TTS narration, or wants to convert a website into a video.

Lord1Egypt/awesome-skill-forge

Search arXiv papers by keyword, author, category, or ID.

Lord1Egypt/awesome-skill-forge

Delegate coding to OpenAI Codex CLI (features, PRs).

Lord1Egypt/awesome-skill-forge

Track Apple devices/AirTags via FindMy.app on macOS.

Lord1Egypt/awesome-skill-forge

Jailbreak LLMs: Parseltongue, GODMODE, ULTRAPLINIAN.

Lord1Egypt/awesome-skill-forge

Geocode, POIs, routes, timezones via OpenStreetMap/OSRM.

Lord1Egypt/awesome-skill-forge

Notion API + ntn CLI: pages, databases, markdown, Workers.

相关技能