Skills slack-block-kit
Send rich Slack Block Kit messages — native tables, structured layouts. Use when formatting tabular data for Slack, sending Block Kit payloads, or when markdown tables render poorly in Slack.
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/bill492/slack-block-kit" ~/.claude/skills/clawdbot-skills-slack-block-kit && rm -rf "$T"
manifest:
skills/bill492/slack-block-kit/SKILL.mdsource content
Slack Block Kit
Send native Block Kit payloads to Slack. Primary use case: tables (Slack's native
table block type).
When to Use
- Tabular data in Slack (financial summaries, comparison grids, status dashboards)
- Markdown tables render poorly or not at all in Slack — use Block Kit tables instead
Sending Block Kit Tables
Quick Path: scripts/table.mjs
scripts/table.mjsGenerate table JSON from headers + rows:
node <skill_dir>/scripts/table.mjs \ --headers '["Source","Amount","Status"]' \ --rows '[["Mochary","$11K","Pending"],["MHC","$13.4K","Invoiced"]]' \ --align '1:right' \ --compact --blocks-only
Options:
— first row (bold by default)--headers '["H1","H2"]'
— data rows--rows '[["a","b"],["c","d"]]'
— single JSON input--json '{"headers":[...],"rows":[...]}'
— read JSON from stdin--stdin
— column alignment (0-indexed)--align '<col>:<left|center|right>,...'
— columns to wrap text--wrap '<col>,...'
— plain text headers--no-bold-headers
— minified JSON--compact
— output just the blocks array (for API calls)--blocks-only
Empty cells are handled automatically (zero-width space).
Posting to Slack
The
message tool does not pass blocks through. Use the Slack API directly:
BLOCKS=$(node <skill_dir>/scripts/table.mjs --compact --blocks-only \ --headers '["Col A","Col B"]' \ --rows '[["val1","val2"]]') curl -s -X POST https://slack.com/api/chat.postMessage \ -H "Authorization: Bearer $SLACK_BOT_TOKEN" \ -H "Content-Type: application/json" \ -d "$(jq -n \ --arg channel "$CHANNEL_ID" \ --arg thread "$THREAD_TS" \ --argjson blocks "$BLOCKS" \ '{channel: $channel, thread_ts: $thread, text: "Fallback text", blocks: $blocks}')"
The bot token is in
openclaw.json at channels.slack.botToken. The text field is required (accessibility fallback) but won't display when blocks render.
Table Block Constraints
- 1 table per message (Slack limit)
- Max 100 rows, max 20 columns
- Cells:
(plain) orraw_text
(bold, links, mentions)rich_text - Empty text is not allowed — the script uses zero-width spaces automatically
Combining Text + Table
Post your text message first via
message tool, then post the table in the same thread via curl. Or include a section block before the table in the blocks array.
Manual Block Kit JSON
For non-table blocks or custom layouts, construct the JSON directly. Reference: https://docs.slack.dev/reference/block-kit/blocks/table-block/
Cell with bold text:
{"type": "rich_text", "elements": [{"type": "rich_text_section", "elements": [{"type": "text", "text": "Bold", "style": {"bold": true}}]}]}
Plain text cell:
{"type": "raw_text", "text": "Plain"}