AI-powered multi-platform social media content generation and publishing automation.
PostAll is a complete content automation pipeline that generates platform-optimized posts from your brand guidelines and content strategy, reviews them with AI quality control, and publishes across multiple social platforms.
See the Telegram Bot in action:
Click to watch the demo video
PostAll is designed for AI agent automation. Use our Agent CLI or integrate via skill files.
A dedicated command-line interface for AI agents with JSON output:
# Install
pip install postall-agent
# Generate content for multiple platforms
postall-agent generate --topic "AI is changing how we work" --platforms twitter,linkedin,wechat,xhs
# Output (all commands return JSON)
{
"success": true,
"draft_id": "abc123",
"contents": {
"twitter": {"thread": ["Tweet 1...", "Tweet 2...", "Tweet 3..."]},
"linkedin": {"post": "Professional content..."},
"wechat": {"title": "ๆ ้ข", "article": "ๅ
ฌไผๅทๆ็ซ ..."},
"xhs": {"title": "ๅฐ็บขไนฆๆ ้ข", "content": "็ฌ่ฎฐๅ
ๅฎน...", "tags": ["AI", "ๆ็"]}
},
"image_prompt": "A futuristic workspace..."
}
# Generate cover image
postall-agent image --draft abc123
# Publish to platforms
postall-agent publish --draft abc123 --platforms twitter,linkedin
# List drafts
postall-agent list --status draftSee postall-agent/README.md for full documentation.
For AI agents that prefer HTTP-based discovery:
| File | URL | Description |
|---|---|---|
| SKILL.md | https://postall.live/skill.md |
Full integration guide for AI agents |
| skill.json | https://postall.live/skill.json |
Machine-readable metadata |
# Your AI agent can fetch and read these files directly
curl https://postall.live/skill.md
curl https://postall.live/skill.json



- ๐ค AI Content Generation - Powered by Claude, GPT-4, and Gemini
- ๐ฏ Director Review System - AI quality control with per-issue actionable fixes (location + original text + suggested replacement, not just a score)
- ๐ Timeliness Context - Auto-detects when content references go stale and keeps generated content using current AI tooling vocabulary
- ๐ฑ Multi-Platform Publishing - Twitter/X, LinkedIn, Instagram, Pinterest, Threads, Xiaohongshu
- ๐จ Image Generation - Auto-generate matching visuals with AI (Gemini with retry/backoff)
- ๐ Content Strategy - Define pillars, themes, and maintain balanced content mix
- ๐ RLHF Learning - System improves from your feedback over time
- โฐ Smart Scheduling - Optimal posting times per platform
- ๐ Daemon Mode - Run continuously with auto-generation and publishing
- ๐ก๏ธ Production Safety - Rate limiting, atomic publish claims, crash recovery, and 12-hour sliding window prevent surprise group-publishes after daemon restarts
- Python 3.9+
- Docker (optional, recommended)
- API keys for AI providers (Anthropic, OpenAI, or Google)
git clone https://github.com/qingxuantang/postall.git
cd postall
# Copy environment template
cp .env.example .env
# Edit .env with your API keys
# Start with Docker
docker-compose up -dgit clone https://github.com/qingxuantang/postall.git
cd postall
# Install dependencies
pip install -e .
# Copy environment template
cp .env.example .env
# Edit .env with your API keys
# Run
python -m postall.cli --project projects/example/project.yaml daemon- Set up API keys in
.env:
ANTHROPIC_API_KEY=your_key_here
# or
OPENAI_API_KEY=your_key_here
# or
GEMINI_API_KEY=your_key_here- Configure your brand in
projects/example/project.yaml:
project_name: "My Brand"
brand:
name: "My Brand"
tagline: "Your Tagline"
voice:
tone: "professional yet friendly"
characteristics:
- "clear and concise"
- "helpful and educational"
avoid:
- "aggressive sales language"
- "technical jargon"
platforms:
twitter:
enabled: true
linkedin:
enabled: true- Run content generation:
# Generate content
python -m postall.cli generate --project projects/example/project.yaml
# Or run as daemon (auto generate + publish)
python -m postall.cli daemon --project projects/example/project.yamlpostall/
โโโ postall/ # Core library
โ โโโ cli.py # Command-line interface
โ โโโ config.py # Configuration management
โ โโโ cloud/ # Cloud services
โ โ โโโ daemon.py # Background daemon
โ โ โโโ generation_controller.py # AI content generation
โ โ โโโ telegram_bot.py # Telegram bot interface
โ โ โโโ notifier.py # Notifications
โ โโโ director/ # AI review system
โ โ โโโ director.py # Quality control
โ โโโ executors/ # AI model executors
โ โ โโโ claude_api_executor.py
โ โ โโโ gemini_api_executor.py
โ โ โโโ gemini_image_executor.py
โ โโโ publishers/ # Platform publishers
โ โ โโโ twitter_publisher.py
โ โ โโโ linkedin_publisher.py
โ โ โโโ instagram_publisher.py
โ โ โโโ pinterest_publisher.py
โ โ โโโ threads_publisher.py
โ โ โโโ xhs_publisher.py # Xiaohongshu
โ โโโ generators/ # Content generators
โ โ โโโ xhs_cards.py # Xiaohongshu cards
โ โโโ learning/ # RLHF system
โ โ โโโ feedback_collector.py
โ โ โโโ rlhf_manager.py
โ โ โโโ rule_library.py
โ โโโ theory_framework/ # Content frameworks
โ โโโ hook_types.py
โ โโโ psychology_triggers.py
โ โโโ viral_scorer.py
โโโ projects/
โ โโโ example/ # Example project
โ โโโ project.yaml # Brand & strategy config
โ โโโ output/ # Generated content
โ โโโ database/ # Persistent data
โโโ docs/ # Landing page
โโโ docker-compose.yml
โโโ Dockerfile
โโโ .env.example
Define your brand identity in project.yaml:
brand:
name: "Your Brand"
tagline: "Your Tagline"
website: "yourbrand.com"
# Color palette (for image generation)
colors:
primary: "#3498DB"
secondary: "#2ECC71"
accent: "#E74C3C"
# Voice guidelines
voice:
tone: "professional yet friendly"
characteristics:
- "clear and concise"
- "helpful and educational"
- "trustworthy and authentic"
avoid:
- "aggressive sales language"
- "overpromising or hype"
- "technical jargon"
- "clichรฉs and buzzwords"Configure content pillars and distribution:
content_strategy:
# Pillar distribution (must total 100%)
pillars:
product_education: 35 # Teaching about your product
industry_insights: 25 # Industry trends and news
tips_productivity: 20 # Tips and how-tos
customer_stories: 10 # Success stories
behind_scenes: 5 # Company culture
lead_magnet: 5 # Free resources
# Content themes
themes:
- "Getting Started"
- "Best Practices"
- "Common Mistakes"
- "Success Stories"
# Platform-specific hashtags
hashtags:
twitter:
- "#YourBrand"
- "#YourIndustry"
linkedin:
- "#Professional"
- "#BusinessGrowth"Configure each platform:
platforms:
twitter:
enabled: true
language: "en"
linkedin:
enabled: true
language: "en"
instagram:
enabled: false # Requires Meta Business setup
pinterest:
enabled: false
threads:
enabled: falseSet optimal posting times:
timezone: "America/Los_Angeles"
generation_schedule:
day: "saturday" # When to generate weekly content
time: "09:00"
posting_times:
twitter: ["08:00", "12:00", "18:00"]
linkedin: ["07:30", "12:00"]
instagram: ["08:00", "17:00"]# Generate content for all platforms
python -m postall.cli generate --project project.yaml
# Generate for specific platform
python -m postall.cli generate --project project.yaml --platform twitter
# Generate with specific AI model
python -m postall.cli generate --project project.yaml --model claude
# Publish pending content
python -m postall.cli publish --project project.yaml
# Run as daemon (continuous operation)
python -m postall.cli daemon --project project.yaml
# Review generated content
python -m postall.cli review --project project.yaml
# Check system status
python -m postall.cli status --project project.yamlโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ Brand Config โโโโโโถโ AI Generation โโโโโโถโ Director Review โ
โ (project.yaml) โ โ (Claude/GPT) โ โ (Quality Check)โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ Publishing โโโโโโโ Human Review โโโโโโโ Content Ready โ
โ (Platforms) โ โ (Optional) โ โ (Approved) โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ RLHF Learning โ
โ (Improvement) โ
โโโโโโโโโโโโโโโโโโโ
The Director is a second AI that reviews generated content for:
- Brand Alignment - Does it match your voice and tone?
- Quality Standards - Is it well-written and engaging?
- Platform Fit - Is it optimized for the target platform?
- Factual Accuracy - No fabricated statistics or claims
- Fabricated Testimonials - Detects invented user stories (named characters, fake quotes) without source material and rejects them outright
- Compliance - No problematic content
For each deduction, the Director outputs a structured ReviewIssue with:
dimensionโ which scoring axis was hitdeductionโ how many points lostlocationโ where in the content (e.g. "็ฌฌ2ๆฎต", "opening line")original_textโ the exact problematic snippetsuggestionโ the specific replacement text
Example:
{
"dimension": "factual_accuracy",
"deduction": -0.3,
"location": "็ฌฌ2ๆฎต",
"original_text": "ๅ
จ็AIๆฐๆฎไธญๅฟ่็ต้ๆไธ็็ฌฌๅ",
"suggestion": "ๆฎBloombergNEFๆฐๆฎ๏ผๅ
จ็AIๆฐๆฎไธญๅฟ่็ต้ๅทฒ่ทป่บซๅ
จ็็ฌฌๅ"
}This turns review into a copy-paste editing workflow instead of a "go figure out what to fix" loop.
Generated content can quickly age โ references to "the new GPT-4 release" or "the latest from OpenAI" get stale fast. PostAll's timeliness module:
- Maintains a curated list of currently-hot AI tools, current-year trends, and outdated references
- On each generation cycle, fetches the Hacker News front page and auto-detects new tools mentioned
- Known tools are auto-added to
current_hot_tools; unknown ones flag for human confirmation - Injects the up-to-date list into generation prompts so produced content uses current tooling vocabulary
The publish daemon includes safeguards that matter the moment you run it on a real server:
- Rate limit โ caps at
PUBLISH_RATE_LIMITposts perPUBLISH_RATE_WINDOW_HOURS(defaults: 3 per 2h). A daemon restart that finds a large queue won't drain it in one burst (which social platforms flag as bot behavior) - 12-hour sliding window โ anything scheduled more than 12h in the past is considered abandoned and never auto-published; manually rescheduling is the explicit path
- Atomic publish claims โ
claim_post_for_publishingatomically transitionsscheduled โ publishingbefore the publisher call; concurrent loop iterations or daemon instances can't both publish the same post - Crash recovery on startup โ rows stuck in
publishingfrom a SIGKILL / OOM are markedfailed(notscheduled), preventing accidental re-publish on next restart - Pre-filter unconfigured platforms โ don't waste rate-limit quota on platforms you haven't set up
These are belt-and-suspenders: each one alone would help, but together they make daemon restarts safe even with a dirty queue.
The system learns from your feedback:
- Rate Content - Mark posts as good, bad, or needs improvement
- Custom Feedback - Provide specific notes on what to change
- Auto-Learning - System adjusts future generations based on patterns
| Platform | Publishing | Image Support | Notes |
|---|---|---|---|
| Twitter/X | โ | โ | Threads supported |
| โ | โ | Personal & Company pages | |
| โ | โ | Requires Meta Business | |
| โ | โ | Pin creation | |
| Threads | โ | โ | Meta Threads API |
| Xiaohongshu | โ | โ | Card generation + publishing |
# AI Providers (at least one required)
ANTHROPIC_API_KEY= # Claude API
OPENAI_API_KEY= # GPT-4 API
GEMINI_API_KEY= # Gemini API
# Twitter/X
TWITTER_ENABLED=true
TWITTER_API_KEY=
TWITTER_API_SECRET=
TWITTER_ACCESS_TOKEN=
TWITTER_ACCESS_SECRET=
# LinkedIn
LINKEDIN_ENABLED=true
LINKEDIN_ACCESS_TOKEN=
LINKEDIN_CLIENT_ID=
LINKEDIN_CLIENT_SECRET=
LINKEDIN_PERSON_URN=
# Instagram (Meta)
INSTAGRAM_ENABLED=false
INSTAGRAM_ACCESS_TOKEN=
INSTAGRAM_BUSINESS_ACCOUNT_ID=
# Pinterest
PINTEREST_ENABLED=false
PINTEREST_ACCESS_TOKEN=
# Telegram Bot (optional, for notifications)
TELEGRAM_BOT_ENABLED=false
TELEGRAM_BOT_TOKEN=
TELEGRAM_CHAT_ID=# Clone repository
git clone https://github.com/qingxuantang/postall.git
cd postall
# Create virtual environment
python -m venv venv
source venv/bin/activate # or `venv\Scripts\activate` on Windows
# Install in development mode
pip install -e ".[dev]"
# Run tests
pytest
# Format code
black postall/Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Platform API Setup Guide - How to get API credentials for each platform
- ๅนณๅฐ API ่ฎพ็ฝฎๆๅ - ๅฆไฝ่ทๅๅๅนณๅฐ API ๅญ่ฏ๏ผไธญๆ๏ผ
This project is licensed under the MIT License - see the LICENSE file for details.
Built with:
- Anthropic Claude - Primary AI engine
- Google Gemini - Image generation
- OpenAI - Alternative AI provider
Website: postall.live
Questions? Open an issue or start a discussion!

