mirror of
https://github.com/JimLiu/baoyu-skills.git
synced 2026-08-08 01:43:03 +08:00
42931d6294
Add automatic check after article images are inserted: verifies remaining XIMGPH placeholders and expected vs actual image count. Increase CDP timeout to 60s and add 3s DOM stabilization delay between image insertions.
204 lines
8.3 KiB
Markdown
204 lines
8.3 KiB
Markdown
---
|
|
name: baoyu-post-to-x
|
|
description: 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".
|
|
---
|
|
|
|
# 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**:
|
|
| 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):
|
|
|
|
```bash
|
|
# Check project-level first
|
|
test -f .baoyu-skills/baoyu-post-to-x/EXTEND.md && echo "project"
|
|
|
|
# Then user-level (cross-platform: $HOME works on macOS/Linux/WSL)
|
|
test -f "$HOME/.baoyu-skills/baoyu-post-to-x/EXTEND.md" && echo "user"
|
|
```
|
|
|
|
┌──────────────────────────────────────────────────┬───────────────────┐
|
|
│ Path │ Location │
|
|
├──────────────────────────────────────────────────┼───────────────────┤
|
|
│ .baoyu-skills/baoyu-post-to-x/EXTEND.md │ Project directory │
|
|
├──────────────────────────────────────────────────┼───────────────────┤
|
|
│ $HOME/.baoyu-skills/baoyu-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:
|
|
|
|
| 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.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**:
|
|
| 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.
|
|
|
|
```bash
|
|
npx -y bun ${SKILL_DIR}/scripts/x-video.ts "Check this out!" --video ./clip.mp4
|
|
```
|
|
|
|
**Parameters**:
|
|
| 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.
|
|
|
|
```bash
|
|
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).
|
|
|
|
```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**:
|
|
| 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.
|
|
|
|
**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.
|