全部技能 / 内容创作 / 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".

风险提醒:红色 · 谨慎使用AI 侦查报告
作者 JimLiuGitHub JimLiu/baoyu-skills ↗Stars 25926许可 MIT(仓库根 LICENSE:Copyright (c) 2026 Jim Liu;根 package.json 同声明 "license": "MIT")commit 1567581c26
agent 宿主通常会约束 skill 执行权限;风险提醒为 AI 侦查观点,不构成质量或安全保证。第三方 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外部依赖

类型依赖
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风险提醒 风险提醒:红色 · 谨慎使用

风险提醒:红色 · 谨慎使用
  • 技术性绕过平台反自动化侦测(判红主因) — 以真实浏览器 + 真实键击伪装人类操作;这不仅涉及平台条款风险,也可能导致账号被限制;文档里的 --disable-blink-features 描述与实现不符,实际依赖的是真实键击路径。
  • 以你的登录态执行外部动作 — --submit 会直接点发布按钮,把内容以你的账号公之于众且不可撤回;共享 profile 里的会话等同账号凭据,env 可改指到真实 profile。
  • 接管/结束已运行的 Chrome — 脚本会连上已运行的调试会话;SKILL.md 还给出 pkill 调试 Chrome 的配方——可能影响你正在用的浏览器会话与未保存页面。
  • 桌面级权限 — osascript 发键、Swift 编译、剪贴板读写需要辅助功能/自动化权限;这些权限一旦授予,对该会话内其他命令同样有效。
  • 会话与二进制可被环境改写 — X_BROWSER_CHROME_PATH 决定运行哪个浏览器、BAOYU_CHROME_PROFILE_DIR 决定用哪个登录态;能设置 env 的一方即可决定以谁的身份操作。
风险提醒:红色,谨慎使用(属能力/策略级判定,非恶意植入:无混淆、无硬编码密钥、无向非预期对象外发、无 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 代操作的用法。
    安装 agent 直装可复制
    ① 本站镜像 更新 2026-09-15
    方式 A · 人下载镜像包下载 baoyu-post-to-x.tar.gz
    sha256: 83fb7a73416e3fe3…
    方式 B · JSON 格式安装指南,复制给 agent
    安装指南
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② 上游 GitHub · 原始来源
    能访问 GitHub?直接去上游安装(实时版,可能已更新)GitHub 原始 ↗
    本页镜像锁定 commit 1567581c26;上游为实时仓库。
    来源信息 GitHub 原始
    作者 / 仓库JimLiu / JimLiu/baoyu-skills
    Stars25926
    最近推送2026-09-10
    本 skill commit1567581c26
    许可MIT(仓库根 LICENSE:Copyright (c) 2026 Jim Liu;根 package.json 同声明 "license": "MIT")
    本站信息
    收录日期2026-09-06
    分类内容创作
    侦查报告AI 侦查 · 2 遍 · 2026-09-06
    本站镜像与 GitHub 原始是不同来源:本站锁定 commit 快照经 /r2 分发;GitHub 为实时上游,内容可能已更新。
    同分类邻近