tuzi-post-to-x

Original🇺🇸 English
Translated
9 scripts

发布内容和文章到 X (Twitter)。支持带图片/视频的普通推文和 X Articles(长文 Markdown)。使用真实 Chrome 配合 CDP 绕过反自动化检测。当用户要求"发推"、"发布到X"、"发Twitter"时使用。

3installs
Added on

NPX Install

npx skill4agent add tuziapi/tuzi-skills tuzi-post-to-x

Post to X (Twitter)

Posts text, images, videos, and long-form articles to X via real Chrome browser (bypasses anti-bot detection).

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
    SKILL_DIR
  2. Script path =
    ${SKILL_DIR}/scripts/<script-name>.ts
  3. Replace all
    ${SKILL_DIR}
    in this document with the actual path
Script Reference:
ScriptPurpose
scripts/x-browser.ts
Regular posts (text + images)
scripts/x-video.ts
Video posts (text + video)
scripts/x-quote.ts
Quote tweet with comment
scripts/x-article.ts
Long-form article publishing (Markdown)
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

Preferences (EXTEND.md)

Use Bash to check EXTEND.md existence (priority order):
bash
# Check project-level first
test -f .tuzi-skills/tuzi-post-to-x/EXTEND.md && echo "project"

# Then user-level (cross-platform: $HOME works on macOS/Linux/WSL)
test -f "$HOME/.tuzi-skills/tuzi-post-to-x/EXTEND.md" && echo "user"
┌──────────────────────────────────────────────────┬───────────────────┐ │ Path │ Location │ ├──────────────────────────────────────────────────┼───────────────────┤ │ .tuzi-skills/tuzi-post-to-x/EXTEND.md │ Project directory │ ├──────────────────────────────────────────────────┼───────────────────┤ │ $HOME/.tuzi-skills/tuzi-post-to-x/EXTEND.md │ User home │ └──────────────────────────────────────────────────┴───────────────────┘
┌───────────┬───────────────────────────────────────────────────────────────────────────┐ │ Result │ Action │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ Found │ Read, parse, apply settings │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ Not 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.
bash
npx -y bun ${SKILL_DIR}/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:
CheckFix
ChromeInstall Chrome or set
X_BROWSER_CHROME_PATH
env var
Profile dirEnsure
~/.local/share/x-browser-profile
is writable
Bun runtime
curl -fsSL https://bun.sh/install | bash
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)

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

Regular Posts

Text + up to 4 images.
bash
npx -y bun ${SKILL_DIR}/scripts/x-browser.ts "Hello!" --image ./photo.png
Parameters:
ParameterDescription
<text>
Post content (positional)
--image <path>
Image file (repeatable, max 4)
--profile <dir>
Custom Chrome profile
Note: Script opens browser with content filled in. User reviews and publishes manually.

Video Posts

Text + video file.
bash
npx -y bun ${SKILL_DIR}/scripts/x-video.ts "Check this out!" --video ./clip.mp4
Parameters:
ParameterDescription
<text>
Post content (positional)
--video <path>
Video file (MP4, MOV, WebM)
--profile <dir>
Custom Chrome profile
Note: Script opens browser with content filled in. User reviews and publishes manually.
Limits: Regular 140s max, Premium 60min. Processing: 30-60s.

Quote Tweets

Quote an existing tweet with comment.
bash
npx -y bun ${SKILL_DIR}/scripts/x-quote.ts https://x.com/user/status/123 "Great insight!"
Parameters:
ParameterDescription
<tweet-url>
URL to quote (positional)
<comment>
Comment text (positional, optional)
--profile <dir>
Custom Chrome profile
Note: Script opens browser with content filled in. User reviews and publishes manually.

X Articles

Long-form Markdown articles (requires X Premium).
bash
npx -y bun ${SKILL_DIR}/scripts/x-article.ts article.md
npx -y bun ${SKILL_DIR}/scripts/x-article.ts article.md --cover ./cover.jpg
Parameters:
ParameterDescription
<markdown>
Markdown file (positional)
--cover <path>
Cover image
--title <text>
Override title
Frontmatter:
title
,
cover_image
supported in YAML front matter.
Note: Script opens browser with article filled in. User reviews and publishes manually.
Post-Composition Check: The script automatically verifies after all images are inserted:
  • Remaining
    XIMGPH_
    placeholders in editor content
  • Expected vs actual image count
If the check fails (warnings in output), alert the user with the specific issues before they publish.

Troubleshooting

Chrome debug port not ready

If a script fails with
Chrome debug port not ready
or
Unable to connect
, kill existing Chrome CDP instances first, then retry:
bash
pkill -f "Chrome.*remote-debugging-port" 2>/dev/null; pkill -f "Chromium.*remote-debugging-port" 2>/dev/null; sleep 2
Important: This should be done automatically — when encountering this error, kill Chrome CDP instances and retry the command without asking the user.

Notes

  • First run: manual login required (session persists)
  • All scripts only fill content into the browser, user must review and publish manually
  • Cross-platform: macOS, Linux, Windows

Extension Support

Custom configurations via EXTEND.md. See Preferences section for paths and supported options.