计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
postiz-clawed【效率与协作】Schedule and manage social media posts via Postiz API (self-hosted or cloud). Direct API integration — no n8n dependency. Supports X/Twitter, LinkedIn, Bluesky with platform-specific character limits. Includes deduplication, scheduling, media upload, and thread creation. WHAT IT CAN DO: - Schedule posts to 28+ channels (X, LinkedIn, Bluesky, Reddit,…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
name: postiz-clawed description: | Schedule and manage social media posts via Postiz API (self-hosted or cloud). Direct API integration — no n8n dependency. Supports X/Twitter, LinkedIn, Bluesky with platform-specific character limits. Includes deduplication, scheduling, media upload, and thread creation.
WHAT IT CAN DO:
Direct API integration for social media posting. No n8n workflows needed.
| Platform | Integration ID | Character Limit | Handle |
|---|---|---|---|
| X/Twitter | YOUR_X_INTEGRATION_ID | 280 | @YourHandle |
YOUR_LINKEDIN_INTEGRATION_ID | 3,000 | your-linkedin | |
| Bluesky | YOUR_BLUESKY_INTEGRATION_ID | 300 | your.bsky.social |
# Login and save cookie (required before any API call)
curl -s -c /tmp/postiz-cookies.txt \
'https://your-postiz-instance.com/api/auth/login' \
-H 'Content-Type: application/json' \
-d '{"email":"your-email@example.com","password":"your-password","provider":"LOCAL"}'
Cookie expires periodically. Re-run login if you get 401 errors.
curl -s -b /tmp/postiz-cookies.txt \
'https://your-postiz-instance.com/api/posts/find-slot/INTEGRATION_ID'
Returns the next open time slot for a given channel. Useful for auto-scheduling without conflicts.
curl -s -b /tmp/postiz-cookies.txt \
'https://your-postiz-instance.com/api/media/upload-from-url' \
-H 'Content-Type: application/json' \
-d '{"url": "https://example.com/image.png"}'
curl -s -b /tmp/postiz-cookies.txt \
'https://your-postiz-instance.com/api/posts' \
-H 'Content-Type: application/json' \
-d '{
"type": "schedule",
"date": "2026-02-05T15:00:00Z",
"posts": [{
"integration": {"id": "YOUR_X_INTEGRATION_ID"},
"value": [{"content": "Your tweet here (max 280 chars)", "image": []}],
"settings": {"__type": "x"}
}]
}'
curl -s -b /tmp/postiz-cookies.txt \
'https://your-postiz-instance.com/api/posts' \
-H 'Content-Type: application/json' \
-d '{
"type": "schedule",
"date": "2026-02-05T15:00:00Z",
"posts": [
{
"integration": {"id": "YOUR_X_INTEGRATION_ID"},
"value": [{"content": "Short X version (280 chars max)", "image": []}],
"settings": {"__type": "x"}
},
{
"integration": {"id": "YOUR_LINKEDIN_INTEGRATION_ID"},
"value": [{"content": "Longer LinkedIn version with more context and professional tone. Can be up to 3000 characters.", "image": []}],
"settings": {"__type": "linkedin"}
},
{
"integration": {"id": "YOUR_BLUESKY_INTEGRATION_ID"},
"value": [{"content": "Bluesky version (300 chars max)", "image": []}],
"settings": {"__type": "bluesky"}
}
]
}'
schedule — Auto-publish at specified date/timedraft — Save for review (won't auto-publish)now — Publish immediatelycurl -s -b /tmp/postiz-cookies.txt \
'https://your-postiz-instance.com/api/posts?startDate=2026-02-01T00:00:00Z&endDate=2026-02-08T00:00:00Z' \
| jq '.posts[] | {id, state, publishDate, platform: .integration.providerIdentifier, content: .content[0:60]}'
# Get recent posts and check content similarity
curl -s -b /tmp/postiz-cookies.txt \
'https://your-postiz-instance.com/api/posts?startDate=2026-02-01T00:00:00Z&endDate=2026-02-08T00:00:00Z' \
| jq -r '.posts[] | "\(.integration.providerIdentifier): \(.content[0:80])"'
| State | Description |
|---|---|
QUEUE | Scheduled, waiting to publish |
PUBLISHED | Successfully posted |
ERROR | Failed to publish |
DRAFT | Saved but not scheduled |
# Upload returns {id, path}
curl -s -b /tmp/postiz-cookies.txt \
'https://your-postiz-instance.com/api/media/upload-simple' \
-F 'file=@/path/to/image.png'
"value": [{
"content": "Post with image",
"image": [{"id": "MEDIA_ID", "path": "/uploads/..."}]
}]
For longer content on X, create a thread:
"value": [
{"content": "Tweet 1/3: Introduction to the topic...", "image": []},
{"content": "Tweet 2/3: The main point explained...", "image": []},
{"content": "Tweet 3/3: Conclusion and call to action.", "image": []}
]
curl -s -b /tmp/postiz-cookies.txt -X DELETE \
'https://your-postiz-instance.com/api/posts/POST_ID'
curl -s -b /tmp/postiz-cookies.txt -X PUT \
'https://your-postiz-instance.com/api/posts/POST_ID/date' \
-H 'Content-Type: application/json' \
-d '{"date": "2026-02-06T10:00:00Z"}'
Don't just truncate! Rewrite for each platform:
Use scripts/post.py for easier posting with automatic character validation:
# Single platform
~/.local/bin/uv run ~/clawd/skills/postiz/scripts/post.py \
--platform x \
--content "Your tweet here" \
--schedule "2026-02-05T15:00:00Z"
# Multi-platform with different content
~/.local/bin/uv run ~/clawd/skills/postiz/scripts/post.py \
--x "Short X version" \
--linkedin "Longer LinkedIn version with more detail" \
--bluesky "Bluesky version" \
--schedule "2026-02-05T15:00:00Z"
Dashboard: https://your-postiz-instance.com
Re-run the login curl command to refresh cookie.
QUEUE not DRAFTAlways check existing posts before creating. The API doesn't deduplicate automatically.