x-publish
ブラウザ操作でX(Twitter)にツイートやスレッドを下書きとして保存できるSkillで、Xへの投稿や下書き保存の指示、または「ツイートを投稿」などの言及があった際に利用し、短文ツイートやスレッドに対応しますが、自動投稿はせず必ず下書きとして保存するSkill。
📜 元の英語説明(参考)
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.
🇯🇵 日本人クリエイター向け解説
ブラウザ操作でX(Twitter)にツイートやスレッドを下書きとして保存できるSkillで、Xへの投稿や下書き保存の指示、または「ツイートを投稿」などの言及があった際に利用し、短文ツイートやスレッドに対応しますが、自動投稿はせず必ず下書きとして保存するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o x-publish.zip https://jpskill.com/download/19553.zip && unzip -o x-publish.zip && rm x-publish.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/19553.zip -OutFile "$d\x-publish.zip"; Expand-Archive "$d\x-publish.zip" -DestinationPath $d -Force; ri "$d\x-publish.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
x-publish.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
x-publishフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 2
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
X Publish
Playwrightブラウザ自動化を使用して、ツイートやスレッドをXのドラフトに公開します。
前提条件
- ブラウザ自動化のためのPlaywright MCP
- X (Twitter) にログイン済みのユーザー
- 以下の依存関係を持つPython 3.9+:
- macOS:
pip install Pillow pyobjc-framework-Cocoa - Windows:
pip install Pillow pywin32
- macOS:
重要なルール
- 決して自動公開しない - ドラフトにのみ保存します。
- ユーザーはログインしている必要があります - ログインしていない場合はログインを促します。
- 保存前にコンテンツを確認する - ツイートテキストを再確認します。
コンテンツの種類
短いツイート
280文字以下の単一ツイート
スレッド
複数のツイートが接続されたもの (3〜10ツイート)
スクリプト
copy_to_clipboard.py
テキストをシステムクリップボードにコピーして貼り付け操作を行います:
# テキストをクリップボードにコピー
python scripts/copy_to_clipboard.py text "Tweet content here"
# ファイルからコピー
python scripts/copy_to_clipboard.py text --file /tmp/tweet.txt
ワークフロー
短いツイート
ステップ1: コンテンツの準備
# ツイートを一時ファイルに保存
echo "Tweet content" > /tmp/tweet.txt
# クリップボードにコピー
python scripts/copy_to_clipboard.py text --file /tmp/tweet.txt
ステップ2: 作成画面を開く
browser_navigate: https://x.com/compose/post
ステップ3: コンテンツを貼り付け
browser_snapshot → ツイートテキストボックスを見つける
browser_click: textbox
browser_press_key: Meta+v
ステップ4: ドラフトを保存
browser_click: X (閉じるボタン)
browser_click: ダイアログ内の「Save」または「保存」
ステップ5: 確認
Report: "Draft saved. Please review at https://x.com/compose/drafts"
スレッド
ステップ1: コンテンツの準備 スレッドを個々のツイートに解析します:
### 1/5
First tweet content...
### 2/5
Second tweet content...
ステップ2: 作成画面を開く
browser_navigate: https://x.com/compose/post
ステップ3: 最初のツイートを追加
python scripts/copy_to_clipboard.py text "First tweet content"
browser_click: textbox
browser_press_key: Meta+v
ステップ4: さらにツイートを追加 追加のツイートごとに:
browser_click: 「Add another post」/「添加」ボタン
browser_press_key: Meta+v (次のツイートをコピーした後)
ステップ5: ドラフトを保存
browser_click: X (閉じるボタン)
browser_click: ダイアログ内の「Save」
ステップ6: 確認
Report: "Thread draft saved ({n} tweets). Review at https://x.com/compose/drafts"
効率化のガイドライン
不要な待機を避ける
❌ すべてのアクションの後にbrowser_snapshot
✅ 次のステップのためにアクションの戻り値を使用する
並行準備
✅ ブラウザ操作の前にすべてのツイートコンテンツを準備する
✅ ナビゲート中にクリップボードにコピーする
順次実行
ナビゲート → 最初のツイートを貼り付け → ツイートを追加 → 貼り付け → ... → 保存
要素の参照
Xの作成画面における一般的な要素:
| 要素 | 説明 | 典型的な参照パターン |
|---|---|---|
| ツイートテキストボックス | メイン入力エリア | 「What's happening」を含むテキストボックス |
| ツイート追加ボタン | 「+」または「添加」 | 作成エリア付近のボタン |
| 閉じるボタン | Xアイコン | 左上のボタン |
| ドラフトを保存 | 閉じるダイアログ内 | 「Save」/「保存」ボタン |
| ドラフトリンク | 保存されたドラフトを表示 | /compose/draftsへのリンク |
フローの例
短いツイートの例
ユーザー: /x-publish "Claude 4.5发布了,extended thinking是真正的游戏规则改变者。"
# 1. クリップボードにコピー
python scripts/copy_to_clipboard.py text "Claude 4.5发布了,extended thinking是真正的游戏规则改变者。"
# 2. ナビゲートして貼り付け
browser_navigate: https://x.com/compose/post
browser_snapshot → テキストボックスを見つける
browser_click: textbox
browser_press_key: Meta+v
# 3. 閉じて保存
browser_click: 閉じるボタン (X)
browser_click: 「Save」ボタン
# 4. レポート
"Draft saved! Review at: https://x.com/compose/drafts"
スレッドの例
ユーザー: /x-publish (x-createからのスレッドコンテンツを使用)
Thread:
### 1/3
First point about AI...
### 2/3
Second point...
### 3/3
Conclusion...
実行:
# すべてのツイートを準備
tweet1="First point about AI..."
tweet2="Second point..."
tweet3="Conclusion..."
# ナビゲート
browser_navigate: https://x.com/compose/post
# ツイート1
python copy_to_clipboard.py text "$tweet1"
browser_click: textbox
browser_press_key: Meta+v
# ツイート2
python copy_to_clipboard.py text "$tweet2"
browser_click: 「Add another post」ボタン
browser_press_key: Meta+v
# ツイート3
python copy_to_clipboard.py text "$tweet3"
browser_click: 「Add another post」ボタン
browser_press_key: Meta+v
# 保存
browser_click: 閉じるボタン
browser_click: 「Save」
# レポート
"Thread draft saved (3 tweets). Review at: https://x.com/compose/drafts"
エラー処理
未ログイン
ログインページが検出された場合:
→ 「まずXにログインしてから、再度/x-publishを実行してください」
文字数制限
ツイートが280文字を超える場合:
→ スレッドに分割するか、警告とともに切り詰めます
ネットワークエラー
ページの読み込みに失敗した場合:
→ 1回再試行し、その後エラーを報告します
統合
公開後:
推文已保存到草稿箱!
- 类型: {short/thread}
- 条数: {n}
- 草稿链接: https://x.com/compose/drafts
请手动审核后发布。 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
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
- macOS:
Critical Rules
- NEVER auto-publish - Only save to draft
- User must be logged in - Prompt to login if not
- 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:
# 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
# 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
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是真正的游戏规则改变者。"
# 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:
# 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
请手动审核后发布。 同梱ファイル
※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。
- 📄 SKILL.md (5,380 bytes)
- 📎 scripts/copy_to_clipboard.py (4,735 bytes)