# X Article Draft Uploader

Uploads Markdown articles to X Articles as drafts with tables, images and a cover.

- Repository: https://github.com/mcncarl/yichen-skills (5140 stars)
- Category: Marketing
- License: see repository
- Last updated: 2026-11-01
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add mcncarl/yichen-skills --skill x-article-draft-uploader -g -a claude-code -y`
Codex: `npx skills add mcncarl/yichen-skills --skill x-article-draft-uploader -g -a codex -y`
Cursor: `npx skills add mcncarl/yichen-skills --skill x-article-draft-uploader -g -a cursor -y`
Gemini CLI: `npx skills add mcncarl/yichen-skills --skill x-article-draft-uploader -g -a gemini-cli -y`

## Description

将 Obsidian 或本地 Markdown 文章上传到 X/Twitter Articles 草稿；支持 Markdown pipe 表格转成 X 原生表格块；如果文章最上方有图片，则按当前 X 界面提示的 5:2 封面图上传；如果没有封面图，则跳过封面区域，直接上传标题、正文、表格和正文图片，完成后提醒用户补一张 5:2 封面。X Article 当前实测正文最多 25 个媒体项，封面单独上传且不占正文名额；表格尺寸选择器当前最大 10 x 10。适用于用户要求上传、发布、保存 Markdown 到 X Article，尤其是需要复用 Chrome 登录态、使用独立 Playwright 浏览器、不接管用户当前浏览器，或旧脚本出现缺图、错位、MPH_MARKER、表格变纯文本等问题时。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# X Article Draft Uploader

## 许可与商业授权

本 Skill 仅允许个人学习、研究和非商业个人工作流使用。客户交付、付费产品或服务、
公司内部部署、市场打包、课程打包及其他商业用途，必须事先取得作者明确的书面授权。
申请商业授权请添加微信 `yichen365ai`，并在验证信息中备注 `商业授权`；收到明确书面
授权前不得商用。完整条款见同目录 [`LICENSE`](LICENSE)。该限制只适用于本 Skill，
不改变 Ailu 核心的 AGPL-3.0-or-later 许可；第三方材料继续适用各自许可证。

## 核心原则

只创建草稿。除非用户明确确认可以公开发布，否则不要点击 X 最终的 `发布` 按钮。

封面图必须按 X Article 当前界面提示的封面比例 5:2 准备；不要沿用旧的错误比例。

X Article 当前实测正文最多按 25 个媒体项处理，封面单独上传、不占这 25 个正文名额；`1 张封面 + 25 张正文图` 是有效边界。如果 dry-run 显示 `expected_body_images > 25`，不要打开 X、不要硬传第 26 张正文图；先生成只用于上传的临时 Markdown，把连续截图合并成长图，或把文章拆成多篇。原始 Markdown 不要为了上传压缩版而直接改坏。

X Article 当前支持原生表格块，但不能靠 rich HTML 粘贴 `<table>` 自动生成表格。脚本会把 Markdown pipe 表格替换成临时 `X_TABLE_MARKER_*` 占位符，正文粘贴后在占位符位置插入 X 原生表格块，再打开表格块的 Markdown 编辑器写入原始表格。最终校验必须在自动保存后刷新同一个草稿：表格数量必须精确相等，每张表的可见行列与规范化单元格文本矩阵必须和本地一致、不能是空表，同时铅笔编辑器读回的 Markdown 也必须一致；只读回弹窗源码不算成功。

X 当前表格尺寸选择器实测最大为 `10 x 10`。如果 dry-run 出现 `table_too_large`，不要打开 X；先拆表、压缩列数，或把大表转成图片/正文段落后再上传。

使用独立的 Playwright 浏览器会话，不要抢占用户当前正在用的 Chrome 窗口。可以复用 Chrome 登录态，但只通过私有的 Playwright cookie JSON 使用。

默认只新建草稿。只有用户当轮明确确认要覆盖某个准确的 X 草稿 URL 时，才可以使用
`--draft-url`，并同时传入 `--confirm-existing-draft-write`；该模式默认会清空这个草稿已有的
标题、正文、表格、正文媒体和封面。不得把任意 URL 传给该参数，也不得用它处理他人的草稿。

## 快速开始

1. 使用 Ailu 时，通过设置页“从 Chrome 导入 / 粘贴 JSON / 选择 JSON”准备 Cookie。
独立运行 Skill 时，如果 `~/.ailu/secrets/x/cookies.json` 不存在或登录态失效，再显式导出：

```bash
python3 ~/.agents/skills/x-article-draft-uploader/scripts/export_x_cookies_from_chrome.py \
  --output ~/.ailu/secrets/x/cookies.json
```

2. 正式碰 X 之前，先 dry-run 解析文章，确认可选封面、正文图数量、表格数量、图片文件存在性、正文结尾验收文本、`content_checkpoints`、`expected_compact_length`、`expected_compact_sha256` 和锚点。封面图推荐比例按当前 X 界面提示为 5:2：

```bash
python3 ~/.agents/skills/x-article-draft-uploader/scripts/upload_markdown_to_x_article.py \
  "/absolute/path/to/article.md" \
  --cookies-json ~/.ailu/secrets/x/cookies.json \
  --dry-run
```

如果 dry-run 的 `preflight.errors` 非空，必须立刻停止工作。不要打开 X，不要创建草稿，不要自动重跑。按错误类型处理：

The rest: https://github.com/mcncarl/yichen-skills/blob/HEAD/yichen-x-article-draft-uploader/SKILL.md
