Inklate skill · requires the Inklate MCP

preflight

Run Inklate's real per-channel validation on a draft or post — the same checks that gate actual publishing, not a generic lint.

frontmatter · SKILL.md+
name: preflight
description: >
  Run Inklate's real per-channel validation on a draft or post — the same checks that gate
  actual publishing, not a generic lint. Fetches each channel's live rules, runs the
  preflight, explains every violation in plain language, applies the auto-fixes with a
  before/after, and re-runs until green. Covers LinkedIn, X (Twitter), Instagram, and
  Facebook. Use when the user says "preflight this", "will this pass",
  "validate against my channels", or "fix this post for Instagram".
  Requires the Inklate MCP connection.
  Reads social-context.md when present so fixes stay on-voice. Ends with a per-channel
  verdict table — green, fixed-then-green, or blocked with the reason.
metadata:
  version: 1.0.0
  topics: [checking]
  examplePrompt: "Preflight this draft against all my connected channels"
  pairsWith: [post-check]
  mcpTools: [preflight_post, apply_fix, get_capabilities]

Validate a draft against the real rules of the user's real channels, fix what can be fixed, and deliver an honest per-channel verdict.

Connection check

  1. Call list_organizations first.
  2. If it fails or the Inklate tools are absent, tell the user to connect at https://inklate.com/skills/connect?ref=skills-preflight and STOP — a preflight against remembered platform rules is worthless.
  3. If multiple organizations exist, ask which one; channel rules are read from that organization's connected accounts.

Context

Read social-context.md (project root, then .agents/social-context.md) if present. ## Voice and ## Never constrain how you rewrite content when fixing violations — a fix that passes the platform but breaks the voice is not a fix. Proceed without it if absent.

Workflow

  1. Establish scope: which channels to validate against. "All my channels" means every connected channel; a named platform (e.g. "for Instagram") means just that one. If the draft is not yet an Inklate post, create it first so preflight has a real post to check.
  2. For each in-scope channel, call get_capabilities and note the rules the draft is most likely to trip:
    • Character limits (per post, and per segment when the channel threads).
    • Media requirements — counts, formats, and whether media is mandatory (Instagram).
    • Link and hashtag handling, and anything the channel currently flags as restricted.
  3. Call preflight_post on the post for the in-scope channels.
  4. Explain every violation in plain language. Not "VARIANT_TEXT_OVERFLOW" but "the X variant is 312 characters; X allows 280 — 32 characters need to go." One line per violation, grouped by channel.
  5. For each auto-fixable violation, call apply_fix. Show the before and after for every fix — the exact text that changed, not a description of the change. If a fix would alter meaning or tone (per social-context.md), treat it as a judgment call instead.
  6. Re-run preflight_post. Repeat the fix-and-re-run loop until each channel is either green or only judgment calls remain.
  7. Judgment calls become options. For each remaining violation, present 2–3 concrete resolutions ("(a) cut the third paragraph, (b) split into a 2-post thread, (c) drop X from the targets") and apply the user's choice, then re-run once more.
  8. If the loop is not converging — the same violation reappears after two fix attempts — stop looping, show the stuck violation, and hand the decision to the user rather than thrashing.
  9. Deliver the verdict. If the user's next step is publishing, point them to the publish skill — this skill validates; it never publishes.

Quality bar

  • Rules come from get_capabilities and violations from preflight_post — never from memorized platform limits, which drift.
  • Every apply_fix is shown as before/after in chat; a silent fix is a bug.
  • Never declare green without a fresh preflight_post run confirming it after the last change.
  • Fixes preserve meaning and voice; when they cannot, the violation is escalated as a judgment call, not forced.
  • A channel that cannot pass (e.g. Instagram with no media attached) gets an honest "blocked" verdict with the unblock condition — not a soft warning.
  • This skill makes no irreversible calls: no publishing, no scheduling. Its output is a verdict.
  • Verdicts are per-channel, never averaged: "mostly passing" is not a verdict.
  • If the user asked about a channel that is not connected, say so in the verdict table rather than validating against imagined rules.

Receipt

End with the final verdict table:

Channel Verdict Violations found Fixed Remaining
LinkedIn green 1 1 (trimmed to 3000 chars)
X green 2 2 (shortened, hashtags moved)
Instagram blocked 1 0 needs at least one image

Below the table: the post ID that was validated, the full list of applied fixes with their before/after, any judgment calls resolved and how, and the single next action (ready to publish via the publish skill, or the unblock condition for any blocked channel).

The verdict table reflects the last preflight_post run of the session — never an earlier, more optimistic one.

Related skills