forum
cmdhub adapter

Slack CLI
for cmdhub.

Channels, conversations, messages, threads, reactions, and users.

lock Auth: OAuth2
Quick Install cmdhub get slack

data_object Agent Contract

Agents should start with auth/status and discovery commands, inspect schemas before composition, and treat commands marked as mutating as state-changing operations.

Output

Use human output for normal reads, `--json` for scripting or complete structured fields, and `--jsonl` for upstream pipe inputs.

Auth

Slack OAuth. Used for conversations, messages, threads, reactions, search, and users.

Refs

Prefer list/search, then short refs or piped JSONL. Use `resolve` to inspect cached refs.

Schemas

Use `slack schema` and `catalog.json` to inspect fields, flags, examples, and side effects.

Auth scopes

channels:readgroups:readim:readmpim:readchannels:historygroups:historyim:historympim:historychannels:writegroups:writechat:writeusers:readusers:read.emailreactions:readreactions:writesearch:read

Optional scope bundles

With slack auth login --files

files:readfiles:write

With slack auth login --full

team:readchannels:write.invitesgroups:write.invitesim:writempim:writefiles:readfiles:writepins:readpins:writebookmarks:readbookmarks:writereminders:readreminders:writeusers.profile:readusers.profile:writeusers:writednd:readdnd:writeemoji:readusergroups:read

terminal Command Reference

Generated from source. Global flags apply to all commands.

Global Flags

--json bool Emit JSON machine output
--jsonl bool Emit JSONL records for piping
--output, -o string Compatibility output mode: json|jsonl. Prefer --json or --jsonl
--view string = summary View mode: summary|full
--profile string = default Config/auth profile
--config string Config path override
--quiet, -q bool Suppress non-essential diagnostics
--debug bool Enable debug diagnostics
--limit int = 50 Maximum items to emit
--page-size int = 50 Requested upstream page size
--cursor string Continuation cursor
--no-paginate bool Fetch only one page
--version, -v bool Print version information
slack auth Manage Slack authentication
#cmd-slack-auth discovery safe
$ slack auth --help
slack auth login Start Slack OAuth login
#cmd-slack-auth-login mutates state
--callback-port int Loopback callback port for OAuth login
--files bool Request Slack file scopes during OAuth
--full bool Request the full supported Slack user-scope bundle
--team string Slack team/workspace ID to request during OAuth
$ slack --profile work auth login
$ slack auth login
$ slack auth login --callback-port 20267
$ slack auth login --files
$ slack auth login --full
$ slack auth login --help
$ slack auth login --team T123456
slack auth logout Clear auth state
#cmd-slack-auth-logout mutates state
$ slack --profile work auth logout
$ slack auth logout
$ slack auth logout --help
slack auth refresh Validate stored Slack token
#cmd-slack-auth-refresh mutates state
$ slack auth refresh
$ slack auth refresh --help
$ slack auth refresh --json
slack auth status Show auth status
#cmd-slack-auth-status discovery safe
$ slack auth status
$ slack auth status --help
$ slack auth status --json
$ slack auth whoami
slack auth whoami Show the authenticated Slack user
#cmd-slack-auth-whoami discovery safe
$ slack auth whoami
$ slack auth whoami --help
$ slack auth whoami --json
slack bookmark Manage channel bookmarks
#cmd-slack-bookmark discovery safe
$ slack bookmark --help
slack bookmark create Create a channel bookmark
#cmd-slack-bookmark-create mutates state
--channel string Channel id, name, or ref
--link string Bookmark URL
--title string Bookmark title
$ slack bookmark create --channel c1 --title Runbook --link https://example.com
$ slack bookmark create --help
$ slack bookmark create --json
slack bookmark delete Delete a channel bookmark
#cmd-slack-bookmark-delete mutates state dry-run
--channel string Channel id, name, or ref
--dry-run bool Preview bookmark deletion without deleting
--yes bool Confirm deleting bookmark
$ slack bookmark delete --help
$ slack bookmark delete --json
$ slack bookmark delete b1 --channel c1 --dry-run
$ slack bookmark delete b1 --channel c1 --yes
slack bookmark list List channel bookmarks
#cmd-slack-bookmark-list discovery safe
--channel string Channel id, name, or ref
$ slack bookmark list
$ slack bookmark list --channel c1
$ slack bookmark list --json
slack bookmark update Update a channel bookmark
#cmd-slack-bookmark-update mutates state
--channel string Channel id, name, or ref
--link string Bookmark URL
--title string Bookmark title
$ slack bookmark update --help
$ slack bookmark update --json
$ slack bookmark update b1 --channel c1 --title Runbook
slack canvas Explain Slack Canvas support limits
#cmd-slack-canvas discovery safe

Slack Canvas provider APIs do not currently expose stable list/read workflows for the CLI surface described by cmdhub.

Use supported Slack file, bookmark, or message workflows instead of scraping the Slack UI.

$ slack canvas --help
slack canvas access Explain unsupported Slack Canvas access
#cmd-slack-canvas-access discovery safe
$ slack canvas access --help
$ slack canvas access --json
slack canvas create Explain unsupported Slack Canvas create
#cmd-slack-canvas-create mutates state
$ slack canvas create --help
$ slack canvas create --json
slack canvas delete Explain unsupported Slack Canvas delete
#cmd-slack-canvas-delete mutates state
$ slack canvas delete --help
$ slack canvas delete --json
slack canvas edit Explain unsupported Slack Canvas edit
#cmd-slack-canvas-edit discovery safe
$ slack canvas edit --help
$ slack canvas edit --json
slack canvas section-lookup Explain unsupported Slack Canvas section-lookup
#cmd-slack-canvas-section-lookup discovery safe
$ slack canvas section-lookup
$ slack canvas section-lookup --json
slack capabilities Describe capabilities
#cmd-slack-capabilities discovery safe
--section string Show one capability section: scopes, schemas, or commands
$ slack capabilities --help
slack channel Work with channels
#cmd-slack-channel discovery safe

Inspect, join, and leave Slack channels.

List channels first when you need short refs such as c1 or want to inspect valid channel identifiers. If you already know the channel name, channel get can be a faster first step than channel list.

$ slack channel --help
slack channel archive Archive a channel
#cmd-slack-channel-archive mutates state dry-run
Archive one Slack channel by id, name, short ref, or one piped channel item. This changes channel visibility and requires –yes.
--dry-run bool Preview channel archive without archiving
--id string Channel id or name
--yes bool Confirm archiving the channel
$ slack channel archive --help
$ slack channel archive --json
$ slack channel archive c1 --dry-run
$ slack channel archive c1 --yes
slack channel create Create a channel
#cmd-slack-channel-create mutates state
Create one Slack channel by name. Use –private for a private channel.
--name string New channel name
--private bool Create a private channel
$ slack channel create --help
$ slack channel create --json
$ slack channel create --name cmdhub-eval-updates
$ slack channel create --name cmdhub-private --private
slack channel get Get one channel by id or name
#cmd-slack-channel-get discovery safe

Get one Slack channel by id, name, short ref, or one piped channel item.

Prefer this when you already know the channel name and want the canonical channel id without scanning the full channel list first.

--id string Channel id or name
$ slack channel get
$ slack channel get --json
$ slack channel get c1
$ slack channel get cmdhub-evals-a
$ slack channel get general
$ slack channel list --limit 1 --jsonl | slack channel get
slack channel invite Invite users to a channel
#cmd-slack-channel-invite discovery safe
--id string Channel id or name
--user stringArray = [] User id, name, or ref to invite
--yes bool Confirm inviting users
$ slack channel invite --help
$ slack channel invite --json
$ slack channel invite c1 --user p1 --yes
$ slack channel invite general --user U12345678 --yes
slack channel join Join a public channel
#cmd-slack-channel-join discovery safe
Join one public Slack channel by id, name, short ref, or one piped channel item.
--id string Channel id or name
$ slack channel join --help
$ slack channel join --json
$ slack channel join c1
$ slack channel join general
slack channel leave Leave a channel
#cmd-slack-channel-leave discovery safe
Leave one Slack channel by id, name, short ref, or one piped channel item. This requires –yes.
--id string Channel id or name
--yes bool Confirm leaving the channel
$ slack channel leave --help
$ slack channel leave --json
$ slack channel leave c1 --yes
$ slack channel leave general --yes
slack channel list List channels
#cmd-slack-channel-list discovery safe

List Slack channels and cache local channel refs such as c1.

Use –jsonl when the next step should consume one channel item from stdin. If you already know the channel name, channel get can be faster than listing first.

--exclude-archived bool = true Exclude archived conversations
--include-archived bool Include archived conversations
--member-only bool Only show conversations where the authenticated user is a member
--query string Narrow returned conversations by name, topic, purpose, or user token
--type string = all Conversation type: public, private, im, mpim, or all
$ slack channel get cmdhub-evals-a
$ slack channel list
$ slack channel list --json
$ slack channel list --limit 1 --jsonl | slack channel get
$ slack channel list --limit 10
slack channel mark Mark a channel read through a timestamp
#cmd-slack-channel-mark discovery safe
--id string Channel id or name
--ts string Slack timestamp to mark read through
$ slack channel mark --help
$ slack channel mark --json
$ slack channel mark c1 --ts 171.0001
slack channel members List channel members
#cmd-slack-channel-members discovery safe
--id string Channel id or name
$ slack channel members
$ slack channel members --json
$ slack channel members c1 --limit 50
slack channel purpose Set a channel purpose
#cmd-slack-channel-purpose discovery safe
Set the purpose for one Slack channel by id, name, short ref, or one piped channel item.
--id string Channel id or name
--purpose string Channel purpose text
$ slack channel purpose --help
$ slack channel purpose --id cmdhub-evals-a --purpose 'Low-value test channel'
$ slack channel purpose --json
$ slack channel purpose c1 --purpose 'Coordinate cmdhub evals'
slack channel remove Remove a user from a channel
#cmd-slack-channel-remove mutates state dry-run
--dry-run bool Preview channel removal without removing the user
--id string Channel id or name
--user string User id, name, or ref to remove
--yes bool Confirm removing the user
$ slack channel remove --help
$ slack channel remove --json
$ slack channel remove c1 --user p1 --dry-run
$ slack channel remove c1 --user p1 --yes
slack channel rename Rename a channel
#cmd-slack-channel-rename discovery safe
Rename one Slack channel by id, name, short ref, or one piped channel item.
--id string Channel id or name
--name string New channel name
$ slack channel rename --help
$ slack channel rename --id cmdhub-eval-old --name cmdhub-eval-new
$ slack channel rename --json
$ slack channel rename c1 --name cmdhub-eval-renamed
slack channel topic Set a channel topic
#cmd-slack-channel-topic discovery safe
Set the topic for one Slack channel by id, name, short ref, or one piped channel item.
--id string Channel id or name
--topic string Channel topic text
$ slack channel topic --help
$ slack channel topic --id cmdhub-evals-a --topic 'Eval workspace'
$ slack channel topic --json
$ slack channel topic c1 --topic 'Daily coordination'
slack channel unarchive Unarchive a channel
#cmd-slack-channel-unarchive mutates state
Unarchive one Slack channel by id, name, short ref, or one piped channel item. This requires –yes.
--id string Channel id or name
--yes bool Confirm restoring the channel
$ slack channel unarchive --help
$ slack channel unarchive --json
$ slack channel unarchive c1 --yes
slack channel update Update channel name, topic, or purpose
#cmd-slack-channel-update mutates state
Update one Slack channel by id, name, short ref, or one piped channel item. At least one of –name, –topic, or –purpose is required.
--id string Channel id or name
--name string New channel name
--purpose string New channel purpose
--topic string New channel topic
$ slack channel update --help
$ slack channel update c1 --name cmdhub-eval-renamed --purpose 'Daily handoff'
$ slack channel update c1 --topic "Release coordination"
$ slack channel update c1 --topic 'Release coordination'
slack config Inspect local configuration
#cmd-slack-config discovery safe
$ slack config --help
slack config explain Explain resolved configuration
#cmd-slack-config-explain discovery safe
$ slack config explain --help
slack conversation Work with Slack conversations
#cmd-slack-conversation discovery safe
Inspect Slack conversations, including channels and other conversation types exposed by the API.
$ slack conversation --help
slack conversation get Get one conversation by id or name
#cmd-slack-conversation-get discovery safe
Get one Slack conversation by id, name, short ref, or one piped conversation item.
--id string Conversation id or name
$ slack conversation get
$ slack conversation get --json
$ slack conversation get general
$ slack conversation get v1
slack conversation list List conversations visible to the current user
#cmd-slack-conversation-list discovery safe

List Slack conversations and cache local conversation refs such as v1.

Use conversation commands when you want a broader Slack conversation view that can include channels, DMs, and MPIMs.

--exclude-archived bool = true Exclude archived conversations
--include-archived bool Include archived conversations
--member-only bool Only show conversations where the authenticated user is a member
--query string Narrow returned conversations by name, topic, purpose, or user token
--type string = all Conversation type: public, private, im, mpim, or all
$ slack conversation list
$ slack conversation list --json
$ slack conversation list --limit 10
$ slack conversation list --type im --member-only --limit 10
slack conversation mark Mark a conversation read through a timestamp
#cmd-slack-conversation-mark discovery safe
--id string Conversation id or name
--ts string Slack message timestamp to mark through
$ slack conversation mark --help
$ slack conversation mark --json
$ slack conversation mark general --ts 171.0001
$ slack conversation mark v1 --ts 171.0001
slack conversation members List conversation members
#cmd-slack-conversation-members discovery safe
--id string Conversation id or name
$ slack conversation members
$ slack conversation members --json
$ slack conversation members general
$ slack conversation members v1 --limit 50
slack conversation open Open a DM or group DM
#cmd-slack-conversation-open discovery safe

Open a Slack DM or MPIM with exact users.

Pass –user one or more times with a user id, username, email-like handle already resolvable by Slack user lookup, or cached user ref from user list.

--user stringArray = [] User id, name, or short ref to include
$ slack conversation open --help
$ slack conversation open --json
$ slack conversation open --user U12345678 --user U23456789
$ slack conversation open --user p1
slack dm Work with Slack DMs
#cmd-slack-dm discovery safe
List, inspect, open, and close Slack direct messages and group DMs.
$ slack dm --help
slack dm close Close a DM
#cmd-slack-dm-close discovery safe
--id string DM id or ref
--yes bool Confirm closing the DM
$ slack dm close --help
$ slack dm close --json
$ slack dm close d1 --yes
slack dm get Get one DM by id or ref
#cmd-slack-dm-get discovery safe
--id string DM id or ref
$ slack dm get
$ slack dm get --json
$ slack dm get d1 --view full
slack dm list List DMs visible to the current user
#cmd-slack-dm-list discovery safe
--types string = im,mpim DM conversation types
$ slack dm list
$ slack dm list --json
$ slack dm list --limit 20
slack dm open Open a DM or group DM
#cmd-slack-dm-open discovery safe
--user stringArray = [] User id, name, or ref to include
--users stringArray = [] Comma-separated user ids, names, or refs to include
$ slack dm open --help
$ slack dm open --json
$ slack dm open --user p1
$ slack dm open --users p1,p2
slack dnd Inspect and update Slack Do Not Disturb
#cmd-slack-dnd discovery safe
$ slack dnd --help
slack dnd end End DND snooze
#cmd-slack-dnd-end discovery safe
--yes bool Confirm ending DND
$ slack dnd end --help
$ slack dnd end --json
$ slack dnd end --yes
slack dnd get Get DND state
#cmd-slack-dnd-get discovery safe
$ slack dnd get
$ slack dnd get --json
slack dnd snooze Start DND snooze
#cmd-slack-dnd-snooze discovery safe
--minutes int Minutes to snooze notifications
--yes bool Confirm starting DND
$ slack dnd snooze --help
$ slack dnd snooze --json
$ slack dnd snooze --minutes 30 --yes
slack doctor Run Slack adapter diagnostics
#cmd-slack-doctor discovery safe
$ slack doctor
$ slack doctor --help
$ slack doctor --json
slack emoji Discover Slack emoji
#cmd-slack-emoji discovery safe
$ slack emoji --help
slack emoji list List emoji
#cmd-slack-emoji-list discovery safe
$ slack emoji list
$ slack emoji list --jsonl
slack file Work with Slack files
#cmd-slack-file discovery safe
$ slack file --help
slack file delete Delete a Slack file
#cmd-slack-file-delete mutates state dry-run
--dry-run bool Preview file deletion without deleting
--yes bool Confirm deleting the file
$ slack file delete --help
$ slack file delete --json
$ slack file delete f1 --dry-run
$ slack file delete f1 --yes
slack file download Download a Slack file
#cmd-slack-file-download discovery safe
--force bool Overwrite an existing output file
--output-file string Local destination file
$ slack file download
$ slack file download --json
$ slack file download f1 --output-file ./release-notes.txt
slack file get Get Slack file metadata
#cmd-slack-file-get discovery safe
$ slack file get
$ slack file get --json
$ slack file get f1 --view full
slack file list List Slack files
#cmd-slack-file-list discovery safe
--before string Only include files created before this time
--channel string Channel id, name, or ref
--query string File search query
--show-deleted bool Include deleted files when Slack returns them
--since string Only include files created at or after this time
--types string Comma-separated Slack file types
--user string User id, name, or ref
$ slack file list
$ slack file list --json
$ slack file list --query 'release notes'
slack file share Share a Slack file link into a channel
#cmd-slack-file-share discovery safe
--channel string Channel id, name, or ref
--text string Optional message text; defaults to the Slack file permalink
--thread string Optional message ref or timestamp for thread sharing
--yes bool Confirm sharing the file link
$ slack file share --help
$ slack file share --json
$ slack file share f1 --channel c1 --thread m1 --yes
slack file upload Upload a local file to Slack
#cmd-slack-file-upload mutates state
--alt-text string Accessibility alt text for image files
--channel string Channel id, name, or ref
--file string Local file path
--initial-comment string Optional initial comment
--private bool Upload without sharing to a channel when Slack supports it
--snippet-type string Slack snippet type such as javascript or text
--thread string Optional message ref or timestamp for a thread upload
--title string Slack file title
$ slack file upload --channel c1 --file ./release-notes.txt --title 'Release notes'
$ slack file upload --help
$ slack file upload --json
slack list-item Work with Slack List items
#cmd-slack-list-item discovery safe
$ slack list-item --help
slack list-item create Create a Slack List item
#cmd-slack-list-item-create mutates state
--field stringArray = [] Field assignment in Name=value form; repeatable
--fields-file string Read typed field values from a JSON file
--list string Slack List ref, id, or exact title
$ slack list-item create --help
$ slack list-item create --json
$ slack list-item create --list l1 --field 'Task=Draft release notes'
slack list-item delete Delete a Slack List item
#cmd-slack-list-item-delete mutates state dry-run
--dry-run bool Preview Slack List item deletion without deleting
--item string Slack List item ref or id
--list string Slack List ref, id, or exact title
--yes bool Confirm deleting the Slack List item
$ slack list-item delete --help
$ slack list-item delete --json
$ slack list-item delete li1 --dry-run
$ slack list-item delete li1 --yes
slack list-item get Get one Slack List item
#cmd-slack-list-item-get discovery safe
--item string Slack List item ref or id
--list string Slack List ref, id, or exact title
$ slack list-item get
$ slack list-item get --json
$ slack list-item get li1 --view full
slack list-item list List items in a Slack List
#cmd-slack-list-item-list discovery safe
--list string Slack List ref, id, or exact title
$ slack list-item list
$ slack list-item list --json
$ slack list-item list --list l1 --limit 20
slack list-item update Update a Slack List item
#cmd-slack-list-item-update mutates state
--field stringArray = [] Field assignment in Name=value form; repeatable
--fields-file string Read typed field values from a JSON file
--item string Slack List item ref or id
--list string Slack List ref, id, or exact title
$ slack list-item update --help
$ slack list-item update --json
$ slack list-item update li1 --field 'Done=true'
slack mcp Run the MCP server
#cmd-slack-mcp discovery safe

Run a stdio Model Context Protocol server for this adapter.

The server exposes read-only resource commands by default. Mutating commands are listed only when explicitly allowed with –allow and remain gated by the command contract safety class.

--allow stringArray = [] Allow mutating command keys such as gmail.message.archive or gmail.message.label.*
--allow-dangerous bool Allow --allow wildcards to include destructive or sends_external commands
--concurrency int Maximum concurrent MCP subprocesses
--max-output int64 = 0 Maximum stdout/stderr bytes captured per MCP command
--print-config bool Print MCP tool configuration and exit
--timeout duration = 0s Per-command MCP subprocess timeout, for example 45s or 2m
$ mcp
$ mcp --print-config
slack message Work with Slack messages
#cmd-slack-message discovery safe

List, inspect, create, reply to, update, and delete Slack messages.

List first when you want short refs such as m1 or want to drive follow-up actions through jsonl pipes.

$ slack message --help
slack message create Create a message in a channel
#cmd-slack-message-create mutates state

Create a Slack message in one channel.

Pass –channel with a channel name, conversation id, or cached short ref, then provide –text. A single positional text argument is also accepted as a convenience.

--blocks-file string Read Block Kit blocks JSON from a local file
--broadcast-reply bool Broadcast a threaded reply to the channel
--channel string Target channel id or name
--metadata-file string Read Slack message metadata JSON from a local file
--text string Message text
--text-file string Read message text from a local file
--thread string Message ref for the thread root
--thread-ts string Slack thread root timestamp
--unfurl-links bool Override Slack link unfurl behavior
--unfurl-media bool Override Slack media unfurl behavior
$ slack message create --channel c1 'hello'
$ slack message create --channel c1 --text 'hello'
$ slack message create --channel general --text 'hello'
$ slack message create --help
$ slack message create --json
slack message delete Delete one or more of your messages
#cmd-slack-message-delete mutates state dry-run

Delete one of your Slack messages. This requires –yes for every execution path.

The target may come from explicit –channel and –ts values, a cached message ref, or one piped message item.

--all bool Confirm batch message deletion
--channel string Channel id or name
--dry-run bool Preview message delete targets without calling Slack
--ts string Message timestamp
--yes bool Confirm destructive batch message deletion
$ slack message delete --channel general --ts 171.0001 --yes
$ slack message delete --help
$ slack message delete --json
$ slack message delete m1 --yes
slack message get Get one or more messages by timestamp
#cmd-slack-message-get discovery safe

Get one Slack message in detail.

The target may be:

  • –channel plus –ts
  • a cached message ref such as m1
  • one piped message item from stdin

Use message get after message list when you need the channel-scoped details for a single match. For JSONL recovery, pipe exactly one message item from message list or channel-scoped search into this command. Do not pass –json together with –jsonl; –json is for one response, –jsonl is for pipelines.

--channel string Channel id or name
--ts string Slack message timestamp
$ slack message get
$ slack message get --channel general --ts 171.0001
$ slack message get --json
$ slack message get m1
$ slack message list --channel cmdhub-evals-a --limit 1 --jsonl | slack message get
$ slack message list --channel general --limit 1 --jsonl | slack message get
slack message list List recent messages from a channel
#cmd-slack-message-list discovery safe

List recent Slack messages from one channel and cache local message refs such as m1.

Those message refs can often be used directly by message get, message reply, reaction add, and thread get because the cached reference carries both channel and ts. If you know the channel already, prefer message list over search.message for seeded or recent channel-local work. For recovery after a broad search misses, use –channel with –query, emit –jsonl, and pipe the one matching item into message get. Use –json for one structured response or –jsonl for item streams; they are mutually exclusive.

--channel string Channel id or name
--from string Filter by Slack user id, handle, or username returned in message payloads
--inclusive bool Include messages exactly matching --oldest or --latest
--latest string Only include messages at or before this Slack timestamp or local time
--oldest string Only include messages at or after this Slack timestamp or local time
--query string Text query to match message text
--threaded bool Expose thread roots and reply counts in list summaries when returned by Slack
$ slack message list
$ slack message list --channel cmdhub-evals-a --limit 10
$ slack message list --channel cmdhub-evals-a --query eval-slack-msg-123
$ slack message list --channel general --limit 1 --jsonl | slack message get
$ slack message list --channel general --limit 1 --jsonl | slack reaction add --name eyes
$ slack message list --channel general --limit 10
$ slack message list --json
$ slack message list cmdhub-evals-a --from alex --oldest 2026-05-01 --latest 2026-06-01
$ slack message list cmdhub-evals-a --threaded --limit 10
slack message reply Reply in a thread
#cmd-slack-message-reply mutates state

Reply in a Slack thread.

The target may be:

  • –channel plus –ts
  • a cached message ref such as m1
  • one piped message or thread item from stdin
--channel string Channel id or name
--text string Reply text
--ts string Root message timestamp
$ slack message list --channel general --limit 1 --jsonl | slack message reply --text 'Following up here.'
$ slack message reply --channel general --ts 171.0001 --text 'Following up here.'
$ slack message reply --help
$ slack message reply --json
$ slack message reply m1 --text 'Following up here.'
slack message schedule Schedule a Slack message
#cmd-slack-message-schedule discovery safe
Schedule one Slack message in a channel at a local datetime, relative time, RFC3339 value, or Slack Unix timestamp.
--at string Local datetime, relative time, RFC3339 value, or Slack Unix timestamp
--channel string Target channel id, name, or ref
--text string Message text
$ slack message schedule --channel c1 --text 'Daily reminder' --at '+1h'
$ slack message schedule --channel c1 --text 'Daily reminder' --at '2026-05-26 09:00'
$ slack message schedule --help
$ slack message schedule --json
slack message update Update one of your messages
#cmd-slack-message-update mutates state

Update one of your Slack messages.

The target may come from explicit –channel and –ts values, a cached message ref, or one piped message item.

--blocks-file string Read updated Block Kit blocks JSON from a local file
--channel string Channel id or name
--text string Updated text
--ts string Message timestamp
$ slack message update --channel general --ts 171.0001 --text 'Updated text'
$ slack message update --help
$ slack message update --json
$ slack message update m1 --text 'Updated text'
slack pin Manage pinned Slack messages
#cmd-slack-pin mutates state
$ slack pin --help
slack pin add Add a pinned message
#cmd-slack-pin-add mutates state
--channel string Channel id, name, or ref
--ts string Slack message timestamp
--yes bool Confirm pin mutation
$ slack pin add --help
$ slack pin add --json
$ slack pin add m1 --yes
slack pin list List pins in a channel
#cmd-slack-pin-list discovery safe
--channel string Channel id, name, or ref
$ slack pin list
$ slack pin list --channel c1
$ slack pin list --json
slack pin remove Remove a pinned message
#cmd-slack-pin-remove mutates state
--channel string Channel id, name, or ref
--ts string Slack message timestamp
--yes bool Confirm pin mutation
$ slack pin remove --help
$ slack pin remove --json
$ slack pin remove m1 --yes
slack profile Manage provider profiles
#cmd-slack-profile discovery safe
$ slack profile --help
slack profile create Create an unauthenticated provider profile
#cmd-slack-profile-create mutates state
$ slack profile create --help
slack profile delete Delete a local provider profile
#cmd-slack-profile-delete mutates state
$ slack profile delete --help
slack profile list List provider profiles
#cmd-slack-profile-list discovery safe
$ slack profile list --help
slack profile rename Rename a local provider profile
#cmd-slack-profile-rename discovery safe
$ slack profile rename --help
slack profile use Set the default provider profile
#cmd-slack-profile-use mutates state
$ slack profile use --help
slack reaction Work with message reactions
#cmd-slack-reaction discovery safe

List reaction names and inspect, add, or remove reactions on Slack messages.

These commands work best with a piped message item or a cached message ref such as m1. Use –jsonl when a message list/search result should feed a reaction command; do not combine –json with –jsonl.

$ slack reaction --help
slack reaction add Add a reaction to a message
#cmd-slack-reaction-add mutates state

Add one reaction to a Slack message.

The target may come from explicit –channel and –ts values, a cached message ref, or one piped message item. For recovery, run message list with –channel and –query, then pipe one –jsonl item into this command.

--channel string Channel id or name
--name string Emoji name without colons
--ts string Message timestamp
--yes bool Accepted for compatibility; confirmation is unnecessary for one exact reaction add
$ slack message list --channel general --limit 1 --jsonl | slack reaction add --name eyes
$ slack reaction add --channel general --ts 171.0001 --name eyes
$ slack reaction add --help
$ slack reaction add --json
$ slack reaction add m1 --name eyes
slack reaction get Get reactions on a message
#cmd-slack-reaction-get discovery safe

Get reactions for one Slack message.

The target may come from explicit –channel and –ts values, a cached message ref, or one piped message item. For recovery, run message list with –channel and –query, then pipe one –jsonl item into this command.

--channel string Channel id or name
--ts string Message timestamp
$ slack message list --channel general --limit 1 --jsonl | slack reaction get
$ slack reaction get
$ slack reaction get --channel general --ts 171.0001
$ slack reaction get --json
$ slack reaction get m1
slack reaction list List reaction names
#cmd-slack-reaction-list discovery safe

List reaction names that can be used with –name.

Use reaction get for per-message reaction state. The legacy shape reaction list m1 still works as a hidden compatibility path and prints the canonical command that ran.

--channel string Channel id or name
--ts string Message timestamp
$ slack reaction add m1 --name eyes
$ slack reaction get m1
$ slack reaction list
$ slack reaction list --json
slack reaction remove Remove your reaction from a message
#cmd-slack-reaction-remove mutates state

Remove one of your reactions from a Slack message.

The target may come from explicit –channel and –ts values, a cached message ref, or one piped message item. For recovery, run message list with –channel and –query, then pipe one –jsonl item into this command.

--channel string Channel id or name
--name string Emoji name without colons
--ts string Message timestamp
--yes bool Accepted for compatibility; confirmation is unnecessary for one exact reaction removal
$ slack reaction remove --channel general --ts 171.0001 --name eyes
$ slack reaction remove --help
$ slack reaction remove --json
$ slack reaction remove m1 --name eyes
slack reminder Manage Slack reminders
#cmd-slack-reminder discovery safe
$ slack reminder --help
slack reminder complete Complete a reminder
#cmd-slack-reminder-complete mutates state
--yes bool Confirm reminder mutation
$ slack reminder complete --help
$ slack reminder complete --json
$ slack reminder complete r1 --yes
slack reminder create Create a reminder
#cmd-slack-reminder-create mutates state
--text string Reminder text
--time string Reminder time
$ slack reminder create --help
$ slack reminder create --json
$ slack reminder create --text 'Follow up' --time 'tomorrow 09:00'
slack reminder delete Delete a reminder
#cmd-slack-reminder-delete mutates state dry-run
--dry-run bool Preview reminder deletion without deleting
--yes bool Confirm reminder mutation
$ slack reminder delete --help
$ slack reminder delete --json
$ slack reminder delete r1 --dry-run
$ slack reminder delete r1 --yes
slack reminder get Get a reminder
#cmd-slack-reminder-get discovery safe
$ slack reminder get
$ slack reminder get --json
$ slack reminder get r1
slack reminder list List reminders
#cmd-slack-reminder-list discovery safe
$ slack reminder list
$ slack reminder list --json
slack resolve Resolve a Slack local marker or stored short reference
#cmd-slack-resolve discovery safe

Resolve a Slack short reference into its canonical payload.

Use this when you have a marker such as c1, v1, p1, m1, or u1, or a stored short id such as C2H…5FA, and want to inspect what it refers to.

Resolution is profile-scoped. If a marker does not resolve, verify –profile and rerun the relevant list command.

$ slack resolve --help
$ slack resolve C2H...5FA
$ slack resolve c1
$ slack resolve m1
slack scheduled-message Inspect and cancel scheduled Slack messages
#cmd-slack-scheduled-message discovery safe
$ slack scheduled-message --help
slack scheduled-message delete Delete a scheduled message
#cmd-slack-scheduled-message-delete mutates state dry-run
--channel string Channel id, name, or ref
--dry-run bool Preview scheduled message deletion without deleting
--yes bool Confirm deleting the scheduled message
$ slack scheduled-message delete --help
$ slack scheduled-message delete --json
$ slack scheduled-message delete sm1 --channel c1 --dry-run
$ slack scheduled-message delete sm1 --channel c1 --yes
slack scheduled-message get Get one scheduled message
#cmd-slack-scheduled-message-get discovery safe
$ slack scheduled-message get
$ slack scheduled-message get --json
$ slack scheduled-message get sm1
slack scheduled-message list List scheduled messages
#cmd-slack-scheduled-message-list discovery safe
--channel string Channel id, name, or ref
$ slack scheduled-message list
$ slack scheduled-message list --channel c1
$ slack scheduled-message list --json
slack schema Emit Slack adapter schema hints
#cmd-slack-schema discovery safe

Show schema hints for the Slack resource payloads emitted by this CLI.

Use this when you need to understand structured output fields for automation or downstream parsing.

--in bool Show input schema
--input bool Show input schema
--out bool Show output schema
--schema-output bool Show output schema
$ slack schema
$ slack schema --help
$ slack schema message.create --in --json
$ slack schema message.get --out --json
slack slack-list Work with Slack Lists
#cmd-slack-slack-list discovery safe
List, inspect, create, update, delete, export, and manage access for Slack Lists when the selected workspace plan and scopes support Slack Lists.
$ slack slack-list --help
slack slack-list access Update Slack List access
#cmd-slack-slack-list-access discovery safe
--access string Slack List access policy value supported by Slack
--list string Slack List ref, id, or exact title
--yes bool Confirm changing Slack List access
$ slack slack-list access --help
$ slack slack-list access --json
$ slack slack-list access l1 --access restricted --yes
slack slack-list create Create a Slack List
#cmd-slack-slack-list-create mutates state
--description string Slack List description
--title string Slack List title
$ slack slack-list create --help
$ slack slack-list create --json
$ slack slack-list create --title 'Release tasks'
slack slack-list delete Delete a Slack List
#cmd-slack-slack-list-delete mutates state dry-run
--dry-run bool Preview Slack List deletion without deleting
--list string Slack List ref, id, or exact title
--yes bool Confirm deleting the Slack List
$ slack slack-list delete --help
$ slack slack-list delete --json
$ slack slack-list delete l1 --dry-run
$ slack slack-list delete l1 --yes
slack slack-list export Start a Slack List export
#cmd-slack-slack-list-export discovery safe
--list string Slack List ref, id, or exact title
--yes bool Confirm exporting Slack List data
$ slack slack-list export
$ slack slack-list export --json
$ slack slack-list export l1 --yes
slack slack-list get Get one Slack List
#cmd-slack-slack-list-get discovery safe
--list string Slack List ref, id, or exact title
$ slack slack-list get
$ slack slack-list get --json
$ slack slack-list get l1 --view full
slack slack-list list List Slack Lists
#cmd-slack-slack-list-list discovery safe
--limit int = 20 Maximum Slack Lists to request
$ slack slack-list list
$ slack slack-list list --json
$ slack slack-list list --limit 20
slack slack-list update Update a Slack List
#cmd-slack-slack-list-update mutates state
--description string Updated Slack List description
--list string Slack List ref, id, or exact title
--title string Updated Slack List title
$ slack slack-list update --help
$ slack slack-list update --json
$ slack slack-list update l1 --title 'Release checklist'
slack status Inspect auth status or update Slack custom status
#cmd-slack-status discovery safe

With no subcommand, show Slack auth status.

Use status get, status set, and status clear for Slack custom status.

$ slack status
$ slack status get
$ slack status set --text 'In review' --emoji ':memo:'
slack status clear Clear custom status
#cmd-slack-status-clear discovery safe
--yes bool Confirm clearing custom status
$ slack status clear --help
$ slack status clear --json
$ slack status clear --yes
slack status get Get current custom status
#cmd-slack-status-get discovery safe
$ slack status get
$ slack status get --json
slack status set Set custom status
#cmd-slack-status-set mutates state
--clear-at string Alias for --expires; parsed locally
--duration string Status duration such as 30m, 1h, or 2d
--emoji string Status emoji
--expires string Status expiration time, parsed locally
--text string Status text
$ slack status set --help
$ slack status set --json
$ slack status set --text 'In review' --emoji ':memo:' --expires '2026-05-25 17:00'
slack thread Work with Slack threads
#cmd-slack-thread discovery safe

Inspect Slack threads and their replies.

These commands work best with a piped message item or a cached message ref such as m1.

$ slack thread --help
slack thread get Get a thread and its replies
#cmd-slack-thread-get discovery safe

Get a Slack thread and its replies.

The target may come from explicit –channel and –ts values, a cached message ref, or one piped message or thread item.

--channel string Channel id or name
--ts string Root message timestamp
$ slack message list --channel general --limit 1 --jsonl | slack thread get
$ slack thread get
$ slack thread get --channel general --ts 171.0001
$ slack thread get --json
$ slack thread get m1
slack user Work with Slack users
#cmd-slack-user discovery safe
List and inspect Slack users visible to the active token.
$ slack user --help
slack user get Get one user by id or name
#cmd-slack-user-get discovery safe
Get one Slack user by id, name, short ref, or one piped user item.
--id string User id or name
$ slack user get
$ slack user get --json
$ slack user get alice
$ slack user get p1
slack user list List users
#cmd-slack-user-list discovery safe
List active Slack users and cache local user refs such as p1.
--include-deactivated bool Include deactivated Slack accounts
$ slack user list
$ slack user list --include-deactivated
$ slack user list --json
$ slack user list --limit 20
slack user lookup-email Look up one user by email
#cmd-slack-user-lookup-email discovery safe
--email string Email address
$ slack user lookup-email
$ slack user lookup-email --email alex@example.com
$ slack user lookup-email --json
$ slack user lookup-email alex@example.com
slack user presence Get a user's Slack presence
#cmd-slack-user-presence discovery safe
--id string User id or name
$ slack user presence
$ slack user presence --json
$ slack user presence alice
$ slack user presence p1
slack usergroup Inspect Slack user groups
#cmd-slack-usergroup discovery safe
$ slack usergroup --help
slack usergroup get Get a user group
#cmd-slack-usergroup-get discovery safe
$ slack usergroup get
$ slack usergroup get --json
$ slack usergroup get ug1
slack usergroup list List user groups
#cmd-slack-usergroup-list discovery safe
$ slack usergroup list
$ slack usergroup list --jsonl
slack usergroup members List user group members
#cmd-slack-usergroup-members discovery safe
$ slack usergroup members
$ slack usergroup members --json
$ slack usergroup members ug1
slack version Show slack version information
#cmd-slack-version discovery safe
$ slack version --help
slack workspace Inspect the selected Slack workspace
#cmd-slack-workspace discovery safe
$ slack workspace get --view full
slack workspace get Get selected workspace metadata
#cmd-slack-workspace-get discovery safe
$ slack workspace get
$ slack workspace get --json
$ slack workspace get --view full

play_circle Live Examples

Output captured from a real workspace. Regenerate with scripts/gen-docs.sh --update.

auth

Check current identity
$ slack auth whoami
Authenticated as philip@cmdhub.run
Field         Value
------------  -----
Workspace     CommandHub
Workspace ID  {id}
User          philip
User ID       {id}
Email         philip@cmdhub.run

Next steps:
- Capabilities:       slack capabilities
- List conversations: slack conversation list --limit 10
- List messages:      slack message list --channel general --limit 10
Auth scope recovery surface
$ slack auth status
Authenticated as philip@cmdhub.run
Field         Value
------------  -----
Workspace     CommandHub
Workspace ID  {id}
User          philip
User ID       {id}
Email         philip@cmdhub.run

Next steps:
- Capabilities:       slack capabilities
- List conversations: slack conversation list --limit 10
- List messages:      slack message list --channel general --limit 10

channels

List channels
$ slack channel list --limit 5
Channels
REF  NAME             TYPE    STATE   MEMBERS  UPDATED
c1   #all-commandhub  public  joined  1        25d ago
c2   #new-channel     public  joined  1        25d ago
c3   #social          public  joined  1        25d ago
c4   #cmdhub-evals-b  public  joined  1        2d ago
c5   #cmdhub-evals-a  public  joined  1        2d ago

Next steps:
- Inspect channel: slack channel get c1 --view full
- List messages:   slack message list --channel c1 --limit 20
Search channels
$ slack channel search --query cmdhub --limit 5
Channels
REF  NAME                                               TYPE    STATE       MEMBERS  UPDATED
c4   #cmdhub-evals-b                                    public  joined      1        2d ago
c6   #cmdhub-eval-slack-chan-20260614t102136z-be35d81f  public  not joined  0        21d ago

Next steps:
- Inspect channel: slack channel get c4 --view full
- List messages:   slack message list --channel c4 --limit 20
Get a channel
$ slack channel get c1
{id}  #all-commandhub
Field       Value
----------  -----
ID          {id}
Visibility  public
Membership  member
Status      active

Next steps:
- List:     slack channel list --limit 10
- Messages: slack message list --channel {id} --limit 10
List channel members
$ slack channel members c1 --limit 5
Users (1 total)
REF
p1

Next steps:
- Open:     slack user get p1
- Search:   slack user search --query <text>
- Channels: slack channel list
- Messages: slack message list --channel general --limit 10

messages

List channel messages
$ slack message list --channel cmdhub-evals-a --limit 3
Messages (2 total)
REF  TITLE
m1   cmdhub-eval-slack-post-delete-20260614t102210z-1c529d9f root message
m2   philip has joined the channel

Next steps:
- Open:     slack message get m1
- Search:   slack message search --query <text>
- Channels: slack channel list
- Messages: slack message list --channel general --limit 10
Stream message refs
$ slack message list --channel cmdhub-evals-a --limit 1 --jsonl
{"schema":"pc.cli.v1","type":"item","command_id":"cmd_1783327965692638785","ts":"2026-07-06T08:52:46.{id}","data":{"app_id":"{id}","blocks":[{"block_id":"TyLzs","elements":[{"elements":[{"text":"cmdhub-eval-slack-post-delete-20260614t102210z-1c529d9f root message","type":"text"}],"type":"rich_text_section"}],"type":"rich_text"}],"bot_id":"{id}","bot_profile":{"app_id":"{id}","deleted":false,"icons":{"image_36":"https://avatars.slack-edge.com/2026-05-19/11193205134016_f0465822aa1193330e71_36.png","image_48":"https://avatars.slack-edge.com/2026-05-19/11193205134016_f0465822aa1193330e71_48.png","image_72":"https://avatars.slack-edge.com/2026-05-19/11193205134016_f0465822aa1193330e71_72.png"},"id":"{id}","name":"CmdHub","team_id":"{id}","updated":{id}},"channel":"{id}","id":"{id}/{id}.257399","team":"{id}","text":"cmdhub-eval-slack-post-delete-20260614t102210z-1c529d9f root message","ts":"{id}.257399","type":"message","user":"{id}"}}
{"schema":"pc.cli.v1","type":"meta","command_id":"cmd_1783327965692638785","ts":"2026-07-06T08:52:46.{id}","data":{"count_emitted":1,"next_cursor":null,"request":{"channel":"cmdhub-evals-a","channel_id":"{id}","from":"","inclusive":null,"latest":null,"oldest":null,"query":"","threaded":false},"truncated":false}}
Get a message
$ slack message get m1
m1  cmdhub-eval-slack-post-delete-20260614t102210z-1c529d9f root message
Field      Value
---------  -----
Channel    #cmdhub-evals-a ({id})
Timestamp  21d ago
Author     philip

Next steps:
- Thread:        slack thread get m1
- Reactions:     slack reaction get m1
- List messages: slack message list --channel c5 --limit 10
Preview message deletion
$ slack message delete m1 --dry-run
Message delete dry run: 1 target(s)
REF  CHANNEL                        TS
m1   #cmdhub-evals-a ({id})  {id}.257399

Next steps:
- Execute bounded delete: slack message delete m1 --yes
- Inspect first:          slack message get m1
Recover from incomplete message creation
$ slack message create --channel c1
INVALID_ARGUMENT: missing slack message fields

Next steps:
- Create:   slack message create --channel c1 --text "Hello world"
- Channels: slack channel list --limit 10
- Help:     slack message create --help
exit status 2
Reply result or exact-ref recovery
$ slack message reply m999999 --text cmdhub-docshot-reply
INVALID_ARGUMENT: missing reply fields

Next steps:
- Messages: slack message list --channel general --limit 10
- Help:     slack thread get --help
exit status 2
Delete result or exact-ref recovery
$ slack message delete m999999 --yes
INVALID_ARGUMENT: missing delete fields

Next steps:
- Channels: slack channel list --limit 10
- Messages: slack message list --channel general --limit 10
- Help:     slack message --help
exit status 2

threads

Get a thread
$ slack thread get m1
Thread #cmdhub-evals-a ({id})/21d ago
Field     Value
--------  -----
Channel   #cmdhub-evals-a ({id})
Root TS   21d ago
Messages  1
Has more  false
REF  WHEN     AUTHOR  TEXT
m1   21d ago  philip  cmdhub-eval-slack-post-delete-20260614t102210z-1c529d9f root message

Next steps:
- Reply:         slack message reply --channel {id} --ts {id}.257399 --text 'Following up here.'
- List messages: slack message list --channel {id} --limit 10

files

List files
$ slack file list --channel cmdhub-evals-a --limit 5
Empty state
No file found.

Next steps:
- Search:   slack file search --query <text>
- Status:   slack auth status
- Channels: slack channel list
- Messages: slack message list --channel general --limit 10

search

Search messages
$ slack search message --query eval
Alias: slack search message -> slack message search
Messages matching "eval"
REF  CHANNEL                                                          WHEN     AUTHOR  TEXT
m1   #cmdhub-evals-a ({id})                                    21d ago  philip  cmdhub-eval-slack-post-delete-20260614t102210z-1c529d9f root message
m3   #cmdhub-eval-slack-chan-20260614t100724z-19be26ee ({id})  21d ago  philip  set the channel description: Eval cleanup for cmdhub-eval-slack-chan-20260614t100724z-19be26ee
m4   #cmdhub-eval-slack-chan-20260614t100724z-19be26ee ({id})  21d ago  philip  set the channel topic: Eval cleanup: cmdhub-eval-slack-chan-20260614t100724z-19be26ee
m5   #cmdhub-eval-slack-chan-20260614t102136z-be35d81f ({id})  21d ago  philip  set the channel topic: Eval cleanup for cmdhub-eval-slack-chan-20260614t102136z-be35d81f

Next steps:
- Open:           slack message get m1
- List channel:   slack message list --channel {id} --limit 10
- Search example: slack message search --query roadmap --limit 10
Empty message search recovery
$ slack message search --query cmdhub-docshot-no-such-message-token --channel cmdhub-evals-a --limit 3
Empty state
No messages found for "cmdhub-docshot-no-such-message-token" in cmdhub-evals-a.

Next steps:
- Retry channel:    slack message list --channel cmdhub-evals-a --query "cmdhub-docshot-no-such-message-token" --limit 20
- Search workspace: slack message search --query "cmdhub-docshot-no-such-message-token" --limit 10
- Channels:         slack channel list --limit 10
Compatibility search recovery
$ slack search message --query cmdhub-docshot-no-such-message-token --channel c1
Alias: slack search message -> slack message search
No messages found for "cmdhub-docshot-no-such-message-token" in c1.

Next steps:
- Retry channel:    slack message list --channel c1 --query "cmdhub-docshot-no-such-message-token" --limit 20
- Search workspace: slack message search --query "cmdhub-docshot-no-such-message-token" --limit 10
- Channels:         slack channel list --limit 10

users

List workspace members
$ slack user list --limit 5
Users (2 total)
REF  TITLE     WHEN
p2   slackbot  0
p1   philip    1.783080476e+09

Next steps:
- Open:     slack user get p2
- Search:   slack user search --query <text>
- Channels: slack channel list
- Messages: slack message list --channel general --limit 10
Get a user
$ slack user get p1
{id}  philip
Field      Value
---------  -----
ID         {id}
Username   philip
Real name  philip
Email      philip@cmdhub.run
Kind       person
State      active

Next steps:
- List users:         slack user list --limit 20
- List conversations: slack conversation list --limit 10

alt_route Composition Patterns

Bridge your ecosystem with zero middleware.

# Pull one recent message and inspect the whole thread
slack message list --channel general --limit 1 --jsonl \
  | slack thread get