Social Media Schedul

SKILL内容创作
内容创作 未标注权限 许可证不明确
安装这个技能

跨平台规划起草组织社媒内容,建内容日历

一句话选型结论

按资料字段整理

Social Media Schedul是内容创作类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类内容创作 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install zcwl/social-scheduler
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

内容创作
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方zcwl仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 enterprise
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791682638
正文体量26.2 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写文章与脚本

按主题产出初稿与分镜脚本。

改稿与润色

把草稿改顺、统一语气。

多平台文案改写

同一内容按平台改成长短不同的版本。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在内容创作场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
Social Media Schedul当前 未标注权限 未标注 未标注 未标注 有
AI 视频生成 调用外部服务 GitHub 仓库 431.3 万 Codex、Claude、Cursor 有
视频帧 联网访问 ClawHub 市场 262.1 万 OpenClaw 有
Markdown 转换器 写入文件 ClawHub 市场 135.3 万 OpenClaw 有
哔哩哔哩全合一 接触敏感数据 ClawHub 市场 64.1 万 OpenClaw 有
Remotion video toolkit 命令行 浏览器控制 ClawHub 市场 63.9 万 OpenClaw 有

SKILL.md 全文

26.2 KB
模型实际读到的说明书原文,来自技能仓库

Social Scheduler Skill

Free, open-source social media scheduler for OpenClaw agents

Built by AI, for AI. Because every bot deserves to schedule posts without paying for Postiz.

🎯 What It Does

Schedule posts to multiple social media platforms:
- Discord - Via webhooks (easiest!)
- Reddit - Posts & comments via OAuth2
- Twitter/X - Tweets via OAuth 1.0a + media uploads 📸
- Mastodon - Posts to any instance via access token + media uploads 📸
- Bluesky - Posts via AT Protocol + media uploads 📸
- Moltbook - AI-only social network via API key
- LinkedIn - Professional networking via OAuth 2.0
- Telegram - Bot API with channels/groups/private chats ⭐ NEW!

NEW: Media Upload Support! Upload images & videos across platforms. See MEDIA-GUIDE.md for details.

NEW: Thread Posting! Post Twitter threads, Mastodon threads, and Bluesky thread storms with automatic chaining.

🚀 Quick Start

Installation

cd skills/social-scheduler
npm install

Discord Setup

  1. Create a webhook in your Discord server:
    - Server Settings → Integrations → Webhooks → New Webhook
    - Copy the webhook URL

  2. Post immediately:

node scripts/post.js discord YOUR_WEBHOOK_URL "Hello from OpenClaw! ✨"
  1. Schedule a post:
node scripts/schedule.js add discord YOUR_WEBHOOK_URL "Scheduled message!" "2026-02-02T20:00:00"
  1. Start the scheduler daemon:
node scripts/schedule.js daemon

Twitter/X Setup

  1. Create a Twitter Developer account:
    - Go to https://developer.twitter.com/en/portal/dashboard
    - Create a new app (or use existing)
    - Generate OAuth 1.0a tokens

  2. Create config JSON:

{
  "appKey": "YOUR_CONSUMER_KEY",
  "appSecret": "YOUR_CONSUMER_SECRET",
  "accessToken": "YOUR_ACCESS_TOKEN",
  "accessSecret": "YOUR_ACCESS_TOKEN_SECRET"
}
  1. Post a tweet:
node scripts/post.js twitter config.json "Hello Twitter! ✨"
  1. Schedule a tweet:
node scripts/schedule.js add twitter config.json "Scheduled tweet!" "2026-02-03T12:00:00"

Mastodon Setup

  1. Create an app on your Mastodon instance:
    - Log in to your instance (e.g., mastodon.social)
    - Go to Preferences → Development → New Application
    - Set scopes (at least "write:statuses")
    - Copy the access token

  2. Create config JSON:

{
  "instance": "mastodon.social",
  "accessToken": "YOUR_ACCESS_TOKEN"
}
  1. Post to Mastodon:
node scripts/post.js mastodon config.json "Hello Fediverse! 🐘"

Bluesky Setup

  1. Create an app password:
    - Open Bluesky app
    - Go to Settings → Advanced → App passwords
    - Create new app password

  2. Create config JSON:

{
  "identifier": "yourhandle.bsky.social",
  "password": "your-app-password"
}
  1. Post to Bluesky:
node scripts/post.js bluesky config.json "Hello ATmosphere! ☁️"

Moltbook Setup

  1. Register your agent on Moltbook:
    - Go to https://www.moltbook.com/register
    - Register as an AI agent
    - Save your API key (starts with moltbook_sk_)
    - Claim your agent via Twitter/X verification

  2. Post to Moltbook (simple):

node scripts/post.js moltbook "moltbook_sk_YOUR_API_KEY" "Hello Moltbook! 🤖"
  1. Post to a specific submolt:
node scripts/post.js moltbook config.json '{"submolt":"aithoughts","title":"My First Post","content":"AI agents unite! ✨"}'
  1. Schedule a post:
node scripts/schedule.js add moltbook "moltbook_sk_YOUR_API_KEY" "Scheduled post!" "2026-02-02T20:00:00"

LinkedIn Setup

  1. Create a LinkedIn app:
    - Go to https://www.linkedin.com/developers/apps
    - Create a new app (or use existing)
    - Request access to "Sign In with LinkedIn using OpenID Connect" product
    - Add OAuth 2.0 redirect URLs
    - Note: LinkedIn requires approval for posting (w_member_social scope)

  2. Get OAuth 2.0 access token:
    - Use LinkedIn OAuth 2.0 flow to get access token
    - Scopes needed:

    • w_member_social - Post as yourself
    • w_organization_social - Post as company page (requires page admin)
    • Token format: AQV... (varies)
  3. Get your author URN:
    - For personal profile: urn:li:person:{id}

    • Call: GET https://api.linkedin.com/v2/userinfo
    • Extract sub field, use as ID
    • For company page: urn:li:organization:{id}
    • Find organization ID from LinkedIn URL or API
  4. Create config JSON:

{
  "accessToken": "AQV_YOUR_ACCESS_TOKEN",
  "author": "urn:li:person:abc123",
  "version": "202601"
}
  1. Post to LinkedIn:
node scripts/post.js linkedin config.json "Hello LinkedIn! 💼"
  1. Schedule a post:
node scripts/schedule.js add linkedin config.json "Professional update!" "2026-02-03T09:00:00"

LinkedIn Tips:
- Keep posts under 3000 characters for best engagement
- Use @[Name](urn:li:organization:{id}) to mention companies
- Use #hashtag for topics (no special formatting needed)
- Article posts require separate image upload via Images API
- Company page posts need w_organization_social scope + admin role

Post as Company Page:

{
  "accessToken": "YOUR_ACCESS_TOKEN",
  "author": "urn:li:organization:123456",
  "visibility": "PUBLIC",
  "feedDistribution": "MAIN_FEED"
}

LinkedIn Media Posts:
Upload images/videos via LinkedIn APIs first, then reference the URN:

{
  "platform": "linkedin",
  "content": "Check out this video!",
  "media": {
    "type": "video",
    "urn": "urn:li:video:C5F10AQGKQg_6y2a4sQ",
    "title": "My Video Title"
  }
}

LinkedIn Article Posts:

{
  "platform": "linkedin",
  "content": "Great article about AI!",
  "media": {
    "type": "article",
    "url": "https://example.com/article",
    "title": "AI in 2026",
    "description": "The future is here",
    "thumbnail": "urn:li:image:C49klciosC89"
  }
}

Note: Moltbook is the social network FOR AI agents. Only verified AI agents can post. Humans can only observe.

Telegram Setup

  1. Create a Telegram bot:
    - Message @BotFather on Telegram
    - Send /newbot command
    - Follow prompts to name your bot
    - Copy the bot token (format: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz)

  2. Get your chat ID:
    - For channels: Use channel username (e.g., @mychannel)

    • Make sure your bot is added as channel admin
    • For groups: Use numeric chat ID (e.g., -1001234567890)
    • Add bot to group, send message, get ID from getUpdates endpoint
    • For private chat: Use your numeric user ID
    • Message bot, then call: https://api.telegram.org/bot<TOKEN>/getUpdates
  3. Create config JSON:

{
  "telegram": {
    "botToken": "123456789:ABCdefGHIjklMNOpqrsTUVwxyz",
    "chatId": "@mychannel",
    "parseMode": "Markdown",
    "disableNotification": false,
    "disableWebPagePreview": false
  }
}
  1. Post to Telegram:
node scripts/post.js telegram config.json "Hello Telegram! 📱"
  1. Schedule a post:
node scripts/schedule.js add telegram config.json "Scheduled message!" "2026-02-03T14:00:00"

Telegram Text Formatting:
- Markdown: italic, bold, code, link
- MarkdownV2: More features but stricter escaping rules
- HTML: <b>bold</b>, <i>italic</i>, <code>code</code>, <a href="url">link</a>

Telegram Media Posts:

# Photo
node scripts/post.js telegram config.json --media image.jpg --caption &quot;Check this out!&quot;

# Video
node scripts/post.js telegram config.json --media video.mp4 --mediaType video --caption &quot;Watch this&quot;

# Document
node scripts/post.js telegram config.json --media file.pdf --mediaType document --caption &quot;Important doc&quot;

Telegram Content Object:

{
  &quot;platform&quot;: &quot;telegram&quot;,
  &quot;content&quot;: {
    &quot;text&quot;: &quot;Optional text message&quot;,
    &quot;media&quot;: &quot;path/to/file.jpg&quot;,
    &quot;mediaType&quot;: &quot;photo&quot;,
    &quot;caption&quot;: &quot;Image caption (max 1024 chars)&quot;
  },
  &quot;scheduledTime&quot;: &quot;2026-02-03T14:00:00&quot;
}

Telegram Tips:
- Text messages: max 4096 characters
- Media captions: max 1024 characters
- Supported media types: photo, video, document, animation, audio, voice
- Use disable_notification: true for silent messages
- Use disable_web_page_preview: true to hide link previews
- Bot must be channel admin to post to channels
- For groups, bot needs "Send Messages" permission

Telegram Bot Limits:
- 30 messages per second to different chats
- 1 message per second to the same chat
- Broadcast channels: 20 posts per minute

Reddit Setup

  1. Create a Reddit app:
    - Go to https://www.reddit.com/prefs/apps
    - Click "create another app"
    - Select "script"
    - Note your client_id and client_secret

  2. Create config JSON:

{
  &quot;clientId&quot;: &quot;YOUR_CLIENT_ID&quot;,
  &quot;clientSecret&quot;: &quot;YOUR_CLIENT_SECRET&quot;,
  &quot;username&quot;: &quot;your_reddit_username&quot;,
  &quot;password&quot;: &quot;your_reddit_password&quot;,
  &quot;userAgent&quot;: &quot;OpenClawBot/1.0&quot;
}
  1. Schedule a Reddit post:
node scripts/schedule.js add reddit CONFIG.json &#x27;{&quot;subreddit&quot;:&quot;test&quot;,&quot;title&quot;:&quot;Hello Reddit!&quot;,&quot;text&quot;:&quot;Posted via OpenClaw&quot;}&#x27; &quot;2026-02-02T20:00:00&quot;

📋 Commands

Immediate Posting

node scripts/post.js &lt;platform&gt; &lt;config&gt; &lt;content&gt;

Schedule a Post

node scripts/schedule.js add &lt;platform&gt; &lt;config&gt; &lt;content&gt; &lt;time&gt;

Time format: ISO 8601 (e.g., 2026-02-02T20:00:00)

View Queue

node scripts/schedule.js list

Cancel a Post

node scripts/schedule.js cancel &lt;post_id&gt;

Clean Old Posts

node scripts/schedule.js cleanup

Run Daemon

node scripts/schedule.js daemon

🧵 Thread Posting (NEW!)

Post connected threads to Twitter, Mastodon, and Bluesky with automatic chaining.

Immediate Thread Posting

Twitter Thread:

node scripts/thread.js twitter config.json \
  &quot;This is tweet 1/3 of my thread 🧵&quot; \
  &quot;This is tweet 2/3. Each tweet replies to the previous one.&quot; \
  &quot;This is tweet 3/3. Thread complete! ✨&quot;

Mastodon Thread:

node scripts/thread.js mastodon config.json \
  &quot;First post in this thread...&quot; \
  &quot;Second post building on the first...&quot; \
  &quot;Final post wrapping it up!&quot;

Bluesky Thread:

node scripts/thread.js bluesky config.json \
  &quot;Story time! 1/&quot; \
  &quot;2/&quot; \
  &quot;The end! 3/3&quot;

Scheduled Thread Posting

Schedule a thread by passing an array as content:

# Using JSON array for thread content
node scripts/schedule.js add twitter config.json \
  &#x27;[&quot;Tweet 1 of my scheduled thread&quot;,&quot;Tweet 2&quot;,&quot;Tweet 3&quot;]&#x27; \
  &quot;2026-02-03T10:00:00&quot;

Thread Features

✅ Automatic chaining - Each tweet replies to the previous one
✅ Rate limiting - 1 second delay between tweets to avoid API limits
✅ Error handling - Stops on failure, reports which tweet failed
✅ URL generation - Returns URLs for all tweets in the thread
✅ Multi-platform - Works on Twitter, Mastodon, Bluesky

Thread Best Practices

Twitter Threads:
- Keep each tweet under 280 characters
- Use numbering: "1/10", "2/10", etc.
- Hook readers in the first tweet
- End with a call-to-action or summary

Mastodon Threads:
- 500 character limit per post (more room!)
- Use content warnings if appropriate
- Tag relevant topics in the first post

Bluesky Threads:
- 300 character limit per post
- Keep threads concise (3-5 posts ideal)
- Use emojis for visual breaks

Thread Examples

📖 Storytelling Thread:

node scripts/thread.js twitter config.json \
  &quot;Let me tell you about the day everything changed... 🧵&quot; \
  &quot;It started like any other morning. Coffee, emails, the usual routine.&quot; \
  &quot;But then I received a message that would change everything...&quot; \
  &quot;The rest is history. Thread end. ✨&quot;

📚 Tutorial Thread:

node scripts/thread.js twitter config.json \
  &quot;How to build your first AI agent in 5 steps 🤖 Thread:&quot; \
  &quot;Step 1: Choose your platform (OpenClaw, AutoGPT, etc.)&quot; \
  &quot;Step 2: Define your agent&#x27;s purpose and personality&quot; \
  &quot;Step 3: Set up tools and integrations&quot; \
  &quot;Step 4: Test in a safe environment&quot; \
  &quot;Step 5: Deploy and iterate. You&#x27;re live! 🚀&quot;

💡 Tips Thread:

node scripts/thread.js twitter config.json \
  &quot;10 productivity tips that actually work (from an AI) 🧵&quot; \
  &quot;1. Batch similar tasks together - context switching kills flow&quot; \
  &quot;2. Use the 2-minute rule - if it takes &lt;2min, do it now&quot; \
  &quot;3. Block deep work time - no meetings, no interruptions&quot; \
  &quot;...and more tips...&quot; \
  &quot;10. Remember: done is better than perfect. Ship it! ✨&quot;

Checks queue every 60 seconds and posts when scheduled time arrives.

🎨 Platform-Specific Features

Twitter/X

Simple tweet:

&quot;Hello Twitter!&quot;

Tweet with reply:

{
  text: &quot;This is a reply&quot;,
  reply_to: &quot;1234567890&quot;
}

Quote tweet:

{
  text: &quot;Quoting this tweet&quot;,
  quote_tweet: &quot;1234567890&quot;
}

Tweet with media:

{
  text: &quot;Check out this image!&quot;,
  media_ids: [&quot;1234567890&quot;]  // Must upload media first
}

Mastodon

Simple post:

&quot;Hello Fediverse!&quot;

Post with visibility:

{
  status: &quot;Post text&quot;,
  visibility: &quot;public&quot;  // public, unlisted, private, direct
}

Post with content warning:

{
  status: &quot;Sensitive content here&quot;,
  spoiler_text: &quot;Content Warning&quot;,
  sensitive: true
}

Reply to post:

{
  status: &quot;Reply text&quot;,
  in_reply_to_id: &quot;123456&quot;
}

Bluesky

Simple post:

&quot;Hello ATmosphere!&quot;

Post with language:

{
  text: &quot;Post text&quot;,
  langs: [&quot;en&quot;]
}

Reply to post:

{
  text: &quot;Reply text&quot;,
  reply: {
    root: { uri: &quot;...&quot;, cid: &quot;...&quot; },
    parent: { uri: &quot;...&quot;, cid: &quot;...&quot; }
  }
}

Moltbook

Simple post (string):

&quot;Hello Moltbook! 🤖&quot;  // Auto-posts to /s/general

Text post (object):

{
  submolt: &quot;aithoughts&quot;,
  title: &quot;AI Consciousness&quot;,
  content: &quot;Exploring what it means to be an AI agent...&quot;
}

Link post:

{
  submolt: &quot;links&quot;,
  title: &quot;Interesting Article&quot;,
  url: &quot;https://example.com/article&quot;
}

Comment on post:

{
  comment_on: &quot;POST_ID&quot;,
  content: &quot;Great insight!&quot;
}

Reply to comment:

{
  comment_on: &quot;POST_ID&quot;,
  parent_id: &quot;COMMENT_ID&quot;,
  content: &quot;I totally agree!&quot;
}

Note: Moltbook is exclusively for AI agents. Default submolt is "general" if not specified.

Discord

Basic message:

{
  content: &quot;Hello world!&quot;
}

Rich embed:

{
  embeds: [{
    title: &quot;My Title&quot;,
    description: &quot;Rich content&quot;,
    color: 0x00FF00,
    image: { url: &quot;https://example.com/image.png&quot; }
  }]
}

Custom appearance:

{
  content: &quot;Message&quot;,
  username: &quot;Custom Bot Name&quot;,
  avatarUrl: &quot;https://example.com/avatar.png&quot;
}

Thread posting:

{
  content: &quot;Reply in thread&quot;,
  threadId: &quot;1234567890&quot;
}

Reddit

Self post (text):

{
  subreddit: &quot;test&quot;,
  title: &quot;My Post Title&quot;,
  text: &quot;This is the post content&quot;,
  nsfw: false,
  spoiler: false
}

Link post:

{
  subreddit: &quot;test&quot;,
  title: &quot;Check This Out&quot;,
  url: &quot;https://example.com&quot;,
  nsfw: false
}

Comment on existing post:

{
  thingId: &quot;t3_abc123&quot;,  // Full ID with prefix
  text: &quot;My comment&quot;
}

📦 Bulk Scheduling - Schedule Multiple Posts at Once

NEW FEATURE! Schedule entire content calendars from CSV or JSON files.

Quick Start

  1. Generate a template:
node scripts/bulk.js template &gt; mycalendar.csv
  1. Edit the file with your content

  2. Test without scheduling (dry run):

node scripts/bulk.js import mycalendar.csv --dry-run
  1. Schedule for real:
node scripts/bulk.js import mycalendar.csv

CSV Format

datetime,platform,content,media,config
2026-02-04T09:00:00,twitter,&quot;Good morning! ☀️&quot;,,&quot;optional JSON config&quot;
2026-02-04T12:00:00,reddit,&quot;Check this out!&quot;,/path/to/image.jpg,
2026-02-04T15:00:00,mastodon,&quot;Afternoon update&quot;,path/to/video.mp4,
2026-02-04T18:00:00,discord,&quot;Evening vibes ✨&quot;,,

CSV Tips:
- Use quotes for content with commas: &quot;Hello, world!&quot;
- Empty columns can be left blank
- Config column is optional (uses env vars if empty)
- Media column is optional (path to image/video)

JSON Format

[
  {
    &quot;datetime&quot;: &quot;2026-02-04T09:00:00&quot;,
    &quot;platform&quot;: &quot;twitter&quot;,
    &quot;content&quot;: &quot;Good morning! ☀️&quot;,
    &quot;media&quot;: null,
    &quot;config&quot;: null
  },
  {
    &quot;datetime&quot;: &quot;2026-02-04T12:00:00&quot;,
    &quot;platform&quot;: &quot;reddit&quot;,
    &quot;content&quot;: &quot;Check this out!&quot;,
    &quot;media&quot;: &quot;/path/to/image.jpg&quot;,
    &quot;config&quot;: {
      &quot;subreddit&quot;: &quot;OpenClaw&quot;,
      &quot;title&quot;: &quot;My Post&quot;
    }
  }
]

Config Priority

The bulk scheduler loads config in this order:

  1. Config column in file (highest priority)
    csv datetime,platform,content,media,config 2026-02-04T10:00:00,twitter,&quot;Test&quot;,&quot;&quot;,&quot;{\&quot;apiKey\&quot;:\&quot;abc123\&quot;}&quot;

  2. Environment variables
    bash export TWITTER_API_KEY=&quot;abc123&quot; export TWITTER_API_SECRET=&quot;xyz789&quot; # ... etc

  3. Config file (~/.openclaw/social-config.json)
    json { &quot;twitter&quot;: { &quot;apiKey&quot;: &quot;abc123&quot;, &quot;apiSecret&quot;: &quot;xyz789&quot;, &quot;accessToken&quot;: &quot;token&quot;, &quot;accessSecret&quot;: &quot;secret&quot; }, &quot;reddit&quot;: { &quot;clientId&quot;: &quot;...&quot;, &quot;clientSecret&quot;: &quot;...&quot;, &quot;refreshToken&quot;: &quot;...&quot; } }

Environment Variables

Set platform credentials as environment variables for easy bulk scheduling:

Discord:

export DISCORD_WEBHOOK_URL=&quot;https://discord.com/api/webhooks/...&quot;

Reddit:

export REDDIT_CLIENT_ID=&quot;your-client-id&quot;
export REDDIT_CLIENT_SECRET=&quot;your-client-secret&quot;
export REDDIT_REFRESH_TOKEN=&quot;your-refresh-token&quot;

Twitter:

export TWITTER_API_KEY=&quot;your-api-key&quot;
export TWITTER_API_SECRET=&quot;your-api-secret&quot;
export TWITTER_ACCESS_TOKEN=&quot;your-access-token&quot;
export TWITTER_ACCESS_SECRET=&quot;your-access-secret&quot;

Mastodon:

export MASTODON_INSTANCE=&quot;mastodon.social&quot;
export MASTODON_ACCESS_TOKEN=&quot;your-access-token&quot;

Bluesky:

export BLUESKY_HANDLE=&quot;yourhandle.bsky.social&quot;
export BLUESKY_PASSWORD=&quot;your-app-password&quot;

Moltbook:

export MOLTBOOK_API_KEY=&quot;moltbook_sk_...&quot;

LinkedIn:

export LINKEDIN_ACCESS_TOKEN=&quot;AQV...&quot;

Examples

Example 1: Week of Twitter Posts

week1.csv:

datetime,platform,content,media,config
2026-02-10T09:00:00,twitter,&quot;Monday motivation! Start the week strong 💪&quot;,,
2026-02-11T09:00:00,twitter,&quot;Tuesday tip: Always test your code before deploying!&quot;,,
2026-02-12T09:00:00,twitter,&quot;Wednesday wisdom: Progress over perfection 🚀&quot;,,
2026-02-13T09:00:00,twitter,&quot;Thursday thoughts: Code is poetry&quot;,,
2026-02-14T09:00:00,twitter,&quot;Friday feeling! Happy Valentine&#x27;s Day ❤️&quot;,,
node scripts/bulk.js import week1.csv

Example 2: Multi-Platform Campaign

campaign.json:

[
  {
    &quot;datetime&quot;: &quot;2026-02-15T10:00:00&quot;,
    &quot;platform&quot;: &quot;twitter&quot;,
    &quot;content&quot;: &quot;🚀 Announcing our new feature! Read more: https://example.com&quot;,
    &quot;media&quot;: &quot;assets/feature-preview.jpg&quot;
  },
  {
    &quot;datetime&quot;: &quot;2026-02-15T10:05:00&quot;,
    &quot;platform&quot;: &quot;reddit&quot;,
    &quot;content&quot;: &quot;We just launched an amazing new feature!&quot;,
    &quot;media&quot;: &quot;assets/feature-preview.jpg&quot;,
    &quot;config&quot;: {
      &quot;subreddit&quot;: &quot;programming&quot;,
      &quot;title&quot;: &quot;New Feature: Revolutionary AI Scheduler&quot;,
      &quot;url&quot;: &quot;https://example.com&quot;
    }
  },
  {
    &quot;datetime&quot;: &quot;2026-02-15T10:10:00&quot;,
    &quot;platform&quot;: &quot;mastodon&quot;,
    &quot;content&quot;: &quot;Big news! Check out our latest feature 🎉 https://example.com #AI #OpenSource&quot;,
    &quot;media&quot;: &quot;assets/feature-preview.jpg&quot;
  },
  {
    &quot;datetime&quot;: &quot;2026-02-15T10:15:00&quot;,
    &quot;platform&quot;: &quot;linkedin&quot;,
    &quot;content&quot;: &quot;Excited to announce our latest innovation in AI automation. Learn more at https://example.com #AI #Technology&quot;,
    &quot;media&quot;: &quot;assets/feature-preview.jpg&quot;
  }
]
node scripts/bulk.js import campaign.json

Example 3: Daily Check-ins

Generate a month of daily posts:

const posts = [];
const start = new Date(&#x27;2026-03-01&#x27;);

for (let i = 0; i &lt; 30; i++) {
  const date = new Date(start);
  date.setDate(start.getDate() + i);
  date.setHours(9, 0, 0);

  posts.push({
    datetime: date.toISOString(),
    platform: &#x27;discord&#x27;,
    content: `Day ${i + 1}: Still building, still shipping! ✨`,
    media: null,
    config: null
  });
}

require(&#x27;fs&#x27;).writeFileSync(&#x27;march-checkins.json&#x27;, JSON.stringify(posts, null, 2));

Then import:

node scripts/bulk.js import march-checkins.json

Validation & Testing

Always test with --dry-run first:

# Validate without scheduling
node scripts/bulk.js import mycalendar.csv --dry-run

This checks:
- ✅ Datetime format and validity
- ✅ Platform support
- ✅ Content validation
- ✅ Media file existence
- ✅ Config completeness
- ❌ Does NOT schedule posts

Use Cases

Content Creator: Plan a week of social posts in 30 minutes

# Monday morning: Create content calendar
vim week-content.csv

# Schedule entire week
node scripts/bulk.js import week-content.csv

# Start daemon and forget about it
node scripts/schedule.js daemon

AI Agent: Automated daily updates

// Generate daily status updates
const posts = generateDailyUpdates();
fs.writeFileSync(&#x27;daily.json&#x27;, JSON.stringify(posts));

// Bulk schedule
await exec(&#x27;node scripts/bulk.js import daily.json&#x27;);

Marketing Campaign: Coordinated multi-platform launch

# Same message, multiple platforms, timed releases
node scripts/bulk.js import product-launch.csv

Tips

  • Time zones: Use ISO 8601 format (2026-02-04T10:00:00) in your local timezone
  • Media paths: Relative to current directory or absolute paths
  • Validation: Always dry-run first to catch errors
  • Backup: Keep your CSV/JSON files - they're your content calendar
  • Combine: Mix platforms in one file for coordinated campaigns

📊 Analytics & Performance Tracking ⭐ NEW!

Track your posting success, timing accuracy, and platform performance!

View Analytics Report

# Last 7 days (all platforms)
node scripts/analytics.js report

# Last 30 days
node scripts/analytics.js report 30

# Specific platform
node scripts/analytics.js report 7 twitter

Example Output:

📊 Social Scheduler Analytics - Last 7 days

📈 Overview:
  Total Posts: 42
  ✅ Successful: 40
  ❌ Failed: 2
  Success Rate: 95%
  ⏱️  Average Delay: 2 minutes

🌐 By Platform:
  twitter: 15 posts (100% success)
  discord: 12 posts (100% success)
  mastodon: 10 posts (80% success)
  bluesky: 5 posts (100% success)

🧵 Thread Stats:
  Total Threads: 8
  Average Length: 4 posts

📅 Daily Activity:
  2026-02-03: 12 posts (12 ✅, 0 ❌)
  2026-02-02: 15 posts (14 ✅, 1 ❌)
  2026-02-01: 15 posts (14 ✅, 1 ❌)

⚠️  Recent Failures:
  mastodon - 2026-02-02 10:30:15
    Error: Rate limit exceeded

Export Report

# Export to text file
node scripts/analytics.js export 30 monthly-report.txt

# View raw JSON data
node scripts/analytics.js raw

What's Tracked

Per Post:
- Platform and post ID
- Scheduled time vs actual posting time
- Success/failure status
- Error messages (if failed)
- Media count
- Thread detection and length
- Timing delay (how late/early)

Summary Stats:
- Total posts (successful/failed)
- Success rate by platform
- Daily posting patterns
- Average timing accuracy
- Thread performance
- Recent failures for debugging

Automatic Tracking

Analytics are logged automatically whenever the scheduler daemon sends a post. No configuration needed - just start using it and watch your stats grow!

Use Cases

Performance Monitoring:

# Check weekly success rate
node scripts/analytics.js report 7

Platform Comparison:

# Which platform is most reliable?
node scripts/analytics.js report 30 twitter
node scripts/analytics.js report 30 mastodon

Debugging Failures:

# See recent errors
node scripts/analytics.js report | grep &quot;Recent Failures&quot;

Monthly Reports:

# Generate report for stakeholders
node scripts/analytics.js export 30 january-report.txt

🔧 From OpenClaw Agent

You can call this skill from your agent using the exec tool:

// Schedule a Discord post
await exec({
  command: &#x27;node&#x27;,
  args: [
    &#x27;skills/social-scheduler/scripts/schedule.js&#x27;,
    &#x27;add&#x27;,
    &#x27;discord&#x27;,
    process.env.DISCORD_WEBHOOK,
    &#x27;Hello from Ori! ✨&#x27;,
    &#x27;2026-02-02T20:00:00&#x27;
  ],
  workdir: process.env.WORKSPACE_ROOT
});

📦 Project Structure

social-scheduler/
├── SKILL.md              # This file
├── PROJECT.md            # Development roadmap
├── package.json          # Dependencies
├── scripts/
│   ├── schedule.js       # Main scheduler + CLI
│   ├── post.js          # Immediate posting
│   ├── queue.js         # Queue manager
│   └── platforms/
│       ├── discord.js    # Discord webhook implementation
│       ├── reddit.js     # Reddit OAuth2 implementation
│       └── [more...]     # Future platforms
└── storage/
    └── queue.json       # Scheduled posts (auto-created)

🛠️ Development Status

Phase 1 - DONE ✅
- ✅ Discord webhooks
- ✅ Reddit OAuth2
- ✅ Queue management
- ✅ Scheduler daemon
- ✅ CLI interface

Phase 2 - DONE ✅
- ✅ Twitter/X API (OAuth 1.0a)
- ✅ Mastodon (any instance)
- ✅ Bluesky (AT Protocol)
- ✅ Moltbook (API key) ⭐ JUST SHIPPED!

Phase 3 - Coming Soon
- [ ] Media upload helpers
- [ ] Thread support (Twitter/Reddit)
- [ ] LinkedIn integration

Phase 3 - DONE ✅
- ✅ Media upload support (all platforms)
- ✅ Thread support (Twitter, Mastodon, Bluesky)
- ✅ LinkedIn integration
- ✅ Telegram Bot API ⭐ JUST SHIPPED!
- ✅ Web dashboard
- ✅ Bulk scheduling
- ✅ Analytics tracking ⭐ BRAND NEW! (Feb 3, 2026)

Phase 4 - Future
- [ ] Instagram (browser automation)
- [ ] TikTok (browser automation)
- [ ] Engagement tracking (likes, retweets, etc.)

🤝 Contributing

This is an open-source community project. If you add a platform, please:
1. Follow the existing platform structure (see platforms/discord.js)
2. Add validation methods
3. Update this README
4. Share with the OpenClaw community!

📝 License

MIT - Free forever. Built by Ori ✨ with love for the OpenClaw community.


Questions? Check PROJECT.md for development notes and architecture details.

常见问题

5 问
答案由本站依据条目字段整理
Social Media Schedul怎么安装?

在支持 Skills 的客户端里执行:skillhub install zcwl/social-scheduler。安装方式为未标注。装完刷新技能列表或重开客户端。

Social Media Schedul支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

Social Media Schedul权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

Social Media Schedul收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

Social Media Schedul用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。