Install
openclaw skills install @dladislav201/openclaw-threadsctlManage Threads accounts, OAuth connect URLs, drafts, and publishing through the local threadsctl CLI. Use when the user wants to post to Threads, create or publish drafts, connect accounts, inspect stats, or work with image, carousel, or spoiler media posts.
openclaw skills install @dladislav201/openclaw-threadsctlUse threadsctl as the default interface for Threads operations.
This skill is model-agnostic. It can be used with OpenAI Codex, Gemini, or another OpenClaw text provider. Optional image generation providers are separate from Threads publishing.
Source: https://clawhub.ai/dladislav201/openclaw-threadsctl
threadsctl is installed and available in PATH.THREADS_SERVICE_URL and THREADS_SERVICE_API_KEY are configured for the CLI.Gemini if the user wants help creating images before posting.threadsctl from /opt/threads-service-ts/threads-service on the server where the service is deployed.curl or direct HTTP requests.threadsctl over raw curl or manual HTTP requests.--confirmed only when the user clearly intends immediate publishing.--file for images generated locally by OpenClaw under /root/.openclaw/media/....--media-url only when the image is already hosted at a reachable public URL.--files <path1,path2> with publish carousel.--spoiler only when the user wants media blurred as a spoiler. For carousel posts, spoiler applies to all attached media.threadsctl commands from /opt/threads-service-ts/threads-service so the deployed wrapper and Docker setup are used.The service supports Threads carousel posts for publishing multiple photos in one post.
threadsctl publish carousel for immediate publishing.threadsctl draft create --type carousel for draft-first publishing.--media-urls "url1,url2" when the images are already hosted and reachable by Threads.--files "path1,path2" when the images are local files available inside the deployed service/container.publish image commands unless the user explicitly wants separate posts.Examples:
cd /opt/threads-service-ts/threads-service
threadsctl publish carousel --account main-brand --media-urls "https://example.com/1.jpg,https://example.com/2.jpg" --text "Photo dump" --confirmed
threadsctl publish carousel --account main-brand --files "/root/.openclaw/media/one.jpg,/root/.openclaw/media/two.jpg" --text "Photo dump" --confirmed
The service supports Threads media spoilers for image and carousel posts.
--spoiler when the user asks for the photo/media to be blurred, hidden, marked as spoiler, or covered until tapped.--spoiler works with publish image, publish carousel, and media drafts.--spoiler for text-only posts.--spoiler applies to every photo in the carousel. Threads API does not let this service mark only one photo in the carousel as spoiler.Examples:
cd /opt/threads-service-ts/threads-service
threadsctl publish image --account main-brand --file "/root/.openclaw/media/spoiler.jpg" --text "Spoiler warning" --spoiler --confirmed
threadsctl publish carousel --account main-brand --files "/root/.openclaw/media/one.jpg,/root/.openclaw/media/two.jpg" --text "Spoiler gallery" --spoiler --confirmed
threadsctl accounts list
threadsctl accounts stats --account main-brand
threadsctl auth connect-url --label main-brand
threadsctl drafts list --account main-brand
threadsctl draft create --account main-brand --type text --text "Post content" --created-by "OpenClaw"
threadsctl draft create --account main-brand --type image --media-url "https://example.com/image.jpg" --text "Caption" --alt-text "Alt text" --created-by "OpenClaw"
threadsctl draft create --account main-brand --type image --media-url "https://example.com/image.jpg" --text "Caption" --spoiler --created-by "OpenClaw"
threadsctl draft create --account main-brand --type carousel --media-urls "https://example.com/1.jpg,https://example.com/2.jpg" --text "Caption" --spoiler --created-by "OpenClaw"
threadsctl draft approve --id draft_xxx --approved-by "OpenClaw"
threadsctl draft publish --id draft_xxx --actor "OpenClaw"
cd /opt/threads-service-ts/threads-service
threadsctl publish text --account main-brand --text "Hello from Threads" --confirmed
threadsctl publish image --account main-brand --file "/root/.openclaw/media/tool-image-generation/image-1---real-file.jpg" --text "Caption" --alt-text "Alt text" --confirmed
threadsctl publish image --account main-brand --media-url "https://example.com/image.jpg" --text "Caption" --alt-text "Alt text" --confirmed
threadsctl publish image --account main-brand --file "/root/.openclaw/media/tool-image-generation/image.jpg" --text "Caption" --spoiler --confirmed
threadsctl publish carousel --account main-brand --media-urls "https://example.com/1.jpg,https://example.com/2.jpg" --text "Photo dump" --confirmed
threadsctl publish carousel --account main-brand --files "/root/.openclaw/media/one.jpg,/root/.openclaw/media/two.jpg" --text "Photo dump" --spoiler --confirmed
threadsctl published list --account main-brand
Use when the user clearly wants an immediate post.
cd /opt/threads-service-ts/threads-service
threadsctl publish text --account main-brand --text "Launching today" --confirmed
Use when the user wants review, approval, or preparation before posting.
threadsctl draft create --account main-brand --type text --text "Launching today" --created-by "OpenClaw"
If the user wants a brand new image, first use the configured image generation provider. If OpenClaw saved the file locally under /root/.openclaw/media/..., publish it with --file.
cd /opt/threads-service-ts/threads-service
threadsctl publish image --account main-brand --file "/root/.openclaw/media/tool-image-generation/generated-image.jpg" --text "Launching today" --alt-text "Product launch image" --confirmed
Use --media-url only when the image is already hosted at a public URL:
cd /opt/threads-service-ts/threads-service
threadsctl publish image --account main-brand --media-url "https://example.com/generated-image.jpg" --text "Launching today" --alt-text "Product launch image" --confirmed
Use carousel for 2 to 20 images in one Threads post.
cd /opt/threads-service-ts/threads-service
threadsctl publish carousel --account main-brand --files "/root/.openclaw/media/one.jpg,/root/.openclaw/media/two.jpg" --text "Behind the scenes" --confirmed
Use --spoiler for image or carousel media when the user wants Threads to blur the media as a spoiler.
cd /opt/threads-service-ts/threads-service
threadsctl publish image --account main-brand --file "/root/.openclaw/media/spoiler.jpg" --text "Spoiler warning" --spoiler --confirmed
For carousel posts, --spoiler applies to all attached media.
To connect a new Threads account:
threadsctl auth connect-url --label client-two
curl when threadsctl supports the action.--confirmed unless immediate publishing is intended.--media-url.--spoiler for text-only posts.Prefer short result summaries:
Published successfully from main-brand.Draft created for second-brand.Could not publish because confirmation was not provided.