自动将内容和文章发布到 X (Twitter)。支持带图片/视频的普通推文以及 X 文章(长文本 Markdown)。在 Codex 中,若用户明确要求使用 Codex Chrome 插件/@chrome,请使用 Chrome 扩展工作流;否则在可用时优先使用 Chrome Computer Use,仅在允许的情况下退回到真实 Chrome CDP 脚本模式。当用户要求“发布到 X”、“发推”、“发布到 Twitter”或“在 X 上分享”时使用。
发布到 X (Twitter)
通过真实 Chrome 浏览器向 X 发布文本、图片、视频和长文。
在 Codex 中,请勿混淆以下几种浏览器操作路径:
- Codex Chrome 插件 /
@chrome/ Chrome Extension:使用内置的chrome:ChromeSkill 及其 Node REPL 浏览器客户端。当用户提到“Codex Chrome plugin”、“Codex 自带的 Chrome 插件”、@chrome或类似表述时,必须使用此模式。 - Chrome Computer Use:仅在用户明确要求使用 Computer Use,或者未指定 Chrome 插件偏好且 Computer Use 可用时,调用
mcp__computer_use__.*针对可见的 Google Chrome UI 进行操作。 - CDP 脚本模式:仅在选定的模式不可用,或者用户明确要求使用 CDP/脚本模式时作为备用方案。
脚本目录
重要提醒:所有脚本均位于本 Skill 的 scripts/ 子目录下。
Agent 执行指南:
- 获取当前 SKILL.md 文件所在的目录路径,记为
{baseDir} - 脚本路径 =
{baseDir}/scripts/<脚本名称>.ts - 将本文档中所有的
{baseDir}替换为实际路径 - 解析
${BUN_X}运行环境:若已安装bun→ 使用bun;若npx可用 → 使用npx -y bun;否则提示用户安装 bun
脚本参考:
| 脚本 | 用途 |
|---|---|
scripts/x-browser.ts |
普通推文(文本 + 图片),CDP 备用 |
scripts/x-video.ts |
视频推文(文本 + 视频),CDP 备用 |
scripts/x-quote.ts |
引用推文(附带评论),CDP 备用 |
scripts/x-article.ts |
长文发布(Markdown),CDP 备用 |
scripts/md-to-html.ts |
Markdown 转 HTML |
scripts/copy-to-clipboard.ts |
复制内容至剪贴板 |
scripts/paste-from-clipboard.ts |
发送真实粘贴按键 |
scripts/check-paste-permissions.ts |
环境与权限检查 |
执行模式选择(必选)
在与 X 交互之前,必须明确选择一种模式:
- 若用户明确要求使用 Codex Chrome 插件、
@chrome、Chrome 扩展或“Codex 自带的 Chrome 插件”,请使用 Codex Chrome 插件模式。切勿先调用 Computer Use。 - 若用户明确要求使用 Chrome Computer Use,请使用 Chrome Computer Use 模式。未经用户同意,切勿擅自退回到 CDP、Playwright、内置浏览器或 Chrome 插件。
- 若用户明确要求使用 CDP/脚本模式,请使用 CDP 脚本模式。
- 其他情况下,优先选择 Chrome Computer Use 模式。对于包含本地正文图片的 Markdown X 文章,请使用经测试验证的 X 编辑器流程:通过工具栏(
Insert->Media-> 弹窗图标按钮Add photos or video)在占位符处插入每张正文图片,然后删除占位符文本。仅在选定的浏览器控制模式不可用或 UI 上传/选择流程不稳定时,才使用 CDP 脚本模式。
切勿将内置浏览器用于 X 发布工作流。
Codex Chrome 插件模式
每当用户要求使用 Codex Chrome 插件、@chrome 或 Chrome 扩展路径时,使用此模式。该模式通过内置 Chrome 插件直接使用用户的真实 Chrome 配置和 X 登录状态,而非 Computer Use 或 CDP。
初始化设置
- 在进行浏览器操作前,先加载
chrome:ChromeSkill。 - 如果 Node REPL 的
js工具尚不可见,请使用tool_search搜索node_repl js。 - 严格按照 Chrome Skill 的说明初始化 Chrome 浏览器客户端,然后执行一次轻量调用(如
browser.user.openTabs())以验证扩展连接。 - 若首次轻量调用失败,请等待 2 秒后重试一次。若依然失败,请按照 Chrome Skill 的扩展检查与恢复步骤处理。若检查通过但通信仍失败,请在打开新 Chrome 窗口前询问用户,切勿静默切换到 Computer Use 或 CDP。
通用规则
- 在 X UI 操作中,请使用 Chrome 插件的
browser.tabs.*、tab.playwright.*、tab.cua.*及文件选择器 API。 - 允许使用 Shell 命令进行 Markdown 预处理和富文本 HTML 剪贴板准备。对于 X 文章的正文图片,请勿依赖剪贴板粘贴图片,务必使用编辑器的
Insert->Media上传流程。 - 若文件上传失败并提示
Not allowed,请告知用户:如需开启文件上传权限,请在 Chrome 中打开 chrome://extensions,点击 Codex 扩展下的“详细信息”,并勾选“允许访问文件网址”。详情参阅 https://developers.openai.com/codex/app/chrome-extension#upload-files。 - 若 Chrome 插件报错
native pipe is closed,请在 2 秒后重试一次轻量浏览器调用,然后运行 Chrome Skill 健康检查。若 Chrome 正在运行、扩展已启用且原生宿主配置无误,请在征得许可后打开新 Chrome 窗口重试。切勿继续向已断开的管道发送浏览器操作指令。 - 未在当前对话中获得用户的明确最终确认之前,绝不可点击
Publish、Post或任何对外可见的提交按钮。
X 文章
- 转换 Markdown 并保留图片映射:
${BUN_X} {baseDir}/scripts/md-to-html.ts article.md --save-html /tmp/x-article-body.html > /tmp/x-article.json - 读取 JSON 输出中的
title、coverImage以及contentImages(placeholder→localPath)。 - 打开或创建文章草稿(访问
https://x.com/compose/articles)。 - 使用 Chrome 插件文件选择器流程上传封面。若上传因扩展权限受阻,请暂停并提示上述权限修复方案。
- 填写标题,然后复制富文本 HTML:
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html - 通过 Chrome 插件发送真实粘贴按键将内容粘贴到文章正文区域。macOS 上使用
Meta+V。 - 检查编辑器文本是否包含文章正文及
XIMGPH_占位符。Shell 命令写入剪贴板后,切勿将tab.clipboard.readText()作为系统剪贴板校验依据;macOS 上必要时可使用pbpaste进行验证。 - 按占位符顺序依次处理
contentImages中的每一项:- 找到可见的占位符文本(
XIMGPH_N)并点击,将光标定位至该处。 - 打开工具栏菜单
Insert->Media。 - 在弹窗中,点击
aria-label="Add photos or video"的图标按钮;不要点击文本/拖拽区或隐藏的文件输入框。 - 使用文件选择器上传该图片的
localPath。 - 图片显示后,若上方仍残留
XIMGPH_N,优先精确选中该占位符文本并按Delete删除;仅在Delete失败且已确认选中文本确实为该占位符时,才使用Backspace。 - 确认该
XIMGPH_N的占位符计数已归零(为0)。
- 找到可见的占位符文本(
- 打开预览,检查标题、封面、正文、链接及图片是否正常。
- 在点击
Publish之前,必须请求用户的明确确认。
偏好设置 (EXTEND.md)
按优先级顺序检查 EXTEND.md(命中即止):
| 优先级 | 路径 | 作用域 |
|---|---|---|
| 1 | .baoyu-skills/baoyu-post-to-x/EXTEND.md |
项目 |
| 2 | ${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-post-to-x/EXTEND.md |
XDG |
| 3 | $HOME/.baoyu-skills/baoyu-post-to-x/EXTEND.md |
用户主目录 |
若均未找到,则使用默认设置。
EXTEND.md 支持: 默认 Chrome 配置(Profile)
前置条件
- Google Chrome 或 Chromium
bun运行时- 首次运行:手动登录 X(登录状态会被保存)
环境预检(可选)
首次使用前,建议运行环境检查。用户也可自行选择跳过。
${BUN_X} {baseDir}/scripts/check-paste-permissions.ts
检查项包括:Chrome、配置隔离、Bun、辅助功能权限(Accessibility)、剪贴板、粘贴按键模拟、Chrome 冲突。
若有检查项失败,请按对应项目提供修复指引:
| 检查项 | 修复方案 |
|---|---|
| Chrome | 安装 Chrome 或设置 X_BROWSER_CHROME_PATH 环境变量 |
| 配置目录 | 共享配置目录位于 baoyu-skills/chrome-profile(详见 CLAUDE.md 的 Chrome Profile 章节) |
| Bun 运行时 | brew install oven-sh/bun/bun (macOS) 或 npm install -g bun |
| 辅助功能权限 (macOS) | 系统设置 → 隐私与安全性 → 辅助功能 → 勾选对应的终端应用 |
| 剪贴板复制 | 确保 Swift/AppKit 可用(macOS Xcode 命令行工具:xcode-select --install) |
| 粘贴按键 (macOS) | 同上方的辅助功能权限修复方案 |
| 粘贴按键 (Linux) | 安装 xdotool (X11) 或 ydotool (Wayland) |
参考文档
- 普通推文:参阅
references/regular-posts.md获取手动工作流、排障指南及技术细节 - X 文章:参阅
references/articles.md获取长文发布指南
Chrome Computer Use 模式
当用户明确要求使用 Chrome Computer Use,或者未指定 Chrome 插件偏好且 Codex 能够通过 Computer Use 控制 Google Chrome 时使用此模式。该模式直接复用用户现有的 Chrome 窗口、Cookie、登录状态、扩展和 X 会话。
通用规则:
- 在控制 Chrome 的每个助手轮次开始时,先调用
Google Chrome的get_app_state。 - 优先选择基于元素索引的操作;仅在编辑器文本选择或拖拽选择时使用坐标定位。
- 在此模式下,除非用户批准变更模式,否则切勿将内置浏览器、Chrome 插件、Playwright 或 CDP 用于 X UI 操作。
- 未在当前对话中获得用户的明确最终确认之前,绝不可点击
Publish、Post或任何对外可见的提交按钮。
普通推文:
- 打开 Chrome 或导航至
https://x.com/compose/post。 - 使用 Computer Use 在编辑器中输入推文文本。
- 针对每张图片,运行:
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts image /absolute/path/to/image.png - 使用 Computer Use 执行粘贴操作(macOS 上为
super+v,Windows/Linux 上为control+v),等待 X 完成媒体文件上传。 - 在点击
Post前请求确认。
视频推文:
- 打开 Chrome 或导航至
https://x.com/compose/post。 - 在编辑器中输入推文文本。
- 使用可见的媒体上传/文件选择器 UI 附加视频。
- 等待上传及处理完成。
- 在点击
Post前请求确认。
引用推文:
- 在 Chrome 中打开推文 URL。
- 使用可见的引用/转发 UI 选择“引用”(Quote)。
- 输入评论内容。
- 在点击
Post前请求确认。
X 文章:
- 转换 Markdown 并保留图片映射:
${BUN_X} {baseDir}/scripts/md-to-html.ts article.md --save-html /tmp/x-article-body.html > /tmp/x-article.json - 读取 JSON 输出中的
title、coverImage以及contentImages(placeholder→localPath)。 - 在 Chrome 中打开
https://x.com/compose/articles,创建或打开草稿,若有封面则上传封面,并填写标题。 - 将富文本 HTML 复制到剪贴板:
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html - 使用 Computer Use 将内容粘贴到文章正文区域。
- 按占位符顺序依次处理
contentImages中的每一项:- 定位到可见的精准占位符文本(如
XIMGPH_3)并点击以设置插入光标。 - 打开工具栏
Insert下拉菜单,选择Media,然后点击弹窗中标记为Add photos or video的图标按钮。 - 使用原生文件选择器挑选图片的
localPath。 - 等待图片块出现且上传活动结束。
- 若插入的图片上方仍残留占位符,优先重新精确选中该占位符文本并按
Delete删除;仅在Delete失败且已确认选中...
- 定位到可见的精准占位符文本(如
<!-- 翻译截断部分同源保持 -->






