insodimension/slack
v0.1.2MIT
Slack connector — list channels, read messages, and post via the Slack Web API
What this package declares
The file a client reads when it loads this plugin, exactly as this revision carries it.
plugin.json
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "slack",
"version": "0.1.2",
"description": "Slack connector — list channels, read messages, and post via the Slack Web API",
"author": {
"name": "Dimension"
},
"license": "MIT",
"keywords": [
"slack",
"chat",
"messaging",
"webhook",
"connector"
],
"extensions": {
"ai.insodimension.dimension": {
"contractVersion": 1,
"title": "Slack",
"icon": "assets/icon.svg",
"category": "connector",
"defaultEnabled": false,
"examples": [
"Post a message to #general letting the team know the deploy is done",
"Summarize the last 20 messages in the #incidents channel",
"Find the message where someone shared the staging URL in #engineering"
],
"connect": {
"kind": [
"form"
],
"setup": [
{
"title": "Create a Slack app",
"detail": "At api.slack.com/apps click \"Create New App\" → \"From scratch\", give it a name (e.g. \"Dimension\"), and pick the workspace you want it to act in.",
"url": "https://api.slack.com/apps",
"urlLabel": "Open Slack apps"
},
{
"title": "Add Bot Token Scopes",
"detail": "In your app: OAuth & Permissions → Scopes → Bot Token Scopes → add channels:read, groups:read, channels:history, groups:history, and chat:write. These let the bot list channels, read history, and post."
},
{
"title": "Install the app to your workspace",
"detail": "OAuth & Permissions → Install App → Install to Workspace → Allow. This generates the bot token."
},
{
"title": "Copy the Bot User OAuth Token",
"detail": "Still on OAuth & Permissions, copy the \"Bot User OAuth Token\" (it starts with xoxb-) and paste it into the form below. It stays on this machine. Note: invite the bot into any channel with /invite before it can read or post there."
}
],
"form": [
{
"id": "botToken",
"label": "Bot User OAuth Token",
"secret": true,
"placeholder": "xoxb-…",
"help": "From your Slack app's OAuth & Permissions page (starts with xoxb-). Install the app to your workspace first to generate it.",
"helpUrl": "https://api.slack.com/apps",
"helpUrlLabel": "Open Slack apps"
}
],
"configTemplate": "connect/token.template.json",
"configTarget": "~/.config/dimension-slack/token.json",
"verify": {
"http": "https://slack.com/api/auth.test",
"expect": "\"ok\"\\s*:\\s*true",
"failures": [
{
"match": "invalid_auth|not_authed|token_revoked|account_inactive",
"title": "Reconnect Slack — the bot token is invalid or revoked",
"detail": "Reinstall the app to your workspace and paste the fresh xoxb- token.",
"url": "https://api.slack.com/apps",
"urlLabel": "Open Slack apps"
},
{
"match": "missing_scope",
"title": "Add the missing bot scopes",
"detail": "OAuth & Permissions → Bot Token Scopes → add channels:read, channels:history, chat:write — then reinstall the app.",
"url": "https://api.slack.com/apps",
"urlLabel": "Open Slack apps"
}
]
}
},
"toolRenderer": [
{
"match": "slack_list_channels",
"use": "summary",
"icon": "slack",
"title": "Slack channels"
},
{
"match": "slack_read_messages",
"use": "summary",
"icon": "slack",
"title": "Slack messages"
},
{
"match": "slack_post_message",
"use": "summary",
"icon": "slack",
"title": "Slack post"
},
{
"match": "slack_read_thread",
"use": "summary",
"icon": "slack",
"title": "Slack thread"
},
{
"match": "slack_reply_thread",
"use": "summary",
"icon": "slack",
"title": "Slack reply"
},
{
"match": "slack_add_reaction",
"use": "summary",
"icon": "slack",
"title": "Slack reaction"
},
{
"match": "slack_edit_message",
"use": "summary",
"icon": "slack",
"title": "Slack edit"
},
{
"match": "slack_delete_message",
"use": "summary",
"icon": "slack",
"title": "Slack delete"
},
{
"match": "slack_list_users",
"use": "summary",
"icon": "slack",
"title": "Slack users"
}
],
"skillCard": {
"skill": "slack",
"use": "summary",
"icon": "slack",
"title": "Slack"
},
"tools": [
{
"name": "slack_list_channels",
"description": "List public and private channels in the connected Slack workspace. Returns id/#name/topic per line; paginate with the returned cursor."
},
{
"name": "slack_read_messages",
"description": "Read recent messages from a Slack channel (most-recent first). Returns ts/user/text per line — ts is the message id."
},
{
"name": "slack_post_message",
"description": "Post a message to a Slack channel. DESTRUCTIVE — confirm the channel and text with the user first. Returns the posted ts + channel."
},
{
"name": "slack_read_thread",
"description": "Read the replies in a Slack thread (oldest first). Pass the parent message's ts as threadTs. Returns ts/user/text per line."
},
{
"name": "slack_reply_thread",
"description": "Reply inside a Slack thread. DESTRUCTIVE — confirm the channel, thread, and text with the user first. Returns the reply ts + channel."
},
{
"name": "slack_add_reaction",
"description": "Add an emoji reaction to a message (emoji name without colons, e.g. thumbsup). Requires the reactions:write scope."
},
{
"name": "slack_edit_message",
"description": "Edit a Slack message the bot posted (chat.update). DESTRUCTIVE — confirm the channel, ts, and new text with the user first."
},
{
"name": "slack_delete_message",
"description": "Delete a Slack message (chat.delete). IRREVERSIBLE — confirm the exact channel and message ts with the user; it cannot be undone."
},
{
"name": "slack_list_users",
"description": "List workspace members. Returns id/@name/real name per line (deleted + bots flagged). Requires the users:read scope."
}
]
}
}
}
Client extensions
Data this package carries for particular clients. The directory lists the clients named and never reads what is addressed to them.
- ai.insodimension.dimension