From devboy
Posts short structured notifications—subject, bullets, optional link—to explicitly named chats or channels like Slack, verifying target and write scopes first. Use for 'post to #eng' or 'notify the team'.
npx claudepluginhub meteora-pro/devboy-tools --plugin devboyThis skill uses the workspace's default tool permissions.
Send a one-shot, structured notification — a short subject line, 2–3 body bullets, and an optional link — to a chat or channel the user has explicitly asked you to post in. The skill confirms the target and verifies the required write scope **before** calling `send_message`; it never posts speculatively.
Sends messages and rich Block Kit content to Slack channels via webhooks or Bot API. Useful for formatted announcements, marketing reports, metrics, and updates.
Sends internal team notifications via Slack or Intercom for campaign updates, performance alerts, approval requests, and status reports with urgency levels and mentions.
Guides mrkdwn syntax, message structure, thread etiquette, and tone for effective Slack messages in dev workflows.
Share bugs, ideas, or general feedback.
Send a one-shot, structured notification — a short subject line, 2–3 body bullets, and an optional link — to a chat or channel the user has explicitly asked you to post in. The skill confirms the target and verifies the required write scope before calling send_message; it never posts speculatively.
send_message. Never post on an ambiguous signal.send_message on Slack requires the chat:write scope. The full list of scopes the devboy Slack integration expects is defined by the default_slack_required_scopes() function in crates/devboy-core/src/config.rs (channels:read, channels:history, groups:read, groups:history, im:read, im:history, mpim:read, mpim:history, chat:write, users:read). Verify the token has them before posting — see step 2 below.If the user named the chat by a handle (#eng, "the release channel", "DM to alice"), look up the chat_id:
devboy tools call get_messenger_chats '{"search": "eng", "limit": 10}'
Pick the match whose name clearly corresponds to what the user asked for. If more than one chat matches and the correct one is not obvious, stop and ask rather than guessing. Posting to the wrong channel is hard to undo.
Before the first send_message of a session, confirm the Slack token carries the required scopes. Run the built-in health check:
devboy test slack
The command prints the granted scopes and a Missing scopes line if anything on the required list is absent. Relevant for notifications:
chat:write — required to post.channels:read / groups:read / im:read / mpim:read — required for the get_messenger_chats lookup in step 1.If Missing scopes is non-empty, do not call send_message. Surface the missing-scope list back to the user with a clear remediation message, e.g.:
The Slack token is missing
chat:write. Re-issue the bot token with the scope added (channels:read,groups:read,im:read,mpim:read,chat:write, …) and re-rundevboy test slackto confirm.
The exact default list lives in default_slack_required_scopes() — follow that source rather than hardcoding the scope list in a conversation.
Keep notifications skimmable. Target format:
*Release v2.4.2 deployed*
- Rollback of v2.4.1 complete, staging + prod green
- Follow-up: regression test in MR !842
- Incident post-mortem: <https://wiki/.../incident-204|incident-204>
Conventions:
*bold*.<url|label>).*bold*, _italic_, inline `code`, and triple-backtick fences for short snippets. Do not paste long logs — link to them instead.<@U0123ABCD> for a user, <!subteam^SXXXXXXX> for a group, <!here> / <!channel> sparingly.If the user's wording left the text or the target open, show the drafted subject + bullets + target chat name and wait for a "go". If the user was explicit ("post exactly this to #eng"), skip the confirmation.
devboy tools call send_message '{
"chat_id": "C0123456789",
"text": "*Release v2.4.2 deployed*\n- Rollback of v2.4.1 complete, staging + prod green\n- Follow-up: regression test in MR !842\n- Incident post-mortem: <https://wiki/.../incident-204|incident-204>"
}'
For a threaded reply, add thread_id (or reply_to_id where the provider supports it):
devboy tools call send_message '{
"chat_id": "C0123456789",
"thread_id": "1713052800.001500",
"text": "Patch merged — closing the thread."
}'
After send_message returns, tell the user where you posted (chat name + the returned message chat_id / id / timestamp — the unified MessengerMessage does not include a permalink field, so don't promise a jump-to link) and echo the final text. If the call failed, surface the provider error verbatim — don't swallow it.
chat_id per invocation. For cross-posts, call it once per target and surface each result.send_message is the only write tool in the messenger bundle today.