Skip to content

Repository files navigation

npm versionPyPI version

slack-cli

A Slack CLI designed for coding agents (Claude Code, Cursor, etc.) that provides structured JSON access to Slack workspaces via the Web API.

It works by extracting authentication tokens from your existing browser session — no Slack app or bot token required.

Install

npm:

npm install -g @alankyshum/slack-cli

pip:

pip install slack-cli-agent

Manual:

git clone https://github.com/alankyshum/slack-cli.git
chmod +x slack-cli/bin/slack-cli
ln -s "$(pwd)/slack-cli/bin/slack-cli"~/.local/bin/slack-cli

Prerequisites

  • curl and jq (for all commands)
  • python3 (for URL encoding)
  • Node.js + Playwright (only for auth command)
npm install -g playwright
npx playwright install chromium

Quick Start

# 1. Authenticate (opens browser to extract tokens)
slack-cli auth --domain mycompany.slack.com
# 2. Search messages
slack-cli search "from:@alice in:#engineering deployment"# 3. Read channel history
slack-cli read engineering 10
# 4. Draft a message (saved locally, not sent)
slack-cli draft general "Hey team, the fix for JIRA-123 is ready"

Commands

CommandDescription
auth --domain <dom>Extract tokens from browser session
whoamiShow authenticated user
configShow current configuration
search <query>Search messages (full Slack query syntax)
read <channel> [count]Read channel messages
unreadsShow recent activity
draft <channel> <msg> [--thread <ts>] [--file <path>]Save a server-side draft
draft-delete <draft_id>Delete a server-side draft
draftsList saved drafts
send <draft_id>Send a draft (with confirmation prompt)
post <channel> <msg> [--thread <ts>] [--file <path>]Send a message with mrkdwn formatting
channelsList your channels
dmsList recent DMs
userinfo <user>Look up user by ID, email, or name
status [emoji] [text]Get or set your Slack status (clear to remove)
`presence [user_idusername

Search Modifiers

Slack's full search syntax is supported:

ModifierExampleDescription
from:from:@alice / from:meMessages from a person
in:in:#channel / in:@userMessages in channel or DM
before:before:2025-06-01Before a date
after:after:2025-01-01After a date
on:on:2025-03-15On exact date
during:during:januaryDuring a month or year
has:has::eyes: / has:pinHas reaction or pin
is:is:saved / is:threadSaved or thread messages
"...""exact phrase"Exact phrase match
--wordExclude word
*deploy*Wildcard (min 3 chars)

Environment Variables

VariableDefaultDescription
SLACK_CLI_HOME~/.slack-cliConfig directory
SLACK_CLI_CHROME_PROFILE~/.slack-cli/chrome-profileChrome profile for auth
SLACK_CLI_COUNT20Results per page
SLACK_CLI_SORTtimestampSort: timestamp or score
SLACK_CLI_SORT_DIRdescDirection: asc or desc

How It Works

  1. auth opens a Chromium browser using your existing Chrome profile (via Playwright), navigates to your Slack workspace, and intercepts the xoxc- API token and xoxd- session cookie from live API requests.

  2. All other commands use direct Slack Web API calls via curl — no browser needed, making them fast and suitable for automation.

  3. Drafts are saved locally to ~/.slack-cli/drafts.json. The send command requires interactive confirmation before posting.

  4. All output is structured JSON, making it easy to parse with jq or consume from AI agents.

Security

  • Credentials are stored at ~/.slack-cli/credentials.json with 600 permissions
  • Tokens are xoxc- client tokens scoped to your user session
  • The send command requires explicit y confirmation
  • No data is sent to any third party

License

MIT

About

slack cli ready to be wrapped as a CLAUDE SKILL to be used by your coding agent

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages