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.md
source 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

Generate 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:

  • --headers '["H1","H2"]'
    — first row (bold by default)
  • --rows '[["a","b"],["c","d"]]'
    — data rows
  • --json '{"headers":[...],"rows":[...]}'
    — single JSON input
  • --stdin
    — read JSON from stdin
  • --align '<col>:<left|center|right>,...'
    — column alignment (0-indexed)
  • --wrap '<col>,...'
    — columns to wrap text
  • --no-bold-headers
    — plain text headers
  • --compact
    — minified JSON
  • --blocks-only
    — output just the blocks array (for API calls)

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:
    raw_text
    (plain) or
    rich_text
    (bold, links, mentions)
  • 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"}