mcpField
B
baoyu-post-to-x

baoyu-post-to-x

github.com/jimliuマーケティング・グロース27.0k29.0k 回インストール7 週間前に更新
リポジトリ

baoyu-post-to-x について

baoyu-post-to-xは、実際のChromeブラウザー経由でXにテキスト、画像、動画、長文記事を投稿するスキルです。通常投稿、引用投稿、記事に対応し、ブラウザー操作モードを使い分けます。

主な機能

  1. 01テキストと画像の投稿
  2. 02動画投稿
  3. 03引用投稿の作成
  4. 04X長文記事の公開
  5. 05Markdownから記事HTMLへの変換
  6. 06Chrome操作モードの選択

活用シーン

  1. 01テキストと画像の投稿を準備する
  2. 02Chromeから動画をアップロードする
  3. 03引用投稿にコメントを添える
  4. 04画像付きMarkdownをX記事にする

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jimliu/baoyu-skills --skill baoyu-post-to-x

インストール後、Claude Code で/baoyu-post-to-xを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
articles.md
regular-posts.md
scripts/
bun.lock
check-paste-permissions.ts
copy-to-clipboard.ts
md-to-html.test.ts
md-to-html.ts
package.json
paste-from-clipboard.ts
x-article.ts
x-browser.ts
x-quote.ts
x-utils.test.ts
x-utils.ts
x-video.ts

詳細

X(Twitter)への投稿

実際の Chrome ブラウザーを使って、テキスト、画像、動画、長文記事を X に投稿します。

Codex では、次のブラウザーパスを混同しないでください。

  • Codex Chrome プラグイン/@chrome/Chrome Extension:バンドルされている chrome:Chrome スキルと、その Node REPL ブラウザークライアントを使用します。ユーザーが「Codex Chrome plugin」「Codex 自带的 Chrome 插件」「@chrome」などを指定した場合は、必ずこの方法を使ってください。
  • Chrome Computer Use:ユーザーが Computer Use を依頼した場合、または Chrome プラグインの指定がなく Computer Use が利用可能な場合に限り、表示中の Google Chrome UI に対して mcp__computer_use__.* を使用します。
  • CDP スクリプトモード:選択したモードが利用できない場合、またはユーザーが CDP/スクリプトモードを明示的に依頼した場合に限り、フォールバックとして使用します。

スクリプトディレクトリ

重要:すべてのスクリプトは、このスキルの scripts/ サブディレクトリにあります。

エージェントの実行手順:

  1. この SKILL.md ファイルのディレクトリパスを {baseDir} として特定します
  2. スクリプトのパス = {baseDir}/scripts/<script-name>.ts
  3. このドキュメント内のすべての {baseDir} を実際のパスに置き換えます
  4. ${BUN_X} ランタイムを解決します:bun がインストール済みなら bun、npx が利用可能なら npx -y bun、どちらも利用できない場合は bun のインストールを提案します

スクリプト一覧:

スクリプト用途
scripts/x-browser.ts通常の投稿(テキスト+画像)、CDP フォールバック
scripts/x-video.ts動画の投稿(テキスト+動画)、CDP フォールバック
scripts/x-quote.tsコメント付き引用ツイート、CDP フォールバック
scripts/x-article.ts長文記事の公開(Markdown)、CDP フォールバック
scripts/md-to-html.tsMarkdown → HTML 変換
scripts/copy-to-clipboard.tsコンテンツをクリップボードにコピー
scripts/paste-from-clipboard.ts実際の貼り付けキー入力を送信
scripts/check-paste-permissions.ts環境と権限を確認

実行モードの選択(必須)

X を操作する前に、必ずモードを 1 つ選択してください。

  1. ユーザーが Codex Chrome プラグイン、@chrome、Chrome 拡張機能、または「Codex 自带的 Chrome 插件」を明示的に指定した場合は、Codex Chrome プラグインモードを使用します。先に Computer Use を呼び出してはいけません。
  2. ユーザーが Chrome Computer Use を明示的に指定した場合は、Chrome Computer Use モードを使用します。ユーザーに伝えて承認を得ることなく、CDP、Playwright、アプリ内ブラウザー、Chrome プラグインに切り替えてはいけません。
  3. ユーザーが CDP/スクリプトモードを明示的に指定した場合は、CDP スクリプトモードを使用します。
  4. それ以外の場合は、Chrome Computer Use モードを優先します。ローカル画像を含む Markdown の X 記事では、テスト済みの X エディターフローを使用します。プレースホルダーの位置でツールバーから各本文画像を挿入し(Insert -> Media -> ダイアログのアイコンボタン Add photos or video)、その後プレースホルダーテキストを削除します。選択したブラウザー操作モードが利用できない場合、または UI のアップロード/選択フローが不安定な場合に限り、CDP スクリプトモードを使用します。

X への投稿ワークフローでは、アプリ内ブラウザーを決して使用しないでください。

Codex Chrome Plugin Mode

ユーザーが Codex Chrome plugin、@chrome、または Chrome Extension の経路をリクエストした場合は、常にこのモードを使用します。このモードでは、Computer Use や CDP ではなく、バンドルされた Chrome plugin を通じてユーザーの実際の Chrome プロファイルと X ログインを使用します。

セットアップ

  1. ブラウザーを操作する前に、chrome:Chrome スキルを読み込みます。
  2. Node REPL の js ツールがまだ表示されていない場合は、tool_search を使って node_repl js を検索します。
  3. Chrome スキルの指定どおりに Chrome ブラウザークライアントを初期化し、browser.user.openTabs() などの軽量な呼び出しを実行して、拡張機能への接続を確認します。
  4. 最初の軽量な呼び出しが失敗した場合は、2 秒待ってから 1 回だけ再試行します。それでも失敗する場合は、Chrome スキルの拡張機能の確認と復旧手順に従います。確認に問題がなくても通信に失敗する場合は、新しい Chrome ウィンドウを開く前にユーザーに確認します。黙って Computer Use や CDP に切り替えてはいけません。

一般的なルール

  • X の UI 操作には、Chrome plugin の browser.tabs.*、tab.playwright.*、tab.cua.*、およびファイル選択 API を使用します。
  • シェルコマンドは、Markdown の前処理とリッチ HTML のクリップボードへの準備に使用できます。X Article の本文画像には、画像をクリップボードから貼り付ける方法を使わず、エディターの Insert -> Media アップロードフローを使用します。
  • ファイルのアップロードが Not allowed で失敗した場合は、ユーザーに次のように伝えます。ファイルのアップロードを有効にするには、Chrome で chrome://extensions に移動し、Codex 拡張機能の[詳細]をクリックして、「ファイル URL へのアクセスを許可する」を有効にしてください。詳しくは https://developers.openai.com/codex/app/chrome-extension#upload-files をご覧ください。
  • Chrome plugin が native pipe is closed を報告した場合は、2 秒後に軽量なブラウザー呼び出しを 1 回だけ再試行し、その後 Chrome スキルのヘルスチェックを実行します。Chrome が起動しており、拡張機能が有効で、ネイティブホストのマニフェストが正しい場合は、新しい Chrome ウィンドウを開いて再試行する許可を求めます。壊れたパイプを通じてブラウザー操作を送り続けてはいけません。
  • 現在の会話でユーザーから明示的な最終確認を得る前に、Publish、Post、または外部に公開される送信操作をクリックしてはいけません。

X Articles

  1. Markdown を変換し、画像マップを保持します。
    ${BUN_X} {baseDir}/scripts/md-to-html.ts article.md --save-html /tmp/x-article-body.html > /tmp/x-article.json
    
  2. JSON の出力から title、coverImage、および contentImages(placeholder → localPath)を読み取ります。
  3. https://x.com/compose/articles で記事の下書きを開くか作成します。
  4. Chrome plugin のファイル選択フローを使ってカバー画像をアップロードします。拡張機能の権限によりアップロードがブロックされた場合は、停止し、上記の権限設定手順をそのまま伝えます。
  5. タイトルを入力してから、リッチ HTML をコピーします。
    ${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html
    
  6. Chrome plugin を通じて実際の貼り付けキー操作を実行し、本文に貼り付けます。macOS では Meta+V を使います。
  7. エディターのテキストに記事本文と XIMGPH_ プレースホルダーが含まれていることを確認します。シェルからクリップボードに書き込んだ後、システムクリップボードの内容を確認する証拠として tab.clipboard.readText() に頼ってはいけません。必要に応じて、macOS では pbpaste で確認します。
  8. 各 contentImages 項目について、プレースホルダーの順に次の操作を行います。
    • 表示されているプレースホルダーテキスト(XIMGPH_N)を見つけてクリックし、キャレットをその位置に置きます。
    • ツールバーメニューの Insert -> Media を開きます。
    • モーダルで、aria-label="Add photos or video" のアイコンボタンをクリックします。テキスト/ドロップゾーンや非表示のファイル入力欄はクリックしてはいけません。
    • ファイル選択画面で、その画像の localPath を指定してアップロードします。
    • 画像が表示された後も XIMGPH_N がその上に残っている場合は、プレースホルダーだけを正確に選択してから Delete を押します。Delete でうまくいかず、選択されているテキストがそのプレースホルダーだけだと確認できた場合に限り、Backspace を使います。
    • その XIMGPH_N のプレースホルダー数が 0 であることを確認します。
  9. プレビューを開き、タイトル、カバー画像、本文、リンク、画像を確認します。
  10. Publish をクリックする前に、明示的な確認を求めます。

Preferences (EXTEND.md)

EXTEND.md は優先順位に従って確認します。最初に見つかったファイルが適用されます。

PriorityPathScope
1.baoyu-skills/baoyu-post-to-x/EXTEND.mdProject
2${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-post-to-x/EXTEND.mdXDG
3$HOME/.baoyu-skills/baoyu-post-to-x/EXTEND.mdUser home

見つからない場合は、デフォルトを使用します。

EXTEND.md がサポートする項目:デフォルトの Chrome プロファイル

前提条件

  • Google Chrome または Chromium
  • bun ランタイム
  • 初回実行時:X に手動でログインします(セッションは保存されます)

事前チェック(任意)

初回使用前に、環境チェックの実行を提案してください。必要に応じて省略できます。

${BUN_X} {baseDir}/scripts/check-paste-permissions.ts

チェック項目:Chrome、プロファイルの分離、Bun、アクセシビリティ、クリップボード、貼り付けキー操作、Chrome の競合。

チェックに失敗した場合は、項目ごとに修正方法を案内してください。

チェック修正方法
ChromeChrome をインストールするか、X_BROWSER_CHROME_PATH 環境変数を設定します
プロファイルディレクトリbaoyu-skills/chrome-profile にある共有プロファイルを使用します(CLAUDE.md の Chrome Profile セクションを参照)
Bun ランタイムbrew install oven-sh/bun/bun(macOS)または npm install -g bun
アクセシビリティ(macOS)システム設定 → プライバシーとセキュリティ → アクセシビリティ → ターミナルアプリを有効にします
クリップボードへのコピーSwift/AppKit が利用可能であることを確認します(macOS の Xcode CLI ツール:xcode-select --install)
貼り付けキー操作(macOS)上記のアクセシビリティの修正方法と同じです
貼り付けキー操作(Linux)xdotool(X11)または ydotool(Wayland)をインストールします

参考資料

  • 通常の投稿:手動でのワークフロー、トラブルシューティング、技術的な詳細については references/regular-posts.md を参照してください
  • X 記事:長文記事の公開ガイドについては references/articles.md を参照してください

Chrome Computer Use モード

ユーザーが Chrome Computer Use を明示的に依頼した場合、または Chrome プラグインの希望が示されておらず、Codex が Computer Use で Google Chrome を操作できる場合に、このモードを使用します。ユーザーの既存の Chrome ウィンドウ、Cookie、ログイン状態、拡張機能、X セッションを使用します。

一般的なルール:

  • Chrome を操作する各アシスタントターンの開始時に、Google Chrome に対して get_app_state を呼び出します。
  • 可能な場合は要素インデックスを使った操作を優先し、座標を使うのはエディターでのテキスト選択またはドラッグ選択に限ります。
  • ユーザーがモード変更を承認しない限り、このモードでは X の UI 操作にアプリ内ブラウザー、Chrome プラグイン、Playwright、CDP を使用しません。
  • 会話中にユーザーから明示的な最終確認を得る前に、Publish、Post、または外部に公開される送信操作をクリックしてはいけません。

通常の投稿:

  1. Chrome で https://x.com/compose/post を開くか、そこへ移動します。
  2. Computer Use を使用して、投稿文を投稿作成欄に入力します。
  3. 画像ごとに、次を実行します。
    ${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts image /absolute/path/to/image.png
    
  4. Computer Use で貼り付け(macOS では super+v、Windows/Linux では control+v)てから、X のメディアのアップロードが完了するまで待ちます。
  5. Post をクリックする前に、確認を求めます。

動画投稿:

  1. Chrome で https://x.com/compose/post を開くか、そこへ移動します。
  2. 投稿作成欄に投稿文を入力します。
  3. 表示されているメディアのアップロード/ファイル選択 UI を使用して、動画を添付します。
  4. アップロードと処理が完了するまで待ちます。
  5. Post をクリックする前に、確認を求めます。

引用ポスト:

  1. Chrome でポストの URL を開きます。
  2. 表示されている引用/リポスト UI を使用して、「引用」を選択します。
  3. コメントを入力します。
  4. Post をクリックする前に、確認を求めます。

X 記事:

  1. Markdown を変換し、画像マップを保持します。
    ${BUN_X} {baseDir}/scripts/md-to-html.ts article.md --save-html /tmp/x-article-body.html > /tmp/x-article.json
    
  2. title、coverImage、contentImages(placeholder → localPath)の JSON 出力を読み取ります。
  3. Chrome で https://x.com/compose/articles を開き、下書きを新規作成するか開きます。カバー画像がある場合はアップロードし、タイトルを入力します。
  4. リッチ HTML をクリップボードにコピーします。
    ${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html
    
  5. Computer Use で記事本文に貼り付けます。
  6. contentImages の各エントリについて、プレースホルダーの順番に次の操作を行います。
    • XIMGPH_3 のような表示中のプレースホルダーテキストを正確に見つけ、その箇所をクリックして挿入位置を設定します。
    • ツールバーの Insert ドロップダウンを開き、Media を選択してから、モーダルにある Add photos or video というラベルのアイコンボタンをクリックします。
    • ネイティブのファイル選択画面で画像の localPath を選択します。
    • 画像ブロックが表示され、アップロード処理が完了するまで待ちます。
    • プレースホルダーが挿入した画像の上に残っている場合は、そのプレースホルダーテキストだけを正確に選択してから、まず Delete を押します。Delete で消せず、選択されているテキストがプレースホルダーだけだと確認できた場合に限り、Backspace を使用します。
  7. XIMGPH_ のプレースホルダーが残っていないこと、および想定した画像が表示されていることを確認します。
  8. プレビューを開き、タイトル、カバー画像、本文、リンク、画像を確認します。
  9. Publish をクリックする前に、明示的な確認を求めます。

Computer Use による選択、ツールバーからのアップロード、またはファイル選択画面の操作が不安定になった場合は、Chrome プラグインや CDP に黙って切り替えず、操作を中止して問題を報告します。


CDP スクリプトモード(フォールバック)

選択されているブラウザー操作モードを利用できない、不安定である、または明示的に要求されていない場合に限り、以下のスクリプトを使用します。これらのスクリプトは、CDP 経由で実際の Chrome インスタンスを起動または再利用し、確認のためにブラウザーを開いたままにします。

ユーザーが Codex Chrome プラグインまたは Chrome Computer Use を明示的に要求している場合、ユーザーが問題の説明を受けたうえでフォールバックを承認しない限り、CDP スクリプトモードを使用しません。


投稿形式の選択

ユーザーが投稿形式を明示的に指定していない場合:

  • プレーンテキストで、10,000 文字以内 → 通常の投稿(プレミアム会員は最大 10,000 文字、非プレミアム会員は 280 文字)
  • Markdown ファイル(.md)→ X 記事

通常の投稿

${BUN_X} {baseDir}/scripts/x-browser.ts "Hello!" --image ./photo.png

パラメーター:

パラメーター説明
<text>投稿内容(位置引数)
--image <path>画像ファイル(繰り返し指定可、最大 4 件)
--profile <dir>カスタム Chrome プロファイル

注: スクリプトは内容を入力した状態でブラウザーを開きます。ユーザーが確認して手動で公開します。

Codex モードに関する注記: ユーザーが Codex Chrome プラグインを明示的にリクエストした場合は、Codex Chrome Plugin Mode を使用してください。それ以外の場合、Chrome Computer Use が有効であれば、x-browser.ts を実行する代わりに Chrome Computer Use Mode を使用してください。


動画の投稿

テキストと動画ファイルです。

${BUN_X} {baseDir}/scripts/x-video.ts "Check this out!" --video ./clip.mp4

パラメーター:

パラメーター説明
<text>投稿内容(位置引数)
--video <path>動画ファイル(MP4、MOV、WebM)
--profile <dir>カスタム Chrome プロファイル

注: スクリプトは内容を入力した状態でブラウザーを開きます。ユーザーが確認して手動で公開します。

Codex モードに関する注記: ユーザーが Codex Chrome プラグインを明示的にリクエストした場合は、Codex Chrome Plugin Mode を使用してください。それ以外の場合、Chrome Computer Use が有効であれば、x-video.ts を実行する代わりに Chrome Computer Use Mode を使用してください。

制限: 通常は最大 140 秒、Premium は 60 分です。処理時間: 30~60 秒。


引用リポスト

既存のツイートをコメント付きで引用します。

${BUN_X} {baseDir}/scripts/x-quote.ts https://x.com/user/status/123 "Great insight!"

パラメーター:

パラメーター説明
<tweet-url>引用する URL(位置引数)
<comment>コメントのテキスト(位置引数、省略可)
--profile <dir>カスタム Chrome プロファイル

注: スクリプトは内容を入力した状態でブラウザーを開きます。ユーザーが確認して手動で公開します。

Codex モードに関する注記: ユーザーが Codex Chrome プラグインを明示的にリクエストした場合は、Codex Chrome Plugin Mode を使用してください。それ以外の場合、Chrome Computer Use が有効であれば、x-quote.ts を実行する代わりに Chrome Computer Use Mode を使用してください。


X 記事

長文の Markdown 記事です(X Premium が必要です)。

${BUN_X} {baseDir}/scripts/x-article.ts article.md
${BUN_X} {baseDir}/scripts/x-article.ts article.md --cover ./cover.jpg

パラメーター:

パラメーター説明
<markdown>Markdown ファイル(位置引数)
--cover <path>カバー画像
--title <text>タイトルを上書き

フロントマター: YAML フロントマターで title、cover_image を使用できます。

Codex モードに関する注記: ユーザーが Codex Chrome プラグインを明示的にリクエストした場合は、上記の Codex Chrome Plugin Mode に従ってください。ユーザーが Chrome Computer Use を明示的にリクエストした場合は、Chrome Computer Use Mode に従ってください。それ以外の場合は Chrome Computer Use を優先してください。ローカルのコンテンツ画像を含む Markdown 記事では、CDP Script Mode の x-article.ts にフォールバックする前に、ツールバーの Insert -> Media による画像アップロードのワークフローを使用してください。

CDP フォールバックに関する注記: スクリプトは記事を入力した状態でブラウザーを開きます。--submit を使用しない限り、ユーザーが確認して手動で公開します。

公開時の安全性: ユーザーが最終的な公開操作を明示的に確認しない限り、--submit を使用したり、Publish をクリックしたりしないでください。

投稿作成後の確認: スクリプトはすべての画像を挿入した後、次の項目を自動的に確認します。

  • エディターの内容に残っている XIMGPH_ プレースホルダー
  • 想定される画像数と実際の画像数

確認に失敗した場合(出力に警告が表示された場合)は、公開前に具体的な問題をユーザーに知らせてください。


トラブルシューティング

Chrome のデバッグポートが準備できていない

CDP フォールバックのみ: スクリプトが Chrome debug port not ready または Unable to connect で失敗した場合は、既存の Chrome CDP インスタンスを終了してから再試行してください。

pkill -f "Chrome.*remote-debugging-port" 2>/dev/null; pkill -f "Chromium.*remote-debugging-port" 2>/dev/null; sleep 2

重要: これは自動的に行ってください。このエラーが発生した場合は、ユーザーに確認せずに Chrome CDP インスタンスを終了し、コマンドを再試行してください。

注記

  • 初回実行時: 手動ログインが必要です(セッションは保持されます)
  • Codex Chrome Plugin Mode と Chrome Computer Use Mode では、ユーザーの既存の Chrome セッションを使用し、別の CDP プロファイルを起動しないでください
  • CDP スクリプトはデフォルトでブラウザーに内容を入力するだけです。--submit を明示的に使用しない限り、ユーザーが確認して手動で公開する必要があります
  • クロスプラットフォーム対応: macOS、Linux、Windows

拡張機能のサポート

EXTEND.md によるカスタム設定に対応しています。パスとサポートされているオプションについては、設定セクションをご覧ください。

コメント