Canghe Post To X
Posts content and articles to X (Twitter). Supports regular posts with images/videos and X Articles (long-form Markdown). Uses real Chrome with CDP to bypass anti-automation. Use when user asks to "post to X", "tweet", "publish to Twitter", or "share on X".
- Skill ID
- freestylefly/canghe-skills/canghe-post-to-x
- Publisher
- freestylefly
- Repository
- canghe-skills
- Installs
- 0
- Files
- 14
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
freestylefly/canghe-skills/canghe-post-to-xInstalls these files- SKILL.md
- references/articles.md
- references/regular-posts.md
- scripts/bun.lock
- scripts/check-paste-permissions.ts
- scripts/copy-to-clipboard.ts
- scripts/md-to-html.ts
- scripts/package.json
- scripts/paste-from-clipboard.ts
- scripts/x-article.ts
- scripts/x-browser.ts
- scripts/x-quote.ts
- scripts/x-utils.ts
- scripts/x-video.ts
What this skill tells the agent
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:
- Determine this SKILL.md file's directory path as
SKILL_DIR - Script path =
${SKILL_DIR}/scripts/<script-name>.ts - Replace all
${SKILL_DIR}in this document with the actual path
Script Reference: | Script | Purpose | |--------|---------| | 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):
# Check project-level first
test -f .canghe-skills/canghe-post-to-x/EXTEND.md && echo "project"
# Then user-level (cross-platform: $HOME works on macOS/Linux/WSL)
test -f "$HOME/.canghe-skills/canghe-post-to-x/EXTEND.md" && echo "user"┌──────────────────────────────────────────────────┬───────────────────┐ │ Path │ Location │ ├──────────────────────────────────────────────────┼───────────────────┤ │ .canghe-skills/canghe-post-to-x/EXTEND.md │ Project directory │ ├──────────────────────────────────────────────────┼───────────────────┤ │ $HOME/.canghe-skills/canghe-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
bunruntime- 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.
npx -y bun ${SKILL_DIR}/scripts/check-paste-permissions.tsChecks: Chrome, profile isolation, Bun, Accessibility, clipboard, paste keystroke, Chrome conflicts.
If any check fails, provide fix guidance per item:
| Check | Fix | |
|---|---|---|
| Chrome | Install Chrome or set X_BROWSER_CHROME_PATH env var | |
| Profile dir | Ensure ~/.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 copy | Ensure 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.mdfor manual workflow, troubleshooting, and technical details - X Articles: See
references/articles.mdfor long-form article publishing guide
Regular Posts
Text + up to 4 images.
npx -y bun ${SKILL_DIR}/scripts/x-browser.ts "Hello!" --image ./photo.pngParameters: | Parameter | Description | |-----------|-------------| | <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.
npx -y bun ${SKILL_DIR}/scripts/x-video.ts "Check this out!" --video ./clip.mp4Parameters: | Parameter | Description | |-----------|-------------| | <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.
npx -y bun ${SKILL_DIR}/scripts/x-quote.ts https://x.com/user/status/123 "Great insight!"Parameters: | Parameter | Description | |-----------|-------------| | <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).
npx -y bun ${SKILL_DIR}/scripts/x-article.ts article.md
npx -y bun ${SKILL_DIR}/scripts/x-article.ts article.md --cover ./cover.jpgParameters: | Parameter | Description | |-----------|-------------| | <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.
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:
pkill -f "Chrome.*remote-debugging-port" 2>/dev/null; pkill -f "Chromium.*remote-debugging-port" 2>/dev/null; sleep 2Important: 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.
More from freestylefly
Use this skill in a project
Open any RiverX project, search the Skills panel for freestylefly/canghe-skills/canghe-post-to-x, and install it in one click.
