openclaw-social-scheduler
# Social Scheduler Skill
What this skill does
# 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 โญ
**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
```bash
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:
```bash
node scripts/post.js discord YOUR_WEBHOOK_URL "Hello from OpenClaw! โจ"
```
3. Schedule a post:
```bash
node scripts/schedule.js add discord YOUR_WEBHOOK_URL "Scheduled message!" "2026-02-02T20:00:00"
```
4. Start the scheduler daemon:
```bash
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:
```json
{
"appKey": "YOUR_CONSUMER_KEY",
"appSecret": "YOUR_CONSUMER_SECRET",
"accessToken": "YOUR_ACCESS_TOKEN",
"accessSecret": "YOUR_ACCESS_TOKEN_SECRET"
}
```
3. Post a tweet:
```bash
node scripts/post.js twitter config.json "Hello Twitter! โจ"
```
4. Schedule a tweet:
```bash
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:
```json
{
"instance": "mastodon.social",
"accessToken": "YOUR_ACCESS_TOKEN"
}
```
3. Post to Mastodon:
```bash
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:
```json
{
"identifier": "yourhandle.bsky.social",
"password": "your-app-password"
}
```
3. Post to Bluesky:
```bash
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):
```bash
node scripts/post.js moltbook "moltbook_sk_YOUR_API_KEY" "Hello Moltbook! ๐ค"
```
3. Post to a specific submolt:
```bash
node scripts/post.js moltbook config.json '{"submolt":"aithoughts","title":"My First Post","content":"AI agents unite! โจ"}'
```
4. Schedule a post:
```bash
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.
### 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:
```json
{
"clientId": "YOUR_CLIENT_ID",
"clientSecret": "YOUR_CLIENT_SECRET",
"username": "your_reddit_username",
"password": "your_reddit_password",
"userAgent": "OpenClawBot/1.0"
}
```
3. Schedule a Reddit post:
```bash
node scripts/schedule.js add reddit CONFIG.json '{"subreddit":"test","title":"Hello Reddit!","text":"Posted via OpenClaw"}' "2026-02-02T20:00:00"
```
## ๐ Commands
### Immediate Posting
```bash
node scripts/post.js <platform> <config> <content>
```
### Schedule a Post
```bash
node scripts/schedule.js add <platform> <config> <content> <time>
```
Time format: ISO 8601 (e.g., `2026-02-02T20:00:00`)
### View Queue
```bash
node scripts/schedule.js list
```
### Cancel a Post
```bash
node scripts/schedule.js cancel <post_id>
```
### Clean Old Posts
```bash
node scripts/schedule.js cleanup
```
### Run Daemon
```bash
node scripts/schedule.js daemon
```
## ๐งต Thread Posting (NEW!)
Post connected threads to Twitter, Mastodon, and Bluesky with automatic chaining.
### Immediate Thread Posting
**Twitter Thread:**
```bash
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:**
```bash
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:**
```bash
node scripts/thread.js bluesky config.json \
"Story time! 1/" \
"2/" \
"The end! 3/3"
```
### Scheduled Thread Posting
Schedule a thread by passing an array as content:
```bash
# 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"
```
### 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:**
```bash
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:**
```bash
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:**
```bash
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.
## ๐จ Platform-Specific Features
### Twitter/X
**Simple tweet:**
```javascript
"Hello Twitter!"
```
**Tweet with reply:**
```javascript
{
text: "This is a reply",
reply_to: "1234567890"
}
```
**Quote tweet:**
```javascript
{
text: "Quoting this tweet",
quote_tweet: "1234567890"
}
```
**Tweet with media:**
```javascript
{
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.