
Messaging
- 6 installs
- Updated May 12, 2026
- tryshift-sh/skills-store
Helps with ai & agent building tasks.
About
messaging is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- messaging
- AI & Agent Building
- AI-coding skill
Messaging by the numbers
- 6 all-time installs (skills.sh)
- Ranked #12,825 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/tryshift-sh/skills-store --skill messagingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 6 |
|---|---|
| Last updated | May 12, 2026 |
| Repository | tryshift-sh/skills-store ↗ |
What it does
Helps with ai & agent building tasks.
Files
Slack Messaging
Use this skill to interact with Slack channels and messages: list channels, read conversation history, send messages, reply in threads, and add or remove reactions.
When to use
- list channels in a Slack workspace
- read recent messages in a channel
- read thread replies
- send a message to a channel or DM
- reply to a thread
- add or remove emoji reactions
Authentication
This skill uses the connected slack provider credential for the current agent.
Invocation
All actions are called through Shift's Skill Router:
curl -X POST "$SHIFT_LOCAL_GATEWAY/skill-router/invoke" \
-H "Content-Type: application/json" \
-d '{
"skillProvider": "slack",
"skill": "messaging",
"action": "list-channels",
"input": {
"limit": 20
}
}'Examples
List channels:
{
"skillProvider": "slack",
"skill": "messaging",
"action": "list-channels",
"input": {
"types": "public_channel,private_channel",
"limit": 20
}
}Get channel info:
{
"skillProvider": "slack",
"skill": "messaging",
"action": "get-channel",
"input": {
"channel": "C1234567890"
}
}List messages in a channel:
{
"skillProvider": "slack",
"skill": "messaging",
"action": "list-messages",
"input": {
"channel": "C1234567890",
"limit": 20
}
}Get thread replies:
{
"skillProvider": "slack",
"skill": "messaging",
"action": "get-thread",
"input": {
"channel": "C1234567890",
"ts": "1234567890.123456"
}
}Send a message:
{
"skillProvider": "slack",
"skill": "messaging",
"action": "send",
"input": {
"channel": "C1234567890",
"text": "Hello from Shift!"
}
}Reply in a thread:
{
"skillProvider": "slack",
"skill": "messaging",
"action": "send",
"input": {
"channel": "C1234567890",
"text": "This is a thread reply.",
"threadTs": "1234567890.123456"
}
}Add a reaction:
{
"skillProvider": "slack",
"skill": "messaging",
"action": "react",
"input": {
"channel": "C1234567890",
"timestamp": "1234567890.123456",
"name": "thumbsup"
}
}Remove a reaction:
{
"skillProvider": "slack",
"skill": "messaging",
"action": "remove-react",
"input": {
"channel": "C1234567890",
"timestamp": "1234567890.123456",
"name": "thumbsup"
}
}If the connection is missing, tell the user to configure Slack in Shift.
{
"id": "messaging",
"name": "Messaging",
"description": "List channels, read messages, send messages, reply in threads, and manage reactions in Slack.",
"actions": {
"list-channels": {
"upstream": {
"method": "GET",
"baseUrl": "https://slack.com/api",
"path": "/conversations.list",
"auth": { "mode": "bearer" }
},
"input": {
"queryTemplate": {
"types": {
"$value": "$input.types",
"$default": "public_channel,private_channel"
},
"limit": {
"$value": "$input.limit",
"$default": 20
},
"cursor": "$input.cursor",
"exclude_archived": {
"$value": "$input.excludeArchived",
"$default": true
}
}
},
"output": {
"successPath": "$response.ok",
"errorMessagePath": "$response.error",
"responseMap": {
"count": {
"$length": "$response.channels"
},
"nextCursor": "$response.response_metadata.next_cursor",
"items": {
"$each": "$response.channels",
"map": {
"id": "$item.id",
"name": "$item.name",
"topic": "$item.topic.value",
"purpose": "$item.purpose.value",
"isPrivate": "$item.is_private",
"isArchived": "$item.is_archived",
"memberCount": "$item.num_members",
"createdAt": "$item.created"
}
}
}
}
},
"get-channel": {
"upstream": {
"method": "GET",
"baseUrl": "https://slack.com/api",
"path": "/conversations.info",
"auth": { "mode": "bearer" }
},
"input": {
"queryTemplate": {
"channel": "$input.channel",
"include_num_members": true
}
},
"output": {
"successPath": "$response.ok",
"errorMessagePath": "$response.error",
"responseSelect": "channel",
"responseMap": {
"id": "$data.id",
"name": "$data.name",
"topic": "$data.topic.value",
"purpose": "$data.purpose.value",
"isPrivate": "$data.is_private",
"isArchived": "$data.is_archived",
"memberCount": "$data.num_members",
"createdAt": "$data.created",
"creator": "$data.creator"
}
}
},
"list-messages": {
"upstream": {
"method": "GET",
"baseUrl": "https://slack.com/api",
"path": "/conversations.history",
"auth": { "mode": "bearer" }
},
"input": {
"queryTemplate": {
"channel": "$input.channel",
"limit": {
"$value": "$input.limit",
"$default": 20
},
"cursor": "$input.cursor",
"oldest": "$input.oldest",
"latest": "$input.latest"
}
},
"output": {
"successPath": "$response.ok",
"errorMessagePath": "$response.error",
"responseMap": {
"count": {
"$length": "$response.messages"
},
"hasMore": "$response.has_more",
"nextCursor": "$response.response_metadata.next_cursor",
"items": {
"$each": "$response.messages",
"map": {
"type": "$item.type",
"user": "$item.user",
"text": "$item.text",
"ts": "$item.ts",
"threadTs": "$item.thread_ts",
"replyCount": "$item.reply_count",
"reactions": "$item.reactions"
}
}
}
}
},
"get-thread": {
"upstream": {
"method": "GET",
"baseUrl": "https://slack.com/api",
"path": "/conversations.replies",
"auth": { "mode": "bearer" }
},
"input": {
"queryTemplate": {
"channel": "$input.channel",
"ts": "$input.ts",
"limit": {
"$value": "$input.limit",
"$default": 20
},
"cursor": "$input.cursor"
}
},
"output": {
"successPath": "$response.ok",
"errorMessagePath": "$response.error",
"responseMap": {
"count": {
"$length": "$response.messages"
},
"hasMore": "$response.has_more",
"items": {
"$each": "$response.messages",
"map": {
"user": "$item.user",
"text": "$item.text",
"ts": "$item.ts",
"threadTs": "$item.thread_ts",
"reactions": "$item.reactions"
}
}
}
}
},
"send": {
"upstream": {
"method": "POST",
"baseUrl": "https://slack.com/api",
"path": "/chat.postMessage",
"auth": { "mode": "bearer" }
},
"input": {
"bodyTemplate": {
"channel": "$input.channel",
"text": "$input.text",
"thread_ts": "$input.threadTs",
"unfurl_links": "$input.unfurlLinks",
"unfurl_media": "$input.unfurlMedia"
}
},
"output": {
"successPath": "$response.ok",
"errorMessagePath": "$response.error",
"responseMap": {
"channel": "$response.channel",
"ts": "$response.ts",
"message": {
"text": "$response.message.text",
"user": "$response.message.user",
"ts": "$response.message.ts"
}
}
}
},
"react": {
"upstream": {
"method": "POST",
"baseUrl": "https://slack.com/api",
"path": "/reactions.add",
"auth": { "mode": "bearer" }
},
"input": {
"bodyTemplate": {
"channel": "$input.channel",
"timestamp": "$input.timestamp",
"name": "$input.name"
}
},
"output": {
"successPath": "$response.ok",
"errorMessagePath": "$response.error",
"responseMap": {
"ok": "$response.ok"
}
}
},
"remove-react": {
"upstream": {
"method": "POST",
"baseUrl": "https://slack.com/api",
"path": "/reactions.remove",
"auth": { "mode": "bearer" }
},
"input": {
"bodyTemplate": {
"channel": "$input.channel",
"timestamp": "$input.timestamp",
"name": "$input.name"
}
},
"output": {
"successPath": "$response.ok",
"errorMessagePath": "$response.error",
"responseMap": {
"ok": "$response.ok"
}
}
}
}
}