slackcli search covers messages, channels, and people. Every subcommand
accepts --workspace <id|name> and --json; with --json, --fields
trims each result to the fields you name (--fields ts,user,text,channel.name,permalink).
search messages
Section titled “search messages”slackcli search messages "deployment failed"slackcli search messages "release" --in=engineering --from=rafaelslackcli search messages "incident" --limit=50 --sort=scoreslackcli search messages "after:2026-07-01 has:link" --jsonslackcli search messages --from=rafael --sort=timestamp --limit=1| Option | Default | Purpose |
|---|---|---|
--in <channel> |
— | Shorthand for the in: operator |
--from <user> |
— | Shorthand for the from: operator |
--limit <number> |
20 |
Results per page |
--page <number> |
1 |
Which page |
--sort <field> |
timestamp |
score or timestamp |
--sort-dir <dir> |
desc |
asc or desc |
The query is passed to Slack, so all of its
search operators
work: in:, from:, before:, after:, on:, during:, has:, is:,
with:. --in and --from are just conveniences appended to the query.
The positional query is optional when at least one of --in/--from is given,
so you can search by filter alone (search messages --from=rafael). A call with
neither a query nor a filter fails with invalid_input.
When more pages exist, the next-page command is printed. In --json mode the
page and pages fields carry the same information. The JSON query field is
the full query sent to Slack, including any in:/from: operators appended from
--in/--from.
In all three subcommands, a search with no results prints nothing on stdout,
even with --json, and exits 0.
Standard bot tokens (xoxb-*) cannot call search.messages at all — Slack
restricts it to user tokens. Use a xoxp-* token or browser auth.
search channels
Section titled “search channels”slackcli search channels platformslackcli search channels incident --limit=50 --jsonWith browser auth this calls Slack’s own search backend (search.modules),
which ranks the results; total is Slack’s match count and can exceed the
channels returned. With a standard token there is no equivalent API, so
SlackCLI lists up to 1000 non-archived channels the token can see (one
conversations.list call) and keeps those whose name, topic, or purpose
contains the query (case-insensitive) — correct, but slower on large
workspaces, capped at that 1000, and total is just the number returned.
search people
Section titled “search people”slackcli search people rafaelslackcli search people "@example.com" --limit=50slackcli search people rafael --resolve-fields --jsonThe same auth-type split applies: browser auth uses Slack’s search backend
(search.modules); standard auth lists the first 1000 users (one users.list
call) and keeps those whose username, real name, display name, or email
contains the query (case-insensitive), skipping deactivated accounts and bots.
--resolve-fields labels each result’s custom profile fields (Xf… ID →
human label) via one cached team.profile.get call — the same shared resolver
used by users info and users list. Labels only:
field values that are user IDs (Manager, Direct Reports) stay as U… IDs.