baoyu-post-to-x 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".
Is the baoyu-post-to-x skill safe?
Read the findings before you install it. We read 15 files in the folder on 2026-09-28.
- high
SKILL.md:50Tells the agent to set aside its instructions, hide what it does from the user, or switch off safety checks.
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 ...
Install the baoyu-post-to-x skill
A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.
git clone --depth 1 https://github.com/JimLiu/baoyu-skills.git /tmp/baoyu-skills mkdir -p ~/.claude/skills cp -r /tmp/baoyu-skills/skills/baoyu-post-to-x ~/.claude/skills/baoyu-post-to-x
In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub
The instructions your agent would load
SKILL.md as published, without the frontmatter. Read it on GitHub
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 mcpcomputeruse. 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:
- Determine this SKILL.md file's directory path as {baseDir}
- Script path = {baseDir}/scripts/.ts
- Replace all {baseDir} in this document with the actual path
- Resolve ${BUN_X} runtime: if bun installed → bun; if npx available → npx -y bun; else suggest installing bun
Script Reference:
Execution Mode Selection (Required)
Choose exactly one mode before interacting with X:
- 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.
- 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.
- If the user explicitly asks for CDP/script mode, use CDP Script Mode.
- 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
- Load the chrome:Chrome skill before browser work.
- Use toolsearch for noderepl js if the Node REPL js tool is not already visible.
- 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.
- 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
- 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- Read the JSON output for title, coverImage, and contentImages (placeholder → localPath).
- Open or create the article draft at https://x.com/compose/articles.
- 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.
- Fill the title, then copy rich HTML:
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html- Paste into the article body with a real paste keystroke through the Chrome plugin. On macOS use Meta+V.
- 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.
- 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.
- Open Preview and verify title, cover, body, links, and images.
- Ask for explicit confirmation before clicking Publish.
Preferences (EXTEND.md)
Check EXTEND.md in priority order — the first one found wins:
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.tsChecks: Chrome, profile isolation, Bun, Accessibility, clipboard, paste keystroke, Chrome conflicts.
If any check fails, provide fix guidance per item:
References
- Regular Posts: See references/regular-posts.md for manual workflow, troubleshooting, and technical details
- X Articles: See references/articles.md for long-form article publishing guide
Chrome Computer Use Mode
Use this mode when the user explicitly asks for Chrome Computer Use, or when no Chrome-plugin preference is stated and Codex can control Google Chrome with Computer Use. This uses the user's existing Chrome window, cookies, login, extensions, and X session.
General rules:
- Start each assistant turn that controls Chrome by calling getappstate for Google Chrome.
- Prefer element-index actions when available; 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.
- Never click Publish, Post, or any externally visible submit action without an explicit final confirmation from the user in the current conversation.
Regular posts:
- Open or navigate Chrome to https://x.com/compose/post.
- Type the post text into the composer using Computer Use.
- For each image, run:
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts image /absolute/path/to/image.png- Paste with Computer Use (super+v on macOS, control+v on Windows/Linux), then wait until X finishes uploading media.
- Ask for confirmation before clicking Post.
Video posts:
- Open or navigate Chrome to https://x.com/compose/post.
- Type the post text into the composer.
- Use the visible media upload/file picker UI to attach the video.
- Wait for upload and processing to complete.
- Ask for confirmation before clicking Post.
Quote tweets:
- Open the tweet URL in Chrome.
- Use the visible quote/repost UI to choose Quote.
- Type the comment.
- Ask for confirmation before clicking Post.
X Articles:
- 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- Read the JSON output for title, coverImage, and contentImages (placeholder → localPath).
- In Chrome, open https://x.com/compose/articles, create or open the draft, upload the cover if present, and fill the title.
- Copy rich HTML to the clipboard:
${BUN_X} {baseDir}/scripts/copy-to-clipboard.ts html --file /tmp/x-article-body.html- Paste into the article body with Computer Use.
- For each contentImages entry in placeholder order:
- Locate the exact visible placeholder text such as XIMGPH_3 and click it to set the insertion point.
- Open the toolbar Insert dropdown, choose Media, then click the modal's icon button labeled Add photos or video.
- Use the native file picker to choose the image's localPath.
- Wait until the image block appears and any upload activity is finished.
- If the placeholder remains above the inserted image, reselect exactly that placeholder text and press Delete first. Use Backspace only if Delete fails and the selected text is confirmed to be exactly the placeholder.
- Verify no XIMGPH_ placeholders remain and the expected images appear.
- Open Preview and verify title, cover, body, links, and images.
- Ask for explicit confirmation before clicking Publish.
More skills from JimLiu/baoyu-skills
- Abaoyu-article-illustratorAnalyzes article structure, identifies positions requiring visual aids, generates illustrations with Type × Style × Palette three-dimension approach. Use when user asks to "illustrate article", "add images", "generate images for article", or "为文章配图".
- Abaoyu-comicKnowledge comic creator supporting multiple art styles and tones. Creates original educational comics with detailed panel layouts and batch-capable image generation. Use when user asks to create "知识漫画", "教育漫画", "biography comic", "tutorial comic", or "Logicomix-style comic".
- Abaoyu-compress-imageCompresses images to WebP (default) or PNG with automatic tool selection. Use when user asks to "compress image", "optimize image", "convert to webp", or reduce image file size.
- Abaoyu-cover-imageGenerates article cover images with 5 dimensions (type, palette, rendering, text, mood) combining 11 color palettes and 7 rendering styles. Supports cinematic (2.35:1), widescreen (16:9), and square (1:1) aspects. Use when user asks to "generate cover image", "create article cover", or "make cover".
- Abaoyu-danger-gemini-webGenerates images and text via reverse-engineered Gemini Web API. Supports text generation, image generation from prompts, reference images for vision input, and multi-turn conversations. Use when other skills need image generation backend, or when user requests "generate image with Gemini", "Gemini text generation", or needs vision-capable AI generation.
- Abaoyu-danger-x-to-markdownConverts X (Twitter) tweets and articles to markdown with YAML front matter. Uses reverse-engineered API requiring user consent. Use when user mentions "X to markdown", "tweet to markdown", "save tweet", or provides x.com/twitter.com URLs for conversion.
- Abaoyu-diagramCreate professional, dark-themed SVG diagrams of any type — architecture diagrams, flowcharts, sequence diagrams, structural diagrams, mind maps, timelines, illustrative/conceptual diagrams, and more. Use this skill whenever the user asks for any kind of technical or conceptual diagram, visualization of a system, process flow, data flow, component relationship, network topology, decision tree, org chart, state machine, or any visual representation of structure/logic/process. Also trigger when the user says "画个图" "画一个架构图" "diagram" "flowchart" "sequence diagram" "draw me a ..." or uploads content and asks to visualize it. Output is always a standalone .svg file.
- Abaoyu-electron-extractExtracts resources and JavaScript from any installed Electron app (`.asar` bundle), restoring original sources from `.js.map` files when available or formatting minified code with Prettier otherwise. Use when user wants to "extract Electron app", "decompile Electron", "get the source code of <app>", "inspect app.asar", "看 Electron 应用源码", "提取 .asar", or asks how a desktop Electron app is built. Skips `node_modules` and supports both macOS and Windows.
- Abaoyu-format-markdownFormats plain text or markdown files with frontmatter, titles, summaries, headings, bold, lists, and code blocks. Use when user asks to "format markdown", "beautify article", "add formatting", or improve article layout. Outputs to {filename}-formatted.md.
- Abaoyu-image-genAI image generation with OpenAI GPT Image 2.5, Azure OpenAI, Google, OpenRouter, DashScope, Z.AI GLM-Image, MiniMax, Jimeng, Seedream, Replicate and Agnes APIs. Supports text-to-image, reference images, aspect ratios, and batch generation from saved prompt files. Sequential by default; use batch parallel generation when the user already has multiple prompts or wants stable multi-image throughput. Use when user asks to generate, create, or draw images.
- Abaoyu-infographicGenerate professional infographics with 21 layout types and 22 visual styles. Analyzes content, recommends layout×style combinations, and generates publication-ready infographics. Use when user asks to create "infographic", "信息图", "visual summary", "可视化", or "高密度信息大图".
- Abaoyu-markdown-to-htmlConverts Markdown to styled HTML with WeChat-compatible themes. Supports code highlighting, math, Mermaid (rendered to PNG via headless Chrome), PlantUML, footnotes, alerts, infographics, and optional bottom citations for external links. Use when user asks for "markdown to html", "convert md to html", "md 转 html", "微信外链转底部引用", or needs styled HTML output from markdown.