# SlackCLI Documentation

SlackCLI is an unofficial command-line interface for Slack workspaces, built with
TypeScript and Bun. It talks to Slack either through a standard Slack app token
or through the tokens a signed-in browser session already holds — so you can
automate Slack without creating a Slack app.

> **Disclaimer:** not affiliated with, endorsed by, or supported by Slack
> Technologies. Slack has an [official CLI](https://docs.slack.dev/tools/slack-cli/).

## User guide

Start here if you want to *use* SlackCLI.

| Page | What it covers |
|---|---|
| [Installation](/docs/user-guide/installation/) | Homebrew, pre-built binaries, from source, updating |
| [Authentication](/docs/user-guide/authentication/) | The four ways to sign in, and which one to pick |
| [Workspaces and profiles](/docs/user-guide/workspaces/) | Several workspaces, several identities per workspace |
| [Slack links and timestamps](/docs/user-guide/links-and-timestamps/) | Paste a Slack URL anywhere an ID is expected |
| [Conversations](/docs/user-guide/conversations/) | List channels and DMs, read history, threads, unreads |
| [Messages](/docs/user-guide/messages/) | Send, reply, edit, react, create/list drafts, attach files, Block Kit |
| [Search](/docs/user-guide/search/) | Search messages, channels, and people |
| [Team](/docs/user-guide/team/) | Read the workspace's own name, domain, and ID |
| [User groups](/docs/user-guide/usergroups/) | List and read user groups, and manage them behind `--yes` |
| [Users](/docs/user-guide/users/) | Look up a user by ID, list users by account status |
| [Saved items](/docs/user-guide/saved/) | Read your "saved for later" list |
| [Canvas](/docs/user-guide/canvas/) | List canvases and read them as Markdown |
| [Files](/docs/user-guide/files/) | Inspect, read, and download Slack-hosted files |
| [Emoji](/docs/user-guide/emoji/) | List a workspace's custom emoji and inspect one |
| [Scripting and JSON output](/docs/user-guide/scripting/) | Piping into `jq`, exit codes, automation patterns |
| [Claude Code plugin](/docs/user-guide/claude-code-plugin/) | The `/slackcli` skill, so an agent can drive Slack |
| [Troubleshooting](/docs/user-guide/troubleshooting/) | Auth failures, permissions, update problems |

## Developer documentation

Start here if you want to *work on* SlackCLI.

| Page | What it covers |
|---|---|
| [Development setup](/docs/development/setup/) | Toolchain, pre-commit hooks, the everyday loop |
| [Architecture](/docs/development/architecture/) | How the pieces fit: commands, client, auth, storage |
| [Project structure](/docs/development/project-structure/) | What each file in `src/` is responsible for |
| [Testing](/docs/development/testing/) | Test layout, conventions, and how to write a good one |
| [Build and release](/docs/development/build-and-release/) | Version injection, CI, tagging, Homebrew tap |
| [Adding a command](/docs/development/adding-a-command/) | A worked example, end to end |
| [Website](/docs/development/website/) | The Astro site in `web/`, and how docs become pages |

## Contributing

Read [CONTRIBUTING.md](https://github.com/shaharia-lab/slackcli/blob/main/CONTRIBUTING.md) before opening a pull request. In
short: **every PR needs a linked GitHub issue, and that issue must carry the
`ready-for-pr` label.** The full policy — which is binding on human and AI
contributors alike — lives in [CLAUDE.md](https://github.com/shaharia-lab/slackcli/blob/main/CLAUDE.md).

For security reports, follow [SECURITY.md](https://github.com/shaharia-lab/slackcli/blob/main/SECURITY.md).