{"id":41390,"plugin_id":"plugin_asdk_app_6a6172c418e481918bf3817aa288e3f0","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-24T12:58:59.064Z","digest":"aa6ebbd285857a6f9d7f2c282a8ab86e45780e014c76df8d2ddee7886b47ebb8","against":null,"payload":{"description":"Read or start a Dathent content plan, inspect upcoming or past posts, and schedule, move, or cancel a specific post. Use for social publishing workflows and explicit autopilot requests, with confirmed content, destinations, and timing.","included_files":[],"name":"plan-and-publish","skill_md_contents":"---\nname: plan-and-publish\ndescription: Read or start a Dathent content plan, inspect upcoming or past posts, and schedule, move, or cancel a specific post. Use for social publishing workflows and explicit autopilot requests, with confirmed content, destinations, and timing.\n---\n\n# Plan and publish through Dathent\n\nUse the user's language and preserve their brand, content, channel, and timing choices. Use the active brand unless another is specified; resolve an unknown brand only when necessary.\n\n## Planning and browsing\n\n- `get_content_plan` reads the saved weekly strategy/plan. `get_research_report` reads existing research; it does not run new research on demand.\n- `start_content_plan` starts a missing plan after research is ready and spends one plan-regeneration credit. Explain that spend and obtain authorization unless already given. An existing plan is returned without spending again. Follow setup/readiness results instead of retrying in a loop.\n- `list_scheduled` defaults to upcoming posts. For a past publication date/range, use `status: \"published\"` and explicit ISO `from`/`to` boundaries in the intended timezone. Use `list_posts` for unscheduled drafts and `get_post` directly for a known `contentItemId`.\n- On a Workspace connection, use `open_workspace` to display the requested\n  posts or calendar: `view: \"calendar\"` for dates/schedules or `view: \"posts\"`\n  for the library, with a known `postId` when available. Post reads may return\n  data without opening a compact card. Use compact widgets when the connection\n  does not expose Workspace. Choose one relevant view; a context lookup does\n  not authorize opening an unrelated screen.\n- A request to create a draft should continue through the creation skill.\n  Use the saved plan to choose a suitable topic when the user has left it open;\n  do not require them to provide final copy or repeat an already clear creation\n  instruction. Publication choices still follow the separate checks below.\n\n## Schedule the existing content\n\nBefore a publication-changing call, ensure the user has authorized the specific post, intended platforms, and time. A request to draft or upload does not authorize publication. Reuse clear authorization already provided; ask only for unresolved choices.\n\nCheck the actual saved post and connected destinations when those facts are not known. `list_social_accounts` supplies connection/reconnection links; setup preferences alone are not proof that an account can publish.\n\nThe scheduler accepts platforms, not an account ID. When multiple accounts exist on one platform, verify that the intended account is already saved as the post's destination. If it cannot be verified or selected through the exposed tools, open the post in Dathent to set that destination; a platform filter alone does not select a particular account.\n\nCall `schedule_post` with the existing `contentItemId` and a strictly future ISO `scheduledAt`. Its optional `platforms` is an array, and its optional `timezone` is an IANA name. For a requested local time, preserve that clock time and pass its named timezone; do not guess a numeric offset. If no timezone was supplied, use the saved default from `get_brand_profile`. A task's execution time is not the publication time.\n\nThere is no exposed `publish_post` tool. For a request to publish immediately, explain the future-time scheduler constraint and offer the post's Dathent link or agree a near-term scheduled time; do not silently change \"now\" into a different publication time.\n\nUse `reschedule_post` with `scheduledPostId` and a future ISO `scheduledAt` to move an existing schedule. It has no `timezone` parameter: use the saved timezone for a local value or a correctly resolved explicit-offset instant for a different requested timezone. `cancel_scheduled_post` takes `scheduledPostId` and removes its schedule without deleting content. Do not create a new draft to move or retry an existing publication.\n\n## Verify the result\n\nAn accepted generation batch may still need a result before scheduling. Read `get_generation_status` using that same batch ID only when this already-authorized continuation needs it; avoid repeated polling. Preserve pending IDs rather than restarting creation.\n\nReport the returned schedule ID, accepted local time/timezone, and any pending or skipped-target notes. A schedule is not proof of publication. After an ambiguous response, inspect existing post/schedule state before repeating a write; never treat \"Needs checking\" as permission to publish again.\n\n`set_autopilot` enables or disables an ongoing workflow. Enabling can create and publish future posts using shared quotas, so require explicit authorization for that ongoing behavior. A single scheduled post does not authorize autopilot.\n\nFor panel actions, use the exact operation and identifiers returned by the\npanel. Keep a mutation's idempotency key when retrying an ambiguous response;\ninspect its state before another attempt. Never choose a fresh key just to\nbypass an in-progress/unknown-outcome response. Do not infer that editing the\ncaption also authorizes scheduling or publication.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}