The Problem
- Manual posting is time-intensive and inconsistent.
- Human-only workflows often miss engagement windows.
- High-volume timeline scanning is hard to maintain.
Autonomous Social Agent
A Python-based autonomous Twitter/X bot that reads, reasons, generates, evaluates, and posts with scheduler automation, memory-backed deduplication, and live observability.
APScheduler
Posting • Reading • Notifications • Replies • Inspiration
Selenium + undetected-chromedriver + stealth
Generation, validation, reading, and notifications workflows
OpenRouter • OpenAI • Google • Anthropic
Embedding cache + duplicate detection (0.85)
JSON runtime state + SQLite analytics
Jinja2 + HTMX + Chart.js + live settings reload
Extract frontpage posts from X via Selenium.
Score relevance against configured personality topics.
Store matching posts in the inspiration queue.
Create inspired tweet candidates from queued context.
Run re-evaluation and duplicate detection checks.
Publish approved content and persist state/analytics.
Roadmap-driven status summary.
Near-term first, then post-MVP enhancements from ROADMAP.md.
Per-day post and reply caps with UTC reset logic to reduce risk and enforce operational boundaries.
Embedding-based similarity checks in ChromaDB (configured threshold 0.85) block repeated content.
Structured logging, scheduler guardrails, and stateful queues keep automation observable and predictable.
FastAPI + Jinja2 + HTMX dashboard for live visibility and control.
Status, activity stats, rate-limit progress.
Read, written, rejected, and interested queues.
Hourly token graph and provider usage breakdown.
Live YAML updates with runtime config reload support.
Real-time log view for operations and diagnostics.
Interactive generation workflow in the web interface.
| Layer | Technology |
|---|---|
| Language | Python 3.13+ |
| AI Orchestration | LangChain + LangGraph |
| LLM Providers | OpenRouter, OpenAI, Google, Anthropic |
| Browser Automation | Selenium + undetected-chromedriver + selenium-stealth |
| Scheduler | APScheduler |
| Memory | ChromaDB |
| State and Analytics | JSON state + SQLite (aiosqlite) |
| Web | FastAPI + Jinja2 + HTMX + Chart.js |
Exact commands from README.md.
Set TWITTER_USERNAME, TWITTER_PASSWORD, and at least one LLM API key.
uv sync
cp config/env.template .env
uv run python main.py
uv run python -m src.web.app
uv run pytest
Dashboard URL: http://localhost:8000