Agent skill · caffeinelabs

connector-slack

EXPERIMENTAL, UNTESTED recipe for posting messages to a Slack workspace from a Caffeine canister via the `slack-client` mops package (Slack Web API). Use it when the user wants their app to send a message to a Slack channel — "post to Slack", "notify a channel", "send a Slack message", or equivalent. The client is a pre-release 0.1.0 drop (bot `xoxb-` or user `xoxp-` token): its request path is verified against the live Slack API (a real message posts), but the success-response decode is not yet runtime-confirmed, so treat it as a starting point and do NOT present Slack as a fully supported platform feature yet. Hand-rolling `ic.http_request` calls to `slack.com/api` is still the wrong move — prefer the generated client so bearer auth, percent-encoding, and JSON parsing come for free.

What it needs

About 12k tokens when loaded.

What this skill does

Slack Connector (experimental) Post messages to a Slack workspace from a Caffeine canister. ⚠️ Experimental (slack-client@0.1.0). Verified against live Slack: the request path — a real chat.postMessage posts (the earlier query-vs-form bug is resolved; POST params go in an application/x-www-form-urlencoded body). Implemented in 0.1.0 but not yet exercised live: the success-response decode ({"ok":true,…} → the success schema) and the {"ok":false} error-envelope routing (see Known limitations for what each does). The response side is therefore code-complete but unproven — diagnostics is on, so a decode failure surfaces the raw Slack body. Don't present Slack as a fully supported platform feature until one live run confirms a decoded success reply; that condition, not a version number, is the gate. Orchestrator routing notes Load this skill when the user, spec, or a prior task mentions Slack, posting to a channel, or notifying a Slack workspace. The generated slack-client package is the preferred path; raw ic.httprequest to https://slack.com/api/ is an anti-pattern that re-implements auth, percent-encoding, and JSON parsing by hand. Intent → capability mapping: User intent Capability --- --- Post a message to a Slack channel as the app slack-client chatPostMessage with a bot token (xoxb-) Post to Slack as a named person slack-client chatPostMessage with a user token (xoxp-) Before generating code, report the token choice back to the prompting user (bot vs user — see Auth model for the one-line rule and the trade-offs) and tell them where to obtain it. They cannot proceed without pasting a token, so surfacing this early avoids an app that traps on first use. The token is something a human has to go and create, so the build is not done when the backend compiles. …

How to use it

Reference it in AdaL, Claude Code, Cursor or any coding agent — nothing to install:

@skills caffeinelabs/connector-slack

View the source on GitHub

Browse the @skills marketplace