Skip to content
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