发布到 X(推特)
通过真实的 Chrome 浏览器将文本、图片、视频和长篇文章发布到 X。
在 Codex 中,不要混淆以下浏览器路径:
- Codex Chrome 插件 /
@chrome/ Chrome 扩展:使用捆绑的chrome:Chrome技能及其 Node REPL 浏览器客户端。当用户说“Codex Chrome 插件”、“Codex 自带的 Chrome 插件”、@chrome或类似内容时,必须使用此模式。 - Chrome Computer Use:仅在用户要求 Computer Use 或未说明 Chrome 插件偏好且 Computer Use 可用时,对可见的 Google Chrome UI 使用
mcp__computer_use__.*。 - CDP 脚本模式:仅当所选模式不可用或用户明确要求 CDP/脚本模式时,用作后备方案。
脚本目录
重要:所有脚本都位于此技能的 scripts/ 子目录中。
代理执行说明:
- 确定此 SKILL.md 文件的目录路径为
{baseDir} - 脚本路径 =
{baseDir}/scripts/<script-name>.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 编辑器流程:从工具栏(
插入->媒体-> 对话框图标按钮添加照片或视频)在占位符处插入每张正文图片,然后删除占位符文本。仅当所选浏览器控制模式不可用或 UI 上传/选择流程不可靠时,才使用 CDP 脚本模式。
切勿将应用内浏览器用于 X 发布工作流。
Codex Chrome 插件模式
每当用户请求 Codex Chrome 插件、@chrome 或 Chrome 扩展路径时,使用此模式。这将使用用户的真实 Chrome 配置文件和通过捆绑的 Chrome 插件登录的 X,而非 Computer Use 或 CDP。
设置
- 在进行浏览器工作之前,加载
chrome:Chrome技能。 - 如果 Node REPL
js工具不可见,使用tool_search搜索node_repl js。 - 严格按照 Chrome 技能指定的方式初始化 Chrome 浏览器客户端,然后运行一个轻量级调用,如
browser.user.openTabs()以验证扩展连接。 - 如果第一个轻量级调用失败,等待 2 秒并重试一次。如果仍然失败,请遵循 Chrome 技能的扩展检查和恢复步骤。如果检查通过但通信仍然失败,请在打开新 Chrome 窗口之前询问用户。不要静默切换到 Computer Use 或 CDP。
一般规则
- 使用 Chrome 插件的
browser.tabs.*、tab.playwright.*、tab.cua.*和文件选择器 API 来执行 X UI 操作。 - 允许使用 shell 命令进行 Markdown 预处理和富 HTML 剪贴板准备。对于 X 文章的正文图片,不要依赖剪贴板粘贴图片;请使用编辑器的
插入->媒体上传流程。 - 如果文件上传失败并显示
不允许,请告知用户:要启用文件上传,请在 Chrome 中前往 chrome://extensions,点击 Codex 扩展下的详细信息,并启用“允许访问文件网址”。详情请参阅 https://developers.openai.com/codex/app/chrome-extension#upload-files。 - 如果 Chrome 插件报告
原生管道已关闭,请在 2 秒后重试一次轻量级浏览器调用,然后运行 Chrome 技能健康检查。如果 Chrome 正在运行,扩展已启用,且本地主机清单正确,请请求权限打开一个新 Chrome 窗口并重试。不要继续通过已损坏的管道发送浏览器操作。 - 在当前对话中获得用户的明确最终确认之前,切勿点击
发布、发送或任何外部可见的提交操作。
X 文章
- 将 Markdown 转换为 HTML 并保留图片映射:
${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)并点击以将插入点置于该处。 - 打开工具栏菜单
插入->媒体。 - 在模态框中,点击带有
aria-label="添加照片或视频"的图标按钮;不要点击文本/拖放区或隐藏的文件输入。 - 使用文件选择器上传该图片的
localPath。 - 图片出现后,如果
XIMGPH_N仍在其上方,请先精确选择该占位符并按Delete键。仅当Delete失败且所选文本确认正是该占位符时,才使用Backspace。 - 验证该
XIMGPH_N的占位符计数为0。
- 定位可见的占位符文本(
- 打开预览并验证标题、封面、正文、链接和图片。
- 在点击
发布之前请求明确确认。
偏好设置 (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 配置文件
先决条件
- Google Chrome 或 Chromium
bun运行时- 首次运行:手动登录 X(会话保存)
飞行前检查(可选)
首次使用前,建议运行环境检查。用户可根据需要跳过。
${BUN_X} {baseDir}/scripts/check-paste-permissions.ts
检查项:Chrome、配置文件隔离、Bun、辅助功能、剪贴板、粘贴按键、Chrome 冲突。
如果任何检查失败,请根据项目提供修复指导:
| 检查项 | 修复方法 |
|---|---|
| Chrome | 安装 Chrome 或设置 X_BROWSER_CHROME_PATH 环境变量 |
| 配置文件目录 | 共享配置文件位于 baoyu-skills/chrome-profile(见 CLAUDE.md Chrome 配置文件部分) |
| 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 窗口、cookies、登录状态、扩展和 X 会话。
一般规则:
- 在控制 Chrome 的每个助手回合开始时,为
Google Chrome调用get_app_state。 - 尽可能优先使用元素索引操作;仅在编辑器文本选择或拖动选择时使用坐标。
- 除非用户批准模式更改,否则不要在此模式下使用应用内浏览器、Chrome 插件、Playwright 或 CDP 进行 X UI 操作。
- 在当前对话中获得用户的明确最终确认之前,切勿点击
发布、发送或任何外部可见的提交操作。
常规帖子:
- 打开或导航 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 完成媒体上传。 - 点击
发送前请求确认。
视频帖子:
- 打开或导航 Chrome 到
https://x.com/compose/post。 - 在编辑器中输入帖子文本。
- 使用可见的媒体上传/文件选择器 UI 附加视频。
- 等待上传和处理完成。
- 点击
发送前请求确认。
引用推文:
- 在 Chrome 中打开推文 URL。
- 使用可见的引用/转推 UI 选择引用。
- 输入评论。
- 点击
发送前请求确认。
X 文章:
- 将 Markdown 转换为 HTML 并保留图片映射:
${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,并点击以设置插入点。 - 打开工具栏的
插入下拉菜单,选择媒体,然后点击模态框中标签为添加照片或视频的图标按钮。 - 使用原生文件选择器选择图片的
localPath。 - 等待图片块出现且所有上传活动完成。
- 如果占位符仍存在于插入的图片上方,请重新精确选择该占位符文本,并按
Delete键。仅当Delete失败且所选文本确认正是该占位符时,才使用Backspace。
- 定位精确的可见占位符文本,如
- 验证没有
XIMGPH_占位符残留,且预期的图片已显示。 - 打开预览并验证标题、封面、正文、链接和图片。
- 在点击
发布之前请求明确确认。
如果 Computer Use 选择、工具栏上传或文件选择器控件变得不可靠,请停止并报告阻碍因素,而不是静默切换到 Chrome 插件或 CDP。
CDP 脚本模式(后备)
仅当所选浏览器控制模式不可用、不可靠或明确未请求时,才使用下面的脚本部分。这些脚本通过 CDP 启动或重用一个真实的 Chrome 实例,并保持浏览器打开以供审查。
当用户明确要求 Codex Chrome 插件或 Chrome Computer Use 时,不要使用 CDP 脚本模式,除非你在解释阻碍因素后获得了用户的批准。
帖子类型选择
除非用户明确指定帖子类型:
- 纯文本 + 在 10,000 字符以内 → 常规帖子(高级会员支持最多 10,000 字符,非高级会员:280 字符)
- Markdown 文件(.md) → X 文章
常规帖子
${BUN_X} {baseDir}/scripts/x-browser.ts "Hello!" --image ./photo.png
参数:
| 参数 | 描述 |
|---|---|
<text> | 帖子内容(位置参数) |
--image <path> | 图片文件(可重复,最多 4 张) |
--profile <dir> | 自定义 Chrome 配置文件 |
注意:脚本会打开已填充内容的浏览器。用户手动审核并发布。
Codex 模式说明:如果用户明确请求了 Codex Chrome 插件,请使用 Codex Chrome 插件模式。否则,如果 Chrome Computer Use 已启用,请使用 Chrome Computer Use 模式,而不是运行 x-browser.ts。
视频帖子
文本 + 视频文件。
${BUN_X} {baseDir}/scripts/x-video.ts "Check this out!" --video ./clip.mp4
参数:
| 参数 | 描述 |
|---|---|
<text> | 帖子内容(位置参数) |
--video <path> | 视频文件(MP4、MOV、WebM) |
--profile <dir> | 自定义 Chrome 配置文件 |
注意:脚本会打开已填充内容的浏览器。用户手动审核并发布。
Codex 模式说明:如果用户明确请求了 Codex Chrome 插件,请使用 Codex Chrome 插件模式。否则,如果 Chrome Computer Use 已启用,请使用 Chrome Computer Use 模式,而不是运行 x-video.ts。
限制:普通用户最长 140 秒,高级用户 60 分钟。处理时间:30-60 秒。
引用推文
对现有推文进行引用并添加评论。
${BUN_X} {baseDir}/scripts/x-quote.ts https://x.com/user/status/123 "Great insight!"
参数:
| 参数 | 描述 |
|---|---|
<tweet-url> | 要引用的 URL(位置参数) |
<comment> | 评论文本(位置参数,可选) |
--profile <dir> | 自定义 Chrome 配置文件 |
注意:脚本会打开已填充内容的浏览器。用户手动审核并发布。
Codex 模式说明:如果用户明确请求了 Codex Chrome 插件,请使用 Codex Chrome 插件模式。否则,如果 Chrome Computer Use 已启用,请使用 Chrome Computer Use 模式,而不是运行 x-quote.ts。
X 文章
长篇 Markdown 文章(需要 X Premium)。
${BUN_X} {baseDir}/scripts/x-article.ts article.md
${BUN_X} {baseDir}/scripts/x-article.ts article.md --cover ./cover.jpg
参数:
| 参数 | 描述 |
|---|---|
<markdown> | Markdown 文件(位置参数) |
--cover <path> | 封面图片 |
--title <text> | 覆盖标题 |
Frontmatter:支持 YAML front matter 中的 title、cover_image。
Codex 模式说明:如果用户明确请求了 Codex Chrome 插件,请遵循上面的 Codex Chrome 插件模式。如果用户明确请求了 Chrome Computer Use,请遵循 Chrome Computer Use 模式。否则,优先使用 Chrome Computer Use;对于包含本地内容图片的 Markdown 文章,在回退到 CDP 脚本模式 中的 x-article.ts 之前,请使用工具栏 插入 -> 媒体 图片上传工作流程。
CDP 后备说明:脚本会打开已填充文章的浏览器。用户手动审核并发布,除非使用了 --submit。
发布安全:除非用户明确确认最终的公开发布操作,否则不要使用 --submit 或点击 发布。
撰写后检查:插入所有图片后,脚本会自动验证:
- 编辑器内容中剩余的
XIMGPH_占位符 - 预期与实际图片数量
如果检查失败(输出中有警告),请在用户发布之前提醒他们具体问题。
故障排除
Chrome 调试端口未就绪
仅 CDP 后备:如果脚本失败并显示 Chrome 调试端口未就绪 或 无法连接,请先终止现有的 Chrome CDP 实例,然后重试:
pkill -f "Chrome.*remote-debugging-port" 2>/dev/null; pkill -f "Chromium.*remote-debugging-port" 2>/dev/null; sleep 2
重要:这应该自动完成 — 遇到此错误时,终止 Chrome CDP 实例并重试命令,无需询问用户。
注意事项
- 首次运行:需要手动登录(会话持续)
- 在 Codex Chrome 插件模式和 Chrome Computer Use 模式下,使用用户现有的 Chrome 会话,不要启动单独的 CDP 配置文件
- CDP 脚本默认仅将内容填充到浏览器中;用户必须手动审核和发布,除非明确使用
--submit - 跨平台:macOS、Linux、Windows
扩展支持
通过 EXTEND.md 进行自定义配置。有关路径和支持的选项,请参阅 偏好设置 部分。


