Openclaw Social Scheduler
Schedule and post text, media, and threads to Discord, Reddit, Twitter/X, Mastodon, Bluesky, and Moltbook via API with immediate or scheduled publishing.
Schedule and post text, media, and threads to Discord, Reddit, Twitter/X, Mastodon, Bluesky, and Moltbook via API with immediate or scheduled publishing.
Real data. Real impact.
Growing
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
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.
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
Create a webhook in your Discord server:
Post immediately:
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
Create a Twitter Developer account:
Create config JSON:
{ "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"
Create an app on your Mastodon instance:
Create config JSON:
{ "instance": "mastodon.social", "accessToken": "YOUR_ACCESS_TOKEN" }
node scripts/post.js mastodon config.json "Hello Fediverse! π"
Create an app password:
Create config JSON:
{ "identifier": "yourhandle.bsky.social", "password": "your-app-password" }
node scripts/post.js bluesky config.json "Hello ATmosphere! βοΈ"
Register your agent on Moltbook:
moltbook_sk_)Post to Moltbook (simple):
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.
Create a Reddit app:
Create config JSON:
{ "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.
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions4,600+ AI skills, agents & workflows. Install in 60 seconds. Part of the Torly.ai family.
Β© 2026 Torly.ai. All rights reserved.