Self-hosted AI agent ยท macOS ยท MIT

Your social presence
on autopilot.
You stay in control.

socialagent.cc aggregates X and LinkedIn into one AI-scored feed, drafts replies in your voice, and scouts prospects โ€” all running on your Mac with your real browser session. No API keys. No subscriptions. Nothing ever posts without your approval.

socialagent.local/feed
socialagent.cc feed view โ€” AI-classified posts from X and LinkedIn

What it does

Everything you need.
Nothing you don't.

๐Ÿ”‘

Rides your real browser session

Playwright logs into X and LinkedIn as you โ€” your followed accounts, your cookies, your feed. No API keys, no developer app approvals, no rate limits from a bot account. Your session, your data.

๐Ÿ“ก

One scored feed, zero doomscrolling

Every post gets AI-classified and scored. Open the PWA on your phone and see the signal, not the noise. Add it to your iPhone home screen and it feels like a native app.

โœ‹

Drafts replies. Never sends them.

When a post scores โ‰ฅ8, the agent drafts a reply in your voice โ€” from a config file you control. Every draft sits in a queue waiting for your approval. pnpm execute-approved is the only gate. Intentionally manual.

๐ŸŽฏ

Scouts prospects while you sleep

Describe your ideal customer or collaborator in a markdown file. The agent scans high-signal authors from your feed and builds a prospect list with a one-line reason why they matched.


Draft queue

Review and approve.
Nothing ships otherwise.

The drafts view shows every AI-generated reply, with the original post context, a relevance score, and the agent's reasoning. Edit the text, discard what doesn't land, approve what does.

When you're ready to send, run pnpm execute-approved on your Mac. That command is the only gate between the AI and the outside world.

socialagent.local/drafts
socialagent.cc drafts view โ€” AI-drafted replies awaiting human approval

Installation

Ships as a
macOS daemon

1
Install and log in once

Clone the repo, install deps, then open a headed browser to log into X and LinkedIn. Playwright saves the session to a persistent profile. You never type your password into the agent again.

2
Two LaunchAgents, zero config

bash launchd/install.sh --apply drops two LaunchAgents into ~/Library/LaunchAgents/. The scraper wakes every 3h to pull your feed. The Astro web server stays live. Tailscale Serve or bundled Caddy handles HTTPS automatically.

3
Review drafts on your phone

Open the PWA on iOS Safari and tap "Add to Home Screen." Scroll the scored feed, review drafts, approve what you want. Run pnpm execute-approved when you're ready to send.

# 1. Install and build $ pnpm install $ pnpm exec playwright install chromium $ pnpm -r build # 2. Log in once (headed browser) $ node scripts/login-x.mjs $ node scripts/login-linkedin.mjs # 3. Install LaunchAgents (dry-run, then apply) $ bash launchd/install.sh $ bash launchd/install.sh --apply # Auto-detects Tailscale Serve or bundled Caddy. # Open the reported URL in iOS Safari โ†’ "Add to Home Screen"
macOS LaunchAgents Tailscale Serve SQLite ยท no cloud PWA ยท iPhone ready

Open Source ยท MIT

It's yours to run,
read, and fork.

The entire agent โ€” scraper, classifier, drafter, prospect scout, and PWA โ€” is ~2,000 lines of TypeScript you can read in an afternoon. No telemetry, no cloud account, no vendor lock-in. SQLite on your own machine. If you want a feature, open a PR.