block-kit
Block Kit
Help the developer build a rich Block Kit layout. If $0 is exactly message, modal, or home-tab, treat it as the target surface. Otherwise (including if it's empty or any other value), ignore it and determine the surface in Step 1.
This skill walks through surface selection, layout planning, JSON generation, and validation. Block types, elements, and fields come from the live docs (see Source of Truth below) — discover them and read each component's schema there, never from memory.
Common Block Kit mistakes (and why): A few errors recur often enough to flag up front. Most others are caught by
blocks.validatein Step 5, so lean on validation rather than memorizing rules.
"type": "text"is not a thing. Text is a composition object:{ "type": "plain_text", "text": "..." }or{ "type": "mrkdwn", "text": "..." }.markdownis a block type, not a text type. Amarkdownblock holds standard markdown; text objects inside other blocks usemrkdwn(see mrkdwn vs. themarkdownblock in Step 4). Slack'smrkdwnis*bold*/_italic_/~strike~, not**bold**.- Messages need a top-level
textfallback.blocks.validatewon't flag a missing one, but notifications and screen readers display it instead of the blocks — so summarize what the layout conveys rather than leaving it empty.
Source of Truth: the Live Docs
Every block, element, and composition object is documented on docs.slack.dev. Append .md to any reference URL to fetch it as markdown with WebFetch (no auth required).