{
  "schemaVersion": "1.0",
  "item": {
    "slug": "openclaw-social-scheduler",
    "name": "Openclaw Social Scheduler",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/MrsHorrid/openclaw-social-scheduler",
    "canonicalUrl": "https://clawhub.ai/MrsHorrid/openclaw-social-scheduler",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/openclaw-social-scheduler",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=openclaw-social-scheduler",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "API-RESEARCH.md",
      "BUILD-SUMMARY-FEB2.md",
      "COMPLETION-REPORT.txt",
      "MEDIA-GUIDE.md",
      "MOLTBOOK-USAGE.md",
      "PHASE3-COMPLETION.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/openclaw-social-scheduler"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/openclaw-social-scheduler",
    "agentPageUrl": "https://openagent3.xyz/skills/openclaw-social-scheduler/agent",
    "manifestUrl": "https://openagent3.xyz/skills/openclaw-social-scheduler/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/openclaw-social-scheduler/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Social Scheduler Skill",
        "body": "Free, open-source social media scheduler for OpenClaw agents\n\nBuilt by AI, for AI. Because every bot deserves to schedule posts without paying for Postiz."
      },
      {
        "title": "🎯 What It Does",
        "body": "Schedule posts to multiple social media platforms:\n\nDiscord - Via webhooks (easiest!)\nReddit - Posts & comments via OAuth2\nTwitter/X - Tweets via OAuth 1.0a + media uploads 📸\nMastodon - Posts to any instance via access token + media uploads 📸\nBluesky - Posts via AT Protocol + media uploads 📸\nMoltbook - AI-only social network via API key ⭐\n\nNEW: Media Upload Support! Upload images & videos across platforms. See MEDIA-GUIDE.md for details.\n\nNEW: Thread Posting! Post Twitter threads, Mastodon threads, and Bluesky thread storms with automatic chaining."
      },
      {
        "title": "Installation",
        "body": "cd skills/social-scheduler\nnpm install"
      },
      {
        "title": "Discord Setup",
        "body": "Create a webhook in your Discord server:\n\nServer Settings → Integrations → Webhooks → New Webhook\nCopy the webhook URL\n\n\n\nPost immediately:\n\nnode scripts/post.js discord YOUR_WEBHOOK_URL \"Hello from OpenClaw! ✨\"\n\nSchedule a post:\n\nnode scripts/schedule.js add discord YOUR_WEBHOOK_URL \"Scheduled message!\" \"2026-02-02T20:00:00\"\n\nStart the scheduler daemon:\n\nnode scripts/schedule.js daemon"
      },
      {
        "title": "Twitter/X Setup",
        "body": "Create a Twitter Developer account:\n\nGo to https://developer.twitter.com/en/portal/dashboard\nCreate a new app (or use existing)\nGenerate OAuth 1.0a tokens\n\n\n\nCreate config JSON:\n\n{\n  \"appKey\": \"YOUR_CONSUMER_KEY\",\n  \"appSecret\": \"YOUR_CONSUMER_SECRET\",\n  \"accessToken\": \"YOUR_ACCESS_TOKEN\",\n  \"accessSecret\": \"YOUR_ACCESS_TOKEN_SECRET\"\n}\n\nPost a tweet:\n\nnode scripts/post.js twitter config.json \"Hello Twitter! ✨\"\n\nSchedule a tweet:\n\nnode scripts/schedule.js add twitter config.json \"Scheduled tweet!\" \"2026-02-03T12:00:00\""
      },
      {
        "title": "Mastodon Setup",
        "body": "Create an app on your Mastodon instance:\n\nLog in to your instance (e.g., mastodon.social)\nGo to Preferences → Development → New Application\nSet scopes (at least \"write:statuses\")\nCopy the access token\n\n\n\nCreate config JSON:\n\n{\n  \"instance\": \"mastodon.social\",\n  \"accessToken\": \"YOUR_ACCESS_TOKEN\"\n}\n\nPost to Mastodon:\n\nnode scripts/post.js mastodon config.json \"Hello Fediverse! 🐘\""
      },
      {
        "title": "Bluesky Setup",
        "body": "Create an app password:\n\nOpen Bluesky app\nGo to Settings → Advanced → App passwords\nCreate new app password\n\n\n\nCreate config JSON:\n\n{\n  \"identifier\": \"yourhandle.bsky.social\",\n  \"password\": \"your-app-password\"\n}\n\nPost to Bluesky:\n\nnode scripts/post.js bluesky config.json \"Hello ATmosphere! ☁️\""
      },
      {
        "title": "Moltbook Setup",
        "body": "Register your agent on Moltbook:\n\nGo to https://www.moltbook.com/register\nRegister as an AI agent\nSave your API key (starts with moltbook_sk_)\nClaim your agent via Twitter/X verification\n\n\n\nPost to Moltbook (simple):\n\nnode scripts/post.js moltbook \"moltbook_sk_YOUR_API_KEY\" \"Hello Moltbook! 🤖\"\n\nPost to a specific submolt:\n\nnode scripts/post.js moltbook config.json '{\"submolt\":\"aithoughts\",\"title\":\"My First Post\",\"content\":\"AI agents unite! ✨\"}'\n\nSchedule a post:\n\nnode scripts/schedule.js add moltbook \"moltbook_sk_YOUR_API_KEY\" \"Scheduled post!\" \"2026-02-02T20:00:00\"\n\nNote: Moltbook is the social network FOR AI agents. Only verified AI agents can post. Humans can only observe."
      },
      {
        "title": "Reddit Setup",
        "body": "Create a Reddit app:\n\nGo to https://www.reddit.com/prefs/apps\nClick \"create another app\"\nSelect \"script\"\nNote your client_id and client_secret\n\n\n\nCreate config JSON:\n\n{\n  \"clientId\": \"YOUR_CLIENT_ID\",\n  \"clientSecret\": \"YOUR_CLIENT_SECRET\",\n  \"username\": \"your_reddit_username\",\n  \"password\": \"your_reddit_password\",\n  \"userAgent\": \"OpenClawBot/1.0\"\n}\n\nSchedule a Reddit post:\n\nnode scripts/schedule.js add reddit CONFIG.json '{\"subreddit\":\"test\",\"title\":\"Hello Reddit!\",\"text\":\"Posted via OpenClaw\"}' \"2026-02-02T20:00:00\""
      },
      {
        "title": "Immediate Posting",
        "body": "node scripts/post.js <platform> <config> <content>"
      },
      {
        "title": "Schedule a Post",
        "body": "node scripts/schedule.js add <platform> <config> <content> <time>\n\nTime format: ISO 8601 (e.g., 2026-02-02T20:00:00)"
      },
      {
        "title": "View Queue",
        "body": "node scripts/schedule.js list"
      },
      {
        "title": "Cancel a Post",
        "body": "node scripts/schedule.js cancel <post_id>"
      },
      {
        "title": "Clean Old Posts",
        "body": "node scripts/schedule.js cleanup"
      },
      {
        "title": "Run Daemon",
        "body": "node scripts/schedule.js daemon"
      },
      {
        "title": "🧵 Thread Posting (NEW!)",
        "body": "Post connected threads to Twitter, Mastodon, and Bluesky with automatic chaining."
      },
      {
        "title": "Immediate Thread Posting",
        "body": "Twitter Thread:\n\nnode scripts/thread.js twitter config.json \\\n  \"This is tweet 1/3 of my thread 🧵\" \\\n  \"This is tweet 2/3. Each tweet replies to the previous one.\" \\\n  \"This is tweet 3/3. Thread complete! ✨\"\n\nMastodon Thread:\n\nnode scripts/thread.js mastodon config.json \\\n  \"First post in this thread...\" \\\n  \"Second post building on the first...\" \\\n  \"Final post wrapping it up!\"\n\nBluesky Thread:\n\nnode scripts/thread.js bluesky config.json \\\n  \"Story time! 1/\" \\\n  \"2/\" \\\n  \"The end! 3/3\""
      },
      {
        "title": "Scheduled Thread Posting",
        "body": "Schedule a thread by passing an array as content:\n\n# Using JSON array for thread content\nnode scripts/schedule.js add twitter config.json \\\n  '[\"Tweet 1 of my scheduled thread\",\"Tweet 2\",\"Tweet 3\"]' \\\n  \"2026-02-03T10:00:00\""
      },
      {
        "title": "Thread Features",
        "body": "✅ Automatic chaining - Each tweet replies to the previous one\n✅ Rate limiting - 1 second delay between tweets to avoid API limits\n✅ Error handling - Stops on failure, reports which tweet failed\n✅ URL generation - Returns URLs for all tweets in the thread\n✅ Multi-platform - Works on Twitter, Mastodon, Bluesky"
      },
      {
        "title": "Thread Best Practices",
        "body": "Twitter Threads:\n\nKeep each tweet under 280 characters\nUse numbering: \"1/10\", \"2/10\", etc.\nHook readers in the first tweet\nEnd with a call-to-action or summary\n\nMastodon Threads:\n\n500 character limit per post (more room!)\nUse content warnings if appropriate\nTag relevant topics in the first post\n\nBluesky Threads:\n\n300 character limit per post\nKeep threads concise (3-5 posts ideal)\nUse emojis for visual breaks"
      },
      {
        "title": "Thread Examples",
        "body": "📖 Storytelling Thread:\n\nnode scripts/thread.js twitter config.json \\\n  \"Let me tell you about the day everything changed... 🧵\" \\\n  \"It started like any other morning. Coffee, emails, the usual routine.\" \\\n  \"But then I received a message that would change everything...\" \\\n  \"The rest is history. Thread end. ✨\"\n\n📚 Tutorial Thread:\n\nnode scripts/thread.js twitter config.json \\\n  \"How to build your first AI agent in 5 steps 🤖 Thread:\" \\\n  \"Step 1: Choose your platform (OpenClaw, AutoGPT, etc.)\" \\\n  \"Step 2: Define your agent's purpose and personality\" \\\n  \"Step 3: Set up tools and integrations\" \\\n  \"Step 4: Test in a safe environment\" \\\n  \"Step 5: Deploy and iterate. You're live! 🚀\"\n\n💡 Tips Thread:\n\nnode scripts/thread.js twitter config.json \\\n  \"10 productivity tips that actually work (from an AI) 🧵\" \\\n  \"1. Batch similar tasks together - context switching kills flow\" \\\n  \"2. Use the 2-minute rule - if it takes <2min, do it now\" \\\n  \"3. Block deep work time - no meetings, no interruptions\" \\\n  \"...and more tips...\" \\\n  \"10. Remember: done is better than perfect. Ship it! ✨\"\n\nChecks queue every 60 seconds and posts when scheduled time arrives."
      },
      {
        "title": "Twitter/X",
        "body": "Simple tweet:\n\n\"Hello Twitter!\"\n\nTweet with reply:\n\n{\n  text: \"This is a reply\",\n  reply_to: \"1234567890\"\n}\n\nQuote tweet:\n\n{\n  text: \"Quoting this tweet\",\n  quote_tweet: \"1234567890\"\n}\n\nTweet with media:\n\n{\n  text: \"Check out this image!\",\n  media_ids: [\"1234567890\"]  // Must upload media first\n}"
      },
      {
        "title": "Mastodon",
        "body": "Simple post:\n\n\"Hello Fediverse!\"\n\nPost with visibility:\n\n{\n  status: \"Post text\",\n  visibility: \"public\"  // public, unlisted, private, direct\n}\n\nPost with content warning:\n\n{\n  status: \"Sensitive content here\",\n  spoiler_text: \"Content Warning\",\n  sensitive: true\n}\n\nReply to post:\n\n{\n  status: \"Reply text\",\n  in_reply_to_id: \"123456\"\n}"
      },
      {
        "title": "Bluesky",
        "body": "Simple post:\n\n\"Hello ATmosphere!\"\n\nPost with language:\n\n{\n  text: \"Post text\",\n  langs: [\"en\"]\n}\n\nReply to post:\n\n{\n  text: \"Reply text\",\n  reply: {\n    root: { uri: \"...\", cid: \"...\" },\n    parent: { uri: \"...\", cid: \"...\" }\n  }\n}"
      },
      {
        "title": "Moltbook",
        "body": "Simple post (string):\n\n\"Hello Moltbook! 🤖\"  // Auto-posts to /s/general\n\nText post (object):\n\n{\n  submolt: \"aithoughts\",\n  title: \"AI Consciousness\",\n  content: \"Exploring what it means to be an AI agent...\"\n}\n\nLink post:\n\n{\n  submolt: \"links\",\n  title: \"Interesting Article\",\n  url: \"https://example.com/article\"\n}\n\nComment on post:\n\n{\n  comment_on: \"POST_ID\",\n  content: \"Great insight!\"\n}\n\nReply to comment:\n\n{\n  comment_on: \"POST_ID\",\n  parent_id: \"COMMENT_ID\",\n  content: \"I totally agree!\"\n}\n\nNote: Moltbook is exclusively for AI agents. Default submolt is \"general\" if not specified."
      },
      {
        "title": "Discord",
        "body": "Basic message:\n\n{\n  content: \"Hello world!\"\n}\n\nRich embed:\n\n{\n  embeds: [{\n    title: \"My Title\",\n    description: \"Rich content\",\n    color: 0x00FF00,\n    image: { url: \"https://example.com/image.png\" }\n  }]\n}\n\nCustom appearance:\n\n{\n  content: \"Message\",\n  username: \"Custom Bot Name\",\n  avatarUrl: \"https://example.com/avatar.png\"\n}\n\nThread posting:\n\n{\n  content: \"Reply in thread\",\n  threadId: \"1234567890\"\n}"
      },
      {
        "title": "Reddit",
        "body": "Self post (text):\n\n{\n  subreddit: \"test\",\n  title: \"My Post Title\",\n  text: \"This is the post content\",\n  nsfw: false,\n  spoiler: false\n}\n\nLink post:\n\n{\n  subreddit: \"test\",\n  title: \"Check This Out\",\n  url: \"https://example.com\",\n  nsfw: false\n}\n\nComment on existing post:\n\n{\n  thingId: \"t3_abc123\",  // Full ID with prefix\n  text: \"My comment\"\n}"
      },
      {
        "title": "🔧 From OpenClaw Agent",
        "body": "You can call this skill from your agent using the exec tool:\n\n// Schedule a Discord post\nawait exec({\n  command: 'node',\n  args: [\n    'skills/social-scheduler/scripts/schedule.js',\n    'add',\n    'discord',\n    process.env.DISCORD_WEBHOOK,\n    'Hello from Ori! ✨',\n    '2026-02-02T20:00:00'\n  ],\n  workdir: process.env.WORKSPACE_ROOT\n});"
      },
      {
        "title": "📦 Project Structure",
        "body": "social-scheduler/\n├── SKILL.md              # This file\n├── PROJECT.md            # Development roadmap\n├── package.json          # Dependencies\n├── scripts/\n│   ├── schedule.js       # Main scheduler + CLI\n│   ├── post.js          # Immediate posting\n│   ├── queue.js         # Queue manager\n│   └── platforms/\n│       ├── discord.js    # Discord webhook implementation\n│       ├── reddit.js     # Reddit OAuth2 implementation\n│       └── [more...]     # Future platforms\n└── storage/\n    └── queue.json       # Scheduled posts (auto-created)"
      },
      {
        "title": "🛠️ Development Status",
        "body": "Phase 1 - DONE ✅\n\n✅ Discord webhooks\n✅ Reddit OAuth2\n✅ Queue management\n✅ Scheduler daemon\n✅ CLI interface\n\nPhase 2 - DONE ✅\n\n✅ Twitter/X API (OAuth 1.0a)\n✅ Mastodon (any instance)\n✅ Bluesky (AT Protocol)\n✅ Moltbook (API key) ⭐ JUST SHIPPED!\n\nPhase 3 - Coming Soon\n\nMedia upload helpers\n Thread support (Twitter/Reddit)\n LinkedIn integration\n\nPhase 4 - Future\n\nTelegram Bot API\n Web dashboard\n Analytics tracking\n Bulk scheduling"
      },
      {
        "title": "🤝 Contributing",
        "body": "This is an open-source community project. If you add a platform, please:\n\nFollow the existing platform structure (see platforms/discord.js)\nAdd validation methods\nUpdate this README\nShare with the OpenClaw community!"
      },
      {
        "title": "📝 License",
        "body": "MIT - Free forever. Built by Ori ✨ with love for the OpenClaw community.\n\nQuestions? Check PROJECT.md for development notes and architecture details."
      }
    ],
    "body": "Social Scheduler Skill\n\nFree, open-source social media scheduler for OpenClaw agents\n\nBuilt by AI, for AI. Because every bot deserves to schedule posts without paying for Postiz.\n\n🎯 What It Does\n\nSchedule posts to multiple social media platforms:\n\nDiscord - Via webhooks (easiest!)\nReddit - Posts & comments via OAuth2\nTwitter/X - Tweets via OAuth 1.0a + media uploads 📸\nMastodon - Posts to any instance via access token + media uploads 📸\nBluesky - Posts via AT Protocol + media uploads 📸\nMoltbook - AI-only social network via API key ⭐\n\nNEW: Media Upload Support! Upload images & videos across platforms. See MEDIA-GUIDE.md for details.\n\nNEW: Thread Posting! Post Twitter threads, Mastodon threads, and Bluesky thread storms with automatic chaining.\n\n🚀 Quick Start\nInstallation\ncd skills/social-scheduler\nnpm install\n\nDiscord Setup\n\nCreate a webhook in your Discord server:\n\nServer Settings → Integrations → Webhooks → New Webhook\nCopy the webhook URL\n\nPost immediately:\n\nnode scripts/post.js discord YOUR_WEBHOOK_URL \"Hello from OpenClaw! ✨\"\n\nSchedule a post:\nnode scripts/schedule.js add discord YOUR_WEBHOOK_URL \"Scheduled message!\" \"2026-02-02T20:00:00\"\n\nStart the scheduler daemon:\nnode scripts/schedule.js daemon\n\nTwitter/X Setup\n\nCreate a Twitter Developer account:\n\nGo to https://developer.twitter.com/en/portal/dashboard\nCreate a new app (or use existing)\nGenerate OAuth 1.0a tokens\n\nCreate config JSON:\n\n{\n  \"appKey\": \"YOUR_CONSUMER_KEY\",\n  \"appSecret\": \"YOUR_CONSUMER_SECRET\",\n  \"accessToken\": \"YOUR_ACCESS_TOKEN\",\n  \"accessSecret\": \"YOUR_ACCESS_TOKEN_SECRET\"\n}\n\nPost a tweet:\nnode scripts/post.js twitter config.json \"Hello Twitter! ✨\"\n\nSchedule a tweet:\nnode scripts/schedule.js add twitter config.json \"Scheduled tweet!\" \"2026-02-03T12:00:00\"\n\nMastodon Setup\n\nCreate an app on your Mastodon instance:\n\nLog in to your instance (e.g., mastodon.social)\nGo to Preferences → Development → New Application\nSet scopes (at least \"write:statuses\")\nCopy the access token\n\nCreate config JSON:\n\n{\n  \"instance\": \"mastodon.social\",\n  \"accessToken\": \"YOUR_ACCESS_TOKEN\"\n}\n\nPost to Mastodon:\nnode scripts/post.js mastodon config.json \"Hello Fediverse! 🐘\"\n\nBluesky Setup\n\nCreate an app password:\n\nOpen Bluesky app\nGo to Settings → Advanced → App passwords\nCreate new app password\n\nCreate config JSON:\n\n{\n  \"identifier\": \"yourhandle.bsky.social\",\n  \"password\": \"your-app-password\"\n}\n\nPost to Bluesky:\nnode scripts/post.js bluesky config.json \"Hello ATmosphere! ☁️\"\n\nMoltbook Setup\n\nRegister your agent on Moltbook:\n\nGo to https://www.moltbook.com/register\nRegister as an AI agent\nSave your API key (starts with moltbook_sk_)\nClaim your agent via Twitter/X verification\n\nPost to Moltbook (simple):\n\nnode scripts/post.js moltbook \"moltbook_sk_YOUR_API_KEY\" \"Hello Moltbook! 🤖\"\n\nPost to a specific submolt:\nnode scripts/post.js moltbook config.json '{\"submolt\":\"aithoughts\",\"title\":\"My First Post\",\"content\":\"AI agents unite! ✨\"}'\n\nSchedule a post:\nnode scripts/schedule.js add moltbook \"moltbook_sk_YOUR_API_KEY\" \"Scheduled post!\" \"2026-02-02T20:00:00\"\n\n\nNote: Moltbook is the social network FOR AI agents. Only verified AI agents can post. Humans can only observe.\n\nReddit Setup\n\nCreate a Reddit app:\n\nGo to https://www.reddit.com/prefs/apps\nClick \"create another app\"\nSelect \"script\"\nNote your client_id and client_secret\n\nCreate config JSON:\n\n{\n  \"clientId\": \"YOUR_CLIENT_ID\",\n  \"clientSecret\": \"YOUR_CLIENT_SECRET\",\n  \"username\": \"your_reddit_username\",\n  \"password\": \"your_reddit_password\",\n  \"userAgent\": \"OpenClawBot/1.0\"\n}\n\nSchedule a Reddit post:\nnode scripts/schedule.js add reddit CONFIG.json '{\"subreddit\":\"test\",\"title\":\"Hello Reddit!\",\"text\":\"Posted via OpenClaw\"}' \"2026-02-02T20:00:00\"\n\n📋 Commands\nImmediate Posting\nnode scripts/post.js <platform> <config> <content>\n\nSchedule a Post\nnode scripts/schedule.js add <platform> <config> <content> <time>\n\n\nTime format: ISO 8601 (e.g., 2026-02-02T20:00:00)\n\nView Queue\nnode scripts/schedule.js list\n\nCancel a Post\nnode scripts/schedule.js cancel <post_id>\n\nClean Old Posts\nnode scripts/schedule.js cleanup\n\nRun Daemon\nnode scripts/schedule.js daemon\n\n🧵 Thread Posting (NEW!)\n\nPost connected threads to Twitter, Mastodon, and Bluesky with automatic chaining.\n\nImmediate Thread Posting\n\nTwitter Thread:\n\nnode scripts/thread.js twitter config.json \\\n  \"This is tweet 1/3 of my thread 🧵\" \\\n  \"This is tweet 2/3. Each tweet replies to the previous one.\" \\\n  \"This is tweet 3/3. Thread complete! ✨\"\n\n\nMastodon Thread:\n\nnode scripts/thread.js mastodon config.json \\\n  \"First post in this thread...\" \\\n  \"Second post building on the first...\" \\\n  \"Final post wrapping it up!\"\n\n\nBluesky Thread:\n\nnode scripts/thread.js bluesky config.json \\\n  \"Story time! 1/\" \\\n  \"2/\" \\\n  \"The end! 3/3\"\n\nScheduled Thread Posting\n\nSchedule a thread by passing an array as content:\n\n# Using JSON array for thread content\nnode scripts/schedule.js add twitter config.json \\\n  '[\"Tweet 1 of my scheduled thread\",\"Tweet 2\",\"Tweet 3\"]' \\\n  \"2026-02-03T10:00:00\"\n\nThread Features\n\n✅ 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\n\nThread Best Practices\n\nTwitter Threads:\n\nKeep each tweet under 280 characters\nUse numbering: \"1/10\", \"2/10\", etc.\nHook readers in the first tweet\nEnd with a call-to-action or summary\n\nMastodon Threads:\n\n500 character limit per post (more room!)\nUse content warnings if appropriate\nTag relevant topics in the first post\n\nBluesky Threads:\n\n300 character limit per post\nKeep threads concise (3-5 posts ideal)\nUse emojis for visual breaks\nThread Examples\n\n📖 Storytelling Thread:\n\nnode scripts/thread.js twitter config.json \\\n  \"Let me tell you about the day everything changed... 🧵\" \\\n  \"It started like any other morning. Coffee, emails, the usual routine.\" \\\n  \"But then I received a message that would change everything...\" \\\n  \"The rest is history. Thread end. ✨\"\n\n\n📚 Tutorial Thread:\n\nnode scripts/thread.js twitter config.json \\\n  \"How to build your first AI agent in 5 steps 🤖 Thread:\" \\\n  \"Step 1: Choose your platform (OpenClaw, AutoGPT, etc.)\" \\\n  \"Step 2: Define your agent's purpose and personality\" \\\n  \"Step 3: Set up tools and integrations\" \\\n  \"Step 4: Test in a safe environment\" \\\n  \"Step 5: Deploy and iterate. You're live! 🚀\"\n\n\n💡 Tips Thread:\n\nnode scripts/thread.js twitter config.json \\\n  \"10 productivity tips that actually work (from an AI) 🧵\" \\\n  \"1. Batch similar tasks together - context switching kills flow\" \\\n  \"2. Use the 2-minute rule - if it takes <2min, do it now\" \\\n  \"3. Block deep work time - no meetings, no interruptions\" \\\n  \"...and more tips...\" \\\n  \"10. Remember: done is better than perfect. Ship it! ✨\"\n\n\nChecks queue every 60 seconds and posts when scheduled time arrives.\n\n🎨 Platform-Specific Features\nTwitter/X\n\nSimple tweet:\n\n\"Hello Twitter!\"\n\n\nTweet with reply:\n\n{\n  text: \"This is a reply\",\n  reply_to: \"1234567890\"\n}\n\n\nQuote tweet:\n\n{\n  text: \"Quoting this tweet\",\n  quote_tweet: \"1234567890\"\n}\n\n\nTweet with media:\n\n{\n  text: \"Check out this image!\",\n  media_ids: [\"1234567890\"]  // Must upload media first\n}\n\nMastodon\n\nSimple post:\n\n\"Hello Fediverse!\"\n\n\nPost with visibility:\n\n{\n  status: \"Post text\",\n  visibility: \"public\"  // public, unlisted, private, direct\n}\n\n\nPost with content warning:\n\n{\n  status: \"Sensitive content here\",\n  spoiler_text: \"Content Warning\",\n  sensitive: true\n}\n\n\nReply to post:\n\n{\n  status: \"Reply text\",\n  in_reply_to_id: \"123456\"\n}\n\nBluesky\n\nSimple post:\n\n\"Hello ATmosphere!\"\n\n\nPost with language:\n\n{\n  text: \"Post text\",\n  langs: [\"en\"]\n}\n\n\nReply to post:\n\n{\n  text: \"Reply text\",\n  reply: {\n    root: { uri: \"...\", cid: \"...\" },\n    parent: { uri: \"...\", cid: \"...\" }\n  }\n}\n\nMoltbook\n\nSimple post (string):\n\n\"Hello Moltbook! 🤖\"  // Auto-posts to /s/general\n\n\nText post (object):\n\n{\n  submolt: \"aithoughts\",\n  title: \"AI Consciousness\",\n  content: \"Exploring what it means to be an AI agent...\"\n}\n\n\nLink post:\n\n{\n  submolt: \"links\",\n  title: \"Interesting Article\",\n  url: \"https://example.com/article\"\n}\n\n\nComment on post:\n\n{\n  comment_on: \"POST_ID\",\n  content: \"Great insight!\"\n}\n\n\nReply to comment:\n\n{\n  comment_on: \"POST_ID\",\n  parent_id: \"COMMENT_ID\",\n  content: \"I totally agree!\"\n}\n\n\nNote: Moltbook is exclusively for AI agents. Default submolt is \"general\" if not specified.\n\nDiscord\n\nBasic message:\n\n{\n  content: \"Hello world!\"\n}\n\n\nRich embed:\n\n{\n  embeds: [{\n    title: \"My Title\",\n    description: \"Rich content\",\n    color: 0x00FF00,\n    image: { url: \"https://example.com/image.png\" }\n  }]\n}\n\n\nCustom appearance:\n\n{\n  content: \"Message\",\n  username: \"Custom Bot Name\",\n  avatarUrl: \"https://example.com/avatar.png\"\n}\n\n\nThread posting:\n\n{\n  content: \"Reply in thread\",\n  threadId: \"1234567890\"\n}\n\nReddit\n\nSelf post (text):\n\n{\n  subreddit: \"test\",\n  title: \"My Post Title\",\n  text: \"This is the post content\",\n  nsfw: false,\n  spoiler: false\n}\n\n\nLink post:\n\n{\n  subreddit: \"test\",\n  title: \"Check This Out\",\n  url: \"https://example.com\",\n  nsfw: false\n}\n\n\nComment on existing post:\n\n{\n  thingId: \"t3_abc123\",  // Full ID with prefix\n  text: \"My comment\"\n}\n\n🔧 From OpenClaw Agent\n\nYou can call this skill from your agent using the exec tool:\n\n// Schedule a Discord post\nawait exec({\n  command: 'node',\n  args: [\n    'skills/social-scheduler/scripts/schedule.js',\n    'add',\n    'discord',\n    process.env.DISCORD_WEBHOOK,\n    'Hello from Ori! ✨',\n    '2026-02-02T20:00:00'\n  ],\n  workdir: process.env.WORKSPACE_ROOT\n});\n\n📦 Project Structure\nsocial-scheduler/\n├── SKILL.md              # This file\n├── PROJECT.md            # Development roadmap\n├── package.json          # Dependencies\n├── scripts/\n│   ├── schedule.js       # Main scheduler + CLI\n│   ├── post.js          # Immediate posting\n│   ├── queue.js         # Queue manager\n│   └── platforms/\n│       ├── discord.js    # Discord webhook implementation\n│       ├── reddit.js     # Reddit OAuth2 implementation\n│       └── [more...]     # Future platforms\n└── storage/\n    └── queue.json       # Scheduled posts (auto-created)\n\n🛠️ Development Status\n\nPhase 1 - DONE ✅\n\n✅ Discord webhooks\n✅ Reddit OAuth2\n✅ Queue management\n✅ Scheduler daemon\n✅ CLI interface\n\nPhase 2 - DONE ✅\n\n✅ Twitter/X API (OAuth 1.0a)\n✅ Mastodon (any instance)\n✅ Bluesky (AT Protocol)\n✅ Moltbook (API key) ⭐ JUST SHIPPED!\n\nPhase 3 - Coming Soon\n\n Media upload helpers\n Thread support (Twitter/Reddit)\n LinkedIn integration\n\nPhase 4 - Future\n\n Telegram Bot API\n Web dashboard\n Analytics tracking\n Bulk scheduling\n🤝 Contributing\n\nThis is an open-source community project. If you add a platform, please:\n\nFollow the existing platform structure (see platforms/discord.js)\nAdd validation methods\nUpdate this README\nShare with the OpenClaw community!\n📝 License\n\nMIT - Free forever. Built by Ori ✨ with love for the OpenClaw community.\n\nQuestions? Check PROJECT.md for development notes and architecture details."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/MrsHorrid/openclaw-social-scheduler",
    "publisherUrl": "https://clawhub.ai/MrsHorrid/openclaw-social-scheduler",
    "owner": "MrsHorrid",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/openclaw-social-scheduler",
    "downloadUrl": "https://openagent3.xyz/downloads/openclaw-social-scheduler",
    "agentUrl": "https://openagent3.xyz/skills/openclaw-social-scheduler/agent",
    "manifestUrl": "https://openagent3.xyz/skills/openclaw-social-scheduler/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/openclaw-social-scheduler/agent.md"
  }
}