# 自动发布到 X（Twitter）代理技能

> 使用真实 Chrome 浏览器自动化发布文本、图片、视频和长篇文章到 X（Twitter）。支持多种模式，包括 Codex Chrome 插件、计算机使用和 CDP 脚本。高效开始分享内容。

- Canonical: https://nanoskill.ai/zh/skills/post-to-twitter
- Markdown: https://nanoskill.ai/zh/skills/post-to-twitter.md
- Author: JimLiu
- Published: 2026-06-01T07:19:10.429Z
- Updated: 2026-07-25T04:34:26.608Z
- Language: zh-CN
- Source type: github
- Popularity signal: 20040

## Sources

- https://github.com/JimLiu/baoyu-skills

## Install

```shell
npx skills add https://github.com/JimLiu/baoyu-skills/tree/main/skills/baoyu-post-to-x
```

## About

发布到 X（Twitter）技能为自动化在 X 上发布内容提供了强大的解决方案，使用户能够高效地分享文本、图片、视频和长篇文章。该工具专为希望简化社交媒体存在的任何人设计，从个人用户到内容创作者和营销人员。它与真实的 Chrome 浏览器实例集成，确保与 X 平台的兼容性，同时提供灵活的控制选项。

该技能支持多种浏览器控制模式，包括 Codex Chrome 插件、Chrome 计算机使用和 CDP 脚本模式，因而脱颖而出。这种适应性使其能够在不同的用户设置和偏好下有效运行。一个关键功能是能够直接从 Markdown 文件发布详细的 X 文章，处理复杂的任务，如封面上传和嵌入内容图片，这对于分享深度内容非常宝贵。

用户可以利用该技能应对多种场景，例如自动发布每日社交媒体更新，将全面的博客文章或报告发布为 X 文章，或快速引用和评论其他推文。它包括有用的预检检查，以确保环境正确配置，并提供清晰的故障排除指导，即使对于自动化新手用户也能轻松使用。

## Key features

- **多内容发布**: 无缝地向 X（推特）发布文本、图片和视频，处理不同的媒体类型以满足多样化的内容分享需求。
- **长篇文章发布**: 从 Markdown 文件发布 X 文章，包括封面图片和嵌入内容图片，非常适合详细的帖子。
- **灵活的浏览器控制模式**: 支持 Codex Chrome 插件、Chrome 计算机使用模式和 CDP 脚本模式，适应各种执行环境和用户偏好。
- **引用推文功能**: 轻松引用现有推文并添加您的评论，促进平台上的互动和讨论。
- **预检环境检查**: 包含一个脚本，用于检查必要的先决条件，如 Chrome、Bun 和可访问性权限，并为任何问题提供指导。

## Use cases

- **自动发布社交媒体更新**: 内容创作者和营销人员可以安排并自动发布他们的常规帖子，包括文本、图片和视频，以在不进行手动操作的情况下保持在 X 上的活跃存在。
- **发布详细的 X 文章**: 记者、博主和分析师可以直接从 Markdown 发布长篇文章，并附带富媒体，以便在 X 上与受众分享深度内容。
- **高效引用和评论**: 用户可以快速引用推文并添加评论，简化了在 X 上参与热门话题或其他用户内容的流程。

## Result preview

查看一条关于 AI 生产力工具的 Twitter 帖子，其中包含为发布准备的相关图片和话题标签。

![the demo of Post to X Agent Skill](https://file.nanoskill.ai/post-to-x-demo-1.jpg)

![the demo of Post to X Agent Skill](https://file.nanoskill.ai/post-to-x-demo-2.jpg)

![the demo of Post to X Agent Skill](https://file.nanoskill.ai/post-to-x-demo-3.jpg)

## Result walkthrough

### 步骤 1：安装

将技能添加到你的代理中。

![a simple demonstration of the first step in using Post to X](https://file.nanoskill.ai/post-to-x-step-1.jpg)

### 步骤 2：分享帖子想法

提供你的推文、图片、视频或文章想法，并要求技能为在 X 上发布做准备。

![a simple demonstration of the second step in using Post to X](https://file.nanoskill.ai/post-to-x-step-2.jpg)

### 步骤 3：发布前审查

检查生成的帖子并在发布前确认。

![a simple demonstration of the first step in using Post to X](https://file.nanoskill.ai/post-to-x-step-3.jpg)

## Skill definition

# 发布到 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/` 子目录中。

**代理执行说明**：
1. 确定此 SKILL.md 文件的目录路径为 `{baseDir}`
2. 脚本路径 = `{baseDir}/scripts/<script-name>.ts`
3. 将本文档中的所有 `{baseDir}` 替换为实际路径
4. 解析 `${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 交互之前，必须选择一种模式：

1. 如果用户明确要求 Codex Chrome 插件、`@chrome`、Chrome 扩展或“Codex 自带的 Chrome 插件”，请使用 **Codex Chrome 插件模式**。不要先调用 Computer Use。
2. 如果用户明确要求 Chrome Computer Use，请使用 **Chrome Computer Use 模式**。未经告知用户并获批准，不要回退到 CDP、Playwright、应用内浏览器或 Chrome 插件。
3. 如果用户明确要求 CDP/脚本模式，请使用 **CDP 脚本模式**。
4. 否则，优先使用 **Chrome Computer Use 模式**。对于包含本地内容图片的 Markdown **X 文章**，请使用经过测试的 X 编辑器流程：从工具栏（`插入` -> `媒体` -> 对话框图标按钮 `添加照片或视频`）在占位符处插入每张正文图片，然后删除占位符文本。仅当所选浏览器控制模式不可用或 UI 上传/选择流程不可靠时，才使用 CDP 脚本模式。

切勿将应用内浏览器用于 X 发布工作流。

## Codex Chrome 插件模式

每当用户请求 Codex Chrome 插件、`@chrome` 或 Chrome 扩展路径时，使用此模式。这将使用用户的真实 Chrome 配置文件和通过捆绑的 Chrome 插件登录的 X，而非 Computer Use 或 CDP。

**设置**
1. 在进行浏览器工作之前，加载 `chrome:Chrome` 技能。
2. 如果 Node REPL `js` 工具不可见，使用 `tool_search` 搜索 `node_repl js`。
3. 严格按照 Chrome 技能指定的方式初始化 Chrome 浏览器客户端，然后运行一个轻量级调用，如 `browser.user.openTabs()` 以验证扩展连接。
4. 如果第一个轻量级调用失败，等待 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 文章**
1. 将 Markdown 转换为 HTML 并保留图片映射：
   ```bash
   ${BUN_X} {baseDir}/scripts/md-to-html.ts article.md --save-html /tmp/x-article-body.html > /tmp/x-article.json
   ```
2. 读取 JSON 输出，获取 `title`、`coverImage` 和 `contentImages`（`placeholder` → `localPath`）。
3. 在 `https://x.com/compose/articles` 打开或创建文章草稿。
4. 使用 Chrome 插件文件选择器流程上传封面。如果上传被扩展权限阻止，请停止并报告上述确切的权限修复方法。
5. 填写标题，然后复制富文本 HTML：
   ```bash
   ${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html
   ```
6. 通过 Chrome 插件使用真实的粘贴按键将内容粘贴到文章正文中。在 macOS 上使用 `Meta+V`。
7. 验证编辑器文本包含文章正文和 `XIMGPH_` 占位符。在 shell 剪贴板写入后，不要依赖 `tab.clipboard.readText()` 作为系统剪贴板的证明；如有需要，在 macOS 上使用 `pbpaste` 进行验证。
8. 对于每个 `contentImages` 项，按占位符顺序：
   - 定位可见的占位符文本（`XIMGPH_N`）并点击以将插入点置于该处。
   - 打开工具栏菜单 `插入` -> `媒体`。
   - 在模态框中，点击带有 `aria-label="添加照片或视频"` 的图标按钮；不要点击文本/拖放区或隐藏的文件输入。
   - 使用文件选择器上传该图片的 `localPath`。
   - 图片出现后，如果 `XIMGPH_N` 仍在其上方，请先精确选择该占位符并按 `Delete` 键。仅当 `Delete` 失败且所选文本确认正是该占位符时，才使用 `Backspace`。
   - 验证该 `XIMGPH_N` 的占位符计数为 `0`。
9. 打开预览并验证标题、封面、正文、链接和图片。
10. 在点击 `发布` 之前请求明确确认。

## 偏好设置 (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（会话保存）

## 飞行前检查（可选）

首次使用前，建议运行环境检查。用户可根据需要跳过。

```bash
${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 操作。
- 在当前对话中获得用户的明确最终确认之前，切勿点击 `发布`、`发送` 或任何外部可见的提交操作。

**常规帖子**：
1. 打开或导航 Chrome 到 `https://x.com/compose/post`。
2. 使用 Computer Use 在编辑器中输入帖子文本。
3. 对于每张图片，运行：
   ```bash
   ${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts image /absolute/path/to/image.png
   ```
4. 使用 Computer Use 粘贴（macOS 上为 `super+v`，Windows/Linux 上为 `control+v`），然后等待 X 完成媒体上传。
5. 点击 `发送` 前请求确认。

**视频帖子**：
1. 打开或导航 Chrome 到 `https://x.com/compose/post`。
2. 在编辑器中输入帖子文本。
3. 使用可见的媒体上传/文件选择器 UI 附加视频。
4. 等待上传和处理完成。
5. 点击 `发送` 前请求确认。

**引用推文**：
1. 在 Chrome 中打开推文 URL。
2. 使用可见的引用/转推 UI 选择引用。
3. 输入评论。
4. 点击 `发送` 前请求确认。

**X 文章**：
1. 将 Markdown 转换为 HTML 并保留图片映射：
   ```bash
   ${BUN_X} {baseDir}/scripts/md-to-html.ts article.md --save-html /tmp/x-article-body.html > /tmp/x-article.json
   ```
2. 读取 JSON 输出，获取 `title`、`coverImage` 和 `contentImages`（`placeholder` → `localPath`）。
3. 在 Chrome 中，打开 `https://x.com/compose/articles`，创建或打开草稿，上传封面（如有），并填写标题。
4. 将富文本 HTML 复制到剪贴板：
   ```bash
   ${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html
   ```
5. 使用 Computer Use 粘贴到文章正文中。
6. 对于每个 `contentImages` 条目，按占位符顺序：
   - 定位精确的可见占位符文本，如 `XIMGPH_3`，并点击以设置插入点。
   - 打开工具栏的 `插入` 下拉菜单，选择 `媒体`，然后点击模态框中标签为 `添加照片或视频` 的图标按钮。
   - 使用原生文件选择器选择图片的 `localPath`。
   - 等待图片块出现且所有上传活动完成。
   - 如果占位符仍存在于插入的图片上方，请重新精确选择该占位符文本，并按 `Delete` 键。仅当 `Delete` 失败且所选文本确认正是该占位符时，才使用 `Backspace`。
7. 验证没有 `XIMGPH_` 占位符残留，且预期的图片已显示。
8. 打开预览并验证标题、封面、正文、链接和图片。
9. 在点击 `发布` 之前请求明确确认。

如果 Computer Use 选择、工具栏上传或文件选择器控件变得不可靠，请停止并报告阻碍因素，而不是静默切换到 Chrome 插件或 CDP。

---

## CDP 脚本模式（后备）

仅当所选浏览器控制模式不可用、不可靠或明确未请求时，才使用下面的脚本部分。这些脚本通过 CDP 启动或重用一个真实的 Chrome 实例，并保持浏览器打开以供审查。

当用户明确要求 Codex Chrome 插件或 Chrome Computer Use 时，不要使用 CDP 脚本模式，除非你在解释阻碍因素后获得了用户的批准。

---

## 帖子类型选择

除非用户明确指定帖子类型：
- **纯文本** + 在 10,000 字符以内 → **常规帖子**（高级会员支持最多 10,000 字符，非高级会员：280 字符）
- **Markdown 文件**（.md） → **X 文章**

## 常规帖子

```bash
${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`。

---

## 视频帖子

文本 + 视频文件。

```bash
${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 秒。

---

## 引用推文

对现有推文进行引用并添加评论。

```bash
${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）。

```bash
${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 实例，然后重试：

```bash
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 进行自定义配置。有关路径和支持的选项，请参阅 **偏好设置** 部分。

## FAQ

### 我可以使用这个技能向 X 发布什么类型的内容？

您可以发布由 Markdown 文件创建的常规文本更新、图片、视频和长篇 X 文章（原 Twitter 文章）。它支持多种媒体类型，以实现全面的内容分享。

### 这个技能支持 X 文章吗，有什么要求？

是的，它支持来自 Markdown 的 X 文章。您可以包含封面图片和内容图片。发布 X 文章通常需要 X Premium 订阅。

### 有哪些不同的浏览器控制模式可用？

该技能提供三种主要模式：Codex Chrome 插件模式、Chrome 计算机使用模式和 CDP 脚本模式。选择取决于您的环境和具体需求，其中计算机使用模式是首选的默认模式。

### 如何安装“发布到 X”技能？

您可以使用以下命令安装技能：\`npx skills add https://github.com/JimLiu/baoyu-skills/tree/main/skills/baoyu-post-to-x\`。请确保已安装 \`bun\` 或 \`npx\`。

### 在向 X 发布帖子之前需要手动审核吗？

默认情况下，该技能会将内容填充到浏览器中，您必须手动审核并发布。CDP 脚本的 \`--submit\` 选项仅应在用户明确确认用于最终公开发布时使用。

### 如果遇到“Chrome 调试端口未就绪”错误，我应该怎么办？

如果在 CDP 回退模式下出现此错误，您应该终止现有的 Chrome CDP 实例并重试命令。该技能设计为自动尝试执行此操作。
