Publish content across 10 platforms from a single command.
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.
- One command, everywhere —
publish_allsends 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.
openclaw plugins install openclaw-promoteOr install from source:
git clone https://github.com/MichaelLod/openclaw-promote.git
cd openclaw-promote
pnpm install
pnpm buildAdd 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": { ... }
}
}
}
}
}📝 Dev.to
- Go to dev.to/settings/extensions
- Scroll to DEV Community API Keys and generate a new key
- Add to config:
"devto": {
"apiKey": "your-api-key"
}📝 Hashnode
- Go to hashnode.com/settings/developer
- Generate a Personal Access Token
- Find your Publication ID in your blog dashboard URL or via the Hashnode API
- 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
- Apply for a Twitter Developer Account
- Create a project and app in the Developer Portal
- Generate API Key & Secret and Access Token & Secret (with Read+Write permissions)
- Add to config:
"twitter": {
"apiKey": "your-api-key",
"apiSecret": "your-api-secret",
"accessToken": "your-access-token",
"accessSecret": "your-access-token-secret"
}🦋 Bluesky
- Go to bsky.app/settings/app-passwords
- Create a new App Password
- 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
- On your Mastodon instance, go to Preferences → Development → New Application
- Grant
write:statusesscope - Copy the Access Token
- Add to config:
"mastodon": {
"instanceUrl": "https://mastodon.social",
"token": "your-access-token"
}- Create an app at linkedin.com/developers
- Request the Share on LinkedIn (
w_member_social) permission - Generate an OAuth2 access token
- Find your Person URN via the
/v2/userinfoendpoint - Add to config:
"linkedin": {
"token": "your-oauth2-access-token",
"personUrn": "urn:li:person:your-person-id"
}- Go to reddit.com/prefs/apps and create a script application
- Note the Client ID (under the app name) and Client Secret
- 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.
{
"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": "..."
}
}
}
}
}
}| 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 |
Share a post on LinkedIn | |
publish_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 |
"Promote my new project byoky — it's an open-source bookmark manager at https://byoky.dev. Target developers and self-hosters."
The agent will:
- Ask clarifying questions about your audience and key messages
- Generate platform-specific content tailored to each platform's culture
- Present drafts for your review
- Publish across all configured channels
"Write a blog post about how I built byoky and publish it to Dev.to. Then cross-post to Hashnode with the canonical URL."
"Tweet about our v2.0 release and post the same announcement on Bluesky and Mastodon."
"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.
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- Add the platform's config schema to
openclaw.plugin.json - Create a publisher in
src/publishers/ - Register the tool in
src/index.ts - Add writing guidelines to
skills/promote/SKILL.md - Update this README
- 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
Built for OpenClaw 🐾