将内容与文章发布至 X(Twitter)。自定义分叉修复图片上传:先调用 DOM.setFileInputFiles,清理路径泄漏,发布后验证。使用...
Posts text, images, videos, and long-form articles to X via real Chrome browser (bypasses anti-bot detection).
Important: All scripts are located in the scripts/ subdirectory of this skill.
Agent Execution Instructions:
{baseDir}{baseDir}/scripts/<script-name>.ts{baseDir} in this document with the actual path${BUN_X} runtime: if bun installed → bun; if npx available → npx -y bun; else suggest installing bunScript Reference:
ScriptPurposescripts/x-browser.tsRegular posts (text + images)scripts/x-video.tsVideo posts (text + video)scripts/x-quote.tsQuote tweet with commentscripts/x-article.tsLong-form article publishing (Markdown)scripts/md-to-html.tsMarkdown → HTML conversionscripts/copy-to-clipboard.tsCopy content to clipboardscripts/paste-from-clipboard.tsSend real paste keystrokescripts/check-paste-permissions.tsVerify environment & permissions
Check EXTEND.md existence (priority order):
bash
# macOS, Linux, WSL, Git Bash
test -f .baoyu-skills/baoyu-post-to-x/EXTEND.md && echo "project"
test -f "${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-post-to-x/EXTEND.md" && echo "xdg"
test -f "$HOME/.baoyu-skills/baoyu-post-to-x/EXTEND.md" && echo "user"
powershell
# PowerShell (Windows)
if (Test-Path .baoyu-skills/baoyu-post-to-x/EXTEND.md) { "project" }
$xdg = if ($env:XDG_CONFIG_HOME) { $env:XDG_CONFIG_HOME } else { "$HOME/.config" }
if (Test-Path "$xdg/baoyu-skills/baoyu-post-to-x/EXTEND.md") { "xdg" }
if (Test-Path "$HOME/.baoyu-skills/baoyu-post-to-x/EXTEND.md") { "user" }
┌──────────────────────────────────────────────────┬───────────────────┐ │ Path │ Location │ ├──────────────────────────────────────────────────┼───────────────────┤ │ .baoyu-skills/baoyu-post-to-x/EXTEND.md │ Project directory │ ├──────────────────────────────────────────────────┼───────────────────┤ │ $HOME/.baoyu-skills/baoyu-post-to-x/EXTEND.md │ User home │ └──────────────────────────────────────────────────┴───────────────────┘
┌───────────┬───────────────────────────────────────────────────────────────────────────┐ │ Result │ Action │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ Found │ Read, parse, apply settings │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ Not found │ Use defaults │ └───────────┴───────────────────────────────────────────────────────────────────────────┘
EXTEND.md Supports: Default Chrome profile
bun runtimeBefore first use, suggest running the environment check. User can skip if they prefer.
bash
${BUN_X} {baseDir}/scripts/check-paste-permissions.ts
Checks: Chrome, profile isolation, Bun, Accessibility, clipboard, paste keystroke, Chrome conflicts.
If any check fails, provide fix guidance per item:
CheckFixChromeInstall Chrome or set X_BROWSER_CHROME_PATH env varProfile dirShared profile at baoyu-skills/chrome-profile (see CLAUDE.md Chrome Profile section)Bun runtimebrew install oven-sh/bun/bun (macOS) or npm install -g bunAccessibility (macOS)System Settings → Privacy & Security → Accessibility → enable terminal appClipboard copyEnsure Swift/AppKit available (macOS Xcode CLI tools: xcode-select --install)Paste keystroke (macOS)Same as Accessibility fix abovePaste keystroke (Linux)Install xdotool (X11) or ydotool (Wayland)
references/regular-posts.md for manual workflow, troubleshooting, and technical detailsreferences/articles.md for long-form article publishing guideUnless the user explicitly specifies the post type:
bash
${BUN_X} {baseDir}/scripts/x-browser.ts "Hello!" --image ./photo.png
Parameters:
ParameterDescription<text>Post content (positional)--image <path>Image file (repeatable, max 4)--profile <dir>Custom Chrome profile
Note: Script opens browser with content filled in. User reviews and publishes manually.
Text + video file.
bash
${BUN_X} {baseDir}/scripts/x-video.ts "Check this out!" --video ./clip.mp4
Parameters:
ParameterDescription<text>Post content (positional)--video <path>Video file (MP4, MOV, WebM)--profile <dir>Custom Chrome profile
Note: Script opens browser with content filled in. User reviews and publishes manually.
Limits: Regular 140s max, Premium 60min. Processing: 30-60s.
Quote an existing tweet with comment.
bash
${BUN_X} {baseDir}/scripts/x-quote.ts https://x.com/user/status/123 "Great insight!"
Parameters:
ParameterDescription<tweet-url>URL to quote (positional)<comment>Comment text (positional, optional)--profile <dir>Custom Chrome profile
Note: Script opens browser with content filled in. User reviews and publishes manually.
Long-form Markdown articles (requires X Premium).
bash
${BUN_X} {baseDir}/scripts/x-article.ts article.md
${BUN_X} {baseDir}/scripts/x-article.ts article.md --cover ./cover.jpg
Parameters:
ParameterDescription<markdown>Markdown file (positional)--cover <path>Cover image--title <text>Override title
Frontmatter: title, cover_image supported in YAML front matter.
Note: Script opens browser with article filled in. User reviews and publishes manually.
Post-Composition Check: The script automatically verifies after all images are inserted:
XIMGPH_ placeholders in editor contentIf the check fails (warnings in output), alert the user with the specific issues before they publish.
If a script fails with Chrome debug port not ready or Unable to connect, kill existing Chrome CDP instances first, then retry:
bash
pkill -f "Chrome.*remote-debugging-port" 2>/dev/null; pkill -f "Chromium.*remote-debugging-port" 2>/dev/null; sleep 2
Important: This should be done automatically — when encountering this error, kill Chrome CDP instances and retry the command without asking the user.
Custom configurations via EXTEND.md. See Preferences section for paths and supported options.