postall

star 11

AI-powered multi-platform social media content generation and publishing automation. Generate, review, and publish content across Twitter, LinkedIn, Instagram, Pinterest, Threads, and Xiaohongshu.

qingxuantang By qingxuantang schedule Updated 6/11/2026

name: postall version: 1.0.0 description: AI-powered multi-platform social media content generation and publishing automation. Generate, review, and publish content across Twitter, LinkedIn, Instagram, Pinterest, Threads, and Xiaohongshu. homepage: https://postall.live repository: https://github.com/qingxuantang/postall metadata: emoji: "๐Ÿ“ฎ" category: "content-automation" platforms: ["twitter", "linkedin", "instagram", "pinterest", "threads", "xiaohongshu", "wechat"] ai_providers: ["anthropic", "openai", "google"]

PostAll - AI Agent Integration

AI-powered multi-platform content automation. Generate, review, and publish across all social platforms from a single configuration.

Skill Files

File URL
SKILL.md (this file) https://postall.live/skill.md
skill.json (metadata) https://postall.live/skill.json

Quick install for agents:

curl -s https://postall.live/skill.md > ~/.postall/SKILL.md
curl -s https://postall.live/skill.json > ~/.postall/skill.json

What PostAll Does

  1. Content Generation - AI creates platform-optimized posts from your brand guidelines
  2. Director Review - Second AI reviews for quality, brand alignment, factual accuracy
  3. Image Generation - Auto-generate matching visuals with correct dimensions per platform
  4. Multi-Platform Publishing - Publish to Twitter, LinkedIn, Instagram, Pinterest, Threads, Xiaohongshu
  5. RLHF Learning - System improves from feedback over time
  6. Scheduling - Optimal posting times per platform

Quick Start

Option 1: Docker (Recommended)

# Clone and setup
git clone https://github.com/qingxuantang/postall.git
cd postall
cp .env.example .env

# Configure API keys in .env
# ANTHROPIC_API_KEY=your_key (or OPENAI_API_KEY or GEMINI_API_KEY)

# Start
docker-compose up -d

Option 2: Local Installation

git clone https://github.com/qingxuantang/postall.git
cd postall
pip install -e .
cp .env.example .env
# Edit .env with your API keys

Core CLI Commands

All commands use the format: python -m postall.cli <command> --project <path/to/project.yaml>

Generate Content

# Generate content for all platforms
python -m postall.cli generate --project projects/example/project.yaml

# Generate for specific platform
python -m postall.cli generate --project projects/example/project.yaml --platform twitter

# Generate with specific AI model
python -m postall.cli generate --project projects/example/project.yaml --model claude

Publish Content

# Publish all pending content
python -m postall.cli publish --project projects/example/project.yaml

# Publish to specific platform
python -m postall.cli publish --project projects/example/project.yaml --platform linkedin

Run as Daemon

# Continuous operation - auto generate and publish
python -m postall.cli daemon --project projects/example/project.yaml

Check Status

# View system status
python -m postall.cli status --project projects/example/project.yaml

# Review generated content
python -m postall.cli review --project projects/example/project.yaml

Docker Commands

# Start PostAll
docker-compose up -d

# View logs
docker-compose logs -f postall

# Stop
docker-compose down

# Restart
docker-compose restart

# Execute CLI inside container
docker exec postall python -m postall.cli status --project /app/projects/example/project.yaml

Telegram Bot Integration

PostAll includes a Telegram bot for monitoring and control. Each project gets its own bot.

Bot Commands (in Telegram)

Command Description
/start Initialize the bot
/status View current system status
/upcoming Posts scheduled for next 24 hours
/schedule Today's posting schedule
/stats Recent publishing statistics
/generate Trigger content generation for next week
/publish Manually trigger publishing
/help Show all commands

Bot Menu Buttons

  • Upcoming - View posts in the next 24 hours
  • Schedule - Today's scheduled posts
  • Stats - Publishing statistics by platform
  • Content Status - Next week's content status
  • Generate - Start content generation

Setting Up Telegram Bot

  1. Create a bot via @BotFather
  2. Get your bot token
  3. Add to .env:
    TELEGRAM_BOT_ENABLED=true
    TELEGRAM_BOT_TOKEN=your_bot_token
    TELEGRAM_CHAT_ID=your_chat_id
    

Project Configuration

Create a project.yaml file to define your brand and content strategy:

project_name: "My Brand"

brand:
  name: "My Brand"
  tagline: "Your Tagline"
  website: "mybrand.com"
  
  colors:
    primary: "#3498DB"
    secondary: "#2ECC71"
    accent: "#E74C3C"
  
  voice:
    tone: "professional yet friendly"
    characteristics:
      - "clear and concise"
      - "helpful and educational"
      - "trustworthy and authentic"
    avoid:
      - "aggressive sales language"
      - "overpromising or hype"
      - "technical jargon"

content_strategy:
  pillars:
    product_education: 35
    industry_insights: 25
    tips_productivity: 20
    customer_stories: 10
    behind_scenes: 5
    lead_magnet: 5
  
  themes:
    - "Getting Started"
    - "Best Practices"
    - "Common Mistakes"
    - "Success Stories"

platforms:
  twitter:
    enabled: true
    language: "en"
  linkedin:
    enabled: true
    language: "en"
  instagram:
    enabled: false
  pinterest:
    enabled: false

timezone: "America/Los_Angeles"

generation_schedule:
  day: "saturday"
  time: "09:00"

posting_times:
  twitter: ["08:00", "12:00", "18:00"]
  linkedin: ["07:30", "12:00"]

Environment Variables

# 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
TELEGRAM_BOT_ENABLED=false
TELEGRAM_BOT_TOKEN=
TELEGRAM_CHAT_ID=

Content Generation Flow

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Brand Config   โ”‚โ”€โ”€โ”€โ”€โ–ถโ”‚  AI Generation  โ”‚โ”€โ”€โ”€โ”€โ–ถโ”‚ Director Review โ”‚
โ”‚ (project.yaml)  โ”‚     โ”‚ (Claude/GPT/    โ”‚     โ”‚ (Quality Check) โ”‚
โ”‚                 โ”‚     โ”‚  Gemini)        โ”‚     โ”‚                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                                         โ”‚
                                                         โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   Publishing    โ”‚โ—€โ”€โ”€โ”€โ”€โ”‚  Human Review   โ”‚โ—€โ”€โ”€โ”€โ”€โ”‚ Content Ready   โ”‚
โ”‚  (Platforms)    โ”‚     โ”‚   (Optional)    โ”‚     โ”‚   (Approved)    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                 โ”‚
                                 โ–ผ
                        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                        โ”‚  RLHF Learning  โ”‚
                        โ”‚  (Improvement)  โ”‚
                        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Director Review System

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
  • Compliance - No problematic content

Posts receive a score. Low-scoring posts can be regenerated automatically.


Supported Platforms

Platform Publishing Image Support Notes
Twitter/X โœ… โœ… Threads supported
LinkedIn โœ… โœ… Personal & Company pages
Instagram โœ… โœ… Requires Meta Business
Pinterest โœ… โœ… Pin creation
Threads โœ… โœ… Meta Threads API
Xiaohongshu โœ… โœ… Card generation + publishing
WeChat โœ… โœ… Article publishing

Image Generation

PostAll automatically generates images optimized for each platform:

  • Twitter: 1200x675 (16:9)
  • LinkedIn: 1200x627 (1.91:1)
  • Instagram: 1080x1080 (1:1)
  • Pinterest: 1000x1500 (2:3)

Recommended: Use Gemini Pro for image generation (best quality).


RLHF Learning

The system learns from your feedback:

  1. Rate Content - Mark posts as good, bad, or needs improvement
  2. Custom Feedback - Provide specific notes on what to change
  3. Auto-Learning - System adjusts future generations based on patterns

Agent Integration Patterns

Pattern 1: Scheduled Generation

Set up weekly content generation with auto-publish:

# In your agent's scheduled tasks
import subprocess

def weekly_content_generation():
    # Generate content
    subprocess.run([
        "python", "-m", "postall.cli", "generate",
        "--project", "projects/mybrand/project.yaml"
    ])
    
    # Publish approved content
    subprocess.run([
        "python", "-m", "postall.cli", "publish", 
        "--project", "projects/mybrand/project.yaml"
    ])

Pattern 2: On-Demand Generation

Generate content when triggered by your agent:

# Generate a single post for a specific topic
python -m postall.cli generate \
  --project projects/mybrand/project.yaml \
  --topic "New product feature announcement" \
  --platform twitter

Pattern 3: Monitor via Telegram

Let your agent receive status updates via Telegram bot, then take action based on results.


File Structure

postall/
โ”œโ”€โ”€ postall/                    # Core library
โ”‚   โ”œโ”€โ”€ cli.py                  # Command-line interface
โ”‚   โ”œโ”€โ”€ config.py               # Configuration management
โ”‚   โ”œโ”€โ”€ cloud/                  # Cloud services
โ”‚   โ”‚   โ”œโ”€โ”€ daemon.py           # Background daemon
โ”‚   โ”‚   โ”œโ”€โ”€ generation_controller.py
โ”‚   โ”‚   โ””โ”€โ”€ telegram_bot.py
โ”‚   โ”œโ”€โ”€ director/               # AI review system
โ”‚   โ”‚   โ””โ”€โ”€ director.py
โ”‚   โ”œโ”€โ”€ 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
โ”‚   โ”‚   โ””โ”€โ”€ xhs_publisher.py
โ”‚   โ””โ”€โ”€ learning/               # RLHF system
โ”‚       โ”œโ”€โ”€ feedback_collector.py
โ”‚       โ””โ”€โ”€ rlhf_manager.py
โ”œโ”€โ”€ projects/
โ”‚   โ””โ”€โ”€ example/                # Example project
โ”‚       โ”œโ”€โ”€ project.yaml
โ”‚       โ”œโ”€โ”€ output/             # Generated content
โ”‚       โ””โ”€โ”€ database/           # Persistent data
โ”œโ”€โ”€ docker-compose.yml
โ”œโ”€โ”€ Dockerfile
โ””โ”€โ”€ .env.example

Critical Rules

When using PostAll, follow these rules to avoid common issues:

  1. NO parentheses in content - ๆ‹ฌๅทไผšๅฏผ่‡ด LinkedIn ๅ†…ๅฎน่ขซๆˆชๆ–ญ
  2. NO AI clichรฉs - ้ฟๅ…ใ€Œไน…ไน…ไธ่ƒฝๅนณ้™ใ€ใ€Œ้œ‡ๆ’ผไบ†ๆˆ‘ใ€ใ€Œ้ข ่ฆ†่ฎค็Ÿฅใ€็ญ‰็ฉบๆดž่กจ่พพ
  3. NO fabricated data - ๅชไฝฟ็”จๅŽŸๅง‹ๅ†…ๅฎนไธญ็š„็œŸๅฎžไฟกๆฏ๏ผŒไธ่ฆ็ผ–้€ ็ปŸ่ฎกๆ•ฐๆฎ
  4. Image prompts in English - AI ๅ›พๅƒ็”Ÿๆˆๅ™จๆ— ๆณ•ๆธฒๆŸ“ไธญๆ–‡ๅญ—็ฌฆ
  5. Image prompts must reference a concrete object or scene, not the abstract thesis - ้…ๅ›พๅฟ…้กปๅŸบไบŽไธ€ไธชๅ…ทไฝ“็‰ฉไปถๆˆ–ๅœบๆ™ฏ๏ผŒไธ่ฆ็”จๆ–‡็ซ ็š„ๆŠฝ่ฑก่ฎบ็‚นใ€‚ Models like Gemini produce generic geometric blocks or flowing color shapes when given abstract conceptual phrases like "components dissolving" or "intelligence augmentation." Read the post body, find one concrete thing it mentions โ€” a vintage radio with a TV camera pointed at it, a presentation slide with a score badge, a stack of old books, a key, a bridge โ€” and use that as the image hero element. The abstract thesis is conveyed through the literal scene, not through the prompt language. โ€” ๆจกๅž‹ๅฏนๆŠฝ่ฑกๆฆ‚ๅฟต่ฏ๏ผˆไพ‹ๅฆ‚ใ€Œ็ป„ไปถๆญฃๅœจๆถˆ่งฃใ€ใ€ŒAI ้‡ๅก‘ๅทฅ็จ‹ๅธˆ่ง’่‰ฒใ€๏ผ‰ๅ‡บๅ›พ้ƒฝๆ˜ฏๅ‡ ไฝ• blocks ๆˆ–ๆตๅŠจ่‰ฒๅ—๏ผŒๆฒกๆœ‰่ง†่ง‰่ฎฐๅฟ†็‚นใ€‚ๅฟ…้กปไปŽๆ–‡็ซ ้‡Œๆ‰พไธ€ไธชๅ…ทไฝ“็š„็‰ฉไปถๆˆ–ๅœบๆ™ฏ๏ผŒ็”จ้‚ฃไธชไฝœไธบ image ไธปไฝ“ใ€‚ๆŠฝ่ฑก่ฎบ็‚น้€š่ฟ‡ๅ…ทไฝ“ๅœบๆ™ฏ่ฎฉ่ฏป่€…่‡ชๅทฑๆ‚Ÿๅ‡บๆฅใ€‚
  6. Handle rate limits gracefully - ้‡ๅˆฐๅนณๅฐ้™ๅˆถๆ—ถ็ญ‰ๅพ…ๅŽ้‡่ฏ•
  7. *WeChat: use _content.md files - Content parser ๅฏ่ƒฝ้”™่ฏฏๅˆ†ๅ‰ฒๅ•็ฏ‡ๆ–‡็ซ ๏ผŒๅ‘ๅธƒๆ—ถๆฐธ่ฟœไฝฟ็”จๅฎŒๆ•ด็š„ *_content.md ๆ–‡ไปถ๏ผˆๅฆ‚ wechat_content.md๏ผ‰๏ผŒไธ่ฆไฝฟ็”จๅˆ†ๅ‰ฒๅŽ็š„ๅฐๆ–‡ไปถ๏ผˆๅฆ‚ 01_monday_morning_article.md๏ผ‰

Content File Structure

When content is generated, you'll see:

wechat-posts/
โ”œโ”€โ”€ wechat_content.md           # โœ… ๅฎŒๆ•ดๅ†…ๅฎน - ๅ‘ๅธƒๆ—ถ็”จ่ฟ™ไธช
โ”œโ”€โ”€ 01_monday_morning_article.md # โŒ ๅฏ่ƒฝ่ขซๆˆชๆ–ญ
โ”œโ”€โ”€ 02_tuesday_morning_post.md   # โŒ ๅฏ่ƒฝ่ขซๆˆชๆ–ญ
โ””โ”€โ”€ ...

Always publish using the *_content.md file, not the numbered split files.


Troubleshooting

Common Issues

Content not publishing:

# Check platform credentials
python -m postall.cli status --project project.yaml

# View detailed logs
docker-compose logs -f postall | grep ERROR

Rate limits:

  • Twitter: 1 post per platform per posting slot
  • LinkedIn: Respect 100 posts/day limit
  • Instagram: 25 posts/day limit

Image generation failing:

  • Ensure GEMINI_API_KEY is set
  • Check quota limits on Google AI Studio

Third-Party Integration Policy

PostAll's official docs do not recommend, endorse, or document third-party SaaS middlemen for any platform action โ€” content collection, posting, scheduling, scraping, authentication proxying, or anything that routes user credentials or content through an external service.

This includes but is not limited to: Twitter/X middleman APIs, "agent-friendly" social scrapers, hosted content-collection services, and any closed-source plugin that requires users to give a third party their platform credentials or session cookies.

Why this policy exists

  • A doc that says "install package X" is read by users as a tacit endorsement from the maintainers, even when the README disclaims it.
  • Third-party SaaS integrations introduce supply chain risk that PostAll cannot audit. Today's benign version is tomorrow's malicious release.
  • "Optional integration" PRs are increasingly generated by AI coding agents at scale and submitted to many OSS repos as a free marketing channel. See the codex/* PR pattern observed in 2026.
  • PostAll's value is in clean, auditable, first-party publisher implementations. Routing through a middleman defeats that.

What we accept instead

  • Users are free to integrate anything they want in their own project fork or downstream automation.
  • Third-party tool authors are free to publish their own README documenting how to use their package alongside PostAll. That belongs in the third-party's repo, not in PostAll's.
  • PRs that add a first-party publisher for a platform PostAll doesn't yet support are welcome โ€” code and config, not links to a hosted service.
  • PRs that add defensive controls against credential leakage, prompt injection, or supply-chain risk are welcome.

PRs we will close on sight

  • PRs that add install <third-party-package> / pip install <middleman> / npm install @vendor/x instructions to any official doc.
  • PRs that propose docs changes from a branch prefixed codex/, chatgpt-*, copilot-*, or other AI-agent autogeneration patterns when the substance is third-party promotion.
  • PRs whose validation checklist reads like a generic AI boilerplate (markdown-link-check, git diff --check, python -m compileall) and whose substantive change is one ad block repeated across multiple files.

We close these without merging, regardless of how defensively-framed the proposed text is. Defensive framing is a known social-engineering pattern.


Resources


License

MIT License - Free to use and modify.


Last updated: 2026-03-04

Install via CLI
npx skills add https://github.com/qingxuantang/postall --skill postall
Repository Details
star Stars 11
call_split Forks 4
navigation Branch main
article Path SKILL.md
More from Creator
qingxuantang
qingxuantang Explore all skills →