baoyu-post-to-x について
baoyu-post-to-xは、実際のChromeブラウザー経由でXにテキスト、画像、動画、長文記事を投稿するスキルです。通常投稿、引用投稿、記事に対応し、ブラウザー操作モードを使い分けます。
主な機能
- 01テキストと画像の投稿
- 02動画投稿
- 03引用投稿の作成
- 04X長文記事の公開
- 05Markdownから記事HTMLへの変換
- 06Chrome操作モードの選択
活用シーン
- 01テキストと画像の投稿を準備する
- 02Chromeから動画をアップロードする
- 03引用投稿にコメントを添える
- 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.mdregular-posts.mdscripts/bun.lockcheck-paste-permissions.tscopy-to-clipboard.tsmd-to-html.test.tsmd-to-html.tspackage.jsonpaste-from-clipboard.tsx-article.tsx-browser.tsx-quote.tsx-utils.test.tsx-utils.tsx-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/ サブディレクトリにあります。
エージェントの実行手順:
- この SKILL.md ファイルのディレクトリパスを
{baseDir}として特定します - スクリプトのパス =
{baseDir}/scripts/<script-name>.ts - このドキュメント内のすべての
{baseDir}を実際のパスに置き換えます ${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.ts | Markdown → HTML 変換 |
scripts/copy-to-clipboard.ts | コンテンツをクリップボードにコピー |
scripts/paste-from-clipboard.ts | 実際の貼り付けキー入力を送信 |
scripts/check-paste-permissions.ts | 環境と権限を確認 |
実行モードの選択(必須)
X を操作する前に、必ずモードを 1 つ選択してください。
- ユーザーが Codex Chrome プラグイン、
@chrome、Chrome 拡張機能、または「Codex 自带的 Chrome 插件」を明示的に指定した場合は、Codex Chrome プラグインモードを使用します。先に Computer Use を呼び出してはいけません。 - ユーザーが Chrome Computer Use を明示的に指定した場合は、Chrome Computer Use モードを使用します。ユーザーに伝えて承認を得ることなく、CDP、Playwright、アプリ内ブラウザー、Chrome プラグインに切り替えてはいけません。
- ユーザーが CDP/スクリプトモードを明示的に指定した場合は、CDP スクリプトモードを使用します。
- それ以外の場合は、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 ログインを使用します。
セットアップ
- ブラウザーを操作する前に、
chrome:Chromeスキルを読み込みます。 - Node REPL の
jsツールがまだ表示されていない場合は、tool_searchを使ってnode_repl jsを検索します。 - Chrome スキルの指定どおりに Chrome ブラウザークライアントを初期化し、
browser.user.openTabs()などの軽量な呼び出しを実行して、拡張機能への接続を確認します。 - 最初の軽量な呼び出しが失敗した場合は、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
- Markdown を変換し、画像マップを保持します。
${BUN_X} {baseDir}/scripts/md-to-html.ts article.md --save-html /tmp/x-article-body.html > /tmp/x-article.json - JSON の出力から
title、coverImage、およびcontentImages(placeholder→localPath)を読み取ります。 https://x.com/compose/articlesで記事の下書きを開くか作成します。- Chrome plugin のファイル選択フローを使ってカバー画像をアップロードします。拡張機能の権限によりアップロードがブロックされた場合は、停止し、上記の権限設定手順をそのまま伝えます。
- タイトルを入力してから、リッチ HTML をコピーします。
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html - Chrome plugin を通じて実際の貼り付けキー操作を実行し、本文に貼り付けます。macOS では
Meta+Vを使います。 - エディターのテキストに記事本文と
XIMGPH_プレースホルダーが含まれていることを確認します。シェルからクリップボードに書き込んだ後、システムクリップボードの内容を確認する証拠としてtab.clipboard.readText()に頼ってはいけません。必要に応じて、macOS ではpbpasteで確認します。 - 各
contentImages項目について、プレースホルダーの順に次の操作を行います。- 表示されているプレースホルダーテキスト(
XIMGPH_N)を見つけてクリックし、キャレットをその位置に置きます。 - ツールバーメニューの
Insert->Mediaを開きます。 - モーダルで、
aria-label="Add photos or video"のアイコンボタンをクリックします。テキスト/ドロップゾーンや非表示のファイル入力欄はクリックしてはいけません。 - ファイル選択画面で、その画像の
localPathを指定してアップロードします。 - 画像が表示された後も
XIMGPH_Nがその上に残っている場合は、プレースホルダーだけを正確に選択してからDeleteを押します。Deleteでうまくいかず、選択されているテキストがそのプレースホルダーだけだと確認できた場合に限り、Backspaceを使います。 - その
XIMGPH_Nのプレースホルダー数が0であることを確認します。
- 表示されているプレースホルダーテキスト(
- プレビューを開き、タイトル、カバー画像、本文、リンク、画像を確認します。
Publishをクリックする前に、明示的な確認を求めます。
Preferences (EXTEND.md)
EXTEND.md は優先順位に従って確認します。最初に見つかったファイルが適用されます。
| Priority | Path | Scope |
|---|---|---|
| 1 | .baoyu-skills/baoyu-post-to-x/EXTEND.md | Project |
| 2 | ${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-post-to-x/EXTEND.md | XDG |
| 3 | $HOME/.baoyu-skills/baoyu-post-to-x/EXTEND.md | User home |
見つからない場合は、デフォルトを使用します。
EXTEND.md がサポートする項目:デフォルトの Chrome プロファイル
前提条件
- Google Chrome または Chromium
bunランタイム- 初回実行時:X に手動でログインします(セッションは保存されます)
事前チェック(任意)
初回使用前に、環境チェックの実行を提案してください。必要に応じて省略できます。
${BUN_X} {baseDir}/scripts/check-paste-permissions.ts
チェック項目:Chrome、プロファイルの分離、Bun、アクセシビリティ、クリップボード、貼り付けキー操作、Chrome の競合。
チェックに失敗した場合は、項目ごとに修正方法を案内してください。
| チェック | 修正方法 |
|---|---|
| Chrome | Chrome をインストールするか、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、または外部に公開される送信操作をクリックしてはいけません。
通常の投稿:
- Chrome で
https://x.com/compose/postを開くか、そこへ移動します。 - Computer Use を使用して、投稿文を投稿作成欄に入力します。
- 画像ごとに、次を実行します。
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts image /absolute/path/to/image.png - Computer Use で貼り付け(macOS では
super+v、Windows/Linux ではcontrol+v)てから、X のメディアのアップロードが完了するまで待ちます。 Postをクリックする前に、確認を求めます。
動画投稿:
- Chrome で
https://x.com/compose/postを開くか、そこへ移動します。 - 投稿作成欄に投稿文を入力します。
- 表示されているメディアのアップロード/ファイル選択 UI を使用して、動画を添付します。
- アップロードと処理が完了するまで待ちます。
Postをクリックする前に、確認を求めます。
引用ポスト:
- Chrome でポストの URL を開きます。
- 表示されている引用/リポスト UI を使用して、「引用」を選択します。
- コメントを入力します。
Postをクリックする前に、確認を求めます。
X 記事:
- Markdown を変換し、画像マップを保持します。
${BUN_X} {baseDir}/scripts/md-to-html.ts article.md --save-html /tmp/x-article-body.html > /tmp/x-article.json title、coverImage、contentImages(placeholder→localPath)の JSON 出力を読み取ります。- Chrome で
https://x.com/compose/articlesを開き、下書きを新規作成するか開きます。カバー画像がある場合はアップロードし、タイトルを入力します。 - リッチ HTML をクリップボードにコピーします。
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html - Computer Use で記事本文に貼り付けます。
contentImagesの各エントリについて、プレースホルダーの順番に次の操作を行います。XIMGPH_3のような表示中のプレースホルダーテキストを正確に見つけ、その箇所をクリックして挿入位置を設定します。- ツールバーの
Insertドロップダウンを開き、Mediaを選択してから、モーダルにあるAdd photos or videoというラベルのアイコンボタンをクリックします。 - ネイティブのファイル選択画面で画像の
localPathを選択します。 - 画像ブロックが表示され、アップロード処理が完了するまで待ちます。
- プレースホルダーが挿入した画像の上に残っている場合は、そのプレースホルダーテキストだけを正確に選択してから、まず
Deleteを押します。Deleteで消せず、選択されているテキストがプレースホルダーだけだと確認できた場合に限り、Backspaceを使用します。
XIMGPH_のプレースホルダーが残っていないこと、および想定した画像が表示されていることを確認します。- プレビューを開き、タイトル、カバー画像、本文、リンク、画像を確認します。
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 によるカスタム設定に対応しています。パスとサポートされているオプションについては、設定セクションをご覧ください。