x-publish
Publish tweets and threads to X (Twitter) draft using browser automation. Use when user wants to publish content to X, save to drafts, or mentions "publish to X", "post tweet", "x-publish", "发布推文". Supports short tweets and threads. NEVER auto-publish, always saves to draft.
Best use case
x-publish is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Publish tweets and threads to X (Twitter) draft using browser automation. Use when user wants to publish content to X, save to drafts, or mentions "publish to X", "post tweet", "x-publish", "发布推文". Supports short tweets and threads. NEVER auto-publish, always saves to draft.
Teams using x-publish should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/x-publish/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How x-publish Compares
| Feature / Agent | x-publish | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Publish tweets and threads to X (Twitter) draft using browser automation. Use when user wants to publish content to X, save to drafts, or mentions "publish to X", "post tweet", "x-publish", "发布推文". Supports short tweets and threads. NEVER auto-publish, always saves to draft.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# X Publish
Publish tweets and threads to X draft using Playwright browser automation.
## Prerequisites
- Playwright MCP for browser automation
- User logged into X (Twitter)
- Python 3.9+ with dependencies:
- macOS: `pip install Pillow pyobjc-framework-Cocoa`
- Windows: `pip install Pillow pywin32`
## Critical Rules
1. **NEVER auto-publish** - Only save to draft
2. **User must be logged in** - Prompt to login if not
3. **Verify content before saving** - Double-check tweet text
## Content Types
### Short Tweet
Single tweet ≤280 characters
### Thread
Multiple tweets connected (3-10 tweets)
## Scripts
### copy_to_clipboard.py
Copy text to system clipboard for paste operation:
```bash
# Copy text to clipboard
python scripts/copy_to_clipboard.py text "Tweet content here"
# Copy from file
python scripts/copy_to_clipboard.py text --file /tmp/tweet.txt
```
## Workflow
### Short Tweet
**Step 1: Prepare Content**
```bash
# Save tweet to temp file
echo "Tweet content" > /tmp/tweet.txt
# Copy to clipboard
python scripts/copy_to_clipboard.py text --file /tmp/tweet.txt
```
**Step 2: Open Compose**
```
browser_navigate: https://x.com/compose/post
```
**Step 3: Paste Content**
```
browser_snapshot → Find tweet textbox
browser_click: textbox
browser_press_key: Meta+v
```
**Step 4: Save Draft**
```
browser_click: X (close button)
browser_click: "Save" or "保存" in dialog
```
**Step 5: Verify**
```
Report: "Draft saved. Please review at https://x.com/compose/drafts"
```
### Thread
**Step 1: Prepare Content**
Parse thread into individual tweets:
```
### 1/5
First tweet content...
### 2/5
Second tweet content...
```
**Step 2: Open Compose**
```
browser_navigate: https://x.com/compose/post
```
**Step 3: Add First Tweet**
```bash
python scripts/copy_to_clipboard.py text "First tweet content"
```
```
browser_click: textbox
browser_press_key: Meta+v
```
**Step 4: Add More Tweets**
For each additional tweet:
```
browser_click: "Add another post" / "添加" button
browser_press_key: Meta+v (after copying next tweet)
```
**Step 5: Save Draft**
```
browser_click: X (close button)
browser_click: "Save" in dialog
```
**Step 6: Verify**
```
Report: "Thread draft saved ({n} tweets). Review at https://x.com/compose/drafts"
```
## Efficiency Guidelines
### Avoid Unnecessary Waits
```
❌ browser_snapshot after every action
✅ Use action return values for next step
```
### Parallel Preparation
```
✅ Prepare all tweet content before browser operations
✅ Copy to clipboard while navigating
```
### Sequential Execution
```
Navigate → Paste first tweet → Add tweet → Paste → ... → Save
```
## Element References
Common elements in X compose:
| Element | Description | Typical ref pattern |
|---------|-------------|-------------------|
| Tweet textbox | Main input area | textbox with "What's happening" |
| Add tweet button | "+" or "添加" | button near compose area |
| Close button | X icon | button top-left |
| Save draft | In close dialog | "Save" / "保存" button |
| Drafts link | View saved drafts | link to /compose/drafts |
## Example Flows
### Short Tweet Example
User: `/x-publish "Claude 4.5发布了,extended thinking是真正的游戏规则改变者。"`
```bash
# 1. Copy to clipboard
python scripts/copy_to_clipboard.py text "Claude 4.5发布了,extended thinking是真正的游戏规则改变者。"
```
```
# 2. Navigate and paste
browser_navigate: https://x.com/compose/post
browser_snapshot → find textbox
browser_click: textbox
browser_press_key: Meta+v
# 3. Close and save
browser_click: close button (X)
browser_click: "Save" button
# 4. Report
"Draft saved! Review at: https://x.com/compose/drafts"
```
### Thread Example
User: `/x-publish` (with thread content from x-create)
```
Thread:
### 1/3
First point about AI...
### 2/3
Second point...
### 3/3
Conclusion...
```
Execution:
```bash
# Prepare all tweets
tweet1="First point about AI..."
tweet2="Second point..."
tweet3="Conclusion..."
```
```
# Navigate
browser_navigate: https://x.com/compose/post
# Tweet 1
python copy_to_clipboard.py text "$tweet1"
browser_click: textbox
browser_press_key: Meta+v
# Tweet 2
python copy_to_clipboard.py text "$tweet2"
browser_click: "Add another post" button
browser_press_key: Meta+v
# Tweet 3
python copy_to_clipboard.py text "$tweet3"
browser_click: "Add another post" button
browser_press_key: Meta+v
# Save
browser_click: close button
browser_click: "Save"
# Report
"Thread draft saved (3 tweets). Review at: https://x.com/compose/drafts"
```
## Error Handling
### Not Logged In
```
If login page detected:
→ "Please log in to X first, then run /x-publish again"
```
### Character Limit
```
If tweet > 280 chars:
→ Split into thread or truncate with warning
```
### Network Error
```
If page fails to load:
→ Retry once, then report error
```
## Integration
After publishing:
```
推文已保存到草稿箱!
- 类型: {short/thread}
- 条数: {n}
- 草稿链接: https://x.com/compose/drafts
请手动审核后发布。
```Related Skills
NPM Publisher
## Overview
redbook-creator-publish
小红书帖子创作与发布技能。用于:(1) 生成小红书风格的帖子内容(标题+正文+标签)(2) 生成帖子相关的配图 (3) 自动上传到小红书创作者平台(默认自动上传,失败时自动提供手动指引) (4) 生成本地预览HTML文件。触发词:小红书创作、create redbook、小红书、红书、笔记创作、帖子创作
publish-to-pages
Publish presentations and web content to GitHub Pages. Converts PPTX, PDF, HTML, or Google Slides to a live GitHub Pages URL. Handles repo creation, file conversion, Pages enablement, and returns the live URL. Use when the user wants to publish, deploy, or share a presentation or HTML file via GitHub Pages.
x-article-publisher
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.
skill-marketplace-publisher
Publish a Codex or Claude skill to Skillstore, SkillMap, or similar public skill marketplaces. Use when you need to audit a skill for public safety, build a public package, create a public GitHub repo, or submit a repo URL to marketplace intake endpoints.
x-article-publisher-skill
Publish articles to X/Twitter
Tilda Publishing
## Overview
Ghost — Professional Publishing Platform
You are an expert in Ghost, the open-source publishing platform for blogs, newsletters, and membership sites. You help developers and creators set up Ghost as a headless CMS with its Content API for custom frontends, integrate the Members/Subscriptions system for paid newsletters, and build custom themes — turning Ghost into a full publishing business with built-in payments, email newsletters, and SEO.
marketplace-publishing
Workflow for publishing skills and agents to the dotnet-skills Claude Code marketplace. Covers adding new content, updating plugin.json, validation, and release tagging.
Daily Logs
Record the user's daily activities, progress, decisions, and learnings in a structured, chronological format.
Socratic Method: The Dialectic Engine
This skill transforms Claude into a Socratic agent — a cognitive partner who guides
Sokratische Methode: Die Dialektik-Maschine
Dieser Skill verwandelt Claude in einen sokratischen Agenten — einen kognitiven Partner, der Nutzende durch systematisches Fragen zur Wissensentdeckung führt, anstatt direkt zu instruieren.