Publish X Article
sugarforever/01coder-agent-skills
Publishes a Markdown file or URL to the X Articles editor with formatting kept, turning tables, mermaid diagrams and deep headers that X cannot show into images.
Publish Markdown articles to X (Twitter) Articles editor with proper formatting.
$ npx skills add wshuyi/x-article-publisher-skill --skill x-article-publisher -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install wshuyi/x-article-publisher-skill x-article-publisher --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/wshuyi/x-article-publisher-skill.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/x-article-publisher .claude/skills/x-article-publisher && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "x-article-publisher" agent skill from https://github.com/wshuyi/x-article-publisher-skill/tree/main/skills/x-article-publisher into .claude/skills/x-article-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "x-article-publisher", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/wshuyi/x-article-publisher-skill/tree/main/skills/x-article-publisherType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add wshuyi/x-article-publisher-skill --skill x-article-publisher -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install wshuyi/x-article-publisher-skill x-article-publisher --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/wshuyi/x-article-publisher-skill.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/x-article-publisher .agents/skills/x-article-publisher && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "x-article-publisher" agent skill from https://github.com/wshuyi/x-article-publisher-skill/tree/main/skills/x-article-publisher into .agents/skills/x-article-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "x-article-publisher", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add wshuyi/x-article-publisher-skill --skill x-article-publisher -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install wshuyi/x-article-publisher-skill x-article-publisher --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/wshuyi/x-article-publisher-skill.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/x-article-publisher .cursor/skills/x-article-publisher && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "x-article-publisher" agent skill from https://github.com/wshuyi/x-article-publisher-skill/tree/main/skills/x-article-publisher into .cursor/skills/x-article-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "x-article-publisher", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/wshuyi/x-article-publisher-skill.git --path skills/x-article-publisher--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add wshuyi/x-article-publisher-skill --skill x-article-publisher -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install wshuyi/x-article-publisher-skill x-article-publisher --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/wshuyi/x-article-publisher-skill.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/x-article-publisher .gemini/skills/x-article-publisher && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "x-article-publisher" agent skill from https://github.com/wshuyi/x-article-publisher-skill/tree/main/skills/x-article-publisher into .gemini/skills/x-article-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "x-article-publisher", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install wshuyi/x-article-publisher-skill x-article-publisherInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add wshuyi/x-article-publisher-skill --skill x-article-publisher -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/wshuyi/x-article-publisher-skill.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/x-article-publisher .github/skills/x-article-publisher && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "x-article-publisher" agent skill from https://github.com/wshuyi/x-article-publisher-skill/tree/main/skills/x-article-publisher into .github/skills/x-article-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "x-article-publisher", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add wshuyi/x-article-publisher-skill --skill x-article-publisher -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install wshuyi/x-article-publisher-skill x-article-publisher --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/wshuyi/x-article-publisher-skill.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/x-article-publisher .opencode/skills/x-article-publisher && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "x-article-publisher" agent skill from https://github.com/wshuyi/x-article-publisher-skill/tree/main/skills/x-article-publisher into .opencode/skills/x-article-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "x-article-publisher", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
x-article-publisherPublish Markdown articles to X (Twitter) Articles editor with proper formatting.
X Article Publisher is an agent skill from wshuyi/x-article-publisher-skill. Publish Markdown articles to X (Twitter) Articles editor with proper formatting. Use when user wants to publish a Markdown file/URL to X Articles, or mentions "publish to X", "post article to Twitter", "X article", or wants help with X Premium article publishing. Handles cover image upload and converts Markdown to rich text automatically.
Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including scripts (for example `scripts/copy_to_clipboard.py`, `scripts/parse_markdown.py` and `scripts/table_to_image.py`).
It sits in Documents & Office, covering Social media graphics and Markdown. It works with X (Twitter), Python and Mermaid. The repository describes itself as: Claude Code skill for publishing Markdown articles to X (Twitter) Articles. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit eb3197d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 3 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
pythonpipnpmFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
x.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
X Article Publisher loads about 3.6k tokens when it runs. Until then it costs about 90 tokens; SKILL.md has 1,045 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from wshuyi/x-article-publisher-skill at commit eb3197d, republished under its MIT licence (© wshuyi). 1,045 words, ~3,643 tokens.
.claude/skills/x-article-publisher/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Publish Markdown content to X (Twitter) Articles editor, preserving formatting with rich text conversion.
pip install Pillow pyobjc-framework-Cocoapip install Pillow pywin32 clip-utilnpm install -g @mermaid-js/mermaid-cliLocated in ~/.claude/skills/x-article-publisher/scripts/:
Parse Markdown and extract structured data:
python parse_markdown.py <markdown_file> [--output json|html] [--html-only]Returns JSON with: title, cover_image, content_images, dividers (with block_index for positioning), html, total_blocks
Copy image or HTML to system clipboard (cross-platform):
# Copy image (with optional compression)
python copy_to_clipboard.py image /path/to/image.jpg [--quality 80]
# Copy HTML for rich text paste
python copy_to_clipboard.py html --file /path/to/content.htmlConvert Markdown table to PNG image:
python table_to_image.py <input.md> <output.png> [--scale 2]Use when X Articles doesn't support native table rendering or for consistent styling.
Before publishing, scan the Markdown for elements that need conversion:
# Extract table to temp file, then convert
python ~/.claude/skills/x-article-publisher/scripts/table_to_image.py /tmp/table.md /tmp/table.png
# Replace table in markdown with: # Extract mermaid block to .mmd file, then convert
mmdc -i /tmp/diagram.mmd -o /tmp/diagram.png -b white -s 2
# Replace mermaid block with: Dividers are automatically detected by parse_markdown.py and output in the dividers array. They must be inserted via X Articles' Insert > Divider menu (HTML <hr> tags are ignored by X).
Strategy: "先文后图后分割线" (Text First, Images Second, Dividers Last)
For articles with images and dividers, paste ALL text content first, then insert images and dividers at correct positions using block index.
目标: 最小化操作之间的等待时间,实现流畅的自动化体验。
大多数浏览器操作(click, type, press_key 等)都会在返回结果中包含页面状态。不要在每次操作后单独调用 browser_snapshot,直接使用操作返回的页面状态即可。
❌ 错误做法:
browser_click → browser_snapshot → 分析 → browser_click → browser_snapshot → ...
✅ 正确做法:
browser_click → 从返回结果中获取页面状态 → browser_click → ...只在以下情况使用 browser_wait_for:
textGone="正在上传媒体")不要使用 browser_wait_for 来等待按钮或输入框出现 - 它们在页面加载完成后立即可用。
当两个操作没有依赖关系时,可以在同一个消息中并行调用多个工具:
✅ 可以并行:
- 填写标题 (browser_type) + 复制HTML到剪贴板 (Bash)
- 解析Markdown生成JSON + 生成HTML文件
❌ 不能并行(有依赖):
- 必须先点击create才能上传封面图
- 必须先粘贴内容才能插入图片每个浏览器操作返回的页面状态包含所有需要的元素引用。直接使用这些引用进行下一步操作:
# 理想流程(每步直接执行,不额外等待):
browser_navigate → 从返回状态找create按钮 → browser_click(create)
→ 从返回状态找上传按钮 → browser_click(上传) → browser_file_upload
→ 从返回状态找应用按钮 → browser_click(应用)
→ 从返回状态找标题框 → browser_type(标题)
→ 点击编辑器 → browser_press_key(Meta+v)
→ ...在开始浏览器操作之前,先完成所有准备工作:
这样浏览器操作阶段可以连续执行,不需要中途停下来处理数据。
Use parse_markdown.py to extract all structured data:
python ~/.claude/skills/x-article-publisher/scripts/parse_markdown.py /path/to/article.mdOutput JSON:
{
"title": "Article Title",
"cover_image": "/path/to/first-image.jpg",
"cover_exists": true,
"content_images": [
{"path": "/path/to/img2.jpg", "original_path": "/md/dir/assets/img2.jpg", "exists": true, "block_index": 5, "after_text": "context..."},
{"path": "/path/to/img3.jpg", "original_path": "/md/dir/assets/img3.jpg", "exists": true, "block_index": 12, "after_text": "another..."}
],
"html": "<p>Content...</p><h2>Section</h2>...",
"total_blocks": 45,
"missing_images": 0
}Key fields:
block_index: The image should be inserted AFTER block element at this index (0-indexed)total_blocks: Total number of block elements in the HTMLafter_text: Kept for reference/debugging only, NOT for positioningexists: Whether the image file was found (if false, upload will fail)original_path: The path resolved from Markdown (before auto-search)path: The actual path to use (may differ from original_path if auto-searched)missing_images: Count of images not found anywhereSave HTML to temp file for clipboard:
python parse_markdown.py article.md --html-only > /tmp/article_html.html如果遇到 Error: Browser is already in use 错误:
# 方案1:先关闭浏览器再重新打开
browser_close
browser_navigate: https://x.com/compose/articles
# 方案2:如果 browser_close 无效(锁定),提示用户手动关闭 Chrome
# 方案3:使用已有标签页,直接导航
browser_tabs action=list # 查看现有标签
browser_navigate: https://x.com/compose/articles # 在当前标签导航最佳实践:每次开始前先用 browser_tabs action=list 检查状态,避免创建多余空白标签。
browser_navigate: https://x.com/compose/articles重要: 页面加载后会显示草稿列表,不是编辑器。需要:
browser_snapshot 检查页面状态# 1. 导航到页面
browser_navigate: https://x.com/compose/articles
# 2. 获取页面快照,找到 create 按钮
browser_snapshot
# 3. 点击 create 按钮(通常 ref 类似 "create" 或带有 create 标签)
browser_click: element="create button", ref=<create_button_ref>
# 4. 现在编辑器应该打开了,可以继续上传封面图等操作注意: 不要使用 browser_wait_for text="添加标题" 来等待页面加载,因为这个文本只有在点击 create 后才出现,会导致超时。
If login needed, prompt user to log in manually.
Copy HTML to system clipboard using Python, then paste:
# Copy HTML to clipboard
python ~/.claude/skills/x-article-publisher/scripts/copy_to_clipboard.py html --file /tmp/article_html.htmlThen in browser:
browser_click on editor textbox
browser_press_key: Meta+vThis preserves all rich text formatting (H2, bold, links, lists).
推荐方法: 使用 after_text 文字搜索定位,比 block_index 更直观可靠。
每张图片的 after_text 字段记录了它前一个段落的末尾文字(最多80字符)。在编辑器中搜索包含该文字的段落,点击后插入图片。
For each content image (from content_images array), 按 block_index 从大到小的顺序:
# 1. Copy image to clipboard (with compression)
python ~/.claude/skills/x-article-publisher/scripts/copy_to_clipboard.py image /path/to/img.jpg --quality 85# 2. 在 browser_snapshot 中搜索包含 after_text 的段落
# 找到该段落的 ref
# 3. Click the paragraph containing after_text
browser_click: element="paragraph with target text", ref=<paragraph_ref>
# 4. **关键步骤**: 按 End 键移动光标到行尾
# 这一步非常重要!避免点击到段落中的链接导致位置偏移
browser_press_key: End
# 5. Paste image
browser_press_key: Meta+v
# 6. Wait for upload (only use textGone, no time parameter)
browser_wait_for textGone="正在上传媒体"问题: 当段落包含链接时(如 [链接文字](url)),点击段落可能会:
解决方案: 点击段落后立即按 End 键:
在 browser_snapshot 返回的结构中,搜索 after_text 的关键词:
textbox [ref=editor]:
generic [ref=p1]:
- StaticText: "元旦假期我在家里翻手机相册..." # 如果 after_text 包含这段文字,点击 p1
heading [ref=h1]:
- StaticText: "演示"
generic [ref=p2]:
- StaticText: "这东西到底有多省事儿?"
- link [ref=link1]: "Claude Code" # 注意:段落可能包含链接
...如果有3张图片,block_index 分别为 5, 12, 27:
从大到小插入可以避免位置偏移问题。
重要: Markdown 中的 --- 分割线不能通过 HTML <hr> 标签粘贴(X Articles 会忽略它)。必须通过 X Articles 的 Insert 菜单插入。
For each divider (from dividers array), in reverse order of block_index:
# 1. Click the block element at block_index position
browser_click on the element at position block_index in the editor
# 2. Open Insert menu (Add Media button)
browser_click on "Insert" or "添加媒体" button
# 3. Click Divider menu item
browser_click on "Divider" or "分割线" menuitem
# Divider is inserted at cursor position建议先插入所有图片,再插入所有分割线。两者都按 block_index 从大到小的顺序:
--- must be inserted via Insert > Divider menu (HTML <hr> is ignored)| Element | Support | Notes |
|---|---|---|
H2 (##) | Native | Section headers |
Bold (**) | Native | Strong emphasis |
Italic (*) | Native | Emphasis |
Links ([](url)) | Native | Hyperlinks |
| Ordered lists | Native | 1. 2. 3. |
| Unordered lists | Native | - bullets |
Blockquotes (>) | Native | Quoted text |
| Code blocks | Converted | → Blockquotes |
| Tables | Converted | → PNG images (use table_to_image.py) |
| Mermaid | Converted | → PNG images (use mmdc) |
Dividers (---) | Menu insert | → Insert > Divider |
User: "Publish /path/to/article.md to X"
# Step 1: Parse Markdown
python ~/.claude/skills/x-article-publisher/scripts/parse_markdown.py /path/to/article.md > /tmp/article.json
python ~/.claude/skills/x-article-publisher/scripts/parse_markdown.py /path/to/article.md --html-only > /tmp/article_html.htmltitle)python ~/.claude/skills/x-article-publisher/scripts/copy_to_clipboard.py html --file /tmp/article_html.htmlpython copy_to_clipboard.py image /path/to/img.jpg --quality 85block_index positionafter_text 仍保留用于人工核验重要发现: Playwright MCP 的 browser_wait_for 实际行为是 先等待 time 秒,再检查条件,而非轮询!
// 实际执行的代码:
await new Promise(f => setTimeout(f, time * 1000)); // 先固定等待
await page.getByText("xxx").waitFor({ state: 'hidden' }); // 再检查正确用法:
textGone,不设 time:让 Playwright 自己轮询等待time:固定等待指定秒数textGone + time:会先等 time 秒再检查,浪费时间# 推荐:只用 textGone,让它自动等待条件满足
browser_wait_for textGone="正在上传媒体"
# 或者:用 browser_snapshot 轮询检查状态
# 每次操作后检查返回的页面状态,无需额外等待每张图片的浏览器操作从5步减少到2步:
如果 Playwright MCP 工具不可用(报错 No such tool available 或 Not connected):
方案1:重新连接 MCP(推荐)
执行 /mcp 命令,选择 playwright,选择 Restart方案2:清理残留进程后重连
# 杀掉所有残留的 playwright 进程
pkill -f "mcp-server-playwright"
pkill -f "@playwright/mcp"
# 然后执行 /mcp 重新连接配置文件位置: ~/.claude/mcp_servers.json
如果遇到 Error: Browser is already in use 错误:
# 方案1:先关闭浏览器再重新打开
browser_close
browser_navigate: https://x.com/compose/articles
# 方案2:杀掉 Chrome 进程
pkill -f "Chrome.*--remote-debugging"
# 然后重新 navigate如果图片插入位置不正确(特别是点击含链接的段落时):
原因: 点击段落时可能误触链接,导致光标位置错误
解决方案: 点击后必须按 End 键移动光标到行尾
# 正确流程
1. browser_click 点击目标段落
2. browser_press_key: End # 关键步骤!
3. browser_press_key: Meta+v # 粘贴图片
4. browser_wait_for textGone="正在上传媒体"如果 Markdown 中的相对路径图片找不到(如 ./assets/image.png 实际在其他位置):
自动搜索: parse_markdown.py 会自动在以下目录搜索同名文件:
~/Downloads~/Desktop~/Picturesstderr 输出示例:
[parse_markdown] Image not found at '/path/to/assets/img.png', using '/Users/xxx/Downloads/img.png' insteadJSON 字段说明:
original_path: Markdown 中指定的路径(解析后的绝对路径)path: 实际使用的路径(如果自动搜索成功,会不同于 original_path)exists: true 表示找到文件,false 表示未找到(上传会失败)如果仍然找不到:
missing_images 字段assets/ 子目录© wshuyi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files (scripts) in skills/x-article-publisher of wshuyi/x-article-publisher-skill.
Open the folder on GitHubat commit eb3197d
We found 3 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 2 other GitHub owners. This page covers the copy in wshuyi/x-article-publisher-skill, which our catalogue first saw on October 7, 2026.
X Article Publisher next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| X Article Publisher this skillwshuyi/x-article-publisher-skill | 872 | 2 repos | ~3.6k | Automated safety check: Pass | MIT | |
| Publish X Articlesugarforever/01coder-agent-skills | 137 | — | ~5k | Automated safety check: Pass | MIT | |
| X Article Publisheranbeime/skill | 7.8k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Markdown Mermaid Writingneflibata-feng/MyArxiv-Agent | 126 | 5 repos | ~3.8k | Automated safety check: Notes | Apache-2.0 | |
| Markdown to Word Convertercat-xierluo/SuitAgent | 205 | — | ~559 | Automated safety check: Pass | MIT | |
| X Article Publisheranbeime/skill | 7.8k | — | ~1.4k | Automated safety check: Pass | MIT |
sugarforever/01coder-agent-skills
Publishes a Markdown file or URL to the X Articles editor with formatting kept, turning tables, mermaid diagrams and deep headers that X cannot show into images.
anbeime/skill
内容创作者在需要将 Markdown 长文发布到 X (Twitter) 时,使用此技能一键将 Markdown 自动转换为富文本并发布至 X Articles,完美保留排版,免去手动调整与重复登录烦恼,让长文分发更高效。
neflibata-feng/MyArxiv-Agent
Comprehensive markdown and Mermaid diagram writing skill that establishes text-based diagrams as the DEFAULT documentation standard.
cat-xierluo/SuitAgent
Converts Markdown files into Word documents formatted to Chinese typesetting conventions, with presets for academic, legal, report and book layouts.
anbeime/skill
自媒体创作者与内容创作者在需要将 Markdown 长文发布到 X (Twitter) Articles 编辑器时使用。技能自动将 Markdown 转换为富文本并完美保留排版,支持持久化免密登录与封面上传,一键完成发布,大幅提升长文分发效率。
miantiao-me/bm.md
使用 bm.md 写作、改写、排版或渲染 Markdown;生成 Mermaid 与 AntV Infographic,设置图片尺寸、高亮重点,以及执行 HTML/纯文本转换和 Markdown lint
Works with
Publish Markdown articles to X (Twitter) Articles editor with proper formatting. X Article Publisher is an agent skill from wshuyi/x-article-publisher-skill. Publish Markdown articles to X (Twitter) Articles editor with proper formatting.
X Article Publisher fits situations like: user wants to publish a Markdown file/URL to X Articles; mentions publish to X; post article to Twitter; wants help with X Premium article publishing.
Run `npx skills add wshuyi/x-article-publisher-skill --skill x-article-publisher -a claude-code`. Or copy the skill folder (skills/x-article-publisher in wshuyi/x-article-publisher-skill) into .claude/skills/x-article-publisher in your project. Claude Code loads it when a task matches its description.
Run `npx skills add wshuyi/x-article-publisher-skill --skill x-article-publisher -a codex`. Or copy the skill folder (skills/x-article-publisher in wshuyi/x-article-publisher-skill) into .agents/skills/x-article-publisher in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add wshuyi/x-article-publisher-skill --skill x-article-publisher -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/x-article-publisher, .gemini/skills/x-article-publisher, .github/skills/x-article-publisher and .opencode/skills/x-article-publisher in your project.
Going by SKILL.md and its folder, X Article Publisher needs Python for the scripts in its folder and the command-line tools its instructions call (python, pip and npm). Our summary lists: Python 3; Node.js.
SKILL.md names 1 domain. In commands or code: x.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
X Article Publisher is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with X Article Publisher: Publish X Article (sugarforever/01coder-agent-skills, 137 stars), X Article Publisher (anbeime/skill, 7.8k stars), Markdown Mermaid Writing (neflibata-feng/MyArxiv-Agent, 126 stars) and Markdown to Word Converter (cat-xierluo/SuitAgent, 205 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
wshuyi (a GitHub user) maintains it in wshuyi/x-article-publisher-skill, which has 872 GitHub stars. The repository was last updated on January 25, 2026.
Source: wshuyi/x-article-publisher-skill on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.