Official agent skill

Block Kit

by slackapi in slackapi/slack-skills-plugin

A skill your agent uses when a developer wants to build or validate Block Kit layouts for Slack messages, modals, or Home tabs: message layouts, modals/forms/dialogs, Home tab interfaces…

OfficialMITAuto-check passed

Install Block Kit

skills CLI
$ npx skills add slackapi/slack-skills-plugin --skill block-kit -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install slackapi/slack-skills-plugin block-kit --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/slackapi/slack-skills-plugin.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/block-kit .claude/skills/block-kit && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
block-kit
GitHub stars
144
Token cost
~4.5k tokens
SKILL.md length
2,400 words
Files
3 (incl. references)
Skills in repo
7
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when a developer wants to build or validate Block Kit layouts for Slack messages, modals, or Home tabs: message layouts, modals/forms/dialogs, Home tab interfaces…

  • Works in 7 steps: Determine the Target Surface → Understand What to Build → Plan the Block Layout → …
  • A developer wants to build
  • SKILL.md covers Source of Truth: the Live Docs, Fast Path (for clear, specific…, Modification Mode and Step 1: Determine the Target…, plus 7 more sections
  • Calls curl; reaches docs.slack.dev and slack.com

What it does

Block Kit is an agent skill from slackapi/slack-skills-plugin, published by the product's own GitHub organization. Use when a developer wants to build or validate Block Kit layouts for Slack messages, modals, or Home tabs: message layouts, modals/forms/dialogs, Home tab interfaces, interactive buttons or menus, or modifying existing Block Kit JSON. Also trigger on any Slack UI component (sections, actions, inputs, headers, alerts, tables, carousels), the words "blocks" or "Block Kit Builder", a request to preview rendered blocks, or pasted JSON like "type": "section". Validates via the blocks.validate API method.

Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/common-patterns.md` and `references/design-principles.md`).

It works with Slack. The repository describes itself as: Claude Code, Codex, Cursor, and npx skills plugin that enables your AI tools with a Slack MCP Server and Slack Developer Skills. The licence is MIT.

When your agent uses it

  • A developer wants to build
  • Validate Block Kit layouts for Slack messages
  • Home tabs: message layouts
  • Modals/forms/dialogs

Example prompts

  • “blocks”
  • “Block Kit Builder”
  • “section”
  • “/block-kit”

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Determine the Target Surface
  2. Understand What to Build
  3. Plan the Block Layout
  4. Generate the Block Kit JSON
  5. Validate
  6. Deliver the Final Output
  7. Iterate

What it can do on your machine

Read from SKILL.md and the folder at commit 64c3f33. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • docs.slack.dev
    • slack.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Block Kit loads about 4.5k tokens when it runs, and up to ~10k if it reads all its reference files. Until then it costs about 129 tokens; SKILL.md has 2,400 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~129
When it runs · the whole SKILL.md, loaded when a task matches
~4.5k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~10k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from slackapi/slack-skills-plugin at commit 64c3f33, republished under its MIT licence (© slackapi). 2,400 words, ~4,546 tokens.

Download SKILL.mdSave it as .claude/skills/block-kit/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
block-kit
description
Use when a developer wants to build or validate Block Kit layouts for Slack messages, modals, or Home tabs: message layouts, modals/forms/dialogs, Home tab interfaces, interactive buttons or menus, or modifying existing Block Kit JSON. Also trigger on any Slack UI component (sections, actions, inputs, headers, alerts, tables, carousels), the words "blocks" or "Block Kit Builder", a request to preview rendered blocks, or pasted JSON like "type": "section". Validates via the blocks.validate API method.
argument-hint
[message | modal | home-tab]

Block Kit

Help the developer build a rich Block Kit layout. If $0 is provided, it specifies the target surface (message, modal, or home-tab).

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.validate in 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": "..." }.
  • markdown is a block type, not a text type. A markdown block holds standard markdown; text objects inside other blocks use mrkdwn (see mrkdwn vs. the markdown block in Step 4). Slack's mrkdwn is *bold* / _italic_ / ~strike~, not **bold**.
  • Messages need a top-level text fallback. blocks.validate won'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).

  • Master index: the authoritative list of every block, block element, and composition object, each linking to its own page: https://docs.slack.dev/reference/block-kit.md. WebFetch it to confirm a type exists and to get the link to its page.
  • Per-component pages carry the full field schema (a fields table with required/optional flags and constraints, plus JSON examples):
    • Blocks: https://docs.slack.dev/reference/block-kit/blocks/<slug>-block.md
    • Block elements: https://docs.slack.dev/reference/block-kit/block-elements/<slug>-element.md
    • Composition objects: https://docs.slack.dev/reference/block-kit/composition-objects/<slug>.md
  • The slug is not always the type name. For example datepicker maps to date-picker-element.md, and every *_select menu (static_select, users_select, multi_channels_select, and so on) is documented on select-menu-element.md. When unsure of a slug, follow the link from the master index rather than building the URL by hand.
  • Surface payload structure lives in the surface guides: messages at https://docs.slack.dev/messaging/formatting-message-text.md, modals at https://docs.slack.dev/surfaces/modals.md, and Home tabs at https://docs.slack.dev/surfaces/app-home.md.

Never use a block type, element, or field you have not seen on a live page.


Fast Path (for clear, specific requests)

If the developer's request is specific enough to determine both the target surface and the desired layout, collapse Steps 1-4 into a single pass:

  1. Determine the surface from $0 or context
  2. Fetch only the doc pages for the blocks and elements mentioned
  3. Generate the JSON directly
  4. Proceed to Step 5 (validation)

Fast-path indicators (skip the full workflow):

  • Developer provides existing JSON to modify → use Modification Mode instead
  • Developer names specific block types: "add an actions block with two buttons"
  • Developer describes a well-known pattern: "approval message", "feedback form", "settings modal"
  • Developer provides a complete description in one message with enough detail to build

Full-workflow indicators (use Steps 1-7):

  • Vague requests: "make something cool", "build a dashboard"
  • Exploratory: "what can Block Kit do?", "show me my options"
  • Complex layouts: 10+ blocks, nested modals, conditional logic
  • Developer asks for help deciding what to build

Modification Mode

If the developer provides existing Block Kit JSON (pasted inline, in a file, or referenced from code), enter Modification Mode instead of the full creation workflow:

  1. Parse the existing structure:

    • List each block by index, type, and a short description of its content
    • Infer the surface: "type": "modal" = modal, "type": "home" = home tab, bare blocks array = message
  2. Ask what changes they want:

    • Add blocks (where in the sequence?)
    • Remove blocks (which ones?)
    • Modify blocks (which block, what change?)
    • Reorder blocks
  3. Apply changes while preserving:

    • All existing block_id values (these are referenced in app interaction handlers)
    • All existing action_id values (these map to event listeners)
    • Existing styles, text content, and structure for unchanged blocks
  4. Validate the modified JSON: proceed to Step 5 (validation)

Detection: If the developer's message contains a JSON array starting with [{"type": or a view object with "blocks":, enter Modification Mode automatically. If they say "edit", "update", "modify", or "change" in reference to existing blocks, ask them to provide the current JSON.


Step 1: Determine the Target Surface

If $0 is provided and matches one of message, modal, or home-tab, use it directly.

Otherwise, ask the developer using AskUserQuestion:

  • Message: Conversational content posted to a channel or DM. Max 50 blocks.
  • Modal: A dialog or form opened by a user action. Max 100 blocks.
  • Home tab: A persistent, per-user dashboard in the App Home. Max 100 blocks.

Once the surface is determined, use the correct payload structure for it:

  • Message: a { "text": "Fallback text", "blocks": [...] } object posted via chat.postMessage (and friends). The text field is the notification/accessibility fallback. For message text formatting (mrkdwn, mentions, dates), see https://docs.slack.dev/messaging/formatting-message-text.md.
  • Modal: a view object ({ "type": "modal", "title": ..., "blocks": [...] }). For the full view object structure, lifecycle, and the rule that submit is required when the view contains any input block, see https://docs.slack.dev/surfaces/modals.md.
  • Home tab: a view object ({ "type": "home", "blocks": [...] }) published via views.publish. For structure and behavior, see https://docs.slack.dev/surfaces/app-home.md.

Step 2: Understand What to Build

Ask the developer to describe what they want their layout to look like or accomplish.

If they need inspiration, suggest examples — several map directly onto a ready-made template in references/common-patterns.md (named in parentheses), which you can start from in Step 3:

  • "A feedback form with a text input and a category selector" (Simple Form Modal)
  • "A notification message with an alert banner, description, and Approve/Reject buttons" (Notification Alert / Approval Message)
  • "A dashboard home tab with a welcome header, key metrics in fields, and quick-action buttons" (Dashboard Home Tab)
  • "A settings modal with dropdowns, checkboxes, and a time picker" (Settings Modal with Multiple Input Types)
  • "A table of sprint tasks with status and points" (Data Table)
  • "A deploy summary with bold text, a link, and a bullet list" (Rich Text Section)
  • "A row-level '⋯' menu for edit/duplicate/delete actions" (Row Actions with Overflow Menu)
  • "A product card with an image, price, and Add to Cart button" (Card Preview)

Get enough detail to plan the layout before generating any JSON.


Step 3: Plan the Block Layout

Based on the developer's description:

  1. Fetch only what you need from the live docs:

    • WebFetch the master index (https://docs.slack.dev/reference/block-kit.md) to confirm the block and element types you plan to use exist and to grab links to their pages.
    • Consult references/design-principles.md for design appropriateness — which block fits the shape of the content (table vs. stacked sections, card vs. loose blocks), emphasis, reading order, and accessibility. It is guidance on building layouts that read well, not on validity.
    • Check references/common-patterns.md if the request matches a common pattern; start from the template instead of building from scratch.
    • Defer reading individual component pages until Step 4, when you build each block's fields.
  2. Propose a numbered block outline. For example:

    text
    1. header: "Weekly Report"
    2. section: Summary text with a datepicker accessory
    3. divider
    4. section: Status fields (Name, Role, Team)
    5. actions: "Approve" button (primary) and "Reject" button (danger)
  3. Present the outline to the developer and ask for approval or changes before generating JSON.

Surface constraints to check:

  • Block count limit: 50 for messages, 100 for modals/home tabs
  • Modal-specific: if using input blocks, the modal payload must include a submit field
  • Table: only one table block per message
  • Surface compatibility (whether a block is valid on the chosen surface) and element compatibility (whether an element is allowed inside a given block) are not always spelled out on a component's doc page. Build the layout from the docs, and let blocks.validate in Step 5 confirm it. It is the authoritative check.

Step 4: Generate the Block Kit JSON

Once the layout is approved, build each block from its live doc page, fetching each page's fields table (required vs optional, constraints) and JSON example with WebFetch. The URL patterns are in Source of Truth above; the one slug to remember is that every *_select menu (static_select, users_select, multi_channels_select, …) lives on select-menu-element.md. Fetch pages as you need them and reuse what you have already fetched — don't re-fetch the same page for every block of the same type. Then build the payload block-by-block and wrap it in the surface structure from Step 1.

Guidelines:

  • Use descriptive action_id values (e.g., "approve_report_btn" not "action_1") — they identify the element in your interaction handlers
  • Include block_id values where the developer will need them for interaction handling
  • For modals, include title, submit, close, and callback_id; for home tabs, the type: "home" wrapper
  • Use mrkdwn text for rich formatting, plain_text where required (headers, labels, modal title)

mrkdwn vs. the markdown block: section and context blocks format text with Slack's mrkdwn (*bold*, _italic_, ~strike~, `code`) — use these for short, interactive layouts. The separate markdown block (Messages only) renders standard markdown (**bold**, headings, tables, numbered lists) and is meant for AI/LLM-generated or long-form content that already exists in standard markdown. Reach for it when the developer has such content or needs those features in the message body; there is a cumulative 12,000-character limit across all markdown blocks in one message.

Accessibility is easy to skip and hard to retrofit, so build it in now:

  • Give images descriptive alt_text (what the image shows, not just "image"), and make sure image-heavy layouts also carry the key information as text
  • Summarize the layout in the message's text fallback (notifications and screen readers show it instead of the blocks)
  • Use header blocks for logical section headings — they convey document structure to assistive tech

Present the complete payload to the developer in the Step 1 surface structure.


Show full SKILL.md (847 more words)Show less

Step 5: Validate

Always validate. blocks.validate is a public Web API method, so no auth token is required.

The authoritative reference for this method (its parameters, auth requirements, and response/error shape) is the live doc. WebFetch it before relying on any detail here: https://docs.slack.dev/reference/methods/blocks.validate.md. It documents the accepted parameters (blocks for a message's blocks array, view for a modal/home-tab view, message for a full message payload; send exactly one) and the response shape.

5a. Build the validation request

Prefer the Slack CLI when it's available, since it reuses the slack-cli skill's CLI detection and needs no token wrangling. If the CLI isn't installed, fall back to curl. Both call the same public method and return the same response, so Step 5b applies either way.

Path A: Slack CLI (preferred).

Use the slack:slack-cli skill, Step 1: Detect the Slack CLI, to check whether the public CLI is installed and resolve its command (SLACK_CMD).

If the CLI is available, use the slack:slack-cli skill, Step 4: Calling Web API Methods (slack api), to invoke it. That step covers the SLACK_CMD api <method> key=value … syntax. Run SLACK_CMD api --help first to confirm the syntax and the flag that skips authentication. blocks.validate needs no token, so call it without authentication. Don't hard-code that flag from memory; read it from the help output so this stays correct if it's ever renamed. Pass the payload as a positional key=value argument: blocks=<JSON array> for messages, or view=<JSON view object> for modals and home tabs.

Path B: curl (fallback, when the CLI isn't installed).

POST to the endpoint with the Bash tool. The API uses form-urlencoded encoding, so pass the JSON directly as the parameter value.

For messages, send the blocks array as a form-encoded parameter:

bash
curl -s -X POST 'https://slack.com/api/blocks.validate' \
  -d 'blocks=[ ... the blocks array ... ]'

For modals and home tabs, send the complete view object in the view field:

bash
curl -s -X POST 'https://slack.com/api/blocks.validate' \
  -d 'view={ "type": "modal", "title": ..., "blocks": [...] }'
5b. Handle the response

Success:

json
{ "ok": true }

Tell the developer their blocks are valid.

Failure:

json
{
  "ok": false,
  "error": "invalid_blocks",
  "errors": [
    {
      "code": "missing_field",
      "message": "missing required field: type",
      "field": "type",
      "pointer": "/0"
    }
  ]
}

When validation fails:

  1. Read each error. pointer is a JSON pointer to the offending node (e.g., /0 = first block, /2/elements/1 = second element of the third block, /0/text/type = the type field of the first block's text object). message describes the problem, and constraint (when present) names the rule that failed and its expected values.
  2. Fix the JSON. For the authoritative meaning of an error code and the field requirements behind it, consult the live method doc (https://docs.slack.dev/reference/methods/blocks.validate.md) and the relevant block/element/composition-object page you fetched in Steps 3-4.
  3. Re-validate. Repeat until "ok": true.

Step 6: Deliver the Final Output

Present the validated payload, then help the developer put it to use.

Send it

Building the payload is this skill's job; sending it (chat.postMessage, views.open, views.publish, and the token/scope handling around them) belongs to the Web API layer. To call the right method — via the Slack CLI, raw curl, or a Bolt SDK — use the slack:slack-api skill, Step 4: Call the Method (Manage), passing this payload as the method's blocks argument (messages) or view argument (modals and home tabs). That skill matches the argument names to the SDK or HTTP call so we don't duplicate them here.

Preview it

Help the developer view their layout with the Block Kit Builder. Prefer the Slack CLI if it is installed. The CLI automatically loads the blocks, saving the developer from copying and pasting. If the CLI is not available, provide the standard Builder link instead.

Path A: Slack CLI (preferred).

Use the slack:slack-cli skill, Step 1: Detect the Slack CLI, to check whether the public CLI is installed and resolve its command (SLACK_CMD).

If the CLI is available, run SLACK_CMD blocks preview --help to see how to pass the blocks and open the preview. The command loads the blocks into the Block Kit Builder in the developer's browser.

Because you run the CLI non-interactively, this command also needs a --team flag. Resolve the team ID with the slack:slack-cli skill, Step 2: Command Discovery via Help, whose "Resolving --app and --team values" guidance covers running SLACK_CMD auth list; Any authenticated workspace works for a preview, if several are available, pick one and mention which you used rather than blocking on the choice.

Path B: Block Kit Builder link (fallback, when the CLI isn't installed).

Offer the Block Kit Builder link so the developer can paste the JSON in and tweak visually: https://app.slack.com/block-kit-builder. Builder needs an object ({ "blocks": [...] } or a full view object), not a bare array.


Step 7: Iterate

Ask whether the developer wants to add, modify, remove, or reorder blocks, or build a layout for a different surface. If they want to change the layout you just produced, re-enter Modification Mode (it preserves their block_id/action_id values); for a fresh layout, loop back to Step 3.


Notes

  • Scope: this skill owns building and validating the Block Kit payload — choosing the surface, composing the JSON from the live docs, and confirming it with blocks.validate. Sending it lives in the Web API layer (slack:slack-api), and CLI detection/auth in slack:slack-cli.
  • blocks.validate needs no auth — it's a public method, so it works without a token whether you call it via the CLI or curl. Always validate before finalizing (Step 5).

© slackapi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (references) in skills/block-kit of slackapi/slack-skills-plugin.

  • SKILL.md
  • references/common-patterns.md
  • references/design-principles.md

Open the folder on GitHubat commit 64c3f33

Compare with similar skills

Block Kit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Block Kit compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Block Kit this skillslackapi/slack-skills-plugin144—~4.5kAutomated safety check: PassMIT
Agent Browser CLIvercel-labs/agent-browser44k24 repos~864Automated safety check: PassApache-2.0
Slack GIF Creatoranthropics/skills180k28 repos~2kAutomated safety check: PassApache-2.0
Code Design Rationale Investigatorcursor/plugins10k9 repos~2.6kAutomated safety check: PassNone
Electron App Automationvercel-labs/agent-browser44k5 repos~1.7kAutomated safety check: PassApache-2.0
Slack Browser Automationvercel-labs/agent-browser44k1 repos~2.1kAutomated safety check: PassApache-2.0

Similar skills

  • Agent Browser CLI

    vercel-labs/agent-browser

    Official

    Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking…

    44k GitHub starsUsed in 24 repos~864 tokens
    Productivity & AutomationAuto-check passed
  • Slack GIF Creator

    anthropics/skills

    Official

    Provides Slack size and frame limits, Python animation helpers and validators for building animated GIFs sized for emoji and messages.

    180k GitHub starsUsed in 28 repos~2k tokens
    Media & CreativeAuto-check passed
  • Official

    Digs into why code is shaped the way it is by checking git history, pull requests and connected tools in parallel, then reporting a cited read on the tradeoffs.

    10k GitHub starsUsed in 9 repos~2.6k tokens
    DevelopmentAuto-check passed
  • Electron App Automation

    vercel-labs/agent-browser

    Official

    Automates Electron desktop apps such as VS Code, Slack or Discord by connecting agent-browser to their Chrome DevTools Protocol port.

    44k GitHub starsUsed in 5 repos~1.7k tokens
    Productivity & AutomationAuto-check passed
  • Slack Browser Automation

    vercel-labs/agent-browser

    Official

    Drives the Slack web app with the agent-browser CLI to check unread channels, search, read channel details and extract information, with screenshots as evidence.

    44k GitHub starsUsed in 1 repo~2.1k tokens
    Productivity & AutomationAuto-check passed
  • Composio

    ComposioHQ/composio

    Route and complete Composio work across Composio For You and Composio Platform.

    30k GitHub starsUsed in 1 repo~1.7k tokens
    Productivity & AutomationAuto-check passed

More from slackapi/slack-skills-plugin

  • Create Slack App

    slackapi/slack-skills-plugin

    Official

    A skill your agent uses when a developer wants to create, scaffold, or bootstrap a new Slack app or agent from scratch with the Slack CLI.

    144 GitHub stars~3.1k tokensUpdated today
    Auto-check passed
  • Slack API

    slackapi/slack-skills-plugin

    Official

    A skill your agent uses when a developer asks which Slack Web API method does something, needs a method's OAuth scopes or token type, wants to call or test a family.method endpoint…

    144 GitHub stars~3.3k tokensUpdated today
    Auto-check passed
  • Slack Docs

    slackapi/slack-skills-plugin

    Official

    A skill your agent uses when answering a conceptual or how-to question about Slack platform features, or when asked to look up, fetch, or summarize a docs.slack.dev page, including a pasted…

    144 GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Slack Messaging

    slackapi/slack-skills-plugin

    Official

    A skill your agent uses when writing, drafting, scheduling, or improving a Slack message, announcement, or reply sent via the Slack MCP tools (slacksendmessage, slacksendmessagedraft…

    144 GitHub stars~1.3k tokensUpdated today
    Auto-check passed
  • Slack Search

    slackapi/slack-skills-plugin

    Official

    A skill your agent uses when locating messages, files, channels, or people across Slack, or gathering context before answering, with the search MCP tools (slacksearchpublic…

    144 GitHub stars~1.5k tokensUpdated today
    Auto-check passed
  • Test Slack App

    slackapi/slack-skills-plugin

    Official

    A skill your agent uses when a developer wants to test, try out, smoke-test, verify, or confirm that a Slack app built with the Slack CLI (or a plain Bolt app) actually works, by running it in a…

    144 GitHub stars~2.4k tokensUpdated today
    Auto-check: notes

Works with

Questions about Block Kit

What does Block Kit do?

A skill your agent uses when a developer wants to build or validate Block Kit layouts for Slack messages, modals, or Home tabs: message layouts, modals/forms/dialogs, Home tab interfaces…. Block Kit is an agent skill from slackapi/slack-skills-plugin, published by the product's own GitHub organization. Use when a developer wants to build or validate Block Kit layouts for Slack messages, modals, or Home tabs: message layouts, modals/forms/dialogs, Home tab interfaces, interactive buttons or menus, or modifying existing Block Kit JSON.

When should I use Block Kit?

Block Kit fits situations like: A developer wants to build; validate Block Kit layouts for Slack messages; home tabs: message layouts; modals/forms/dialogs.

How do I install Block Kit in Claude Code?

Run `npx skills add slackapi/slack-skills-plugin --skill block-kit -a claude-code`. Or copy the skill folder (skills/block-kit in slackapi/slack-skills-plugin) into .claude/skills/block-kit in your project. Claude Code loads it when a task matches its description.

How do I install Block Kit in Codex?

Run `npx skills add slackapi/slack-skills-plugin --skill block-kit -a codex`. Or copy the skill folder (skills/block-kit in slackapi/slack-skills-plugin) into .agents/skills/block-kit in your project. Codex loads it when a task matches its description.

Can I use Block Kit in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add slackapi/slack-skills-plugin --skill block-kit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/block-kit, .gemini/skills/block-kit, .github/skills/block-kit and .opencode/skills/block-kit in your project.

What does Block Kit need to run?

Going by SKILL.md and its folder, Block Kit needs the command-line tools its instructions call (curl).

Does Block Kit access the network?

SKILL.md names 2 domains. In commands or code: docs.slack.dev and slack.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Block Kit safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Block Kit use?

Block Kit is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Block Kit use?

About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 5.9k tokens, read only when the agent opens those files.

What are the alternatives to Block Kit?

Skills that share tags, products or a category with Block Kit: Agent Browser CLI (vercel-labs/agent-browser, 44k stars), Slack GIF Creator (anthropics/skills, 180k stars), Code Design Rationale Investigator (cursor/plugins, 10k stars) and Electron App Automation (vercel-labs/agent-browser, 44k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Block Kit?

slackapi (a GitHub organization, an official publisher) maintains it in slackapi/slack-skills-plugin, which has 144 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 6, 2026.

Source: slackapi/slack-skills-plugin on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.