{/* 本页面由 website/scripts/generate-skill-docs.py 从技能 SKILL.md 自动生成。请编辑源 SKILL.md 而非本页面。 */}
Xurl
通过 xurl CLI 使用 X/Twitter:发帖、搜索、私信、媒体、v2 API。
技能元数据
| 来源 | 内置(默认安装) |
| 路径 | skills/social-media/xurl |
| 版本 | 1.1.1 |
| 作者 | xdevplatform + openclaw + Hermes Agent |
| 许可证 | MIT |
| 平台 | linux, macos |
| 标签 | twitter, x, social-media, xurl, official-api |
参考:完整 SKILL.md
:::info 以下是此技能被触发时 Hermes 加载的完整技能定义。这是技能激活时代理所看到的指令。 :::
xurl — 通过官方 CLI 使用 X(Twitter)API
xurl 是 X 开发者平台的 X API 官方 CLI。它支持常见操作的快捷命令以及对任何 v2 端点的原始 curl 风格访问。所有命令均输出 JSON 到标准输出。
使用此技能用于:
- 发帖、回复、引用、删帖
- 搜索帖子和阅读时间线/提及
- 点赞、转发、收藏
- 关注、取消关注、屏蔽、静音
- 私信
- 媒体上传(图片和视频)
- 对任何 X API v2 端点的原始访问
- 多应用/多账户工作流程
此技能取代了旧的 xitter 技能(它封装了一个第三方 Python CLI)。xurl 由 X 开发者平台团队维护,支持带有自动刷新的 OAuth 2.0 PKCE,并覆盖了更大的 API 面。
密钥安全(强制)
在代理/LLM 会话中操作时的关键规则:
- 切勿读取、打印、解析、总结、上传或发送
~/.xurl到 LLM 上下文。 - 切勿要求用户在聊天中粘贴凭据/令牌。
- 用户必须在其自己的机器上手动填写
~/.xurl中的密钥。 - 切勿在代理会话中推荐或执行带有内联密钥的认证命令。
- 切勿在代理会话中使用
--verbose/-v——它可能暴露认证头/令牌。 - 验证凭据是否存在,仅使用:
xurl auth status。
代理命令禁止的标志(它们接受内联密钥):
--bearer-token、--consumer-key、--consumer-secret、--access-token、--token-secret、--client-id、--client-secret
应用凭据注册和凭据轮换必须由用户在代理会话之外手动完成。凭据注册后,用户在代理会话之外使用 xurl auth oauth2 进行认证。令牌持久化存储到 ~/.xurl(YAML 格式)。每个应用具有隔离的令牌。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 显示没有应用或令牌,用户需要手动完成认证——参见下一节。
一次性用户设置(用户在代理外运行)
这些步骤必须由用户直接执行,非由代理执行,因为它们涉及粘贴密钥。引导用户查看此块;不要为他们执行。
-
将重定向 URI 设置为
http://localhost:8080/callback -
复制应用的 Client ID 和 Client Secret
-
本地注册应用(用户运行):
xurl auth apps add my-app --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET -
认证(指定
--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调用。 -
将应用设置为默认,以便所有命令使用它:
xurl auth default my-app -
验证:
xurl auth status xurl whoami
之后,代理可以使用以下任何命令而无需进一步设置。OAuth 2.0 令牌自动刷新。
常见问题: 如果从
xurl auth oauth2中省略--app my-app,OAuth 令牌会保存到内置的default应用配置文件中——该配置文件没有 client-id 或 client-secret。命令会因认证错误而失败,即使 OAuth 流程看似成功。如果遇到此问题,重新运行xurl auth oauth2 --app my-app和xurl auth default my-app。
快速参考
| 操作 | 命令 |
|---|---|
| 发帖 | 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用户、时间线、提及
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 访问
快捷方式涵盖常见操作。对于其他操作,使用针对任何 X API v2 端点的原始 curl 风格模式:
# GET
xurl /2/users/me
# POST with JSON body
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 | -v | 代理会话中禁止——泄漏认证头 |
--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 形式打印到标准输出,因此你可以解析它们。
- 认证错误 → 让用户在代理会话外重新运行
xurl auth oauth2。 - 需要调用者用户 ID 的命令(点赞、转发、收藏、关注等)会自动通过
/2/users/me获取。该处的认证失败表现为认证错误。
代理工作流程
- 验证前提条件:
xurl --help和xurl auth status。 - 检查默认应用是否有凭据。 解析
auth status输出。默认应用标记为▸。如果默认应用显示oauth2: (none)但其他应用有有效的 oauth2 用户,告诉用户运行xurl auth default <that-app>来修复。这是最常见的设置错误——用户添加了自定义名称的应用但从未将其设置为默认,因此 xurl 一直尝试空的default配置文件。 - 如果认证完全缺失,停止并引导用户查看”一次性用户设置”部分——不要尝试自行注册应用或传递密钥。
- 从低成本读取开始(
xurl whoami、xurl user @handle、xurl search ... -n 3)以确认可访问性。 - 在任何写入操作(发帖、回复、点赞、转发、私信、关注、屏蔽、删除)之前,确认目标帖子/用户和用户的意图。
- 直接使用 JSON 输出——每个响应已经结构化。
- 切勿将
~/.xurl内容粘贴回对话中。
故障排除
| 症状 | 原因 | 修复 |
|---|---|---|
| OAuth 流程成功后的认证错误 | 令牌保存到 default 应用(无 client-id/secret)而非你的命名应用 | xurl auth oauth2 --app my-app 然后 xurl auth default my-app |
OAuth 期间 unauthorized_client | X 仪表板中的应用类型设置为”原生应用” | 在用户认证设置中更改为”Web 应用、自动化应用或机器人” |
OAuth 后 /2/users/me 上的 UsernameNotFound 或 403 | X 不通过 /2/users/me 可靠地返回用户名 | 重新运行 xurl auth oauth2 --app my-app YOUR_USERNAME(xurl v1.1.0+)显式传递句柄 |
| 每个请求都返回 401 | 令牌过期或错误的默认应用 | 检查 xurl auth status——验证 ▸ 指向具有 oauth2 令牌的应用 |
client-forbidden / client-not-enrolled | X 平台注册问题 | 仪表板 → 应用 → 管理 → 移至”按使用量付费”套餐 → 生产环境 |
CreditsDepleted | X API 余额为 $0 | 在开发者控制台 → 结算中购买积分(最低 $5) |
图片上传时 media processing failed | 默认类别是 amplify_video | 添加 --category tweet_image --media-type image/png |
| X 仪表板中有两个”Client Secret”值 | UI 错误——第一个实际上是 Client ID | 在”密钥和令牌”页面上确认;ID 以 MTpjaQ 结尾 |
注意
- 速率限制: X 对每个端点实施速率限制。429 意味着等待并重试。写入端点(发帖、回复、点赞、转发)的限制比读取更严格。
- 作用域: OAuth 2.0 令牌使用广泛的作用域。特定操作上的 403 通常意味着令牌缺少某个作用域——让用户重新运行
xurl auth oauth2。 - 令牌刷新: OAuth 2.0 令牌自动刷新。无需操作。
- 多个应用: 每个应用具有隔离的凭据/令牌。使用
xurl auth default或--app切换。 - 每个应用多个账户: 使用
-u / --username选择,或使用xurl auth default APP USER设置默认。 - 令牌存储:
~/.xurl是 YAML 格式。切勿读取或发送此文件到 LLM 上下文。 - 费用: X API 访问通常需要付费才能有意义地使用。许多失败是套餐/权限问题,而非代码问题。
归属
- 上游 CLI:https://github.com/xdevplatform/xurl(X 开发者平台团队,Chris Park 等)
- 上游代理技能:https://github.com/openclaw/openclaw/blob/main/skills/xurl/SKILL.md
- Hermes 适配:按照 Hermes 技能约定重新格式化;安全护栏逐字保留。