x-article-publisher
npx skills add https://github.com/joeseesun/qiaomu-x-article-publisher --skill x-article-publisher
Agent 安装分布
Skill 文档
X Article Publisher
Publish Markdown content to X (Twitter) Articles editor, preserving formatting with rich text conversion.
Prerequisites
- X Premium Plus subscription
- Python 3.9+ with dependencies:
pip install Pillow pyobjc-framework-Cocoa patchright
ð 馿¬¡ä½¿ç¨ï¼ä¸æ¬¡è®¤è¯ï¼åå«éå¤ç»å½
X Article Publisher ç°å¨æ¯ææä¹ å认è¯ï¼æ éæ¯æ¬¡æå¨ç»å½ï¼
ð§ åå§å认è¯ï¼ä» é䏿¬¡ï¼
馿¬¡ä½¿ç¨åï¼è¿è¡è®¤è¯è®¾ç½®ï¼
cd ~/.claude/skills/x-article-publisher/scripts
python auth_manager.py setup
æµç¨ï¼
- â æµè§å¨çªå£èªå¨æå¼ X ç»å½é¡µé¢
- ð æå¨ç»å½ä½ ç X è´¦å·ï¼é Premium+ 订é ï¼
- â 宿 2FA éªè¯ï¼å¦å·²å¯ç¨ï¼
- ð ç»å½æååèªå¨è·³è½¬å° Home æ¶é´çº¿
- ð¾ 认è¯ç¶æèªå¨ä¿åï¼æææ 7 天ï¼
ð 认è¯ç®¡çå½ä»¤
# æ£æ¥è®¤è¯ç¶æ
python auth_manager.py status
# éªè¯è®¤è¯æ¯å¦ææ
python auth_manager.py validate
# æ¸
é¤è®¤è¯æ°æ®ï¼ééæ°ç»å½ï¼
python auth_manager.py clear
# éæ°è®¤è¯ï¼æ¸
é¤ + 设置ï¼
python auth_manager.py reauth
ð èªå¨å工使µ
认è¯è®¾ç½®å®æåï¼skill æ§è¡æ¶ä¼èªå¨ï¼
- â æ£æ¥è®¤è¯ç¶æ
- ð å¦å·²è®¤è¯ï¼ç´æ¥ä½¿ç¨ä¿åçæµè§å¨ç¶æï¼æ éç»å½ï¼
- â ï¸ å¦æªè®¤è¯ï¼æç¤ºè¿è¡
auth_manager.py setup
注æï¼è®¤è¯æ°æ®åå¨å¨ ~/.claude/skills/x-article-publisher/data/browser_state/ï¼å·²éè¿ .gitignore æé¤ï¼ä¸ä¼æäº¤å° Gitã
Scripts
Located in ~/.claude/skills/x-article-publisher/scripts/:
publish_article.py (ä¸»èæ¬ – ä¸é®åå¸)
æ¨èä½¿ç¨ – èªå¨å®æææå叿¥éª¤ï¼
# åºæ¬ç¨æ³ï¼é»è®¤æ¾ç¤ºæµè§å¨ï¼
python publish_article.py --file article.md
# éèæµè§å¨ï¼åå°è¿è¡ï¼
python publish_article.py --file article.md --headless
# èªå®ä¹æ é¢
python publish_article.py --file article.md --title "èªå®ä¹æ é¢"
parse_markdown.py
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 (with block_index for positioning), html, total_blocks
copy_to_clipboard.py
Copy image or HTML to system clipboard:
# 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.html
Workflow (ç®åç)
åæï¼å·²å®æè®¤è¯è®¾ç½®ï¼python auth_manager.py setupï¼
ð ä¸é®åå¸ï¼æ¨èï¼
ç´æ¥è¿è¡ publish_article.pyï¼èªå¨å®ææææ¥éª¤ï¼
cd ~/.claude/skills/x-article-publisher/scripts
python publish_article.py --file /path/to/article.md
èæ¬ä¼èªå¨ï¼
- â æ£æ¥è®¤è¯ç¶æ
- ð è§£æ Markdown æä»¶
- ð å¯å¨å·²è®¤è¯çæµè§å¨
- ð 导èªå° X Articles ç¼è¾å¨
- ð ç¹å» create æé®
- ð¼ï¸ ä¸ä¼ å°é¢å¾ï¼å¦æï¼
- ð å¡«åæ é¢
- ð ç²è´´ HTML å 容
- â ä¿åè稿ï¼ä¸ä¼èªå¨åå¸ï¼
æå¨å·¥ä½æµï¼é«çº§ç¨æ·ï¼
å¦éæ´ç²¾ç»æ§å¶ï¼å¯åæ¥æ§è¡ï¼
- Parse Markdown:
python parse_markdown.py article.md - æå¨æä½æµè§å¨åå¸
ð§ æºè½å¢å¼ºåè½
æºè½æ é¢çæ
å½æç« æ²¡æ H1 æ 颿¶ï¼parse_markdown.py ä¼è¿å needs_title_generation: trueã
Claude åºè¯¥èªå¨ï¼
- é 读æç« å 容ï¼çè§£æ ¸å¿è§ç¹
- çæä¸ä¸ªå¸å¼äººç¹å»çæ é¢ï¼15-25å为佳ï¼
- 使ç¨
--title "çæçæ é¢"åæ°åå¸
好æ é¢çç¹ç¹ï¼
- å 嫿°åæå ·ä½ç»èï¼”3ä¸ªæ¹æ³”ã”90%ç人ä¸ç¥é”ï¼
- æ¿å好å¥å¿ï¼”为ä»ä¹…”ã”å¦ä½…”ã”…çç縔ï¼
- ä¸è¯»è å身ç¸å ³
- é¿å æ é¢å ï¼ä½è¦æå¸å¼å
示ä¾ï¼
# è§£ææç«
python parse_markdown.py article.md
# 妿 needs_title_generation: trueï¼Claude çææ é¢åï¼
python publish_article.py --file article.md --title "AIæ¶ä»£ï¼æ®é人ç3个çåæ³å"
æºè½å°é¢å¾çæ
å½æç« æ²¡æå°é¢å¾æ¶ï¼parse_markdown.py ä¼è¿å needs_cover_generation: trueã
Claude åºè¯¥èªå¨ï¼
- é 读æç« ï¼æç¼æ ¸å¿æ¦å¿µï¼1-3ä¸ªå ³é®è¯ï¼
- è°ç¨
gemini-image-generatoræjimeng-image-generatorskill çæå°é¢å¾ - å°é¢å¾é£æ ¼å»ºè®®ï¼
- ç®æ´å¤§æ°ï¼é¿å 夿ç»è
- å¯ä»¥æ¯æ½è±¡æ¦å¿µçå¯è§å
- ææ¯å¸¦ææ ¸å¿å ³é®è¯çæåæµ·æ¥
- å°çæçå¾çè·¯å¾æå ¥å°æç« å¼å¤´ä½ä¸ºå°é¢
å°é¢å¾çææç¤ºè¯æ¨¡æ¿ï¼
为ä¸ç¯å
³äºã{æç« 主é¢}ãçæç« çæå°é¢å¾ã
飿 ¼ï¼ç®æ´ãç°ä»£ãç§ææ
å
ç´ ï¼{1-3ä¸ªæ ¸å¿è§è§å
ç´ }
æåï¼å¯éï¼å¦æå æååªæ¾{1-3个å
³é®è¯}
尺寸ï¼16:9 横ç
工使µç¤ºä¾ï¼
# 1. è§£ææç«
python parse_markdown.py article.md
# è¾åº: needs_cover_generation: true
# 2. Claude è°ç¨çå¾ skill çæå°é¢ï¼å设ä¿åå° /tmp/cover.pngï¼
# 3. å°å°é¢å¾æå
¥æç« å¼å¤´ï¼ææå¨ä¸ä¼
注æï¼å°é¢å¾ä¸ä¼ ç®åéè¦å¨æµè§å¨ä¸æå¨æä½ï¼èæ¬ä¼æå¼ç¼è¾å¨åçå¾ ç¨æ·æä½ã
ææ¯ç»è
parse_markdown.py è¾åºæ ¼å¼
{
"title": "Article Title",
"title_source": "h1", // "h1", "h2", "first_line", or "none"
"needs_title_generation": false, // true if no H1 title
"cover_image": "/path/to/first-image.jpg",
"needs_cover_generation": false, // true if no cover image
"content_images": [
{"path": "/path/to/img2.jpg", "block_index": 5}
],
"html": "<p>Content...</p><h2>Section</h2>...",
"total_blocks": 45
}
åæ®µè¯´æï¼
title_source: æ 颿¥æºh1: æ¥èª H1 æ é¢ï¼æçæ³ï¼h2: æ¥èªç¬¬ä¸ä¸ª H2 æ é¢first_line: æ¥èªç¬¬ä¸è¡ææ¬none: æ æ³æåæ é¢
needs_title_generation: æ¯å¦éè¦ Claude çææ´å¥½çæ é¢needs_cover_generation: æ¯å¦éè¦ Claude çæå°é¢å¾
Critical Rules
- NEVER auto-publish – Only save as draft
- NO automatic cover images – User adds cover manually, never insert first image as cover
- Clean placeholders – Remove all remaining
@@@IMG_X@@@markers after image insertion - H1 title handling – H1 is used as title only, not included in body
Supported Formatting
- H2 headers (## )
- Blockquotes (> )
- Code blocks (converted to blockquotes)
- Bold text (**)
- Hyperlinks (text)
- Ordered/Unordered lists
- Paragraphs
Example
User: “Publish /path/to/article.md to X”
cd ~/.claude/skills/x-article-publisher/scripts
python publish_article.py --file /path/to/article.md
Output:
ð è§£ææä»¶ï¼/path/to/article.md
ð æ é¢ï¼æç« æ é¢
ð¼ï¸ å°é¢å¾ï¼/path/to/cover.jpg
ð· å
容å¾ï¼2 å¼
ð å¯å¨æµè§å¨...
ð 导èªå° X Articles...
ð ç¹å» create æé®...
ð å¡«åæ é¢...
ð ç²è´´å
容...
â
è稿已å建ï¼
ð¡ è¯·å¨æµè§å¨ä¸æ£æ¥å¹¶æå¨åå¸
ð¥ï¸ æµè§å¨ä¿ææå¼ï¼è¯·æ£æ¥è稿并æå¨åå¸
â 宿åæå车é®å
³éæµè§å¨...
ææ¯ç»éªåè: æµè§å¨èªå¨åè°è¯æå·§è¯¦è§ skill-development-guide