Schedule and publish posts to X and Threads from your AI agent
by @juliendsv
Schedule posts and threads to Threads and X via PostStash
clawhub install poststash📖 About This Skill
name: poststash description: Schedule posts and threads to Threads and X via PostStash version: 1.0.0 author: Julien / PostStash homepage: https://poststash.com/docs/api license: MIT metadata: { "openclaw": { "emoji": "📮", "requires": { "env": ["POSTSTASH_API_KEY"] } } }
PostStash Skill
Schedule posts and threads to Threads and X directly from your OpenClaw agent.
Setup
1. Get an API key from the PostStash dashboard 2. Set the environment variable:
POSTSTASH_API_KEY=ps_live_...
3. Install: clawhub install poststashAPI key format: ps_live_ followed by 64 hex characters.
Tools
poststash.schedule_to_threads
Schedule a single post to Threads.
Input:
text (string, required) — Post content (max 500 characters)scheduled_at (string, optional) — ISO 8601 timestamp; defaults to nowstatus (string, optional) — "Ready" (publishes at scheduled_at) or "Draft" (saves without scheduling); defaults to "Ready"Output:
post_id — UUID of the scheduled postcontent — Post textschedule — Scheduled timestamp (ISO 8601)status — Post status (Ready, Draft, Published, Failed)platforms — Array of target platformspoststash.schedule_to_x
Schedule a single post to X (Twitter).
Input: Same as schedule_to_threads.
Output: Same as schedule_to_threads.
poststash.schedule_thread
Schedule a thread (2–20 posts) to Threads or X.
Input:
platform (string, required) — "threads" or "x"posts (array, required) — Array of { text: string } objects (2–20 items)scheduled_at (string, optional) — ISO 8601 timestamp; defaults to nowstatus (string, optional) — "Ready" or "Draft"; defaults to "Ready"Output:
thread_id — UUID grouping all thread postsposts — Array of scheduled post objects with id, content, thread_positionpoststash.get_post
Fetch a scheduled or published post along with its analytics.
Input:
post_id (string, required) — Post UUID from a schedule responseOutput:
post — Full post object (id, content, platforms, schedule, status, published, sent_at)analytics — Array of per-platform analytics with metrics (views, likes, replies, reposts, quotes)poststash.list_posts
List posts for your account (scoped to the context of your API key).
Input:
status (string, optional) — Filter by "Draft", "Ready", "Published", or "Failed"published (boolean, optional) — true or falselimit (number, optional) — Results per page (default: 20, max: 100)offset (number, optional) — Pagination offset (default: 0)Output:
posts — Array of post objectstotal — Total number of matching postslimit / offset — Pagination infoExample Agent Usage
const result = await agent.invoke({
tools: ["poststash.schedule_to_threads"],
input: "Schedule a post about AI to Threads tomorrow at 2pm",
});const thread = await agent.invoke({
tools: ["poststash.schedule_thread"],
input: "Create a 3-part thread on building in public on X, schedule for Friday 10am",
});
⚙️ Configuration
1. Get an API key from the PostStash dashboard 2. Set the environment variable:
POSTSTASH_API_KEY=ps_live_...
3. Install: clawhub install poststashAPI key format: ps_live_ followed by 64 hex characters.