首页 / 全部技能 / 内容创作 / baoyu-post-to-x
内容创作 · JimLiu/baoyu-skills

baoyu-post-to-x

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

L5 严管 · 隔离环境与严格审计V2 已复核逆向接口条款/合规凭据/登录态执行命令联网读写文件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 + 共享 profile + 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.';paste-from-clipboard.ts 顶部注释也重复同一理由。

常规贴/视频/引用/长文四条路径共用同一套 Chrome 层:解析或复用调试端口、共享 profile、注入文本用 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 profile。

skills/baoyu-post-to-x/scripts/x-utils.ts
const REQUIRED_X_SESSION_COOKIES = ['auth_token', 'ct0'] as const;
profile 与调试端口都可被环境变量改写(BAOYU_CHROME_PROFILE_DIR / X_BROWSER_PROFILE_DIR / X_BROWSER_DEBUG_PORT),Chrome 可执行文件也可由 X_BROWSER_CHROME_PATH 指定。

复用已运行的 Chrome 是设计内的:先扫 ps aux 找带同一 profile 与 --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、profile 隔离性、bun、辅助功能权限、剪贴板往返、粘贴键能力与正在运行的 Chrome 冲突,失败即退出码 1。

skills/baoyu-post-to-x/SKILL.md
Checks: Chrome, profile isolation, Bun, Accessibility, clipboard, paste keystroke, Chrome conflicts.
其中 profile 隔离性检查是刻意的:确认 skill 用的 profile 不是用户真实 Chrome 目录('const isIsolated = !profileDir.startsWith(userChromeDir);'),避免误用主 profile。

2核心能力

01发常规帖(文字 + 最多 4 图)
02发视频帖(MP4/MOV/WebM)
03引用转发并附评论
04发布 X 长文(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 与
  • 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/沙箱降级、无未转义插值)。三层理由:①【反自动化侦测的技术性绕过】README 明写路线目的 'Uses real Chrome with CDP to bypass anti-automation.';实现上以真实系统键击为首要手段、CDP 合成事件仅作兜底:'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 键事件回退分支。②【凭证面】经 CDP Network.getCookies 读取 x.com/twitter.com 的 auth_token 与 ct0(REQUIRED_X_SESSION_COOKIES),凭据仓库是共享 Chrome profile(env 可改指),并用 ps aux 扫描 --remote-debugging-port 接管已在运行的 Chrome 调试会话。③【外部副作用与进程级动作】--submit 时会自动点击 tweetButton/publishButton,以用户账号发布不可逆内容;SKILL.md 还指示在端口异常时直接 pkill 掉 Chrome 调试进程。判红与 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、profile 隔离、辅助功能、剪贴板往返、键击能力、Chrome 冲突。
  • 长文流程细致:占位符 XIMGPH_n + 工具栏 Insert→Media 上传 + 逐张校验占位符清零。
  • 模式选择有纪律:明确要求不得静默在 Chrome 插件 / Computer Use / CDP 之间降级。
  • 适合: 适合个人自用、有明确发布内容、愿意在发布前亲自复核的场景:把长文/图文准备好后一键填进 X 编辑器、或明确 --submit 自动发布;也适合需要复用已登录真实 Chrome、避开 Playwright 风格自动化的个人工作流。
    不适合: 不适合企业合规或对平台条款敏感的场景(技术性绕过自动化侦测);不适合无人值守、被问到就自动发布的工作流(账号不可逆风险);不适合没有桌面自动化权限的环境(需要辅助功能/Swift/键击工具);也不适合把别人的账号/会话交给 agent 代操作的用法。
    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.