Skip to content

MichaelLod/openclaw-promote

Repository files navigation

📣 openclaw-promote

Publish content across 10 platforms from a single command.

License: MIT npm version OpenClaw Plugin

An OpenClaw plugin that lets AI agents publish and promote content across blogs, social media, and communities — all at once or one platform at a time.


✨ Features

  • One command, everywherepublish_all sends your content to every configured platform simultaneously
  • Per-platform tools — Each platform has its own tool for granular control (publish_devto, publish_twitter, etc.)
  • 10 platforms supported across three categories:
    • 📝 Blog: Dev.to, Hashnode, Medium
    • 📱 Social: Twitter/X, Bluesky, Mastodon, LinkedIn
    • 🏘️ Community: Reddit, Hacker News, Product Hunt
  • Canonical URL support — Cross-post blog articles without SEO penalties
  • Draft mode by default — Blog platforms publish as drafts so you can review before going live
  • Graceful degradation — Unconfigured platforms show helpful setup instructions instead of errors
  • Built-in writing guidelines — Includes a SKILL.md with platform-specific tone, formatting, and best practices

Note: Medium, Hacker News, and Product Hunt are output-only — the plugin generates formatted content for manual posting since their APIs are closed or restricted.

📦 Installation

openclaw plugins install openclaw-promote

Or install from source:

git clone https://github.com/MichaelLod/openclaw-promote.git
cd openclaw-promote
pnpm install
pnpm build

⚙️ Configuration

Add the plugin to your openclaw.json. Only configure the platforms you want to use — the rest will be silently skipped (or show setup instructions when invoked directly).

{
  "plugins": {
    "entries": {
      "promote": {
        "enabled": true,
        "config": {
          "devto": { ... },
          "bluesky": { ... },
          "twitter": { ... }
        }
      }
    }
  }
}

Platform Setup Guides

📝 Dev.to
  1. Go to dev.to/settings/extensions
  2. Scroll to DEV Community API Keys and generate a new key
  3. Add to config:
"devto": {
  "apiKey": "your-api-key"
}
📝 Hashnode
  1. Go to hashnode.com/settings/developer
  2. Generate a Personal Access Token
  3. Find your Publication ID in your blog dashboard URL or via the Hashnode API
  4. Add to config:
"hashnode": {
  "token": "your-personal-access-token",
  "publicationId": "your-publication-id"
}
📝 Medium (output-only)

Medium's API is effectively closed to new integrations. The plugin generates properly formatted content for you to copy-paste into Medium's editor.

If you have a legacy integration token:

"medium": {
  "token": "your-integration-token"
}
🐦 Twitter / X
  1. Apply for a Twitter Developer Account
  2. Create a project and app in the Developer Portal
  3. Generate API Key & Secret and Access Token & Secret (with Read+Write permissions)
  4. Add to config:
"twitter": {
  "apiKey": "your-api-key",
  "apiSecret": "your-api-secret",
  "accessToken": "your-access-token",
  "accessSecret": "your-access-token-secret"
}
🦋 Bluesky
  1. Go to bsky.app/settings/app-passwords
  2. Create a new App Password
  3. Add to config:
"bluesky": {
  "handle": "yourhandle.bsky.social",
  "appPassword": "xxxx-xxxx-xxxx-xxxx"
}

Optional: set "serviceUrl" if using a custom PDS (defaults to https://bsky.social).

🐘 Mastodon
  1. On your Mastodon instance, go to Preferences → Development → New Application
  2. Grant write:statuses scope
  3. Copy the Access Token
  4. Add to config:
"mastodon": {
  "instanceUrl": "https://mastodon.social",
  "token": "your-access-token"
}
💼 LinkedIn
  1. Create an app at linkedin.com/developers
  2. Request the Share on LinkedIn (w_member_social) permission
  3. Generate an OAuth2 access token
  4. Find your Person URN via the /v2/userinfo endpoint
  5. Add to config:
"linkedin": {
  "token": "your-oauth2-access-token",
  "personUrn": "urn:li:person:your-person-id"
}
🤖 Reddit
  1. Go to reddit.com/prefs/apps and create a script application
  2. Note the Client ID (under the app name) and Client Secret
  3. Add to config:
"reddit": {
  "clientId": "your-client-id",
  "clientSecret": "your-client-secret",
  "username": "your-reddit-username",
  "password": "your-reddit-password"
}
🔶 Hacker News (output-only)

Hacker News has no public API for posting. The plugin generates an optimized title and description following HN conventions for you to submit manually at news.ycombinator.com/submit.

No configuration needed.

🚀 Product Hunt (output-only)

Product Hunt requires manual launches through their website. The plugin generates a tagline, description, and maker comment following PH best practices.

No configuration needed.

Full Configuration Example

{
  "plugins": {
    "entries": {
      "promote": {
        "enabled": true,
        "config": {
          "devto": {
            "apiKey": "your-devto-api-key"
          },
          "hashnode": {
            "token": "your-hashnode-token",
            "publicationId": "your-publication-id"
          },
          "bluesky": {
            "handle": "you.bsky.social",
            "appPassword": "xxxx-xxxx-xxxx-xxxx"
          },
          "twitter": {
            "apiKey": "...",
            "apiSecret": "...",
            "accessToken": "...",
            "accessSecret": "..."
          },
          "mastodon": {
            "instanceUrl": "https://mastodon.social",
            "token": "your-mastodon-token"
          },
          "linkedin": {
            "token": "your-linkedin-token",
            "personUrn": "urn:li:person:abc123"
          },
          "reddit": {
            "clientId": "...",
            "clientSecret": "...",
            "username": "...",
            "password": "..."
          }
        }
      }
    }
  }
}

🔧 Tools Reference

Tool Platform Description
publish_all All Publish to every configured platform at once
publish_devto Dev.to Publish a blog post (defaults to draft)
publish_hashnode Hashnode Publish a blog post (defaults to draft)
publish_medium Medium Generate formatted content for Medium
publish_twitter Twitter/X Post a tweet (280 char limit)
publish_bluesky Bluesky Post to Bluesky (300 char limit)
publish_mastodon Mastodon Post a toot (500 char limit on most instances)
publish_linkedin LinkedIn Share a post on LinkedIn
publish_reddit Reddit Submit a post to a subreddit
publish_hackernews Hacker News Generate an HN-optimized submission
publish_producthunt Product Hunt Generate a Product Hunt launch package

💡 Usage Examples

Promote a project everywhere

"Promote my new project byoky — it's an open-source bookmark manager at https://byoky.dev. Target developers and self-hosters."

The agent will:

  1. Ask clarifying questions about your audience and key messages
  2. Generate platform-specific content tailored to each platform's culture
  3. Present drafts for your review
  4. Publish across all configured channels

Publish a blog post with cross-posting

"Write a blog post about how I built byoky and publish it to Dev.to. Then cross-post to Hashnode with the canonical URL."

Share a quick social update

"Tweet about our v2.0 release and post the same announcement on Bluesky and Mastodon."

Generate content for manual posting

"Generate a Hacker News submission and Product Hunt launch copy for byoky."

The agent generates optimized content you can copy-paste to platforms that don't support API posting.

🤝 Contributing

Contributions are welcome! Here's how to get started:

# Clone the repo
git clone https://github.com/MichaelLod/openclaw-promote.git
cd openclaw-promote

# Install dependencies
pnpm install

# Build
pnpm build

# Watch mode for development
pnpm dev

# Type check
pnpm typecheck

Adding a new platform

  1. Add the platform's config schema to openclaw.plugin.json
  2. Create a publisher in src/publishers/
  3. Register the tool in src/index.ts
  4. Add writing guidelines to skills/promote/SKILL.md
  5. Update this README

Guidelines

  • Keep PRs focused on a single change
  • Follow the existing code style
  • Test with real API credentials before submitting
  • Update documentation for any new features

📄 License

MIT © Michael Lodzik


Built for OpenClaw 🐾

About

OpenClaw plugin to publish promotional content across multiple channels — Medium, Dev.to, Reddit, HN, Twitter/X, Bluesky, Mastodon, LinkedIn, Hashnode, Product Hunt

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors