Channels
Promote
OpenClaw plugin to publish promotional content across multiple channels — Medium, Dev.to, Reddit, HN, Twitter/X, Bluesky, Mastodon, LinkedIn, Hashnode, Product Hunt
Install
npm install
pnpm
Configuration Example
{
"plugins": {
"entries": {
"promote": {
"enabled": true,
"config": {
"medium": { "token": "..." },
"devto": { "apiKey": "..." },
"bluesky": { "handle": "you.bsky.social", "appPassword": "..." }
}
}
}
}
}
README
# openclaw-promote
OpenClaw plugin for publishing promotional content across multiple channels. Write once, distribute everywhere — each platform gets tailored content.
## Supported channels
| Channel | Type | API |
|---------|------|-----|
| Medium | Full API | REST — integration token |
| Dev.to | Full API | REST — API key |
| Hashnode | Full API | GraphQL — personal token |
| Reddit | Full API | OAuth2 — script app |
| Twitter/X | Full API | OAuth 1.0a |
| Bluesky | Full API | AT Protocol — app password |
| Mastodon | Full API | REST — access token |
| LinkedIn | Full API | REST — OAuth2 token |
| Hacker News | Output only | No posting API — formats for manual submission |
| Product Hunt | Output only | Complex launch flow — prepares launch materials |
All channels are optional. Only channels with credentials configured will be active.
## Install
```bash
# From npm
openclaw plugins install openclaw-promote
# From local path
openclaw plugins install ./path/to/openclaw-promote
# Enable
openclaw plugins enable promote
```
## Configuration
Add credentials to your OpenClaw config (`~/.openclaw/openclaw.json`) under `plugins.entries.promote.config`:
```json
{
"plugins": {
"entries": {
"promote": {
"enabled": true,
"config": {
"medium": { "token": "..." },
"devto": { "apiKey": "..." },
"bluesky": { "handle": "you.bsky.social", "appPassword": "..." }
}
}
}
}
}
```
Only configure the channels you want to use. Unconfigured channels will show a helpful setup message when invoked.
## Channel setup
### Medium
1. Go to [Medium Settings](https://medium.com/me/settings/security) → Integration tokens
2. Generate a new token
3. Add to config:
```json
"medium": { "token": "your-integration-token" }
```
### Dev.to
1. Go to [Dev.to Settings](https://dev.to/settings/extensions) → DEV Community API Keys
2. Generate a new key
3. Add to config:
```json
"devto": { "apiKey": "your-api-key" }
```
### Hashnode
1. Go to [Hashnode Settings](https://hashnode.com/settings/developer) → Personal Access Tokens
2. Generate a token with `publishPost` permission
3. Find your publication ID in your blog dashboard URL
4. Add to config:
```json
"hashnode": { "token": "your-token", "publicationId": "your-pub-id" }
```
### Reddit
1. Go to [Reddit App Preferences](https://www.reddit.com/prefs/apps)
2. Create a **script** type app
3. Note the client ID (under the app name) and secret
4. Add to config:
```json
"reddit": {
"clientId": "your-client-id",
"clientSecret": "your-client-secret",
"username": "your-reddit-username",
"password": "your-reddit-password"
}
```
### Twitter/X
1. Go to [Twitter Developer Portal](https://developer.twitter.com/en/portal/dashboard)
2. Create a project and app with **Read and Write** permissions
3. Generate OAuth 1.0a consumer keys and access tokens
4. Add to config:
```json
"twitter": {
"apiKey": "consumer-key",
"apiSecret": "consumer-secret",
"accessToken": "access-token",
"accessSecret": "access-token-secret"
}
```
### Bluesky
1. Go to [Bluesky App Passwords](https://bsky.app/settings/app-passwords)
2. Create a new app password
3. Add to config:
```json
"bluesky": {
"handle": "yourhandle.bsky.social",
"appPassword": "your-app-password"
}
```
For self-hosted PDS, add `"serviceUrl": "https://your-pds.example.com"`.
### Mastodon
1. Go to your instance's **Preferences → Development → New Application**
2. Grant `write:statuses` scope
3. Copy the access token
4. Add to config:
```json
"mastodon": {
"instanceUrl": "https://mastodon.social",
"token": "your-access-token"
}
```
### LinkedIn
1. Create an app at [LinkedIn Developers](https://www.linkedin.com/developers/apps)
2. Request the `w_member_social` scope
3. Generate an OAuth2 access token (use the OAuth 2.0 tools in the developer portal)
4. Find your person URN via `GET https://api.linkedin.com/v2/userinfo` with your token
5. Add to config:
```json
"linkedin": {
"token": "your-oauth2-token",
"personUrn": "urn:li:person:your-id"
}
```
### Hacker News
No configuration needed. The tool formats your content for manual submission at https://news.ycombinator.com/submit.
### Product Hunt
No configuration needed. The tool prepares your launch materials with tips and best practices.
## Usage
Once configured, just tell your OpenClaw agent what to promote:
```
> promote byoky on all channels
> post about the new release on twitter and bluesky
> write a dev.to article about how byoky works
> prepare a hacker news submission for byoky
> draft a linkedin post about our latest feature
```
The agent will generate platform-appropriate content and publish (or prepare) it for each channel.
## Development
```bash
pnpm install
pnpm build
pnpm dev # watch mode
pnpm typecheck
```
## License
MIT
channels
Comments
Sign in to leave a comment