This file summarizes the current first-class Slack Web API coverage in
slackcli.
The CLI is intentionally opinionated:
- common personal Slack workflows get dedicated commands
- everything else falls back to
slackcli api call - the bundled app manifest is scoped to the first-class commands below
When a feature is not listed here, assume there is no dedicated command yet and use the raw API path instead.
| Area | CLI coverage | Primary Slack methods |
|---|---|---|
| Auth | auth login, auth doctor, auth whoami, auth list, auth use, auth logout |
auth.test plus local profile storage |
| Conversations | conversation list, open, create, archive, info, history, replies, members |
users.conversations, conversations.open, conversations.create, conversations.archive, conversations.info, conversations.history, conversations.replies, conversations.members |
| Messages | message send, update, delete, permalink |
chat.postMessage, chat.update, chat.delete, chat.getPermalink |
| Reactions | reaction add, remove, list |
reactions.add, reactions.remove, reactions.list |
| Files | file list, get, delete, upload |
files.list, files.info, files.delete, files.getUploadURLExternal, files.completeUploadExternal |
| Users | user me, list, get |
users.info, users.list |
| Team | team info |
team.info |
| Search | search messages |
search.messages |
| Resolve | resolve user, resolve conversation |
local resolution on top of users.list, users.info, users.conversations, and conversations.info |
| Raw fallback | api call |
arbitrary Slack Web API methods |
auth loginvalidates the token before saving it locally.- saved profiles are a CLI concept, not a Slack concept
auth doctorandauth whoamiare thin wrappers around live auth checks
- refs accept IDs,
#channelnames, bare channel names, and@userwhere it is safe to support them - read paths do not implicitly create DMs
conversation open,message send @user, andfile upload --channel @usermay create or resume a DM explicitlyresolve conversation @useronly returns an existing DM and never opens one
- thread replies are supported via
--thread-ts message sendpreserves Slack's default unfurl behavior- use
--no-unfurl-linksand--no-unfurl-mediawhen you want a plain link post without Slack previews
- upload uses Slack's external upload flow, not the legacy multipart flow
- uploads can optionally be shared into a conversation and thread in the same command
- only message search has a first-class wrapper today
- the query string is passed to Slack unchanged, so Slack search syntax and Slack quirks apply directly
- resolve commands exist to turn human-friendly refs into canonical Slack IDs without mutating workspace state
- this is useful for scripts that need deterministic IDs before making write calls
slackcli api callis the escape hatch for any method not covered above- repeated
--param key=valueentries become query params forGET - repeated
--param key=valueentries merge into the JSON body forPOST --body-json,--from-file, and--stdinare available for richer payloads- if you use methods outside the bundled manifest's scope set, Slack will return scope errors until the app is expanded
There is no first-class coverage yet for:
- channel rename, join, leave, invite, kick, topic, and purpose management
- scheduled messages and message metadata workflows
- pins, bookmarks, stars, reminders, emoji, and saved items
- canvases, lists, workflows, functions, shortcuts, and Socket Mode
- modals, Home tabs, views, and interactive surfaces
- admin, SCIM, audit, and Enterprise Grid APIs
- user group management
- file comments, remote files, and advanced file administration
- search wrappers beyond message search
- presence, status, huddles, and calls
- app manifests, installs, OAuth flows, and token rotation
Most of these remain reachable through api call if the token has the required
scopes and the app is configured appropriately.
The bundled manifest is intentionally narrow. It is designed to support the current first-class command set:
- conversations read/write
- history read access
- user lookup
- team lookup
- message search
- chat write
- reactions read/write
- files read/write
If you expand the CLI into more Slack product areas, expect to add scopes to
the manifest before those methods will work reliably through api call.
Use a first-class command when one exists. Use api call when:
- the CLI does not have a dedicated wrapper yet
- you need a method-specific field that the wrapper does not expose
- you are experimenting with a Slack API that is still changing
That keeps the common path ergonomic without pretending the CLI fully models every Slack API surface.