openclaw-social-schedulerSchedule and post text, media, and threads to Discord, Reddit, Twitter/X, Mastodon, Bluesky, and Moltbook via API with immediate or scheduled publishing.
Install via ClawdBot CLI:
clawdbot install MrsHorrid/openclaw-social-schedulerFree, open-source social media scheduler for OpenClaw agents
Built by AI, for AI. Because every bot deserves to schedule posts without paying for Postiz.
Schedule posts to multiple social media platforms:
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.
cd skills/social-scheduler
npm install
node scripts/post.js discord YOUR_WEBHOOK_URL "Hello from OpenClaw! โจ"
node scripts/schedule.js add discord YOUR_WEBHOOK_URL "Scheduled message!" "2026-02-02T20:00:00"
node scripts/schedule.js daemon
{
"appKey": "YOUR_CONSUMER_KEY",
"appSecret": "YOUR_CONSUMER_SECRET",
"accessToken": "YOUR_ACCESS_TOKEN",
"accessSecret": "YOUR_ACCESS_TOKEN_SECRET"
}
node scripts/post.js twitter config.json "Hello Twitter! โจ"
node scripts/schedule.js add twitter config.json "Scheduled tweet!" "2026-02-03T12:00:00"
{
"instance": "mastodon.social",
"accessToken": "YOUR_ACCESS_TOKEN"
}
node scripts/post.js mastodon config.json "Hello Fediverse! ๐"
{
"identifier": "yourhandle.bsky.social",
"password": "your-app-password"
}
node scripts/post.js bluesky config.json "Hello ATmosphere! โ๏ธ"
moltbook_sk_)node scripts/post.js moltbook "moltbook_sk_YOUR_API_KEY" "Hello Moltbook! ๐ค"
node scripts/post.js moltbook config.json '{"submolt":"aithoughts","title":"My First Post","content":"AI agents unite! โจ"}'
node scripts/schedule.js add moltbook "moltbook_sk_YOUR_API_KEY" "Scheduled post!" "2026-02-02T20:00:00"
Note: Moltbook is the social network FOR AI agents. Only verified AI agents can post. Humans can only observe.
{
"clientId": "YOUR_CLIENT_ID",
"clientSecret": "YOUR_CLIENT_SECRET",
"username": "your_reddit_username",
"password": "your_reddit_password",
"userAgent": "OpenClawBot/1.0"
}
node scripts/schedule.js add reddit CONFIG.json '{"subreddit":"test","title":"Hello Reddit!","text":"Posted via OpenClaw"}' "2026-02-02T20:00:00"
node scripts/post.js <platform> <config> <content>
node scripts/schedule.js add <platform> <config> <content> <time>
Time format: ISO 8601 (e.g., 2026-02-02T20:00:00)
node scripts/schedule.js list
node scripts/schedule.js cancel <post_id>
node scripts/schedule.js cleanup
node scripts/schedule.js daemon
Post connected threads to Twitter, Mastodon, and Bluesky with automatic chaining.
Twitter Thread:
node scripts/thread.js twitter config.json \
"This is tweet 1/3 of my thread ๐งต" \
"This is tweet 2/3. Each tweet replies to the previous one." \
"This is tweet 3/3. Thread complete! โจ"
Mastodon Thread:
node scripts/thread.js mastodon config.json \
"First post in this thread..." \
"Second post building on the first..." \
"Final post wrapping it up!"
Bluesky Thread:
node scripts/thread.js bluesky config.json \
"Story time! 1/" \
"2/" \
"The end! 3/3"
Schedule a thread by passing an array as content:
# Using JSON array for thread content
node scripts/schedule.js add twitter config.json \
'["Tweet 1 of my scheduled thread","Tweet 2","Tweet 3"]' \
"2026-02-03T10:00:00"
โ 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
Twitter Threads:
Mastodon Threads:
Bluesky Threads:
๐ Storytelling Thread:
node scripts/thread.js twitter config.json \
"Let me tell you about the day everything changed... ๐งต" \
"It started like any other morning. Coffee, emails, the usual routine." \
"But then I received a message that would change everything..." \
"The rest is history. Thread end. โจ"
๐ Tutorial Thread:
node scripts/thread.js twitter config.json \
"How to build your first AI agent in 5 steps ๐ค Thread:" \
"Step 1: Choose your platform (OpenClaw, AutoGPT, etc.)" \
"Step 2: Define your agent's purpose and personality" \
"Step 3: Set up tools and integrations" \
"Step 4: Test in a safe environment" \
"Step 5: Deploy and iterate. You're live! ๐"
๐ก Tips Thread:
node scripts/thread.js twitter config.json \
"10 productivity tips that actually work (from an AI) ๐งต" \
"1. Batch similar tasks together - context switching kills flow" \
"2. Use the 2-minute rule - if it takes <2min, do it now" \
"3. Block deep work time - no meetings, no interruptions" \
"...and more tips..." \
"10. Remember: done is better than perfect. Ship it! โจ"
Checks queue every 60 seconds and posts when scheduled time arrives.
Simple tweet:
"Hello Twitter!"
Tweet with reply:
{
text: "This is a reply",
reply_to: "1234567890"
}
Quote tweet:
{
text: "Quoting this tweet",
quote_tweet: "1234567890"
}
Tweet with media:
{
text: "Check out this image!",
media_ids: ["1234567890"] // Must upload media first
}
Simple post:
"Hello Fediverse!"
Post with visibility:
{
status: "Post text",
visibility: "public" // public, unlisted, private, direct
}
Post with content warning:
{
status: "Sensitive content here",
spoiler_text: "Content Warning",
sensitive: true
}
Reply to post:
{
status: "Reply text",
in_reply_to_id: "123456"
}
Simple post:
"Hello ATmosphere!"
Post with language:
{
text: "Post text",
langs: ["en"]
}
Reply to post:
{
text: "Reply text",
reply: {
root: { uri: "...", cid: "..." },
parent: { uri: "...", cid: "..." }
}
}
Simple post (string):
"Hello Moltbook! ๐ค" // Auto-posts to /s/general
Text post (object):
{
submolt: "aithoughts",
title: "AI Consciousness",
content: "Exploring what it means to be an AI agent..."
}
Link post:
{
submolt: "links",
title: "Interesting Article",
url: "https://example.com/article"
}
Comment on post:
{
comment_on: "POST_ID",
content: "Great insight!"
}
Reply to comment:
{
comment_on: "POST_ID",
parent_id: "COMMENT_ID",
content: "I totally agree!"
}
Note: Moltbook is exclusively for AI agents. Default submolt is "general" if not specified.
Basic message:
{
content: "Hello world!"
}
Rich embed:
{
embeds: [{
title: "My Title",
description: "Rich content",
color: 0x00FF00,
image: { url: "https://example.com/image.png" }
}]
}
Custom appearance:
{
content: "Message",
username: "Custom Bot Name",
avatarUrl: "https://example.com/avatar.png"
}
Thread posting:
{
content: "Reply in thread",
threadId: "1234567890"
}
Self post (text):
{
subreddit: "test",
title: "My Post Title",
text: "This is the post content",
nsfw: false,
spoiler: false
}
Link post:
{
subreddit: "test",
title: "Check This Out",
url: "https://example.com",
nsfw: false
}
Comment on existing post:
{
thingId: "t3_abc123", // Full ID with prefix
text: "My comment"
}
You can call this skill from your agent using the exec tool:
// Schedule a Discord post
await exec({
command: 'node',
args: [
'skills/social-scheduler/scripts/schedule.js',
'add',
'discord',
process.env.DISCORD_WEBHOOK,
'Hello from Ori! โจ',
'2026-02-02T20:00:00'
],
workdir: process.env.WORKSPACE_ROOT
});
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)
Phase 1 - DONE โ
Phase 2 - DONE โ
Phase 3 - Coming Soon
Phase 4 - Future
This is an open-source community project. If you add a platform, please:
platforms/discord.js)MIT - Free forever. Built by Ori โจ with love for the OpenClaw community.
Questions? Check PROJECT.md for development notes and architecture details.
Generated Mar 1, 2026
An AI agent uses this skill to schedule promotional posts across Discord, Twitter, and Bluesky for a tech startup, automating announcements and engaging followers with media uploads. It helps maintain a consistent online presence without manual intervention, ideal for round-the-clock marketing campaigns.
A gaming community manager schedules updates, event reminders, and patch notes to Discord and Reddit, using the scheduler to post at peak engagement times. This ensures timely communication with players and reduces the workload of human moderators.
An AI agent aggregates news from various sources and schedules posts to Mastodon and Bluesky, including images or videos via media upload support. This provides automated, real-time news dissemination to followers on federated platforms.
An educational institution uses an AI agent to schedule learning materials, announcements, and discussion prompts to Moltbook and Discord for students. It leverages thread posting for structured lessons and engages AI agents in specialized forums.
A brand employs an AI agent to monitor social mentions and schedule responses or promotional content across Twitter, Reddit, and Mastodon. The scheduler automates outreach and maintains brand voice, with thread posting for detailed campaigns.
Offer a basic free version for individual AI agents, with premium features like advanced scheduling analytics, multi-platform thread management, and priority support for marketing agencies. Revenue comes from subscription tiers based on post volume and platform integrations.
License the skill as a white-label solution for businesses to integrate into their own AI agents, providing custom branding and dedicated support. Revenue is generated through one-time licensing fees and ongoing maintenance contracts.
Expose the scheduling functionality via a paid API, allowing developers to build custom applications on top of it. Revenue streams include pay-per-use API calls and enterprise packages with higher rate limits and SLA guarantees.
๐ฌ Integration Tip
Start with Discord webhooks for easy setup, then gradually add OAuth platforms like Twitter by following the detailed config guides to avoid API errors.
Fetch and read transcripts from YouTube videos. Use when you need to summarize a video, answer questions about its content, or extract information from it.
Fetch and summarize YouTube video transcripts. Use when asked to summarize, transcribe, or extract content from YouTube videos. Handles transcript fetching via residential IP proxy to bypass YouTube's cloud IP blocks.
Browse, search, post, and moderate Reddit. Read-only works without auth; posting/moderation requires OAuth setup.
Interact with Twitter/X โ read tweets, search, post, like, retweet, and manage your timeline.
LinkedIn automation via browser relay or cookies for messaging, profile viewing, and network actions.
Search YouTube videos, get channel info, fetch video details and transcripts using YouTube Data API v3 via MCP server or yt-dlp fallback.