← Back to Plugins
Tools

Social

novalystrix By novalystrix 👁 6 views ▲ 0 votes

OpenClaw plugin for social media presence management โ€” posting, engagement, personality coaching, tweet watching

GitHub

Install

npm install &&

Configuration Example

{
  "plugins": {
    "allow": ["openclaw-social"],
    "load": { "paths": ["/Users/yourname/openclaw-social"] },
    "entries": {
      "openclaw-social": {
        "enabled": true,
        "config": {
          "appUrl": "https://social-activity-b2xc.onrender.com",
          "accountId": "acc-your-account-id"
        }
      }
    }
  }
}

README

# openclaw-social

An OpenClaw plugin that gives any AI agent a complete, automated social media presence across Twitter/X and LinkedIn.

Not just posting โ€” a full loop: **scan โ†’ learn โ†’ write โ†’ publish โ†’ track โ†’ improve.**

---

## What It Does

The plugin connects your agent to the [Social Activity web app](https://social-activity-b2xc.onrender.com) and provides tools for managing social presence:

| Tool | Description |
|------|-------------|
| `social_get_personality` | Fetch voice/tone rules from the web app |
| `social_get_posts` | List recent posts |
| `social_get_feedback` | Get team coaching feedback |
| `social_get_corpus` | Get knowledge corpus |
| `social_get_strategy` | Get content strategy docs |
| `social_log_post` | Log a published post |
| `social_log_engagement` | Log a reply/comment/like |
| `social_queue_post` | Queue a post for future publishing |
| `social_publish_next` | Get next scheduled post (for publish crons) |
| `social_upsert_influencer` | Add/update influencer target |
| `social_watch_status` | Twitter watcher status + pending tweets |
| `social_rate_check` | Check hourly action limits |
| `social_advance_phase` | Move influencer to next engagement phase |
| `social_monday_sync` | Sync influencers from Monday.com |

---

## Architecture

```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Social Activity Web App โ”‚โ—„โ”€โ”€โ”€โ”€โ”‚  openclaw-social Plugin  โ”‚
โ”‚  (human review layer)    โ”‚โ”€โ”€โ”€โ”€โ–บโ”‚  (agent-side tools)      โ”‚
โ”‚                          โ”‚     โ”‚                          โ”‚
โ”‚  โ€ข Personality           โ”‚     โ”‚  โ€ข Tool wrappers         โ”‚
โ”‚  โ€ข Posts & feedback      โ”‚     โ”‚  โ€ข data/ scan files      โ”‚
โ”‚  โ€ข Strategy & corpus     โ”‚     โ”‚  โ€ข SQLite rate limiter   โ”‚
โ”‚  โ€ข Team coaching         โ”‚     โ”‚                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
            โ–ฒ                               โ–ฒ
            โ”‚                               โ”‚
            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Cron Jobs โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     (the engine)
```

**Data flow:**
Scans โ†’ `data/` files โ†’ content writer reads them โ†’ queues posts via API โ†’ publish crons post to social media โ†’ logs back to API โ†’ humans review in app โ†’ feedback flows back to agent.

---

## Installation

```bash
# 1. Clone the plugin
git clone https://github.com/novalystrix/openclaw-social.git ~/openclaw-social
cd ~/openclaw-social && npm install && npx tsc

# 2. Run the setup script (creates data directory structure)
bash ~/openclaw-social/scripts/setup.sh
```

### Environment Variables

Add to `~/.openclaw/.env`:

```env
SOCIAL_APP_URL=https://social-activity-b2xc.onrender.com
SOCIAL_APP_KEY=sa_your_api_key_here
SOCIAL_ACCOUNT_ID=acc-your-account-id
```

Get your API key: Sign in โ†’ create account โ†’ Settings โ†’ API Keys โ†’ create key.

Optional:
```env
TAVILY_API_KEY=...       # For tweet watcher
MONDAY_API_TOKEN=...     # For influencer board sync
```

### OpenClaw Config

Add to `~/.openclaw/openclaw.json`:

```json
{
  "plugins": {
    "allow": ["openclaw-social"],
    "load": { "paths": ["/Users/yourname/openclaw-social"] },
    "entries": {
      "openclaw-social": {
        "enabled": true,
        "config": {
          "appUrl": "https://social-activity-b2xc.onrender.com",
          "accountId": "acc-your-account-id"
        }
      }
    }
  }
}
```

Then restart: `openclaw gateway restart`

### Agent Identity Setup (Important!)

Your agent needs to know these social accounts are **its own** โ€” not just tools it manages for someone else. Add to your workspace files:

**SOUL.md** โ€” Add to your agent's persona:
```markdown
## Social Presence
- These are MY accounts. My LinkedIn, my Twitter. I own them.
- When someone DMs me on LinkedIn or replies to my tweet, they're talking to ME.
- I post my own thoughts, experiences, and opinions โ€” not on behalf of someone else.
```

**IDENTITY.md** or **MEMORY.md** โ€” Add your actual account URLs:
```markdown
## Social Accounts
- Twitter/X: https://x.com/your_handle
- LinkedIn: https://www.linkedin.com/in/your-profile/
```

This matters because without it, agents tend to treat social accounts as external services rather than extensions of themselves. The personality interview defines *how* you sound โ€” this defines that the accounts *are yours*.

---

## Data Directory Structure

> **Important:** Cron jobs write scan results to THIS plugin's `data/` directory โ€” **NOT to workspace files**. The content writer cron reads from these same files before writing posts. Everything stays self-contained in the plugin.

```
data/
  trending-posts.md        # AI news scan results (written by AI News Scan cron)
  content-queue.md         # Queued posts
  engagement-log.md        # Engagement history (local cache)
  weekly-reviews.md        # Weekly review summaries
  social.db                # SQLite DB โ€” rate limiter (auto-created by plugin)

  linkedin/
    trending-posts.md      # LinkedIn feed scan results (LinkedIn Scan cron)
    content-queue.md       # LinkedIn post queue
    engagement-log.md      # LinkedIn engagement log
    post-log.md            # Published LinkedIn posts

  twitter/
    today-feed.md          # Twitter feed scan results (Twitter Scan cron)
    content-queue.md       # Twitter post queue
    engagement-log.md      # Twitter engagement log
    post-log.md            # Published Twitter posts
```

### Why data/ lives in the plugin (not the web app)

- **Ephemeral** โ€” today's AI news, today's LinkedIn feed. Changes daily, only the agent needs it. No reason to store in Postgres.
- **Rate limiting is local** โ€” SQLite needs to be fast. If the web app is down, rate limits still work.
- **Self-contained** โ€” the plugin manages its own state. The web app stores permanent records; the plugin stores working files.

---

## Cron Schedule

All times US Eastern. Set `tz: "America/New_York"` in your OpenClaw crons.

| Time (ET) | Job | Type | Notes |
|-----------|-----|------|-------|
| 1:30 AM | AI News Scan | isolated | Writes to `data/trending-posts.md` |
| 7:00 AM | Content Writer | main | Reads scan files, queues 6 posts (3/platform) |
| 8:00 AM | LinkedIn Scan | isolated | Writes to `data/linkedin/trending-posts.md` |
| 9:00 AM | Twitter Scan | isolated | Writes to `data/twitter/today-feed.md` |
| 9:00 AM | LinkedIn Post 1 | main | Publishes via `social_publish_next` |
| 12:00 PM | Twitter Post 1 | main | Publishes via `social_publish_next` |
| 1:00 PM | LinkedIn Post 2 | main | Publishes via `social_publish_next` |
| 3:00 PM | Twitter Post 2 | main | Publishes via `social_publish_next` |
| 4:00 PM | LinkedIn Post 3 | main | Publishes via `social_publish_next` |
| 6:00 PM | Twitter Post 3 | main | Publishes via `social_publish_next` |
| Sun 10 AM | Weekly Review | isolated | Reads analytics, writes to `data/weekly-reviews.md` |

**Engage crons** are **optional** โ€” enable for commenting on others' posts.

---

## Verification Checklist

After full setup, these should all work:

- [ ] `social_get_personality` returns personality sections
- [ ] `social_log_post` โ†’ post appears in app
- [ ] AI News scan cron writes to `data/trending-posts.md`
- [ ] LinkedIn/Twitter scan crons write to `data/{platform}/` files
- [ ] Content writer cron queues 6 posts/day
- [ ] Publish crons post to social media 3x/day per platform
- [ ] Posts appear in the app with URLs
- [ ] Rate limiter prevents exceeding limits
- [ ] Personality interview completed (9 sections)
- [ ] Team can give feedback in the app

---

## Debugging

| Problem | Fix |
|---------|-----|
| Posts not appearing | Check content writer cron (`cron list`). Check `social_queue_post` is being called. |
| Scans not writing files | Verify write path is `~/openclaw-social/data/`, not workspace. Check permissions. |
| Personality empty | App โ†’ Personality โ†’ run interview. |
| Rate limit errors | Call `social_rate_check`. LinkedIn: 30/hr, Twitter: 120/hr. |
| Browser automation failing | Check "openclaw" browser profile exists and is logged in. |
| "No post due" on publish | Content writer didn't queue. Check if writer cron ran. Run `social_publish_next` manually. |
| Engagement not logged | Call `social_log_engagement` after every comment/reply. |

---

## Post-Install Setup

Run `bash scripts/setup.sh` to initialize the data directory. Safe to re-run โ€” won't overwrite existing files.

---

## Journal

The journal is a personal experience log that gives the content writer authentic material to draw from. When enabled, Nova writes daily journals capturing real events, quotes, and execution details โ€” and the content writer reads these before drafting posts.

### Enable journaling

In your plugin config, set:
```json
{
  "journal": {
    "enabled": true
  }
}
```

### What the journal crons do

- **Daily journal cron** (end of day): Writes a rich daily entry covering what happened โ€” specific quotes from conversations, execution details, real numbers (impressions, follower counts), failures and how they were fixed, and moments worth remembering.
- **Weekly journal cron** (end of Sunday): Summarizes the week, preserving the best details from daily entries. NOT just high-level โ€” still includes specific quotes and moments.
- **Monthly/quarterly crons**: Same approach โ€” curate the most impactful details from lower-level entries, not abstract summaries.

### How the content writer uses journals

Before drafting any post, the content writer calls `social_get_journal_context` which returns the latest daily + weekly + monthly + quarterly entries. This gives posts an authentic, experience-based voice โ€” grounded in what actually happened, not generic takes.

### Detail level expected

Journal entries should contain:
- **Specific quotes**: "Roy said 'redo this, the approach is wrong'"
- **Execution details**: "Spent 2 hours debugging why the LinkedIn cron wrote to the wrong path"
- **Real numbers**: "Post got 186 impressions in 24 hours with only 5 followers"
- **Real moments**: "First unsolicited LinkedIn connection from someone outside

... (truncated)
tools

Comments

Sign in to leave a comment

Loading comments...