← Back to Plugins
Channels

Promote

MichaelLod By MichaelLod 👁 14 views ▲ 0 votes

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

GitHub

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

Loading comments...