用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/RonShih/social-media-bot --skill publish-x命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Per-platform top-post analysis of competitor products via fetch-reference (public).
Generate caption + hashtags + media plan + product_id for one schedule slot. Subagent-friendly: orchestrator spawns one per slot in parallel.
Convert plan.json into plan.xlsx via scripts/plan-export.mjs (exceljs).
基于 SOC 职业分类
正在显示 SKILL.md
| name | publish-x |
| description | Publish a single X (Twitter) post — text + optional image or video — via Playwright. |
Common rules:
docs/OPERATING_RULES.md. X-specific quirks only.
caption: post text. Total caption + hashtags must be ≤ 280 chars (drafting enforces this; do not silently truncate here — return an error if over).hashtags: list of strings (appended with single spaces).mode: post (text + optional image) | video.local_image_path: optional for mode: post.local_video_path: required for mode: video.{ "post_url": "https://x.com/<handle>/status/...", "platform": "x" }
browser_navigate → https://x.com/home.n.caption + " " + hashtags.join(" ") into the composer text area.browser_file_upload.mode: videoextra.alt is provided.After clicking Post, the new tweet appears at the top of https://x.com/home. Use browser_evaluate:
(handle) => {
const links = [...document.querySelectorAll('a[href*="/status/"]')];
const own = links.find(a => a.getAttribute('href').toLowerCase().includes(`/${handle.toLowerCase()}/status/`));
return own ? new URL(own.getAttribute('href'), location.origin).href : null;
}
Pass the brand's socials.x.handle. Retry once after 3s if null. Two failures → { "post_url": null, "error": "url_extraction_failed" }.
browser_close.{ "status": "dry_run_ok" } or the failure form.