{"id":79731,"plugin_id":"plugin_asdk_app_6ac07a221a0881918b403530f3177912","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-11-04T00:12:54.608Z","digest":"b62eaf65c875d85a76a9f9601f64b5819659a915c3ff67cf6f7ac8b190c386df","against":null,"payload":{"description":"Create, schedule, or queue a social media post with PostZen. Use when the user wants to post, schedule, cross-post, or draft content for X (Twitter), Instagram, TikTok, LinkedIn, Facebook, YouTube, Threads, Pinterest, Bluesky, or Telegram.","included_files":[],"name":"post","skill_md_contents":"---\nname: post\ndescription: Create, schedule, or queue a social media post with PostZen. Use when the user wants to post, schedule, cross-post, or draft content for X (Twitter), Instagram, TikTok, LinkedIn, Facebook, YouTube, Threads, Pinterest, Bluesky, or Telegram.\n---\n\n# Post with PostZen\n\nPublish or schedule the user's content using the PostZen MCP tools. The user's request follows: \"$ARGUMENTS\"\n\n## Workflow\n\n1. **Drafts without targets.** If the user only requests a draft and names no target accounts, call `createPost` with `isDraft: true`, title and content; no account selection is required.\n2. **Resolve accounts for targeted posts.** Call `listAccounts` to get connected accounts. Each account has an `_id` (the `accountId` you must reference), a `platform`, and a `username`. If the user named platforms, match them; if ambiguous (multiple accounts on one platform), ask which. If a requested platform has no connected account, tell the user and offer to connect it (see the connect skill / `createConnectUrl`).\n2. **Adapt the content per platform.** Don't blast identical text everywhere unless asked:\n   - **X**: 280 chars for standard accounts — trim or thread-style tighten. Hashtags sparingly.\n   - **LinkedIn**: longer-form is fine; professional tone; line breaks improve readability.\n   - **Instagram / TikTok / YouTube / Pinterest**: media is required — a text-only post cannot publish there. If the user gave no media, either drop the platform (confirm first) or save as draft.\n   - **Pinterest**: pins need a board; the account's default board is used unless the user picks one (`getPinterestBoards` / `listPinterestBoardsForSelection`).\n   - **Bluesky**: 300 chars.\n   - Platform value strings: `x` (alias `twitter`), `instagram`, `tiktok`, `linkedin`, `facebook`, `youtube`, `threads`, `pinterest`, `bluesky`, `telegram`.\n3. **Handle media.** For local files, call `createMediaPresign`, upload the file with an HTTP `PUT` to the returned `uploadUrl`, then reference the returned `publicUrl` in the post's `mediaItems`. Already-hosted public URLs can be referenced directly.\n4. **Choose the timing — exactly one of:**\n   - `publishNow: true` — publishes immediately.\n   - `scheduledFor` — ISO-8601 UTC, at least 60 seconds in the future. If the user gave a local time, convert to UTC and confirm the conversion.\n   - `isDraft: true` — saves without publishing.\n   - Queue: if the user says \"add to queue\" or gives no time preference for a scheduled post, pass `queuedFromProfile` (the profile id) on `createPost` instead of `scheduledFor` — PostZen claims the next free slot atomically and returns it. Never fetch `getNextQueueSlot` and pass its time as `scheduledFor` (the slot isn't reserved, so it can race); use it only to tell the user when their post would go out. `getBestTimeToPost` suggests data-driven times for non-queue scheduling.\n5. **Confirm before publishing.** Show the final per-platform content and timing and get an explicit yes before calling `createPost` with `publishNow` or a near-term `scheduledFor`. Drafts don't need confirmation.\n6. **Create the post** with `createPost`: `content`, `platforms: [{ platform, accountId }, ...]`, optional `mediaItems`, and the timing field. Report back the returned post `_id`, actual per-platform statuses, and scheduled time. Never equate pending or failed statuses with successful publishing. Pass a user-supplied request id as `x-request-id`. Reuse it for an explicitly requested replay of the same creation, and report the original ID from `existingPost` on replay.\n\n## Cautions\n\n- Publishing is a real, outward-facing action. Never call `createPost` with `publishNow: true` without the user's explicit confirmation in this conversation.\n- Never invent `accountId` values — always take them from `listAccounts`.\n- If a `createPost` call fails, report the actual error; don't retry blindly (retries can double-post if the first attempt landed).\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}