Claude Marketplaces
SkillsMCP serversMarketplacesDigestTools
Submit

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP servers by category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control
Claude Marketplaces

An independent directory of skills, plugins and MCP servers for Claude Code. Not affiliated with Anthropic.

Browse

  • Skills
  • MCP servers
  • Marketplaces
  • Weekly digest
  • Skill index
  • MCP index
  • Marketplace index

Site

  • About
  • Tools
  • Submit
  • Feedback
  • Privacy
  • llms.txt
  • Plugins reference

Maker

  • Snug
  • Agent Caffeine
  • knobs
  • Wax
  • Vectoys
  • mertduzgun.com
Crafted at
Skills/Release Management
jimliu avatar

Baoyu Post To X

jimliu/baoyu-skills

The baoyu-post-to-x skill enables users to publish content to X (Twitter) by automating browser interactions through real Chrome with Chrome DevTools Protocol, bypassing anti-bot detection. It supports multiple content types including regular posts with images/videos, quote tweets, and long-form Markdown articles. The skill is designed for developers and content creators who need programmatic posting capabilities when responding to requests like "post to X," "tweet," or "publish to Twitter."

installs
28.9K
GitHub stars
27K
last updated
Aug 21, 2026
View on GitHubSave

Install

$ npx -y skills add jimliu/baoyu-skills --skill baoyu-post-to-x --agent claude-code

Installs into .claude/skills of the current project.

Files

Post to X (Twitter)

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

In Codex, three distinct browser paths — do not conflate them:

  • Codex Chrome plugin / @chrome / Chrome Extension: the bundled chrome:Chrome skill and its Node REPL browser client. Required whenever the user says "Codex Chrome plugin", "Codex 自带的 Chrome 插件", @chrome, or similar.
  • Chrome Computer Use: mcp__computer_use__.* against the visible Google Chrome UI.
  • CDP script mode: the bundled scripts; fallback only.

Script Directory

{baseDir} = this SKILL.md's directory; scripts are at {baseDir}/scripts/<script-name>.ts. Resolve ${BUN_X}: bun if installed → else npx -y bun → else suggest installing bun.

ScriptPurpose
scripts/x-browser.tsRegular posts (text + images), CDP fallback
scripts/x-video.tsVideo posts (text + video), CDP fallback
scripts/x-quote.tsQuote tweet with comment, CDP fallback
scripts/x-article.tsLong-form article publishing (Markdown), CDP fallback
scripts/md-to-html.tsMarkdown → HTML conversion
scripts/copy-to-clipboard.tsCopy content to clipboard
scripts/paste-from-clipboard.tsSend real paste keystroke
scripts/check-paste-permissions.tsVerify environment & permissions

Execution Mode Selection (Required)

Choose exactly one mode before interacting with X:

  1. User asks for the Codex Chrome plugin, @chrome, the Chrome extension, or "Codex 自带的 Chrome 插件" → Codex Chrome Plugin Mode. Do not call Computer Use first.
  2. User asks for Chrome Computer 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. User asks for CDP/script mode → CDP Script Mode.
  4. Otherwise prefer Chrome Computer Use Mode (if available). For Markdown X Articles with local content images, use the toolbar image flow (Insert → Media → Add photos or video) in "X Articles (UI Modes)". 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. Never switch away from an explicitly requested mode without explaining the blocker and getting approval.

Publish gate (all modes): never click Publish, Post, or any externally visible submit action, and never pass --submit, without explicit final confirmation from the user in the current conversation.

In Codex Chrome Plugin Mode and Chrome Computer Use Mode, use the user's existing Chrome session (profile, cookies, X login); do not launch a separate CDP profile.

Preferences (EXTEND.md)

First found wins:

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

None found → use defaults. Supported: default Chrome profile.

Prerequisites

Google Chrome or Chromium; bun. First run: user logs in to X manually (session persists). Works on macOS, Linux, Windows.

Pre-flight Check (Optional)

Before first use, suggest (user can skip):

${BUN_X} {baseDir}/scripts/check-paste-permissions.ts
Check failsFix
ChromeInstall Chrome or set X_BROWSER_CHROME_PATH env var
Profile 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 bun
Accessibility (macOS)System Settings → Privacy & Security → Accessibility → enable terminal app
Clipboard copyEnsure Swift/AppKit available (macOS Xcode CLI tools: xcode-select --install)
Paste keystroke (macOS)Same as Accessibility fix above
Paste keystroke (Linux)Install xdotool (X11) or ydotool (Wayland)

Post Type Selection

Unless the user specifies:

  • Plain text within 10,000 characters → Regular Post (Premium: up to 10,000 characters; non-Premium: 280)
  • Markdown file (.md) → X Article (requires X Premium)

Codex Chrome Plugin Mode

Uses the user's real Chrome profile and X login through the bundled Chrome plugin — not Computer Use, 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 visible.
  3. Initialize the browser client exactly as the Chrome skill specifies, then verify the extension with a lightweight call such as browser.user.openTabs().
  4. If that fails, wait 2 seconds and retry once; then 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.

Rules

  • Use the 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 Insert → Media upload flow.
  • 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.
  • 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 actions through the broken pipe.

Chrome Computer Use Mode

Uses the user's existing Chrome window, cookies, login, extensions, and X session.

Rules

  • Start each assistant turn that controls Chrome by calling get_app_state for Google Chrome.
  • Prefer element-index actions; use coordinates only for editor text selection or drag selection.
  • Do not use the in-app Browser, the Chrome plugin, Playwright, or CDP for X UI actions in this mode unless the user approves a mode change.
  • If selection, toolbar upload, or file-picker control becomes unreliable, stop and report the blocker instead of switching to the Chrome plugin or CDP silently.

Regular posts

  1. Open https://x.com/compose/post; type the post text into the composer.
  2. For each image: ${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts image /absolute/path/to/image.png, then paste (super+v macOS, control+v Windows/Linux) and wait until X finishes uploading.
  3. Ask for confirmation before clicking Post.

Video posts: open https://x.com/compose/post → type text → attach the video via the visible media upload/file picker UI → wait for upload and processing → ask before clicking Post.

Quote tweets: open the tweet URL → choose Quote in the visible quote/repost UI → type the comment → ask before clicking Post.

X Articles (UI Modes)

Shared by Codex Chrome Plugin Mode and Chrome Computer Use Mode. Paste keys: plugin Meta+V (macOS) / Control+V; Computer Use super+v (macOS) / control+v. File upload: plugin file chooser API; Computer Use native file picker.

  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 for title, coverImage, and contentImages (placeholder → localPath).
  3. Open https://x.com/compose/articles; click create/write if needed, or open the target draft.
  4. Upload the cover if present. Plugin: if blocked by extension permissions (Not allowed), stop and report the permission fix above. Computer Use: if the file picker can't be operated reliably, stop and ask rather than switching to CDP silently.
  5. Fill the title, then copy rich HTML:
    ${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html
    
  6. Click the article body and paste with a real paste keystroke.
  7. Plugin only: verify the body appeared and contains XIMGPH_ placeholders. Don't trust tab.clipboard.readText() as proof of the system clipboard after shell writes; on macOS verify with pbpaste if needed.
  8. For each contentImages item, in placeholder order:
    • Click the exact visible placeholder text (XIMGPH_N) to set the insertion point.
    • Toolbar Insert → Media; in the modal click the icon button aria-label="Add photos or video" — not the "Choose a file or drag it here" text/dropzone or the hidden file input.
    • Upload that image's localPath; wait until the image block appears and upload activity finishes.
    • If XIMGPH_N remains above the image, 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 that placeholder's count is 0 before continuing.
  9. Verify no XIMGPH_ remains and the expected number of images is visible; open Preview and check title, cover, body, links, and images.
  10. Ask for explicit confirmation before clicking Publish.

More (frontmatter, md-to-html output, formatting, troubleshooting): references/articles.md.


CDP Script Mode (Fallback)

Use only when the selected browser-control mode is unavailable or unreliable, or the user asks for CDP. If the user explicitly required the Codex Chrome plugin or Chrome Computer Use, use CDP only after explaining the blocker and getting approval.

Scripts launch or reuse a real Chrome via CDP, fill the content, and leave the browser open — the user reviews and publishes manually (x-article.ts publishes only with --submit, see Publish gate).

Regular Posts

${BUN_X} {baseDir}/scripts/x-browser.ts "Hello!" --image ./photo.png
ParameterDescription
<text>Post content (positional)
--image <path>Image file (repeatable, max 4)
--profile <dir>Custom Chrome profile

Manual clipboard/paste steps, troubleshooting, internals: references/regular-posts.md.

Video Posts

${BUN_X} {baseDir}/scripts/x-video.ts "Check this out!" --video ./clip.mp4
ParameterDescription
<text>Post content (positional)
--video <path>Video file (MP4, MOV, WebM)
--profile <dir>Custom Chrome profile

Limits: regular 140s max, Premium 60min. Processing: 30-60s.

Quote Tweets

${BUN_X} {baseDir}/scripts/x-quote.ts https://x.com/user/status/123 "Great insight!"
ParameterDescription
<tweet-url>URL to quote (positional)
<comment>Comment text (positional, optional)
--profile <dir>Custom Chrome profile

X Articles

${BUN_X} {baseDir}/scripts/x-article.ts article.md
${BUN_X} {baseDir}/scripts/x-article.ts article.md --cover ./cover.jpg
ParameterDescription
<markdown>Markdown file (positional)
--cover <path>Cover image
--title <text>Override title

Frontmatter: title, cover_image.

Post-composition check: the script then reports remaining XIMGPH_ placeholders and expected vs actual image count. If it prints warnings, tell the user the specific issues before they publish.

Troubleshooting

Chrome debug port not ready / Unable to connect (CDP only): automatically, without asking, kill existing Chrome CDP instances and retry:

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

Extension Support

Custom configuration via EXTEND.md — see Preferences.

SKILL.md on GitHub

Sponsors

SnugThe clipboard manager you and your agent can use, safelyAgent CaffeineClose your lid, come back to finished workWaxBlock anything with supervision, without erasing your iPhoneOpen StepsSponsoredFree and open-source skills that make AI coding agents easier to understand, verify, and control.

Details

Repository
github.com/jimliu/baoyu-skills
Categories
Release Management, Automation & Workflows

More from jimliu/baoyu-skills

All 24
  • Baoyu Compress Image28.2K
  • Baoyu Format Markdown28.2K
  • Baoyu Danger X To Markdown28K
  • Baoyu Danger Gemini Web28K
  • Release Skills25.7K
  • Baoyu Translate25.6K
  • Baoyu Youtube Transcript21.8K
  • Baoyu Post To Weibo21.6K
  • Baoyu Diagram15.4K
  • Baoyu Wechat Summary9.9K
  • Baoyu Imagine9.3K
  • Baoyu Electron Extract7.9K
  • Baoyu Image Cards6.2K
  • Baoyu Post To Wechat34.5K
  • Baoyu Image Gen33.7K
  • Baoyu Infographic32.9K
  • Baoyu Markdown To Html32.3K
  • Baoyu Cover Image32.1K
  • Baoyu Article Illustrator32K
  • Baoyu Xhs Images31.4K
  • Baoyu Slide Deck31.2K
  • Baoyu Url To Markdown30.4K
  • Baoyu Comic29.9K

Recommended

More Release Management
1warpdotdev avatarreview-prwarpdotdev/common-skillsReview a pull request diff and write structured feedback to review.json for the workflow to publish. Use when reviewing a checked-out PR from local artifacts li28.9Kinstalls
2caffeinelabs avatarextension-openaicaffeinelabs/skillsMANDATORY recipe for every Caffeine build that calls OpenAI (ChatGPT, GPT-4o, an LLM, a chatbot, embeddings). The ONLY supported path is the `openai-client` mop28.3Kinstalls
3expo avatarexpo-examplesexpo/skillsFramework (OSS). Expo's official example projects - the expo/examples repo of ~70 `with-*` integrations (Stripe, Clerk, Supabase, OpenAI, maps, Reanimated, SQLi26.7Kinstalls
4vercel-labs avatarnext-upgradevercel-labs/next-skillsAutomated Next.js version upgrades with official codemods and migration guide integration.22.3Kinstalls
5jimliu avatarbaoyu-post-to-weibojimliu/baoyu-skillsPosts content to Weibo (微博). Supports regular posts with text, images, and videos, and headline articles (头条文章) with Markdown input via Chrome CDP. Use when use21.6Kinstalls
6expo avatareas-simulatorexpo/skillsEAS service (paid). Run and control a user's app on a remote iOS/Android simulator hosted on EAS cloud. Read before running any `eas simulator:*` commands - it 20.9Kinstalls