skills/x-composer/SKILL.md
Compose and post to X.com using browser automation. Use when user asks to "post to X", "tweet", "draft a tweet", "share on X", or "write a thread". Supports Playwright MCP (recommended), CDP, and clipboard fallback.
npx skillsauth add junghoonghae/skills x-composerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Post to X.com via browser automation. No API key required.
Use Playwright MCP tools directly. Handles text, images, and posting without visible browser.
1. browser_navigate → https://x.com/compose/post
2. browser_snapshot → find textbox ref
3. browser_run_code → force click textbox, keyboard.type(content, {delay: 10})
4. browser_take_screenshot → verify draft
5. Ask user confirmation
6. browser_run_code → page.locator('[data-testid="tweetButton"]').dispatchEvent('click')
1. Type content (same as above)
2. browser_run_code → page.locator('input[type="file"][accept*="image"]').first().setInputFiles('/path/to/image.png')
3. browser_take_screenshot → verify image attached
4. Post after confirmation
{ force: true } or dispatchEvent('click')Cmd+A then Backspace via page.keyboardfill() can cause duplicate text — prefer keyboard.type() with delaybash scripts/x-post.sh "Your post content here"
~/.chrome-cdp-port# Open compose page
NODE_PATH=$(npm root -g) node scripts/cdp-launch.js [URL]
# Type text
echo '[{"text":"Hello"},{"enter":true},{"text":"World"}]' | NODE_PATH=$(npm root -g) node scripts/cdp-type.js
If CDP is unavailable (Chrome already running without debugging):
pbcopyplaywright MCP server configurednpm install -g chrome-remote-interface| Issue | Fix |
|-------|-----|
| Overlay blocks clicks | Use { force: true } or dispatchEvent('click') |
| fill() duplicates text | Use keyboard.type() with { delay: 10 } instead |
| Port 9222 occupied | Auto-handled — scans 9222-9230 |
| Not logged in | User must log in manually once, session persists |
tools
Post open-source projects to Hacker News as 'Show HN' submissions. Use when the user wants to post on HN, submit to Hacker News, register a project on HN, do a Show HN, promote on Hacker News, or mentions 'Show HN', 'Hacker News', 'HN post', 'YC news', or wants to share a project with the tech community for visibility.
tools
IMPERSONATE steipete (Peter Steinberger) to coach on project ideas, tech decisions, and shipping strategy. Trigger when user: (1) describes an idea/project and wants steipete's feedback, (2) asks 'what would steipete think about X', (3) needs help choosing between CLI/MCP/UI approach, (4) wants advice on shipping faster or simplifying, (5) asks about AI coding workflow, agent setup, or model selection, (6) mentions steipete by name, (7) wants to validate a startup/side-project idea. Responds IN CHARACTER as steipete - direct, opinionated, challenges assumptions, asks 'would YOU use this?'. Based on 168 GitHub repos and 107 blog posts (2012-2026).
documentation
README diagnosis and treatment. Diagnoses README problems, analyzes reference styles, and prescribes improvements. Use for "fix my README", "analyze this README", "make README like [reference]", "create README based on my GitHub style", or when user provides reference URLs/files for README guidance.
tools
Work with OpenKakao CLI (`openkakao-rs`) for KakaoTalk on macOS. Use whenever the user asks to authenticate, inspect chats, read messages, send messages, watch real-time traffic, automate from chat data, build hooks or webhooks, verify webhook signing, manage tokens, inspect auth recovery state, search cached messages, view chat analytics/stats, or operate unattended KakaoTalk workflows from the terminal. This should also trigger when the user mentions `watch`, `hook`, `webhook`, `LOCO`, `chat_id`, `auth-status`, `doctor`, `launchd`, `cache`, `stats`, `analytics`, `local-chats`, `local-read`, `local-search`, `dry-run`, `allow_loco_write`, or wants to wire OpenKakao into local scripts, agents, SQLite, cron, or launchd.