{"id":"93fe53a5-6a5c-41ca-91fa-5ef3b89074f2","shortId":"AhVMuY","kind":"skill","title":"slack-block-kit","tagline":"Proactively apply when generating Slack API payloads with blocks, chat.postMessage calls with structured content, streaming AI responses, or views.open/views.publish calls. Triggers on Block Kit, Slack blocks, section block, actions block, header block, divider block, context blo","description":"# Slack Block Kit\n\nUI framework for building rich, interactive layouts in Slack messages, modals, and App Home.\n\n## CRITICAL: Two Markup Systems\n\nText inside Block Kit text objects uses Slack mrkdwn syntax (`*bold*`, `<url|text>`), NOT standard Markdown. The only exception is the `markdown` block which uses standard Markdown.\n\n## Quick Decision Trees\n\n### \"Should I use blocks?\"\n\n```\nResponse type?\n├─ Conversational reply, short answer, <3 lines   → text only (no blocks)\n├─ Multi-section summary, report, dashboard        → blocks\n├─ Two-column key-value data                       → blocks (section fields)\n├─ Tabular data                                    → blocks (table)\n├─ Code with heading or surrounding context         → blocks\n├─ Visual separation needed between topics          → blocks\n└─ Feedback buttons or interactive elements         → blocks\n```\n\n### \"Which block type?\"\n\n```\nWhat am I rendering?\n├─ Large section title                → header (plain_text, 150 chars max)\n├─ Body text or key-value pairs       → section (text + fields + accessory)\n├─ Small metadata or secondary info   → context (images + text, 10 max)\n├─ Horizontal separator               → divider\n├─ Buttons, menus, date pickers       → actions (25 elements max)\n├─ Status, warning, success callout    → alert (severity + text)\n├─ Compact entity or summary preview   → card (optional image/actions)\n├─ Multiple comparable cards/options   → carousel (1-10 cards)\n├─ Standalone image                   → image (image_url or slack_file)\n├─ Formatted text with lists, quotes  → rich_text (nested sub-elements)\n├─ Tabular data                       → table (100 rows, 20 cols, 1 per msg)\n├─ LLM-generated markdown content     → markdown (standard MD, messages only)\n├─ Embedded video player              → video (requires links.embed:write)\n├─ Remote file reference              → file (read-only, source: \"remote\")\n├─ Feedback thumbs up/down            → context_actions (messages only)\n├─ Collecting user input (modals)     → input (label + element)\n├─ AI agent task steps                → plan (sequential tasks, messages only)\n└─ Single task with status            → task_card (inside plan or standalone)\n```\n\n### \"mrkdwn or markdown block?\"\n\n```\nContent source?\n├─ Short formatted text, labels, fields     → mrkdwn in section/context\n├─ Long-form LLM-generated content          → markdown block (standard MD)\n├─ LLM-generated tables/task lists/code      → markdown block\n├─ Programmatic tabular data                 → table block\n├─ Need headings                            → markdown block or header blocks\n└─ Mixed: structured layout + prose         → section/header blocks + markdown block\n```\n\n## Block Types Overview\n\n### header\n\nLarge bold text for section titles. `plain_text` only. Max 150 chars.\n\n```json\n{ \"type\": \"header\", \"text\": { \"type\": \"plain_text\", \"text\": \"Section Title\", \"emoji\": true } }\n```\n\n### section\n\nPrimary content block. Supports text, two-column fields, and one accessory element.\n\n```json\n{\n  \"type\": \"section\",\n  \"text\": { \"type\": \"mrkdwn\", \"text\": \"*Project Status*\\nAll systems operational.\" }\n}\n```\n\nTwo-column fields layout:\n\n```json\n{\n  \"type\": \"section\",\n  \"fields\": [\n    { \"type\": \"mrkdwn\", \"text\": \"*Status:*\\nActive\" },\n    { \"type\": \"mrkdwn\", \"text\": \"*Owner:*\\nChris\" },\n    { \"type\": \"mrkdwn\", \"text\": \"*Priority:*\\nHigh\" },\n    { \"type\": \"mrkdwn\", \"text\": \"*Due:*\\nFriday\" }\n  ]\n}\n```\n\nEither `text` or `fields` required (or both). Text max 3000 chars. Fields max 10 items, each max 2000 chars. Set `expand: true` to force full text display without \"see more\" truncation.\n\nCompatible accessories: button, overflow, datepicker, timepicker, select menus, multi-select menus, checkboxes, radio buttons, image.\n\n### divider\n\n```json\n{ \"type\": \"divider\" }\n```\n\n### context\n\nSmall, muted text for metadata. Elements: mrkdwn text objects or image elements. Max 10 elements.\n\n```json\n{\n  \"type\": \"context\",\n  \"elements\": [\n    { \"type\": \"mrkdwn\", \"text\": \"Last updated: Feb 9, 2026\" },\n    { \"type\": \"mrkdwn\", \"text\": \"Source: deploy-bot\" }\n  ]\n}\n```\n\n### actions\n\nInteractive elements: buttons, select menus, overflow menus, date pickers. Max 25 elements.\n\n```json\n{\n  \"type\": \"actions\",\n  \"elements\": [\n    {\n      \"type\": \"button\",\n      \"text\": { \"type\": \"plain_text\", \"text\": \"Approve\", \"emoji\": true },\n      \"style\": \"primary\",\n      \"action_id\": \"approve_action\",\n      \"value\": \"approved\"\n    }\n  ]\n}\n```\n\nButton styles: `primary` (green), `danger` (red), or omit for default. Use `primary` sparingly — one per set. Action IDs must be unique within the message.\n\n### alert\n\nCallout for status, risk, confirmation, or urgency. Text accepts `plain_text` or `mrkdwn`. `level`: `default`, `info`, `warning`, `error`, or `success` (defaults to `default`).\n\n```json\n{\n  \"type\": \"alert\",\n  \"text\": { \"type\": \"mrkdwn\", \"text\": \"*Dependency conflict detected* before deploy.\" },\n  \"level\": \"warning\"\n}\n```\n\n### card\n\nCompact, scannable preview for entities, summaries, records, or agent results. At least one of `hero_image`, `title`, `actions`, or `body` is required. There is currently no size attribute.\n\n```json\n{\n  \"type\": \"card\",\n  \"title\": { \"type\": \"mrkdwn\", \"text\": \"Daily Standup Reminder\" },\n  \"subtitle\": { \"type\": \"mrkdwn\", \"text\": \"Runs every weekday at *9:00 AM*\" },\n  \"body\": { \"type\": \"mrkdwn\", \"text\": \"Last run: Today at 9:00 AM. Status: Success\" },\n  \"actions\": [\n    {\n      \"type\": \"button\",\n      \"text\": { \"type\": \"plain_text\", \"text\": \"View Logs\" },\n      \"action_id\": \"view_logs\"\n    }\n  ]\n}\n```\n\nFields: `icon` and `hero_image` are image objects; `title`, `subtitle`, and `body` are text objects; `actions` is an array of button elements. Title/subtitle max 150 chars. Body max 200 chars.\n\n### carousel\n\nHorizontal, scrollable group of card blocks for options, recommendations, search results, or next steps. Must contain 1-10 cards.\n\n```json\n{\n  \"type\": \"carousel\",\n  \"elements\": [\n    { \"type\": \"card\", \"title\": { \"type\": \"mrkdwn\", \"text\": \"Option A\" } },\n    { \"type\": \"card\", \"title\": { \"type\": \"mrkdwn\", \"text\": \"Option B\" } }\n  ]\n}\n```\n\n### image\n\nStandalone image with alt text. Provide either `image_url` (public, max 3000 chars) or `slack_file` object. Formats: png, jpg, jpeg, gif.\n\n```json\n{\n  \"type\": \"image\",\n  \"image_url\": \"https://example.com/chart.png\",\n  \"alt_text\": \"Deployment success rate chart\",\n  \"title\": { \"type\": \"plain_text\", \"text\": \"Deploy Metrics\" }\n}\n```\n\n### rich_text\n\nAdvanced formatted text with nested elements. Supports styled text, lists, code blocks, and quotes. See [references/RICH-TEXT.md](references/RICH-TEXT.md) for deep dive.\n\n```json\n{\n  \"type\": \"rich_text\",\n  \"elements\": [\n    {\n      \"type\": \"rich_text_section\",\n      \"elements\": [\n        { \"type\": \"text\", \"text\": \"Key findings:\", \"style\": { \"bold\": true } }\n      ]\n    },\n    {\n      \"type\": \"rich_text_list\",\n      \"style\": \"bullet\",\n      \"elements\": [\n        { \"type\": \"rich_text_section\", \"elements\": [{ \"type\": \"text\", \"text\": \"Latency reduced by 40%\" }] },\n        { \"type\": \"rich_text_section\", \"elements\": [{ \"type\": \"text\", \"text\": \"Error rate under 0.1%\" }] }\n      ]\n    }\n  ]\n}\n```\n\nSub-element types: `rich_text_section` (paragraph), `rich_text_list` (`style: \"bullet\"` or `\"ordered\"`, with `indent`, `offset`, `border`), `rich_text_preformatted` (code block), `rich_text_quote` (blockquote).\n\nInline element types within sections: `text` (with optional `style: { bold, italic, strike, code, underline }`), `link`, `emoji`, `user`, `channel`, `usergroup`, `broadcast`, `date`, `color`.\n\n### table\n\nTabular data. One table per message (appended as attachment at bottom).\n\n```json\n{\n  \"type\": \"table\",\n  \"rows\": [\n    [\n      { \"type\": \"raw_text\", \"text\": \"Service\" },\n      { \"type\": \"raw_text\", \"text\": \"Status\" },\n      { \"type\": \"raw_text\", \"text\": \"Latency\" }\n    ],\n    [\n      { \"type\": \"raw_text\", \"text\": \"API\" },\n      { \"type\": \"raw_text\", \"text\": \"Healthy\" },\n      { \"type\": \"raw_text\", \"text\": \"12ms\" }\n    ]\n  ],\n  \"column_settings\": [\n    { \"align\": \"left\" },\n    { \"align\": \"center\" },\n    { \"align\": \"right\" }\n  ]\n}\n```\n\nEach row is an array of cell objects (NOT an object with a `cells` property). Cell types: `raw_text` or `rich_text`. There is no `columns` property — the first row is the header. Max 100 rows, 20 columns. Multiple tables trigger `invalid_attachments` error.\n\n### markdown\n\nStandard Markdown rendering for AI app output. Messages only.\n\n```json\n{ \"type\": \"markdown\", \"text\": \"**Bold**, *italic*, [link](https://example.com)\\n\\n## Heading\\n\\n- List item\" }\n```\n\nSupports: bold, italic, strikethrough, links, headers, ordered/unordered lists, inline code, code blocks with optional syntax highlighting, block quotes, horizontal rules/dividers, tables, task lists, and character escaping. Images render as hyperlink text. Cumulative 12,000 char limit per payload. `block_id` is ignored. A single markdown block may translate into multiple Slack blocks.\n\n### context_actions\n\nFeedback and icon buttons for message-level actions. Messages only. Max 5 elements. Compatible elements: `feedback_buttons`, `icon_button`.\n\n### video\n\nEmbedded video player. Requires `links.embed:write` scope, publicly accessible URL in app's unfurl domains.\n\n### input\n\nCollects user data in modals, messages, and Home tabs. Requires `label` (plain_text, 2000 chars) and one compatible element. See [references/ELEMENTS.md](references/ELEMENTS.md) for all input element types.\n\n### plan\n\nContainer for sequential task cards, designed for AI agent output. Messages only.\n\n```json\n{\n  \"type\": \"plan\",\n  \"title\": \"Thinking completed\",\n  \"tasks\": [\n    { \"task_id\": \"t1\", \"title\": \"Fetched data\", \"status\": \"complete\" },\n    { \"task_id\": \"t2\", \"title\": \"Generating report\", \"status\": \"in_progress\" }\n  ]\n}\n```\n\nTask status values: `pending`, `in_progress`, `complete`, `error`. Each task is a `task_card` block with optional `details`, `output` (rich_text), and `sources` (url elements).\n\n### streaming agent output\n\nUse `chat.startStream`, `chat.appendStream`, and `chat.stopStream` for live AI responses. Streamed messages should be replies to a user request (`thread_ts` required on start) and require `chat:write`.\n\n`chunks` can include:\n- `markdown_text` chunks for standard Markdown text\n- `task_update` chunks for timeline-style task progress\n- `plan_update` chunks for updating a plan title\n- `blocks` chunks for arrays of Block Kit blocks\n\nSet `task_display_mode` on `chat.startStream`:\n- `timeline` (default): tasks appear individually in sequence\n- `plan`: tasks appear grouped in one plan, with the first task placement determining the plan placement\n\n`chat.stopStream` can add final `blocks` rendered after streamed `chunks` or `markdown_text`. It has a separate 50-block limit from streamed `blocks` chunks, allowing up to 100 total finalized blocks.\n\n### file\n\nRemote file reference. Read-only. Cannot be directly added to messages by apps.\n\n## Composition Objects\n\n### Option Object\n\nUsed in select menus, overflow, checkboxes, radio buttons:\n\n```json\n{\n  \"text\": { \"type\": \"plain_text\", \"text\": \"Option 1\" },\n  \"value\": \"opt_1\",\n  \"description\": { \"type\": \"plain_text\", \"text\": \"Detailed description\" }\n}\n```\n\nText max 75 chars. `value` max 150 chars. `description` optional, max 75 chars.\n\n### Confirmation Dialog\n\n```json\n{\n  \"title\": { \"type\": \"plain_text\", \"text\": \"Are you sure?\" },\n  \"text\": { \"type\": \"plain_text\", \"text\": \"This action cannot be undone.\" },\n  \"confirm\": { \"type\": \"plain_text\", \"text\": \"Yes, do it\" },\n  \"deny\": { \"type\": \"plain_text\", \"text\": \"Cancel\" },\n  \"style\": \"danger\"\n}\n```\n\n### Conversation Filter\n\nFilters conversation select menus. `include`: `im`, `mpim`, `private`, `public`.\n\n### Dispatch Action Configuration\n\nControls when input elements trigger `block_actions`: `on_enter_pressed`, `on_character_entered`.\n\nSee [references/COMPOSITION.md](references/COMPOSITION.md) for full property tables.\n\n## Limits\n\n| Constraint | Limit |\n|-----------|-------|\n| Blocks per message | 50 |\n| Blocks per modal/Home tab | 100 |\n| Section text | 3000 chars |\n| Section fields | 10 items, 2000 chars each |\n| Header text | 150 chars |\n| Context elements | 10 |\n| Actions elements | 25 |\n| Context actions elements | 5 |\n| Alert levels | `default`, `info`, `warning`, `error`, `success` |\n| Card title/subtitle | 150 chars |\n| Card body | 200 chars |\n| Carousel cards | 1-10 |\n| Table rows | 100 |\n| Table columns | 20 |\n| Tables per message | 1 |\n| Markdown block text | 12,000 chars cumulative per payload |\n| Modal title | 24 chars |\n| Modal submit/close text | 24 chars |\n| Modal views in stack | 3 |\n| Modal private_metadata | 3000 chars |\n| Button text | 75 chars (displays ~30) |\n| Button value | 2000 chars |\n| action_id / block_id | 255 chars |\n| Overflow options | 5 |\n| Select options | 100 |\n| Option text | 75 chars |\n| Placeholder text | 150 chars |\n| File input max file size | 10MB per file |\n\n## Anti-Patterns\n\n| Anti-Pattern | Problem | Fix |\n|--------------|---------|-----|\n| Blocks without `text` fallback | Empty notifications, no accessibility fallback | Always provide `text` in `chat.postMessage` |\n| `text` and `blocks` diverge | Confusing: notification says one thing, chat shows another | Keep semantically aligned |\n| Blocks for simple replies | Visual noise for short responses | Use `text` only for simple replies |\n| 2+ tables in one message | `invalid_attachments` error | One table per message |\n| Using blog-nested `card`/`alert` payloads | Invalid against current reference docs | Put `title`, `body`, `text`, and `level` directly on the block |\n| `mrkdwn` in header text | Ignored — headers only accept `plain_text` | Use `plain_text` type |\n| Long header text | Silently truncated at 150 chars | Keep under 150 |\n| Missing `alt_text` on images | Accessibility failure, API may reject | Always include alt_text |\n\n## Best Practices\n\n**Use blocks when:**\n- The response has multiple distinct sections (summaries, reports, dashboards)\n- Two-column key-value layouts improve readability (metadata, config summaries)\n- A table presents data more clearly than prose\n- Visual separation between topics helps comprehension\n- Code needs a header or surrounding context\n- Interactive elements (buttons, menus, feedback) are needed\n\n**Don't use blocks when:**\n- The response is conversational (\"sure, done\", \"hey, good morning\")\n- The response is under ~3 lines of text\n- The content is a simple answer to a direct question\n\n**Always:**\n- Provide a complete `text` field as the accessible fallback (notifications, threads, search, screen readers)\n- Keep the `text` and `blocks` semantically aligned\n- Use mrkdwn syntax in text objects, not standard Markdown (except in `markdown` blocks)\n- Escape `&`, `<`, `>` in user-generated content\n\n## Surfaces Overview\n\n| Surface | Max Blocks | Key Methods | Notes |\n|---------|-----------|-------------|-------|\n| Messages | 50 | `chat.postMessage`, `chat.update` | Primary output surface |\n| Modals | 100 | `views.open`, `views.update`, `views.push` | Requires `trigger_id` (3s expiry), up to 3 stacked views |\n| App Home | 100 | `views.publish` | Private per-user view, Home/Messages/About tabs |\n| Canvases | N/A | `canvases.create`, `canvases.edit` | Markdown only — no Block Kit support |\n| Lists | N/A | `lists.*` API methods | Task tracking and project management |\n| Split View | N/A | Agents & AI Apps config | AI chat surface with Chat + History tabs |\n\nModals collect input via `input` blocks, return `view_submission` payloads. They chain up to 3 views with push/update/clear response actions. `private_metadata` (3000 chars) persists context between views.\n\n## Work Objects\n\nWork Objects render rich entity previews when links are shared in Slack. They extend link unfurling with structured data, flexpane details, editable fields, and actions.\n\n### Entity Types\n\n| Type | Entity ID | Purpose |\n|------|-----------|---------|\n| File | `slack#/entities/file` | Documents, spreadsheets, images |\n| Task | `slack#/entities/task` | Tickets, to-dos, work items |\n| Incident | `slack#/entities/incident` | Service interruptions, outages |\n| Content Item | `slack#/entities/content_item` | Articles, pages, wiki entries |\n| Item | `slack#/entities/item` | General-purpose entity |\n\nWork Objects use `chat.unfurl` with a `metadata` parameter containing entity type, external reference, and entity payload. See [references/WORK-OBJECTS.md](references/WORK-OBJECTS.md) for full implementation details.\n\n## Reference Documentation\n\n| File | Purpose |\n|------|---------|\n| [references/CHEATSHEET.md](references/CHEATSHEET.md) | Quick reference: all blocks, elements, limits at a glance |\n| [references/BLOCKS.md](references/BLOCKS.md) | All 18 block types with full property tables and constraints |\n| [references/ELEMENTS.md](references/ELEMENTS.md) | All 20 interactive elements with properties and constraints |\n| [references/COMPOSITION.md](references/COMPOSITION.md) | Composition objects: text, option, confirmation, filters |\n| [references/RICH-TEXT.md](references/RICH-TEXT.md) | Rich text block deep dive: sub-elements, inline types, styles |\n| [references/SURFACES.md](references/SURFACES.md) | Modals, App Home, canvases, lists, split view |\n| [references/WORK-OBJECTS.md](references/WORK-OBJECTS.md) | Entity types, chat.unfurl, flexpane, editable fields, actions |\n\n## Sources\n\n- [Block Kit Reference](https://docs.slack.dev/reference/block-kit) — Slack\n- [Block Kit Blocks](https://docs.slack.dev/reference/block-kit/blocks) — Slack\n- [Alert Block](https://docs.slack.dev/reference/block-kit/blocks/alert-block) — Slack\n- [Card Block](https://docs.slack.dev/reference/block-kit/blocks/card-block) — Slack\n- [Carousel Block](https://docs.slack.dev/reference/block-kit/blocks/carousel-block) — Slack\n- [Block Kit Elements](https://docs.slack.dev/reference/block-kit/block-elements) — Slack\n- [Block Kit Composition Objects](https://docs.slack.dev/reference/block-kit/composition-objects) — Slack\n- [Streaming Messages](https://docs.slack.dev/reference/methods/chat.startStream/) — Slack\n- [Work Objects](https://docs.slack.dev/messaging/work-objects) — Slack\n- [Surfaces](https://docs.slack.dev/surfaces) — Slack\n- [Modals](https://docs.slack.dev/surfaces/modals) — Slack\n- [App Home](https://docs.slack.dev/surfaces/app-home) — Slack\n- [Canvases](https://docs.slack.dev/surfaces/canvases) — Slack\n- [Lists](https://docs.slack.dev/surfaces/lists) — Slack\n- [Split View](https://docs.slack.dev/surfaces/split-view) — Slack\n- [App Design](https://docs.slack.dev/surfaces/app-design) — Slack","tags":["slack","block","kit","robust","skills","ccheney","agent-skills","clean-architecture","domain-driven-design","drizzle-orm","feature-sliced-design","hexagonal-architecture"],"capabilities":["skill","source-ccheney","skill-slack-block-kit","topic-agent-skills","topic-clean-architecture","topic-domain-driven-design","topic-drizzle-orm","topic-feature-sliced-design","topic-hexagonal-architecture","topic-mermaid-diagrams","topic-modern-javascript","topic-postgres","topic-skills","topic-slack-block-kit","topic-slack-mrkdwn"],"categories":["robust-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/ccheney/robust-skills/slack-block-kit","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add ccheney/robust-skills","source_repo":"https://github.com/ccheney/robust-skills","install_from":"skills.sh"}},"qualityScore":"0.469","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 39 github stars · SKILL.md body (18,590 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-01T18:56:47.831Z","embedding":null,"createdAt":"2026-04-18T22:18:46.721Z","updatedAt":"2026-05-01T18:56:47.831Z","lastSeenAt":"2026-05-01T18:56:47.831Z","tsv":"'-10':218,751,1549 '/chart.png':803 '/entities/content_item':2038 '/entities/file':2016 '/entities/incident':2031 '/entities/item':2045 '/entities/task':2022 '/messaging/work-objects)':2207 '/reference/block-kit)':2155 '/reference/block-kit/block-elements)':2187 '/reference/block-kit/blocks)':2162 '/reference/block-kit/blocks/alert-block)':2168 '/reference/block-kit/blocks/card-block)':2174 '/reference/block-kit/blocks/carousel-block)':2180 '/reference/block-kit/composition-objects)':2195 '/reference/methods/chat.startstream/)':2201 '/surfaces)':2212 '/surfaces/app-design)':2245 '/surfaces/app-home)':2223 '/surfaces/canvases)':2228 '/surfaces/lists)':2233 '/surfaces/modals)':2217 '/surfaces/split-view)':2239 '/views.publish':25 '0.1':887 '00':674,685 '000':1094,1564 '1':217,246,750,1399,1402,1548,1559 '10':185,456,508,1512,1523 '100':242,1026,1361,1505,1552,1609,1894,1910 '10mb':1623 '12':1093,1563 '12ms':983 '150':163,374,727,1416,1519,1540,1616,1732,1736 '18':2091 '2':1678 '20':244,1028,1555,2103 '200':731,1544 '2000':460,1165,1514,1596 '2026':521 '24':1571,1576 '25':195,540,1526 '255':1602 '3':104,1582,1823,1905,1967 '30':1593 '3000':452,785,1508,1586,1975 '3s':1901 '40':875 '5':1127,1530,1606 '50':1351,1500,1887 '75':1412,1421,1590,1612 '9':520,673,684 'accept':597,1719 'access':1144,1641,1742,1845 'accessori':176,400,475 'action':35,194,279,529,544,558,561,580,644,689,699,718,1114,1123,1440,1472,1480,1524,1528,1598,1972,2007,2148 'ad':1375 'add':1337 'advanc':819 'agent':290,635,1188,1242,1942 'ai':20,289,1041,1187,1251,1943,1946 'alert':202,588,614,1531,1695,2164 'align':986,988,990,1662,1858 'allow':1358 'alt':777,804,1738,1749 'alway':1643,1747,1837 'anoth':1659 'answer':103,1832 'anti':1627,1630 'anti-pattern':1626,1629 'api':10,973,1744,1932 'app':58,1042,1147,1379,1908,1944,2134,2219,2241 'appear':1315,1321 'append':945 'appli':6 'approv':553,560,563 'array':721,996,1301 'articl':2039 'attach':947,1034,1684 'attribut':654 'b':772 'best':1751 'blo':42 'block':3,13,29,32,34,36,38,40,44,66,86,97,109,116,124,129,137,143,149,151,311,330,339,344,348,351,357,359,360,391,739,830,911,1072,1077,1099,1106,1112,1230,1298,1303,1305,1339,1352,1356,1364,1479,1497,1501,1561,1600,1634,1650,1663,1711,1754,1808,1856,1871,1882,1926,1958,2082,2092,2122,2150,2157,2159,2165,2171,2177,2182,2189 'blockquot':915 'blog':1692 'blog-nest':1691 'bodi':166,646,676,714,729,1543,1704 'bold':74,365,855,925,1050,1062 'border':906 'bot':528 'bottom':949 'broadcast':935 'build':49 'bullet':862,900 'button':145,190,476,488,532,547,564,691,723,1118,1132,1134,1391,1588,1594,1800 'call':15,26 'callout':201,589 'cancel':1457 'cannot':1372,1441 'canvas':1919,2136,2225 'canvases.create':1921 'canvases.edit':1922 'card':210,219,303,626,657,738,752,758,766,1184,1229,1538,1542,1547,1694,2170 'cards/options':215 'carousel':216,733,755,1546,2176 'cell':998,1005,1007 'center':989 'chain':1964 'channel':933 'char':164,375,453,461,728,732,786,1095,1166,1413,1417,1422,1509,1515,1520,1541,1545,1565,1572,1577,1587,1591,1597,1603,1613,1617,1733,1976 'charact':1085,1485 'chart':809 'chat':1269,1657,1947,1950 'chat.appendstream':1246 'chat.postmessage':14,1647,1888 'chat.startstream':1245,1311 'chat.stopstream':1248,1335 'chat.unfurl':2053,2144 'chat.update':1889 'checkbox':486,1389 'chunk':1271,1276,1283,1292,1299,1343,1357 'clear':1782 'code':131,829,910,928,1070,1071,1791 'col':245 'collect':282,1152,1954 'color':937 'column':119,396,416,984,1017,1029,1554,1767 'compact':205,627 'compar':214 'compat':474,1129,1169 'complet':1197,1206,1222,1840 'composit':1380,2112,2191 'comprehens':1790 'config':1775,1945 'configur':1473 'confirm':593,1423,1444,2116 'conflict':620 'confus':1652 'constraint':1495,2099,2109 'contain':749,1180,2058 'content':18,253,312,328,390,1828,1877,2035 'context':41,136,182,278,494,512,1113,1521,1527,1797,1978 'control':1474 'convers':100,1460,1463,1813 'critic':60 'cumul':1092,1566 'current':651,1699 'daili':662 'danger':568,1459 'dashboard':115,1764 'data':123,128,240,342,940,1154,1204,1780,2001 'date':192,537,936 'datepick':478 'decis':92 'deep':837,2123 'default':573,603,609,611,1313,1533 'deni':1452 'depend':619 'deploy':527,623,806,815 'deploy-bot':526 'descript':1403,1409,1418 'design':1185,2242 'detail':1233,1408,2003,2072 'detect':621 'determin':1331 'dialog':1424 'direct':1374,1708,1835 'dispatch':1471 'display':469,1308,1592 'distinct':1760 'dive':838,2124 'diverg':1651 'divid':39,189,490,493 'doc':1701 'docs.slack.dev':2154,2161,2167,2173,2179,2186,2194,2200,2206,2211,2216,2222,2227,2232,2238,2244 'docs.slack.dev/messaging/work-objects)':2205 'docs.slack.dev/reference/block-kit)':2153 'docs.slack.dev/reference/block-kit/block-elements)':2185 'docs.slack.dev/reference/block-kit/blocks)':2160 'docs.slack.dev/reference/block-kit/blocks/alert-block)':2166 'docs.slack.dev/reference/block-kit/blocks/card-block)':2172 'docs.slack.dev/reference/block-kit/blocks/carousel-block)':2178 'docs.slack.dev/reference/block-kit/composition-objects)':2193 'docs.slack.dev/reference/methods/chat.startstream/)':2199 'docs.slack.dev/surfaces)':2210 'docs.slack.dev/surfaces/app-design)':2243 'docs.slack.dev/surfaces/app-home)':2221 'docs.slack.dev/surfaces/canvases)':2226 'docs.slack.dev/surfaces/lists)':2231 'docs.slack.dev/surfaces/modals)':2215 'docs.slack.dev/surfaces/split-view)':2237 'document':2017,2074 'domain':1150 'done':1815 'dos':2026 'due':441 'edit':2004,2146 'either':443,780 'element':148,196,238,288,401,500,506,509,513,531,541,545,724,756,824,843,848,863,868,880,890,917,1128,1130,1170,1177,1240,1477,1522,1525,1529,1799,2083,2105,2127,2184 'embed':259,1136 'emoji':386,554,931 'empti':1638 'enter':1482,1486 'entiti':206,631,1987,2008,2011,2049,2059,2064,2142 'entri':2042 'error':606,884,1035,1223,1536,1685 'escap':1086,1872 'everi':670 'example.com':802,1053 'example.com/chart.png':801 'except':82,1868 'expand':463 'expiri':1902 'extend':1996 'extern':2061 'failur':1743 'fallback':1637,1642,1846 'feb':519 'feedback':144,275,1115,1131,1802 'fetch':1203 'field':126,175,318,397,417,422,446,454,703,1511,1842,2005,2147 'file':227,267,269,789,1365,1367,1618,1621,1625,2014,2075 'filter':1461,1462,2117 'final':1338,1363 'find':853 'first':1020,1328 'fix':1633 'flexpan':2002,2145 'forc':466 'form':324 'format':228,315,791,820 'framework':47 'full':467,1491,2070,2095 'general':2047 'general-purpos':2046 'generat':8,251,327,335,1211,1876 'gif':795 'glanc':2087 'good':1817 'green':567 'group':736,1322 'head':133,346,1056 'header':37,160,350,363,378,1024,1066,1517,1714,1717,1727,1794 'healthi':978 'help':1789 'hero':641,706 'hey':1816 'highlight':1076 'histori':1951 'home':59,1159,1909,2135,2220 'home/messages/about':1917 'horizont':187,734,1079 'hyperlink':1090 'icon':704,1117,1133 'id':559,581,700,1100,1200,1208,1599,1601,1900,2012 'ignor':1102,1716 'im':1467 'imag':183,221,222,223,489,505,642,707,709,773,775,781,798,799,1087,1741,2019 'image/actions':212 'implement':2071 'improv':1772 'incid':2029 'includ':1273,1466,1748 'indent':904 'individu':1316 'info':181,604,1534 'inlin':916,1069,2128 'input':284,286,1151,1176,1476,1619,1955,1957 'insid':65,304 'interact':51,147,530,1798,2104 'interrupt':2033 'invalid':1033,1683,1697 'ital':926,1051,1063 'item':457,1060,1513,2028,2036,2043 'jpeg':794 'jpg':793 'json':376,402,419,491,510,542,612,655,753,796,839,950,1046,1192,1392,1425 'keep':1660,1734,1852 'key':121,170,852,1769,1883 'key-valu':120,169,1768 'kit':4,30,45,67,1304,1927,2151,2158,2183,2190 'label':287,317,1162 'larg':157,364 'last':517,680 'latenc':872,968 'layout':52,354,418,1771 'least':638 'left':987 'level':602,624,1122,1532,1707 'limit':1096,1353,1494,1496,2084 'line':105,1824 'link':930,1052,1065,1990,1997 'links.embed':264,1140 'list':231,828,860,898,1059,1068,1083,1929,1931,2137,2230 'lists/code':337 'live':1250 'llm':250,326,334 'llm-gener':249,325,333 'log':698,702 'long':323,1726 'long-form':322 'manag':1938 'markdown':79,85,90,252,254,310,329,338,347,358,1036,1038,1048,1105,1274,1279,1345,1560,1867,1870,1923 'markup':62 'max':165,186,197,373,451,455,459,507,539,726,730,784,1025,1126,1411,1415,1420,1620,1881 'may':1107,1745 'md':256,332 'menus':191,481,485,534,536,1387,1465,1801 'messag':55,257,280,296,587,944,1044,1121,1124,1157,1190,1254,1377,1499,1558,1682,1689,1886,2198 'message-level':1120 'metadata':178,499,1585,1774,1974,2056 'method':1884,1933 'metric':816 'miss':1737 'mix':352 'modal':56,285,1156,1569,1573,1578,1583,1893,1953,2133,2214 'modal/home':1503 'mode':1309 'morn':1818 'mpim':1468 'mrkdwn':72,308,319,407,424,429,434,439,501,515,523,601,617,660,667,678,761,769,1712,1860 'msg':248 'multi':111,483 'multi-sect':110 'multi-select':482 'multipl':213,1030,1110,1759 'must':582,748 'mute':496 'n':1054,1055,1057,1058 'n/a':1920,1930,1941 'nactiv':427 'nall':411 'nchris':432 'need':140,345,1792,1804 'nest':235,823,1693 'next':746 'nfriday':442 'nhigh':437 'nois':1668 'note':1885 'notif':1639,1653,1847 'object':69,503,710,717,790,999,1002,1381,1383,1864,1982,1984,2051,2113,2192,2204 'offset':905 'omit':571 'one':399,577,639,941,1168,1324,1655,1681,1686 'oper':413 'opt':1401 'option':211,741,763,771,923,1074,1232,1382,1398,1419,1605,1608,1610,2115 'order':902 'ordered/unordered':1067 'outag':2034 'output':1043,1189,1234,1243,1891 'overflow':477,535,1388,1604 'overview':362,1879 'owner':431 'page':2040 'pair':172 'paragraph':895 'paramet':2057 'pattern':1628,1631 'payload':11,1098,1568,1696,1962,2065 'pend':1219 'per':247,578,943,1097,1498,1502,1557,1567,1624,1688,1914 'per-us':1913 'persist':1977 'picker':193,538 'placehold':1614 'placement':1330,1334 'plain':161,370,381,550,598,694,812,1163,1395,1405,1428,1436,1446,1454,1720,1723 'plan':293,305,1179,1194,1290,1296,1319,1325,1333 'player':261,1138 'png':792 'practic':1752 'preformat':909 'present':1779 'press':1483 'preview':209,629,1988 'primari':389,557,566,575,1890 'prioriti':436 'privat':1469,1584,1912,1973 'proactiv':5 'problem':1632 'programmat':340 'progress':1215,1221,1289 'project':409,1937 'properti':1006,1018,1492,2096,2107 'prose':355,1784 'provid':779,1644,1838 'public':783,1143,1470 'purpos':2013,2048,2076 'push/update/clear':1970 'put':1702 'question':1836 'quick':91,2079 'quot':232,832,914,1078 'radio':487,1390 'rate':808,885 'raw':955,960,965,970,975,980,1009 'read':271,1370 'read-on':270,1369 'readabl':1773 'reader':1851 'recommend':742 'record':633 'red':569 'reduc':873 'refer':268,1368,1700,2062,2073,2080,2152 'references/blocks.md':2088,2089 'references/cheatsheet.md':2077,2078 'references/composition.md':1488,1489,2110,2111 'references/elements.md':1172,1173,2100,2101 'references/rich-text.md':834,835,2118,2119 'references/surfaces.md':2131,2132 'references/work-objects.md':2067,2068,2140,2141 'reject':1746 'remind':664 'remot':266,274,1366 'render':156,1039,1088,1340,1985 'repli':101,1257,1666,1677 'report':114,1212,1763 'request':1261 'requir':263,447,648,1139,1161,1264,1268,1898 'respons':21,98,1252,1671,1757,1811,1820,1971 'result':636,744 'return':1959 'rich':50,233,817,841,845,858,865,877,892,896,907,912,1012,1235,1986,2120 'right':991 'risk':592 'row':243,953,993,1021,1027,1551 'rules/dividers':1080 'run':669,681 'say':1654 'scannabl':628 'scope':1142 'screen':1850 'scrollabl':735 'search':743,1849 'secondari':180 'section':33,112,125,158,173,368,384,388,404,421,847,867,879,894,920,1506,1510,1761 'section/context':321 'section/header':356 'see':471,833,1171,1487,2066 'select':480,484,533,1386,1464,1607 'semant':1661,1857 'separ':139,188,1350,1786 'sequenc':1318 'sequenti':294,1182 'servic':958,2032 'set':462,579,985,1306 'sever':203 'share':1992 'short':102,314,1670 'show':1658 'silent':1729 'simpl':1665,1676,1831 'singl':298,1104 'size':653,1622 'skill' 'skill-slack-block-kit' 'slack':2,9,31,43,54,71,226,788,1111,1994,2015,2021,2030,2037,2044,2156,2163,2169,2175,2181,2188,2196,2202,2208,2213,2218,2224,2229,2234,2240,2246 'slack-block-kit':1 'small':177,495 'sourc':273,313,525,1238,2149 'source-ccheney' 'spare':576 'split':1939,2138,2235 'spreadsheet':2018 'stack':1581,1906 'standalon':220,307,774 'standard':78,89,255,331,1037,1278,1866 'standup':663 'start':1266 'status':198,301,410,426,591,687,963,1205,1213,1217 'step':292,747 'stream':19,1241,1253,1342,1355,2197 'strike':927 'strikethrough':1064 'structur':17,353,2000 'style':556,565,826,854,861,899,924,1287,1458,2130 'sub':237,889,2126 'sub-el':236,888,2125 'submiss':1961 'submit/close':1574 'subtitl':665,712 'success':200,608,688,807,1537 'summari':113,208,632,1762,1776 'support':392,825,1061,1928 'sure':1433,1814 'surfac':1878,1880,1892,1948,2209 'surround':135,1796 'syntax':73,1075,1861 'system':63,412 't1':1201 't2':1209 'tab':1160,1504,1918,1952 'tabl':130,241,343,938,942,952,1031,1081,1493,1550,1553,1556,1679,1687,1778,2097 'tables/task':336 'tabular':127,239,341,939 'task':291,295,299,302,1082,1183,1198,1199,1207,1216,1225,1228,1281,1288,1307,1314,1320,1329,1934,2020 'text':64,68,76,106,162,167,174,184,204,229,234,316,366,371,379,382,383,393,405,408,425,430,435,440,444,450,468,497,502,516,524,548,551,552,596,599,615,618,661,668,679,692,695,696,716,762,770,778,805,813,814,818,821,827,842,846,850,851,859,866,870,871,878,882,883,893,897,908,913,921,956,957,961,962,966,967,971,972,976,977,981,982,1010,1013,1049,1091,1164,1236,1275,1280,1346,1393,1396,1397,1406,1407,1410,1429,1430,1434,1437,1438,1447,1448,1455,1456,1507,1518,1562,1575,1589,1611,1615,1636,1645,1648,1673,1705,1715,1721,1724,1728,1739,1750,1826,1841,1854,1863,2114,2121 'thing':1656 'think':1196 'thread':1262,1848 'thumb':276 'ticket':2023 'timelin':1286,1312 'timeline-styl':1285 'timepick':479 'titl':159,369,385,643,658,711,759,767,810,1195,1202,1210,1297,1426,1570,1703 'title/subtitle':725,1539 'to-do':2024 'today':682 'topic':142,1788 'topic-agent-skills' 'topic-clean-architecture' 'topic-domain-driven-design' 'topic-drizzle-orm' 'topic-feature-sliced-design' 'topic-hexagonal-architecture' 'topic-mermaid-diagrams' 'topic-modern-javascript' 'topic-postgres' 'topic-skills' 'topic-slack-block-kit' 'topic-slack-mrkdwn' 'total':1362 'track':1935 'translat':1108 'tree':93 'trigger':27,1032,1478,1899 'true':387,464,555,856 'truncat':473,1730 'ts':1263 'two':61,118,395,415,1766 'two-column':117,394,414,1765 'type':99,152,361,377,380,403,406,420,423,428,433,438,492,511,514,522,543,546,549,613,616,656,659,666,677,690,693,754,757,760,765,768,797,811,840,844,849,857,864,869,876,881,891,918,951,954,959,964,969,974,979,1008,1047,1178,1193,1394,1404,1427,1435,1445,1453,1725,2009,2010,2060,2093,2129,2143 'ui':46 'underlin':929 'undon':1443 'unfurl':1149,1998 'uniqu':584 'up/down':277 'updat':518,1282,1291,1294 'urgenc':595 'url':75,224,782,800,1145,1239 'use':70,88,96,574,1244,1384,1672,1690,1722,1753,1807,1859,2052 'user':283,932,1153,1260,1875,1915 'user-gener':1874 'usergroup':934 'valu':122,171,562,1218,1400,1414,1595,1770 'via':1956 'video':260,262,1135,1137 'view':697,701,1579,1907,1916,1940,1960,1968,1980,2139,2236 'views.open':24,1895 'views.open/views.publish':23 'views.publish':1911 'views.push':1897 'views.update':1896 'visual':138,1667,1785 'warn':199,605,625,1535 'weekday':671 'wiki':2041 'within':585,919 'without':470,1635 'work':1981,1983,2027,2050,2203 'write':265,1141,1270 'yes':1449","prices":[{"id":"ed9f46b9-058b-4f21-be98-19d66233d2ee","listingId":"93fe53a5-6a5c-41ca-91fa-5ef3b89074f2","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"ccheney","category":"robust-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:18:46.721Z"}],"sources":[{"listingId":"93fe53a5-6a5c-41ca-91fa-5ef3b89074f2","source":"github","sourceId":"ccheney/robust-skills/slack-block-kit","sourceUrl":"https://github.com/ccheney/robust-skills/tree/main/skills/slack-block-kit","isPrimary":false,"firstSeenAt":"2026-04-18T22:18:46.721Z","lastSeenAt":"2026-05-01T18:56:47.831Z"}],"details":{"listingId":"93fe53a5-6a5c-41ca-91fa-5ef3b89074f2","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"ccheney","slug":"slack-block-kit","github":{"repo":"ccheney/robust-skills","stars":39,"topics":["agent-skills","clean-architecture","domain-driven-design","drizzle-orm","feature-sliced-design","hexagonal-architecture","mermaid-diagrams","modern-javascript","postgres","skills","slack-block-kit","slack-mrkdwn","slack-work-objects"],"license":"mit","html_url":"https://github.com/ccheney/robust-skills","pushed_at":"2026-04-27T15:23:12Z","description":"Robust skills for Agents","skill_md_sha":"9b793e81313db41569eaa8f949594c538fb7e5c4","skill_md_path":"skills/slack-block-kit/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/ccheney/robust-skills/tree/main/skills/slack-block-kit"},"layout":"multi","source":"github","category":"robust-skills","frontmatter":{"name":"slack-block-kit","description":"Proactively apply when generating Slack API payloads with blocks, chat.postMessage calls with structured content, streaming AI responses, or views.open/views.publish calls. Triggers on Block Kit, Slack blocks, section block, actions block, header block, divider block, context block, alert block, card block, carousel block, table block, markdown block, rich text block, image block, input block, video block, context_actions block, plan block, task_card block, chat.startStream, chat.appendStream, chat.stopStream, Slack modal, Slack App Home, Slack surfaces, Slack interactive elements, Slack button, Slack select menu, Slack overflow, Slack datepicker, Slack checkboxes, Slack radio buttons, Work Objects, Slack link unfurl, chat.postMessage blocks, views.open, views.update, views.push, views.publish, Slack composition objects. Use when building Block Kit payloads, constructing blocks arrays, creating modals or App Home views, adding interactive elements, implementing link unfurling with Work Objects, streaming agent output, or designing rich message layouts. Slack Block Kit UI framework for building rich message layouts, modals, App Home views, and AI agent responses."},"skills_sh_url":"https://skills.sh/ccheney/robust-skills/slack-block-kit"},"updatedAt":"2026-05-01T18:56:47.831Z"}}