mcpField
A
agent-slack

agent-slack

github.com/letta-aiProductivity152169 installsUpdated 4w ago
Repository

About agent-slack

agent-slack is a command-line skill for reading, searching, and managing Slack messages, channels, users, and workflows. It is intended for people automating Slack tasks through shell commands.

Key features

  1. 01Read messages and threads
  2. 02Search messages and files
  3. 03Send, edit, delete, and react to messages
  4. 04Manage channels, users, and workflows
  5. 05Download message attachments

Use cases

  1. 01Find recent messages matching a topic
  2. 02Send or update messages in channels
  3. 03Create channels and invite participants
  4. 04Inspect Slack workflow definitions

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/letta-ai/skills --skill agent-slack

After installing, type/agent-slackin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

LICENSE
assets/
slack-small.svg
references/
commands.md
output.md
targets.md

Details

From the project README

Slack automation with agent-slack

agent-slack is a CLI binary on $PATH. Invoke directly (e.g. agent-slack user list).

Setup

1. Install the CLI

If agent-slack is not found on $PATH, install it:

curl -fsSL https://raw.githubusercontent.com/stablyai/agent-slack/main/install.sh | sh

Alternatives: npm i -g agent-slack (requires Node >= 22.5) or nix run github:stablyai/agent-slack.

2. Authenticate with Slack

If you have Slack Desktop installed and signed in, authentication is automatic — no setup needed. Run this to verify:

agent-slack auth test

If that fails (or you don't have Slack Desktop), try importing credentials from your browser:

# Try Chrome first, then Firefox
agent-slack auth import-chrome
agent-slack auth test
agent-slack auth import-firefox
agent-slack auth test

If neither works, you can set tokens manually via environment variables:

export SLACK_TOKEN="xoxc-..."      # browser token
export SLACK_COOKIE_D="xoxd-..."   # browser cookie
agent-slack auth test
3. Verify

Check which workspaces are configured:

agent-slack auth whoami

If you have multiple workspaces, pass --workspace "myteam" to commands to disambiguate.

Canonical workflow (given a Slack message URL)

  1. Fetch a single message (plus thread summary, if any):
agent-slack message get "https://workspace.slack.com/archives/C123/p1700000000000000"
  1. If you need the full thread:
agent-slack message list "https://workspace.slack.com/archives/C123/p1700000000000000"

Browse recent channel messages

To see what's been posted recently in a channel (channel history):

agent-slack message list "general" --limit 20
agent-slack message list "C0123ABC" --limit 10
agent-slack message list "general" --with-reaction eyes --oldest "1770165109.000000" --limit 20
agent-slack message list "general" --without-reaction dart --oldest "1770165109.000000" --limit 20

This returns the most recent messages in chronological order. Use --limit to control how many (default 25). When using --with-reaction or --without-reaction, you must also pass --oldest to bound scanning.

Attachments (snippets/images/files)

message get/list and search auto-download attachments to ~/.agent-slack/tmp/downloads/ and return metadata in message.files[] (including name and path). Failed downloads include a message.files[].error field.

Draft a message (browser editor)

Opens a Slack-like rich-text editor in the browser for composing messages with formatting toolbar (bold, italic, strikethrough, links, lists, quotes, code, code blocks). After sending, shows a "View in Slack" link.

agent-slack message draft "general"
agent-slack message draft "general" "initial text"
agent-slack message draft "https://workspace.slack.com/archives/C123/p1700000000000000"

Send, edit, delete, or react

agent-slack message send "https://workspace.slack.com/archives/C123/p1700000000000000" "I can take this."
agent-slack message send "alerts-staging" "here's the report" --attach ./report.md
agent-slack message edit "https://workspace.slack.com/archives/C123/p1700000000000000" "I can take this today."
agent-slack message delete "https://workspace.slack.com/archives/C123/p1700000000000000"

agent-slack message send "general" "Here's the plan:
- Step 1: do the thing
- Step 2: verify it worked
  - Sub-step: check logs"
agent-slack message react add "https://workspace.slack.com/archives/C123/p1700000000000000" "eyes"
agent-slack message react remove "https://workspace.slack.com/archives/C123/p1700000000000000" "eyes"

Channel mode for edit/delete requires --ts:

agent-slack message edit "general" "Updated text" --workspace "myteam" --ts "1770165109.628379"
agent-slack message delete "general" --workspace "myteam" --ts "1770165109.628379"

Attach options for message send:

  • --attach <path> upload a local file (repeatable)

List channels + create/invite users

agent-slack channel list
agent-slack channel list --user "@alice" --limit 50
agent-slack channel list --all --limit 100
agent-slack channel new --name "incident-war-room"
agent-slack channel new --name "incident-leads" --private
agent-slack channel invite --channel "incident-war-room" --users "U01AAAA,@alice,[email protected]"
agent-slack channel invite --channel "incident-war-room" --users "[email protected]" --external
agent-slack channel invite --channel "incident-war-room" --users "[email protected]" --external --allow-external-user-invites

For --external, invite targets must be emails. By default, invitees are external-limited; add --allow-external-user-invites to allow them to invite other users.

Search (messages + files)

Prefer channel-scoped search for reliability:

agent-slack search all "smoke tests failed" --channel "alerts" --after 2026-01-01 --before 2026-02-01
agent-slack search messages "stably test" --user "@alice" --channel general
agent-slack search files "testing" --content-type snippet --limit 10

Multi-workspace guardrail (important)

If you have multiple workspaces configured and you use a channel name (e.g. general), pass --workspace (or set SLACK_WORKSPACE_URL) to avoid ambiguity:

agent-slack message get "general" --workspace "https://myteam.slack.com" --ts "1770165109.628379"
agent-slack message get "general" --workspace "myteam" --ts "1770165109.628379"

DM / group DM channels

Get the channel ID for a DM or group DM, useful for sending messages to a group of users:

agent-slack user dm-open @alice @bob
agent-slack user dm-open U01AAAA U02BBBB U03CCCC

Mark as read

Mark a channel, DM, or group DM as read up to a given message:

agent-slack channel mark "https://workspace.slack.com/archives/C123/p1700000000000000"
agent-slack channel mark "general" --workspace "myteam" --ts "1770165109.628379"
agent-slack channel mark "D0A04PB2QBW" --workspace "myteam" --ts "1770165109.628379"

To make a specific message appear unread, set --ts to just before it (subtract 0.000001). This moves the read cursor so that message and everything after it appear as new:

agent-slack channel mark "general" --workspace "myteam" --ts "1770165109.628378"

Workflows

Discover and run Slack workflows bookmarked in channels:

# List workflows in a channel
agent-slack workflow list "#ops"

# Preview trigger metadata (no side effects)
agent-slack workflow preview "Ft123ABC"

# Get workflow definition including form fields and steps
agent-slack workflow get "Ft123ABC"
agent-slack workflow get "Wf456DEF"

# Trip a workflow trigger
agent-slack workflow run "Ft123ABC" --channel "#ops"

Canvas + Users

agent-slack canvas get "https://workspace.slack.com/docs/T123/F456"
agent-slack user list --workspace "https://workspace.slack.com" --limit 100
agent-slack user get "@alice" --workspace "https://workspace.slack.com"

References

  • references/commands.md: full command map + all flags
  • references/targets.md: URL vs #channel targeting rules
  • references/output.md: JSON output shapes + download paths

Comments

Markdown supported