据 AlphaMoat 统计,截至 2026-09,Social Post 累计下载 3,296 次、获 0 个星标,在全部 5,078 个 AI 技能中排名第 3,439 位,在「内容创作」分类(362 个)中排名第 235 位。
| 平台 | 累计安装 | 累计下载 | 星标 | 评论 |
|---|---|---|---|---|
| ClawHub ↗ | 99 | 3,104 | - | - |
| SkillHub ↗ | 277 | 3,296 | - | — |
各平台的计数口径不同,统计时间不一致。
向 X 与 Farcaster 发布或回复文字和图片内容,支持草稿预览、线程和多账户。
资料发布于 2026-10-27
以下是根据技能文档生成的示例,不代表实际运行结果。
2026-09 起统计方法调整:同名技能按作者分别统计,并覆盖全部技能。图中虚线为调整前的月份,与之后的数据不直接比较,也不计算跨越调整的增长。
| 月份 | 累计下载 | 环比 | 星标 |
|---|---|---|---|
| 2026-09 | 3,296 | — | - |
| 2026-08 | 3,002 | +3.7% | - |
| 2026-07 | 2,896 | +8.5% | - |
| 2026-06 | 2,669 | +5.8% | - |
| 2026-05 | 2,523 | — | - |
| 2026-03 | 2,227 | — | - |
以下是作者发布的原始文件,按纯文本显示,本站未做修改或审核;其中的链接不可点击,命令请核实后再运行。抓取于 2026-10-23。
---
name: social-post
version: 1.4.0
description: Post 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.
author: 0xdas
license: MIT
tags: [twitter, farcaster, social, posting, automation, threads, x-api, consumption-based, multi-account, anti-spam]
metadata:
openclaw:
requires: bins: [bash, curl, jq, python3, shuf]
env: [X_CONSUMER_KEY, X_CONSUMER_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET]
---
# Social Post
Post to Twitter and/or Farcaster with automatic character limit validation and image upload handling.
## Features
- ✅ **Multi-account support** - manage multiple Twitter accounts from one skill
- ✅ **Auto-variation** - avoid Twitter's duplicate content detection with `--vary` flag
- ✅ Post to Twitter only
- ✅ Post to Farcaster only
- ✅ Post to both platforms simultaneously
- ✅ **Reply to tweets and casts** - respond to specific posts on both platforms
- ✅ **Draft preview** - shows exactly what will be posted before confirmation
- ✅ Character/byte limit validation
- ✅ Image upload support (for posts and replies)
- ✅ **Thread support** - automatically split long text into numbered posts
- ✅ **Link shortening** - compress URLs using TinyURL (saves characters)
- ✅ Auto-truncate on overflow (optional)
## Platform Limits
- **Twitter:** 252 characters (280 with 10% safety buffer)
- **Farcaster:** 288 bytes (320 with 10% safety buffer)
## Setup & Credentials
### X/Twitter Setup
**Required credentials** (stored in `/home/phan_harry/.openclaw/.env`):
```bash
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:**
1. **Apply for X Developer Account**
- Go to https://developer.twitter.com/en/portal/dashboard
- Apply for Developer Access
- Wait for approval (usually 1-2 days)
2. **Enable Consumption-Based Billing**
- Set up payment method (credit card) in Developer Portal
- **No subscription tiers** - you pay only for actual API usage
- Charged per API request (posts, reads, etc.)
- No monthly minimums or fees
3. **Create an App**
- In Developer Portal, create a new App
- Name: "Social Post Bot" (or any name)
- Set permissions to "Read and Write"
4. **Generate Keys**
- Consumer Key & Secret: In "Keys and tokens" tab
- Access Token & Secret: Click "Generate" under "Authentication Tokens"
- Save all 4 credentials securely
4. **Add to .env file**
```bash
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:**
```bash
# Dry run (won't post)
scripts/post.sh --twitter --dry-run "Test message"
```
### Multi-Account Setup (Optional)
You can manage multiple Twitter accounts by adding additional credentials with custom prefixes.
**Example: Adding a second account**
```bash
# 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:**
```bash
# 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:**
- Default account: `X_CONSUMER_KEY`, `X_CONSUMER_SECRET`, etc.
- Custom accounts: `{PREFIX}_API_KEY`, `{PREFIX}_API_KEY_SECRET`, `{PREFIX}_ACCESS_TOKEN`, `{PREFIX}_ACCESS_TOKEN_SECRET`
- Use lowercase prefix name in `--account` flag
### Farcaster Setup
**Required credentials** (stored in `/home/phan_harry/.openclaw/farcaster-credentials.json`):
```json
{
"fid": "your_farcaster_id",
"custodyAddress": "0x...",
"custodyPrivateKey": "0x...",
"signerPublicKey": "0x...",
"signerPrivateKey": "0x...",
"createdAt": "2026-01-01T00:00:00.000Z"
}
```
**How to get credentials:**
1. **Use farcaster-agent skill to create account**
```bash
# This will guide you through:
# - Creating a wallet
# - Registering FID
# - Adding signer key
# - Automatically saving credentials
# See: /skills/farcaster-agent/SKILL.md
```
2. **Or use existing credentials**
- If you already have a Farcaster account
- Export your custody wallet private key
- Export your signer private key
- Manually create the JSON file
3. **Fund the custody wallet (REQUIRED)**
```bash
# 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)
```
4. **Verify setup**
```bash
# 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:**
- ⚠️ **Never share your private keys**
- ⚠️ Credentials are stored as plain text - secure your system
- ⚠️ `.env` file should have `600` permissions (read/write owner only)
- ⚠️ Back up your credentials securely
## Usage
### Posting
#### Text only
```bash
# 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"
```
#### With image
```bash
# 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"
```
### Replying
#### Reply to Twitter
```bash
# 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 Farcaster
```bash
# 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 platforms
```bash
# Reply to both (if you have corresponding IDs on both platforms)
scripts/reply.sh --twitter 123456 --farcaster 0xabcd... "Great discussion!"
```
### Options
#### For `post.sh` (posting)
- `--twitter` - Post to Twitter only
- `--farcaster` - Post to Farcaster only
- `--account <name>` - Twitter account to use (lowercase prefix from .env)
- `--vary` - Auto-vary text to avoid duplicate content detection
- `--image <path>` - 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)
#### For `reply.sh` (replying)
- `--twitter <tweet_id>` - Reply to Twitter tweet with this ID
- `--farcaster <cast_hash>` - Reply to Farcaster cast with this hash
- `--account <name>` - Twitter account to use (lowercase prefix from .env)
- `--image <path>` - 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)
## Examples
### Posting Examples
```bash
# 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 Examples
```bash
# 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"
```
## Draft 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):
```
- Interactive mode: Prompts for confirmation
- Non-interactive/automated: Use `--yes` flag to skip prompt
- Dry run: Use `--dry-run` to preview without any posting
## Requirements
- Twitter credentials in `.env` (X_CONSUMER_KEY, X_CONSUMER_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET)
- Farcaster credentials in `/home/phan_harry/.openclaw/farcaster-credentials.json`
- **USDC on Base chain** (custody wallet): 0.001 USDC per Farcaster cast
- For images: `curl`, `jq`
## Costs
### X/Twitter
- **100% Consumption-based** - NO subscription tiers (tiers have been eliminated)
- **Pay per API request** - charged for each call (post, read, etc.)
- No monthly fees, no minimums, no tier upgrades to worry about
- Automatic billing based on actual usage
- Payment via credit card through X Developer portal
- Uses OAuth 1.0a (no blockchain/USDC required)
- Requires approved X Developer account + enabled billing
**Official 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.
### Farcaster
Each Farcaster cast costs **0.001 USDC** (paid via x402 protocol):
- Deducted from custody wallet on **Base chain**
- Sent to Neynar Hub: `0xA6a8736f18f383f1cc2d938576933E5eA7Df01A1`
- ~$1 USDC = 1000 casts
**Check balance:**
```bash
# 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.
## Image Hosting
- **Twitter:** Direct upload via Twitter API
- **Farcaster:** Uploads to imgur for public URL (embeds automatically)
## Error Handling
- Shows character/byte count before posting
- Warns if exceeding limits
- Option to truncate or abort
- Validates credentials before attempting post
识别并去掉文本里的 AI 写作痕迹,让文字读起来更像人写。
把文本里 AI 写作的典型痕迹挑出来并改写得更自然,同时保留原意的写作编辑技能。
识别并去除 AI 生成文本痕迹的中文文字编辑技能。
wechat-search 检索公众号热门文章,并按相关性、热度和时效整理结果。
从公开短视频分享链接提取标题、简介和口播文案,并给出改写版本。
humanizer 为中英文文本提供更自然的表达和风格编辑指导。
写网文章节并按文件落盘,聊天里只回摘要与指针。
把一组营销方法模块收进同一个技能,按请求路由到对应模块取清单与可交付稿。
数据月份:2026-09 · 下载/星标/安装数聚合自公开技能注册库(ClawHub、SkillHub),按月更新。口径说明见数据方法。