← Back to list
✍️

baoyu-post-to-x Checked

Posts content and articles to X (Twitter). Supports regular posts with images/videos and X Articl…
✍️ Writing skills By JimLiu Version v1.0.0 Added 2026-09-03 Updated 2026-09-03 Source ↗
8.7Overall rating
2Views
6Downloads
25.6kStars

Installation

🤖 Install via AI

Copy the prompt below and send it to your AI assistant (e.g. Claude Code) — it will follow the instructions and install automatically.

Install the "baoyu-post-to-x" skill by following the instructions at https://skill123.me/install/baoyu-post-to-x.
⌨️ Command line install

Run in your terminal — downloads and installs to ~/.claude/skills/.

curl -fsSL https://skill123.me/install/baoyu-post-to-x.sh | bash
📦 Download ZIP

Download the zip and extract it into your skills directory (e.g. ~/.claude/skills/), then restart your session.

⬇ Download v1.0.0 · 57 KB
📊 Static rating
8.7/10
Trigger
7.0
Structure
9.3
Workflow
9.6
Content
8.0
Engineering
10.0
Security
8.5

Six-dimension rubric with reviewer rationale.

View scorecard ↓
🛡 Dynamic test
—

Not live-tested yet — this skill is rated on static analysis only.

About this skill

Posts content and articles to X (Twitter). Supports regular posts with images/videos and X Articles (long-form Markdown). In Codex, honor explicit requests for the Codex Chrome plugin/@chrome by using the Chrome Extension workflow; otherwise use Chrome Computer Use when available and fall back to real Chrome CDP scripts only when allowed. Use when user asks to "post to X", "tweet", "publish to Twitter", or "share on X".

Post to X (Twitter)

Posts text, images, videos, and long-form articles to X via a real Chrome browser.

In Codex, do not conflate these browser paths:

  • **Codex Chrome plugin / @chrome / Chrome Extension**: use the bundled chrome:Chrome skill and its Node REPL browser client. This is required whenever the user says "Codex Chrome plugin", "Codex 自带的 Chrome 插件", @chrome, or similar.
  • **Chrome Computer Use**: use mcp__computer_use__.* against the visible Google Chrome UI only when the user asks for Computer Use or no Chrome-plugin preference is stated and Computer Use is available.
  • **CDP script mode**: use only as a fallback when the selected mode is unavailable or the user explicitly asks for CDP/script mode.

Documentation

Posts content and articles to X (Twitter). Supports regular posts with images/videos and X Articles (long-form Markdown). In Codex, honor explicit requests for the Codex Chrome plugin/@chrome by using the Chrome Extension workflow; otherwise use Chrome Computer Use when available and fall back to real Chrome CDP scripts only when allowed. Use when user asks to "post to X", "tweet", "publish to Twitter", or "share on X".

Post to X (Twitter)

Posts text, images, videos, and long-form articles to X via a real Chrome browser.

In Codex, do not conflate these browser paths:

  • **Codex Chrome plugin / @chrome / Chrome Extension**: use the bundled chrome:Chrome skill and its Node REPL browser client. This is required whenever the user says "Codex Chrome plugin", "Codex 自带的 Chrome 插件", @chrome, or similar.
  • **Chrome Computer Use**: use mcp__computer_use__.* against the visible Google Chrome UI only when the user asks for Computer Use or no Chrome-plugin preference is stated and Computer Use is available.
  • **CDP script mode**: use only as a fallback when the selected mode is unavailable or the user explicitly asks for CDP/script mode.

Script Directory

**Important**: All scripts are located in the scripts/ subdirectory of this skill.

**Agent Execution Instructions**:

1. Determine this SKILL.md file's directory path as {baseDir}

2. Script path = {baseDir}/scripts/<script-name>.ts

3. Replace all {baseDir} in this document with the actual path

4. Resolve ${BUN_X} runtime: if bun installed → bun; if npx available → npx -y bun; else suggest installing bun

**Script Reference**:

| Script | Purpose |

|--------|---------|

| scripts/x-browser.ts | Regular posts (text + images), CDP fallback |

| scripts/x-video.ts | Video posts (text + video), CDP fallback |

| scripts/x-quote.ts | Quote tweet with comment, CDP fallback |

| scripts/x-article.ts | Long-form article publishing (Markdown), CDP fallback |

| scripts/md-to-html.ts | Markdown → HTML conversion |

| scripts/copy-to-clipboard.ts | Copy content to clipboard |

| scripts/paste-from-clipboard.ts | Send real paste keystroke |

| scripts/check-paste-permissions.ts | Verify environment & permissions |

Execution Mode Selection (Required)

Choose exactly one mode before interacting with X:

View full documentation

1. If the user explicitly asks for the Codex Chrome plugin, @chrome, the Chrome extension, or "Codex 自带的 Chrome 插件", use **Codex Chrome Plugin Mode**. Do not call Computer Use first.

2. If the user explicitly asks for Chrome Computer Use, use **Chrome Computer Use Mode**. Do not fall back to CDP, Playwright, the in-app Browser, or the Chrome plugin without telling the user and getting approval.

3. If the user explicitly asks for CDP/script mode, use **CDP Script Mode**.

4. Otherwise, prefer **Chrome Computer Use Mode**. For Markdown **X Articles with local content images**, use the tested X editor flow: insert each body image from the toolbar (Insert -> Media -> dialog icon button Add photos or video) at its placeholder, then delete the placeholder text. Use CDP Script Mode only when the selected browser-control mode is unavailable or the UI upload/selection flow is unreliable.

Never use the in-app Browser for X publishing workflows.

Codex Chrome Plugin Mode

Use this mode whenever the user requests the Codex Chrome plugin, @chrome, or the Chrome Extension path. This uses the user's real Chrome profile and X login through the bundled Chrome plugin, not Computer Use and not CDP.

**Setup**

1. Load the chrome:Chrome skill before browser work.

2. Use tool_search for node_repl js if the Node REPL js tool is not already visible.

3. Initialize the Chrome browser client exactly as the Chrome skill specifies, then run a lightweight call such as browser.user.openTabs() to verify the extension connection.

4. If the first lightweight call fails, wait 2 seconds and retry once. If it still fails, follow the Chrome skill's extension checks and recovery steps. If checks pass but communication still fails, ask the user before opening a new Chrome window. Do not switch to Computer Use or CDP silently.

**General rules**

  • Use the Chrome plugin's browser.tabs.*, tab.playwright.*, tab.cua.*, and file chooser APIs for X UI actions.
  • Shell commands are allowed for Markdown preprocessing and rich-HTML clipboard preparation. For X Article body images, do not rely on image clipboard paste; use the editor's Insert -> Media upload flow.
  • If a file upload fails with Not allowed, tell the user: To enable file upload, go to chrome://extensions in Chrome, click Details under the Codex extension, and enable "Allow access to file URLs." See https://developers.openai.com/codex/app/chrome-extension#upload-files for details.
  • If the Chrome plugin reports native pipe is closed, retry the lightweight browser call once after 2 seconds, then run the Chrome skill health checks. If Chrome is running, the extension is enabled, and the native host manifest is correct, ask permission to open a new Chrome window and retry. Do not keep sending browser actions through the broken pipe.
  • Never click Publish, Post, or any externally visible submit action without explicit final confirmation from the user in the current conversation.

**X Articles**

1. Convert Markdown and keep the image map:


   ${BUN_X} {baseDir}/scripts/md-to-html.ts article.md --save-html /tmp/x-article-body.html > /tmp/x-article.json

2. Read the JSON output for title, coverImage, and contentImages (placeholder → localPath).

3. Open or create the article draft at https://x.com/compose/articles.

4. Upload the cover with the Chrome plugin file chooser flow. If upload is blocked by extension permissions, stop and report the exact permission fix above.

5. Fill the title, then copy rich HTML:


   ${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html

6. Paste into the article body with a real paste keystroke through the Chrome plugin. On macOS use Meta+V.

7. Verify the editor text contains the article body and XIMGPH_ placeholders. Do not rely on tab.clipboard.readText() as proof of the system clipboard after shell clipboard writes; on macOS verify with pbpaste if needed.

8. For each contentImages item in placeholder order:

  • Locate the visible placeholder text (XIMGPH_N) and click it to place the caret there.
  • Open the toolbar menu Insert -> Media.
  • In the modal, click the icon button with aria-label="Add photos or video"; do not click the text/dropzone or hidden file input.
  • Use the file chooser to upload that image's localPath.
  • After the image appears, if XIMGPH_N remains above it, select exactly that placeholder and press Delete first. Use Backspace only if Delete fails and the selected text is confirmed to be exactly the placeholder.
  • Verify the placeholder count for that XIMGPH_N is 0.

9. Open Preview and verify title, cover, body, links, and images.

10. Ask for explicit confirmation before clicking Publish.

Preferences (EXTEND.md)

Check EXTEND.md in priority order — the first one found wins:

| 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 |

If none found, use defaults.

**EXTEND.md supports**: Default Chrome profile

Prerequisites

  • Google Chrome or Chromium
  • bun runtime
  • First run: log in to X manually (session saved)

Pre-flight Check (Optional)

Before first use, suggest running the environment check. User can skip if they prefer.


${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:

| Check | Fix |

|-------|-----|

| Chrome | Install Chrome or set X_BROWSER_CHROME_PATH env var |

| Profile dir | Shared profile at baoyu-skills/chrome-profile (see CLAUDE.md Chrome Profile section) |

| Bun runtime | brew install oven-sh/bun/bun (macOS) or npm install -g bun |

| Accessibility (macOS) | System Settings → Privacy & Security → Accessibility → enable terminal app |

| Clipboard copy | Ensur

Score breakdown

Trigger
7.0
Clear What and When with multiple post verbs, thin synonyms, weak When-Not boundary
Structure
9.3
335-line SKILL.md with two references offloaded, function-per-script layout, tests included
Workflow
9.6
Required mode selection step, explicit publish confirmation guard, post-composition placeholder check
Content
8.0
Imperative and specific but repetitive Codex-mode notes inflate length
Engineering
10.0
Valid frontmatter, declared deps, tests, all referenced paths exist
Security
8.5
Clipboard and keystroke automation is purpose-aligned, publish gated; auto pkill of Chrome costs points
Well-engineered X posting skill with strict three-mode selection, mandatory publish confirmation gates, placeholder verification and pre-flight checks. Inherently touches clipboard, keystrokes and Chrome CDP, and auto-kills CDP Chrome instances without asking, hence security deduction.