Inklate skill · requires the Inklate MCP

publish

Take approved drafts — often written with the cross-post, linkedin-post, or x-thread skills — and ship them for real through Inklate: create the post, sync p…

frontmatter · SKILL.md+
name: publish
description: >
  Take approved drafts — often written with the cross-post, linkedin-post, or x-thread
  skills — and ship them for real through Inklate: create the post, sync per-channel
  variants, validate against each platform's live rules, fix what can be fixed, and
  publish now or schedule for later. Covers LinkedIn, X (Twitter), Instagram, and
  Facebook. Use when the user says "publish this", "ship these drafts",
  "post this to LinkedIn now", or "schedule this post".
  Requires the Inklate MCP connection. Reads
  social-context.md when present to keep variants on-voice. Nothing goes out without a
  green preflight and an explicit yes from the user.
metadata:
  version: 1.0.0
  topics: [publishing, cross-posting]
  examplePrompt: "Publish these two drafts to LinkedIn and X"
  pairsWith: [cross-post, linkedin-post, x-thread]
  mcpTools: [create_post, sync_variants, preflight_post, apply_fix, publish_post, schedule_post]

Turn approved drafts into real published or scheduled posts, with per-channel validation between the draft and the send button.

Connection check

  1. Call list_organizations first, before touching any draft.
  2. If the call fails or the Inklate tools are absent, tell the user to connect at https://inklate.com/skills/connect?ref=skills-publish and STOP.
  3. If multiple organizations are returned, ask which one to publish under before doing anything else.

Context

Read social-context.md (project root, then .agents/social-context.md) if present: the ## Voice and ## Never sections govern how you adapt variants per channel, and ## Platforms tells you the primary channel when the user is vague about targets. Proceed without it if absent — the drafts themselves are the source of truth.

Workflow

  1. Gather the drafts. For each one, confirm with the user which channels it targets (LinkedIn, X, Instagram, Facebook). If a target channel is not connected, say so and drop it from the plan rather than failing later.
  2. For each draft, call create_post with the content. Record the returned post ID — every later step references it.
  3. Call sync_variants on the post to materialize per-channel variants. Review what came back: each channel gets its own rendition, and this is where platform-specific adaptation (length, hashtags, threading) lands.
  4. Call preflight_post on the post. For every violation returned:
    • Auto-fixable: call apply_fix, then note what changed.
    • Judgment calls (e.g. content must be shortened in a way that changes meaning, missing required media): present the options to the user and apply their choice via the draft content, then sync_variants again.
    • When the fix is unclear, prefer asking over guessing: a wrong auto-shorten reads worse than one extra question.
  5. Re-run preflight_post until every targeted channel is green. If a channel cannot go green (e.g. Instagram with no media), tell the user and offer to exclude that channel.
  6. Approval gate. Show the user the final per-channel variants verbatim — the exact text each platform will receive, per channel, plus any media attached. Ask one direct question: publish now, schedule for a time, or hold? Do not proceed on silence or on an earlier general instruction; publishing is irreversible and needs a fresh, explicit yes.
  7. On "publish now": call publish_post and capture the result.
  8. On "schedule": confirm the time in the organization's timezone, restate it unambiguously ("Tue Jul 21, 9:00 AM Europe/Berlin"), then call schedule_post with it.
  9. On "hold": leave the post as a green-preflighted draft and say exactly how to resume ("say publish post_abc123 when ready").
  10. Verify the outcome from the tool response — status, per-channel results, permalinks where available. If any channel failed, report the exact error and offer to retry just that channel or unwind.
  11. When several drafts are in flight, process them one at a time through the approval gate so each yes is unambiguous about what it approves.

Quality bar

  • Never call publish_post or schedule_post without a green preflight on every targeted channel AND an explicit user yes given after seeing the final variants.
  • Always echo the per-channel variants for approval — the user approves what the platform will actually receive, not a summary of it.
  • Fixes must be shown, not silently applied: every apply_fix gets a one-line before/after in chat.
  • Schedule times are always stated in the organization's timezone; if the user gives a bare time, confirm the timezone before scheduling.
  • Respect the ## Never section of social-context.md as a hard filter — if a variant trips it, stop and ask.
  • One draft failing never blocks the others; report per-draft outcomes independently.
  • Post IDs from create_post are quoted in every status line so the user can act on any post later without re-deriving which is which.

Receipt

End with the executed action's receipt, one row per draft-channel placement:

Post ID Channel Action When (org tz) Status Permalink
post_abc123 LinkedIn published now live https://linkedin.com/...
post_abc123 X published now live https://x.com/...
post_def456 LinkedIn scheduled Jul 21, 9:00 AM queued

Below the table: total published, total scheduled, any channels excluded and why, and any fixes that were applied on the way to green.

Related skills