コンテンツ制作 · JimLiu/baoyu-skills

baoyu-post-to-x

X(Twitter)へコンテンツや記事を投稿します。画像/動画付きの通常投稿およびX Articles(長文Markdown)に対応しています。Codex環境では、Codex Chromeプラグイン/@chromeの明示的な要求がある場合はChrome拡張機能ワークフローを使用し、利用可能な場合はChrome Computer Useを使用します。実際のChrome CDPスクリプトへのフォールバックは許可されている場合のみ行います。ユーザーが「Xに投稿して」「ツイートして」「Twitterで公開して」「Xで共有して」と要求した際に使用します。

L5 厳格管理 · 隔離環境と厳格な監査V2 人間監査済リバースAPI規約/コンプライアンス認証情報/セッションコマンド実行ネットワーク通信ファイル書き込みDual-pass Audit
Author JimLiuGitHub JimLiu/baoyu-skills ↗Stars 25926License MIT(仓库根 LICENSE:Copyright (c) 2026 Jim Liu;根 package.json 同声明 "license": "MIT")Commit 1567581c26
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

PlaywrightやPuppeteerを使用せず、実機ChromeをCDP接続で駆動することで、X側からは通常のブラウザセッションに見えるようにします。スクリプトは実際のUIへのコンテンツ入力のみを担当し、投稿アクションはユーザーの手動操作または--submitフラグに委ねます。

README.md
Uses real Chrome with CDP to bypass anti-automation.
処理内容:READMEにはプラットフォームの自動化検出を回避する設計であることが明記されています。実装としては、chrome-launcher + 共有プロファイル + CDPセッション(ブラウザのデバッグポートに接続)で構成されています。

画像添付の第一手段はCDPの合成イベントではなく、システムレベルの実際のCmd+Vキー押下です。画像をまずシステムクリップボードに書き込み、osascript/xdotool/ydotool経由でChromeウィンドウにペースト入力を送信し、CDP合成イベントはフォールバックとしてのみ使用します。

skills/baoyu-post-to-x/references/regular-posts.md
Sends real Cmd+V keystroke to Chrome, bypassing CDP's synthetic events that X can detect
動機として「This approach bypasses X's anti-automation detection that blocks Playwright/Puppeteer.(Playwright/PuppeteerをブロックするXの自動化検出を回避する)」と明記されており、paste-from-clipboard.tsのヘッダーコメントにも同様の理由が記載されています。

通常投稿、動画、引用、長文記事の4つのルートはすべて同一のChrome層を共有します。デバッグポートの解決・再利用、共有プロファイル、execCommand('insertText')またはInput.insertTextによるテキスト注入、DOM.setFileInputFilesによる直接ファイルパス指定でのアップロードを行います。

skills/baoyu-post-to-x/scripts/x-browser.ts
const X_COMPOSE_URL = 'https://x.com/compose/post';
長文記事ルートでは、MarkdownをHTMLに変換し、本文画像をXIMGPH_nプレースホルダーに置き換えた上で、各プレースホルダーを順次検出して画像を挿入します(X Articlesエディタがクリップボードからの画像貼り付けを受け付けないため)。

投稿はデフォルトで非自動化されています。スクリプトはコンテンツを入力した後に停止し、ユーザーに手動での投稿クリックを促します。明示的に--submitが指定された場合のみtweetButtonやpublishButtonをクリックします。

skills/baoyu-post-to-x/scripts/x-browser.ts
Post composed. Please review and click the publish button in the browser.
SKILL.mdには厳格なルールが定められており、ユーザーのターン内での明示的な確認がない限り、いかなる場合もPublish/Postをクリックしてはならないとされています。

認証情報はXのセッションCookieに依存します。CDPのNetwork.getCookies経由でx.com/twitter.comのCookieを読み取り、auth_tokenとct0の存在のみをアサートします(値の出力やファイル保存は行いません)。認証ストアは共有Chromeプロファイル自体となります。

skills/baoyu-post-to-x/scripts/x-utils.ts
const REQUIRED_X_SESSION_COOKIES = ['auth_token', 'ct0'] as const;
プロファイルおよびデバッグポートは環境変数(BAOYU_CHROME_PROFILE_DIR / X_BROWSER_PROFILE_DIR / X_BROWSER_DEBUG_PORT)で上書き可能であり、Chrome実行ファイルもX_BROWSER_CHROME_PATHで指定できます。

既に実行中のChromeインスタンスの再利用が設計に含まれています。まずps auxをスキャンして同一プロファイルおよび--remote-debugging-portを持つプロセスを検索し、検出された場合は新規起動せずにそのインスタンスに接続します。

packages/baoyu-chrome-cdp/src/index.ts
line.includes(options.profileDir) && line.includes("--remote-debugging-port=")
メリットはログイン済みセッションを再利用して安定性を高める点ですが、ユーザーが使用中である可能性のあるデバッグセッションをスクリプトが引き継ぐというトレードオフがあります(終了時にはスクリプト自身が開いたタブのみを閉じます)。

マルチプラットフォーム向けのクリップボードおよびキー押下のアダプタが組み込まれています。macOSではインラインSwift/AppKitでクリップボード書き込みを行いosascriptでキー送信、Linuxではwl-copy/xclip + xdotool/ydotool、WindowsではPowerShell STAおよびSendKeysを使用します。

skills/baoyu-post-to-x/scripts/copy-to-clipboard.ts
await runCommand('swift', [swiftPath, 'image', imagePath]);
macOS側では、インラインSwiftソースコードを一時ディレクトリに書き出してコンパイル・実行することで、リッチテキストや画像のクリップボード書き込みを実現しています。

アクティブな事前検証スクリプトが付属しています。Chrome、プロファイル分離、bun、アクセシビリティ権限、クリップボードの往復整合性、ペーストキー送信能力、実行中Chromeとの競合をチェックし、失敗時は終了コード1で終了します。

skills/baoyu-post-to-x/SKILL.md
Checks: Chrome, profile isolation, Bun, Accessibility, clipboard, paste keystroke, Chrome conflicts.
プロファイル分離チェックは意図的に設計されており、スキルが使用するプロファイルがユーザーの本番Chromeディレクトリではないこと('const isIsolated = !profileDir.startsWith(userChromeDir);')を確認して、メインプロファイルの誤用を防ぎます。

2コア機能

01通常投稿の送信(テキスト + 最大4枚の画像)
02動画投稿の送信(MP4/MOV/WebM)
03コメント付き引用リポスト
04X長文記事の公開(Markdown → HTML変換、カバー画像および本文画像プレースホルダー処理)
05ネイティブキー押下によるペースト(合成イベントの回避)およびクリップボード書き込み(画像/リッチHTML)
06ログイン済みChromeセッションの再利用(ps auxでのポート検索/既存デバッグセッションへの接続)
07投稿前の手動確認(デフォルトでは自動投稿を行わず、--submit指定時のみ実行)
08環境の事前検証(Chrome/権限/クリップボード/キー入力/競合)およびマルチプラットフォーム対応(macOS/Linux/WSL/Windows)

3外部依存関係

KindDependency / Endpoint
clinpx -y bun(跑同目录兄弟脚本与自身)
cliosascript(macOS:激活 Chrome、发送 Cmd+V)
cliswift(macOS:编译内联 AppKit 剪贴板源码)
clixdotool / ydotool(Linux X11/Wayland 粘贴键)
clipowershell.exe / cmd.exe / wslpath(Windows 与 WSL 路径与键击)
clips aux / pgrep / which / where(进程与工具探测)
cli真实 Chrome/Chromium/Edge 二进制(以 CDP 参数启动)
networkX 发帖页与长文编辑器
network本地 Chrome DevTools 端点(HTTP 探测 + WebSocket CDP)
networkmarkdown 里引用的任意 http(s) 图片会被下载到本地临时目录(经 baoyu-md)
packagebaoyu-chrome-cdp / baoyu-md / front-matter / highlight.js / marked / remark-* / unified(scripts/package.json 声明)

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
隔離環境で実行、都度明示的な認可
管理者向け
厳格な認可、全量監査、コンプライアンス確認
判定根拠(ファイルパスと抜粋)
  • SKILL.md / 脚本: 未公開またはリバースエンジニアリングされたプライベートAPIの呼び出し / クライアント識別子の偽装
  • SKILL.md / 脚本参数: 自動化検出の回避、ホストサンドボックスの無効化、またはSSL証明書検証のスキップ
  • SKILL.md / 会话存储: ブラウザのユーザーログイン状態およびセッションCookieの読み取り・再利用
  • 本地凭据 / 浏览器配置: ユーザーログインCookie/セッション/キーチェーンの読み取り: CDP Network.getCookies経由でx.com/twitter.comのセッションCookieを読み取り、auth_tokenとct0を検証
  • scripts/: ローカルスクリプトまたはコマンドの実行: ${BUN_X} {baseDir}/scripts/x-browser.ts|x-video.ts|x-quote.ts|x-article.ts
  • 网络端点: 外部ネットワークアクセスの宣言: https://x.com/compose/post および https://x.com/compose/articles(実ブラウザでのページ遷移)
  • 本地工作目录: ファイル読み書きおよびアーティファクト出力: $TMPDIR/x-article-content.html(長文本体HTML)および $TMPDIR/x-article-images(本文画像用一時ディレクトリ)
監査ノート: (能力・ポリシーレベルの判定であり、悪意あるコードの埋め込みではありません:難読化なし、ハードコードされた秘密鍵なし、想定外の宛先への送信なし、TLS/サンドボックスのダウングレードなし、未エスケープの補間なし)。3つの理由:①【自動化検出の技術的バイパス】READMEに「Uses real Chrome with CDP to bypass anti-automation.」と明記されています。実装面ではCDPの合成イベントをフォールバックに留め、OSレベルの実キー入力を主手段としています(「Sends real Cmd+V keystroke to Chrome, bypassing CDP's synthetic events that X can detect」)。paste-from-clipboard.tsヘッダーにも「This bypasses CDP's synthetic events which websites can detect and ignore.」と記述され、pasteFromClipboard('Google Chrome', 5, 500)とCDPフォールバックブランチに反映されています。②【認証情報の範囲】共有Chromeプロファイル(環境変数で変更可)を使用し、CDP Network.getCookies経由でx.com/twitter.comのauth_tokenおよびct0(REQUIRED_X_SESSION_COOKIES)を読み取ります。また、ps auxで--remote-debugging-portをスキャンし、稼働中のChromeデバッグセッションを引き継ぎます。③【外部副作用とプロセス操作】--submit指定時はtweetButton/publishButtonを自動クリックし、ユーザーアカウントで不可逆な公開投稿を行います。さらにSKILL.mdでは、ポート異常時にChromeデバッグプロセスを直接pkillするよう指示しています。auto-commenter(単なるAIコンテンツ検出の回避)とは異なり、本スキルはプラットフォーム自体のボット自動化検出を回避しているため、判定基準におけるレッドゾーンの「スクレイピング対策・ボット対策の回避」に該当します(notebooklm-skillのpatchrightやbaoyu-youtube-transcriptのクライアント偽装と同種)。

5二重目の独立検証

  • [ok] 反自动化侦测的绕过(判红主因) — README 'bypass anti-automation' + regular-posts.md 的 Cmd+V/合成事件两段 + paste-from-clipboard.ts 顶部注释互相印证;x-browser.ts 里 pasteFromClipboard('Google Chrome', 5, 500) 为首选,CDP 键事件为 fallback。
  • [ok] cookie 面边界:只经 CDP 读、不落盘 — x-utils.ts 经 Network.getCookies 取 x.com/twitter.com cookie 并在内存构建 map,仅断言 auth_token/ct0 存在;全目录 grep 未发现写入 cookie 文件或读取 Cookies SQLite('Cookies' 只出现在单测字面量里)。
  • [ok] 接管已运行调试会话 — packages/baoyu-chrome-cdp 通过 ps aux 匹配 profileDir + --remote-debugging-port 找端口并连接;x-utils.ts 也自行 spawnSync('ps', ['aux']) 做占用判定。
  • [ok] 发布动作默认关闭 — tweetButton/publishButton 的 click 都包在 --submit 分支内;未提交时脚本打印提示让用户自己在浏览器点发布;SKILL.md 另有『必须当轮明确确认』的硬规则。
  • [ok] 进程级动作(pkill) — SKILL.md 第 321 行给出 pkill -f "Chrome.*remote-debugging-port" …; sleep 2 的清理配方;该命令不在任何 TS 脚本内,需由 agent 执行——已写入 security.scripts_executed 与 risks。
  • [discrepancy] 文档与实现不一致(--disable-blink-features) — references/regular-posts.md 宣称 CDP 路线会用 --disable-blink-features=AutomationControlled 启动 Chrome,但 x-utils.ts 只传 extraArgs: ['--start-maximized'];该参数仅出现在 packages/baoyu-chrome-cdp/src/mermaid.ts 的无头渲染启动里。故『绕过』的实际手段是真实键击 + 真实浏览器,而非该启动参数。
  • [ok] 单测是否触碰网络/浏览器 — x-utils.test.ts 与 md-to-html.test.ts 均为纯函数/临时目录测试(锁文件判定、启动重试判定、cookie map、markdown 解析),无网络、无 Chrome 启动。
  • [ok] 档位复核(批4 终裁) — 按 Main 终裁与范式红档『反反爬/绕过』字面命中判 red(撤回先前的 orange);同时保留可减轻情节的说明:无 TLS/沙箱降级、无未转义插值、cookie 不落盘、发布默认关闭。

6結論

  • 不可逆な操作に対する確実なガード:デフォルトではコンテンツの入力のみを行い手動投稿を待機し、--submitが明示された場合のみ自動投稿。
  • 入念なマルチプラットフォーム自動化対応:macOS/Linux/WSL/Windowsごとに最適化されたクリップボードおよびキー入力処理とリトライ機構。
  • 実際の障害要因をカバーする事前検証スクリプト:Chrome、プロファイル分離、アクセシビリティ、クリップボード往復、キー入力能力、プロセス競合を検証。
  • 精密な長文記事ワークフロー:XIMGPH_nプレースホルダー、ツールバーのInsert→Mediaアップロード、プレースホルダー消去の逐次検証。
  • 規律ある実行モード選択:Chrome拡張、Computer Use、CDPスクリプト間での暗黙的なサイレントダウングレードを明確に禁止。
  • 最適な用途: 投稿内容が確定しており、公開前に自身で最終確認を行いたい個人利用シーンに最適です(長文やメディア付き投稿をXエディタに一括入力する、または--submitで明示的に自動公開する)。また、ログイン済みの実機Chromeを再利用し、Playwright型の自動化痕跡を避けたい個人のワークフローにも適しています。
    不向きな用途: 企業コンプライアンスが厳しい環境やプラットフォーム利用規約に敏感なケース(自動化検出の技術的バイパスを伴うため)、指示を受けると無人・自動で投稿してしまうワークフロー(アカウントに対する不可逆なリスク)、デスクトップ自動化権限のない環境(アクセシビリティ権限/Swiftコンパイル/キー入力送信ツールが必要)、他人のアカウントやセッションをエージェントに代行操作させる用途には適していません。
    Install Agent-Ready
    ① Verified Mirror 2026-09-15
    Option A · Direct DownloadDownload baoyu-post-to-x.tar.gz
    sha256: 83fb7a73416e3fe3…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 1567581c26.