Let Your AI Agent Use Slack: One CLI, No Slack App Needed Shaharia Lab has released SlackCLI, an open-source command-line tool that lets AI agents interact with Slack without building a Slack app or obtaining OAuth approval. The tool captures session tokens via browser login or accepts bot tokens, and outputs JSON for all read commands, enabling agents to search messages, read threads, and send replies directly from the terminal. It supports features like reading Canvases as Markdown, sending Block Kit messages, and using Slack's search operators, with credentials stored locally with restricted permissions. Your AI agent can read your repo, run your tests, and open a pull request. Then it hits a wall. The context it needs is in Slack: the incident thread, the decision nobody wrote down, the "we changed the deploy order last week" message. Getting an agent into Slack normally means building a Slack app, picking OAuth scopes, and waiting for an admin to approve it. That is a lot of work before the first useful message. SlackCLI is a different path. It is a single open source binary that talks to Slack from your terminal, and every read command speaks JSON. If your agent can run a shell command, it can use Slack. SlackCLI is an unofficial project. It is not affiliated with or supported by Slack Technologies. brew tap shaharia-lab/tap brew install slackcli slackcli auth login-auto login-auto opens a browser, you sign in to Slack the way you always do, and SlackCLI captures the session tokens for every workspace on that account . Nothing leaves your machine. Credentials land in ~/.config/slackcli/workspaces.json with file mode 0600 . Prefer a real bot token for a server or a CI job? That works too: slackcli auth login --token=xoxb-your-token --workspace-name="My Team" Now try something: slackcli conversations unread Demo: https://github.com/shaharia-lab/slackcli -see-it-in-action https://github.com/shaharia-lab/slackcli -see-it-in-action Sign in, browse conversations, search the workspace, read a thread from a permalink, reply, react, read a Canvas as Markdown, and pipe --json into jq . All from the terminal. Most agent frameworks are happiest when a tool is a plain command with plain output. SlackCLI is built exactly that way. --json , so the agent gets structured data instead of screen scraping. 0 on success, 1 on failure. An empty search result is still a success, so check the data, not the exit code. --workspace=automation-bot to any command to pick an identity on purpose. slackcli conversations unread --json | jq ' .unread channels | {name, unread count} ' Feed that to a model and you have a morning digest. slackcli conversations read --permalink="$LINK" --json | jq -r '.messages .text' The JSON also carries a resolved users array, so user IDs are not opaque. slackcli search messages "deploy failed" --in=engineering --limit=50 --json All of Slack's own search operators work: in: , from: , before: , after: , has: , is: . slackcli search channels incident --json slackcli search people "ada@example.com" --json slackcli messages send --permalink="$LINK" --message="Root cause found, fix is in 4821" Passing a permalink replies in that thread, so no ID juggling is needed. slackcli messages send \ --recipient-id=C1234567890 \ --message="Nightly build report" \ --blocks=' {"type":"markdown","text":" Nightly build\n\n- x Build\n- x Tests\n- Deploy"} ' Native Block Kit markdown and table blocks mean headings, task lists, code fences, and real tables instead of a wall of text. slackcli canvas read F1234567890 --json | jq -r '.markdown' Team runbooks and specs often live in a Canvas. Now they are just Markdown your agent can read. You do not need an SDK or an MCP server. Give the agent shell access and one short instruction block: You can use the slackcli command to work with Slack. Read commands always add --json : slackcli conversations unread --json slackcli conversations read