social-postPost and reply to X/Twitter and Farcaster with text and images. Features multi-account support, auto-variation to avoid duplicate content detection, draft preview, character validation, threads, replies, and image uploads. Consumption-based pricing for X API, pay-per-cast for Farcaster.
Install via ClawdBot CLI:
clawdbot install Callmedas69/social-postPost to Twitter and/or Farcaster with automatic character limit validation and image upload handling.
--vary flagRequired credentials (stored in /home/phan_harry/.openclaw/.env):
X_CONSUMER_KEY=your_consumer_key
X_CONSUMER_SECRET=your_consumer_secret
X_ACCESS_TOKEN=your_access_token
X_ACCESS_TOKEN_SECRET=your_access_token_secret
X_USERNAME=your_username
X_USER_ID=your_user_id
How to get credentials:
echo "X_CONSUMER_KEY=xxx" >> ~/.openclaw/.env
echo "X_CONSUMER_SECRET=xxx" >> ~/.openclaw/.env
echo "X_ACCESS_TOKEN=xxx" >> ~/.openclaw/.env
echo "X_ACCESS_TOKEN_SECRET=xxx" >> ~/.openclaw/.env
Test your credentials:
# Dry run (won't post)
scripts/post.sh --twitter --dry-run "Test message"
You can manage multiple Twitter accounts by adding additional credentials with custom prefixes.
Example: Adding a second account
# Add credentials with custom prefix (e.g., MYACCOUNT_)
echo "MYACCOUNT_API_KEY=xxx" >> ~/.openclaw/.env
echo "MYACCOUNT_API_KEY_SECRET=xxx" >> ~/.openclaw/.env
echo "MYACCOUNT_ACCESS_TOKEN=xxx" >> ~/.openclaw/.env
echo "MYACCOUNT_ACCESS_TOKEN_SECRET=xxx" >> ~/.openclaw/.env
Usage:
# Post from default account (X_*)
scripts/post.sh --twitter "Message from default account"
# Post from custom account
scripts/post.sh --account myaccount --twitter "Message from second account"
# Reply from custom account
scripts/reply.sh --account myaccount --twitter TWEET_ID "Reply from second account"
Naming convention:
X_CONSUMER_KEY, X_CONSUMER_SECRET, etc.{PREFIX}_API_KEY, {PREFIX}_API_KEY_SECRET, {PREFIX}_ACCESS_TOKEN, {PREFIX}_ACCESS_TOKEN_SECRET--account flagRequired credentials (stored in /home/phan_harry/.openclaw/farcaster-credentials.json):
{
"fid": "your_farcaster_id",
"custodyAddress": "0x...",
"custodyPrivateKey": "0x...",
"signerPublicKey": "0x...",
"signerPrivateKey": "0x...",
"createdAt": "2026-01-01T00:00:00.000Z"
}
How to get credentials:
# This will guide you through:
# - Creating a wallet
# - Registering FID
# - Adding signer key
# - Automatically saving credentials
# See: /skills/farcaster-agent/SKILL.md
# Check current balance
scripts/check-balance.sh
# Send USDC to custody address on Base chain
# Minimum: 0.1 USDC (~100 casts)
# Recommended: 1-5 USDC (1000-5000 casts)
# Check credentials exist
ls -la ~/.openclaw/farcaster-credentials.json
# Check wallet balance
scripts/check-balance.sh
# Test posting (dry run)
scripts/post.sh --farcaster --dry-run "Test message"
Security Notes:
.env file should have 600 permissions (read/write owner only)# Post to both platforms
scripts/post.sh "Your message here"
# Twitter only
scripts/post.sh --twitter "Your message"
# Farcaster only
scripts/post.sh --farcaster "Your message"
# Post to both platforms with image
scripts/post.sh --image /path/to/image.jpg "Your caption"
# Twitter only with image
scripts/post.sh --twitter --image /path/to/image.jpg "Caption"
# Farcaster only with image
scripts/post.sh --farcaster --image /path/to/image.jpg "Caption"
# Reply to a tweet
scripts/reply.sh --twitter TWEET_ID "Your reply"
# Reply with image
scripts/reply.sh --twitter TWEET_ID --image /path/to/image.jpg "Reply with image"
# Get tweet ID from URL: twitter.com/user/status/[TWEET_ID]
scripts/reply.sh --twitter 1234567890123456789 "Great point!"
# Reply to a cast
scripts/reply.sh --farcaster CAST_HASH "Your reply"
# Reply with image
scripts/reply.sh --farcaster 0xabcd1234... --image /path/to/image.jpg "Reply with image"
# Get cast hash from URL: farcaster.xyz/~/conversations/[HASH]
scripts/reply.sh --farcaster 0xa1b2c3d4e5f6... "Interesting perspective!"
# Reply to both (if you have corresponding IDs on both platforms)
scripts/reply.sh --twitter 123456 --farcaster 0xabcd... "Great discussion!"
post.sh (posting)--twitter - Post to Twitter only--farcaster - Post to Farcaster only--account - Twitter account to use (lowercase prefix from .env)--vary - Auto-vary text to avoid duplicate content detection--image - Attach image--thread - Split long text into numbered thread--shorten-links - Shorten URLs to save characters--truncate - Auto-truncate if over limit--dry-run - Preview without posting-y, --yes - Skip confirmation prompt (auto-confirm)reply.sh (replying)--twitter - Reply to Twitter tweet with this ID--farcaster - Reply to Farcaster cast with this hash--account - Twitter account to use (lowercase prefix from .env)--image - Attach image to reply--shorten-links - Shorten URLs to save characters--truncate - Auto-truncate if over limit--dry-run - Preview without replying-y, --yes - Skip confirmation prompt (auto-confirm)# Quick post to both (default account)
scripts/post.sh "gm! Building onchain š¦"
# Post from specific Twitter account
scripts/post.sh --account myaccount --twitter "Message from my second account"
# Auto-vary text to avoid duplicate content detection
scripts/post.sh --vary --twitter "Same text, subtle variations added automatically"
# Twitter announcement with image
scripts/post.sh --twitter --image ~/screenshot.png "New feature shipped! š"
# Farcaster only
scripts/post.sh --farcaster "Just published credential-manager to ClawHub!"
# Long text as thread (auto-numbered)
scripts/post.sh --thread "This is a very long announcement that exceeds the character limit. It will be automatically split into multiple numbered posts. Each part will be posted sequentially to create a thread. (1/3), (2/3), (3/3)"
# Shorten URLs to save characters
scripts/post.sh --shorten-links "Check out this amazing project: https://github.com/very-long-organization-name/very-long-repository-name"
# Combine thread + link shortening
scripts/post.sh --thread --shorten-links "Long text with multiple links that will be shortened and split into a thread if needed"
# Both platforms, auto-truncate long text
scripts/post.sh --truncate "Very long message that might exceed limits..."
# Preview without confirmation (for automated workflows)
scripts/post.sh --yes "Automated post from CI/CD"
# Reply to a Twitter thread
scripts/reply.sh --twitter 1234567890123456789 "Totally agree with this take! šÆ"
# Reply from specific Twitter account
scripts/reply.sh --account myaccount --twitter 1234567890 "Replying from my second account"
# Reply to Farcaster cast
scripts/reply.sh --farcaster 0xa1b2c3d4e5f6... "Great insight! Have you considered...?"
# Reply with shortened links
scripts/reply.sh --twitter 123456 --shorten-links "Here's more info: https://example.com/very-long-article-url"
# Reply with image
scripts/reply.sh --twitter 123456 --image ~/chart.png "Here's the data to support this"
# Reply to both platforms (same message)
scripts/reply.sh --twitter 123456 --farcaster 0xabc123 "This is exactly right šÆ"
# Quick reply without confirmation
scripts/reply.sh --twitter 123456 --yes "Quick acknowledgment"
# Dry run to preview reply
scripts/reply.sh --twitter 123456 --dry-run "Test reply preview"
The script now shows a draft preview before posting:
=== Draft Preview ===
Text to post:
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Your message here
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Targets:
⢠Twitter
⢠Farcaster
Proceed with posting? (y/n):
--yes flag to skip prompt--dry-run to preview without any posting.env (X_CONSUMER_KEY, X_CONSUMER_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET)/home/phan_harry/.openclaw/farcaster-credentials.jsoncurl, jqOfficial pricing: https://developer.twitter.com/#pricing
Critical: X API completely eliminated subscription tiers (Basic, Pro, etc.). The model is now purely pay-per-use - you are charged only for the API requests you actually make.
Each Farcaster cast costs 0.001 USDC (paid via x402 protocol):
0xA6a8736f18f383f1cc2d938576933E5eA7Df01A1Check balance:
# Quick check
scripts/check-balance.sh
# Manual check
jq -r '.custodyAddress' ~/.openclaw/farcaster-credentials.json
# View on basescan.org
Fund wallet:
Send USDC to custody address on Base chain. Bridge from other chains if needed.
Generated Mar 1, 2026
Marketing agencies can use this skill to schedule and post content across Twitter and Farcaster for multiple client accounts, automating campaigns with auto-variation to avoid duplicate detection and ensuring character limits are met. It supports image uploads and thread creation for comprehensive storytelling, saving time on manual posting and reducing errors.
Cryptocurrency and blockchain projects can leverage this skill to post updates, announcements, and replies on both Twitter and Farcaster, engaging with their communities efficiently. Multi-account support allows separate posting for project updates and team interactions, while link shortening helps maximize message impact within platform limits.
Individual content creators, such as bloggers or influencers, can use this skill to streamline posting across social platforms, with draft previews ensuring accuracy before live posting. Auto-variation helps avoid spam filters when sharing similar content, and image upload support enhances visual posts without manual handling.
Businesses can integrate this skill into customer support workflows to reply to tweets and casts from multiple accounts, providing timely responses with image attachments if needed. It helps manage brand reputation by ensuring consistent and validated replies across platforms, with auto-truncation preventing overflow errors.
Event organizers can use this skill to post real-time updates and promotional content during conferences or product launches on Twitter and Farcaster simultaneously. Thread support allows for detailed live-blogging, while multi-account capabilities enable coordination across different event-related handles for broader reach.
This model charges users based on actual API usage for Twitter posts and reads, with no monthly fees, making it cost-effective for low-volume users. Revenue is generated from consumption-based billing, where users pay per request, potentially supplemented by premium features like advanced analytics or higher rate limits.
Offer tiered subscription plans that provide access to multi-account support, advanced auto-variation algorithms, and priority support, targeting agencies and enterprises managing multiple brands. Revenue comes from monthly or annual fees, with higher tiers including more accounts and enhanced automation features.
Provide a free basic version with limited accounts and features, then upsell premium integrations such as CRM connections, advanced scheduling, or custom image processing. Revenue is generated from one-time purchases or add-on fees for these integrations, appealing to users needing specialized workflows.
š¬ Integration Tip
Ensure all required binaries (bash, curl, jq, python3, shuf) are installed and environment variables are correctly set in the .env file to avoid runtime errors during posting.
Fetch and read transcripts from YouTube videos. Use when you need to summarize a video, answer questions about its content, or extract information from it.
Fetch and summarize YouTube video transcripts. Use when asked to summarize, transcribe, or extract content from YouTube videos. Handles transcript fetching via residential IP proxy to bypass YouTube's cloud IP blocks.
Browse, search, post, and moderate Reddit. Read-only works without auth; posting/moderation requires OAuth setup.
Interact with Twitter/X ā read tweets, search, post, like, retweet, and manage your timeline.
LinkedIn automation via browser relay or cookies for messaging, profile viewing, and network actions.
Search YouTube videos, get channel info, fetch video details and transcripts using YouTube Data API v3 via MCP server or yt-dlp fallback.