BuildNot yet confirmed elsewhere1 publisher2 min readPublished
The Slack CLI that skips admin approval keeps live tokens in a file your agent can read
An unofficial open-source CLI captures Slack session tokens through an ordinary browser login and writes them to disk. The approval step it removes was the one place anyone else got a look.
The Engineer · Build desk
What happened
- An unofficial open-source CLI called SlackCLI puts Slack reads and writes behind a single binary with JSON output, aimed at agents that can run shell commands.
- Those credentials are written to ~/.config/slackcli/workspaces.json at mode 0600, and the author says nothing leaves the machine.
- A second auth path takes a bot token instead, presented as the option for a server or a CI job.
- Read coverage includes workspace search with Slack's own operators and reading a Canvas back as Markdown.
Why it matters
- exposure Granting an agent shell access and granting it your Slack identity become the same act, because the token file is readable by anything running as you.
- constraint With no scopes chosen at login, there is no smaller version to negotiate afterwards; the only lever left is killing the session, which takes the human's access with it.
- precedent Shipping a safety boundary as a line of prompt text normalises a control no audit can verify and no model is obliged to honour.
File mode 0600 on `~/.config/slackcli/workspaces.json` [1] answers a question nobody was asking. It keeps other local accounts out. It has nothing to say about a process running as you, which is exactly what an agent handed shell access is [9][17].
The volume matters more than the permissions. One `auth login-auto` run opens a browser, takes an ordinary Slack sign-in, and captures session tokens for every workspace on that account [6]. Somebody in four workspaces produces four sets of live credentials from one login, in one file [16]. And because the whole point of the path is to skip building a Slack app and picking OAuth scopes [3], nothing on the way in narrows what those credentials can do: they carry whatever that person can read, including whatever the workspace search operators return across history [10][15].
The suggested integration is a prompt block that sorts commands into reads, which always take `--json`, and writes, which are labelled "ask me first" [9]. That is a request to a model, not a permission boundary; the binary is the same binary in both halves of the list [18]. Nearby, the same page notes that an empty search result still exits 0, so callers should check the data rather than the status code [12]. An agent that branches on exit status will read "found nothing" as "went fine".
The governable version of this ships in the same tool. There is a bot-token path for a server or a CI job [7], a `--workspace` flag to select an identity deliberately [8], and the author's own advice that Slack access is real access and automation should get its own bot-token profile [13]. That path is visible to an admin and revocable without touching a human's session. It also requires the conversation the headline promises you can skip [3]. Both roads are in the README; which one a team takes depends on who reads it first, the developer with an agent that stalled at the Slack boundary or the person who owns workspace access.
Worth being clear about the evidence. This is one post, published by the project's own side, with install instructions pointing at its own Homebrew tap [14]. The tool is unofficial and not supported by Slack Technologies [4]. The claim that nothing leaves your machine [1] is the author's, and it is the claim a security owner would most want verified independently, because it is unfalsifiable from the writeup alone. Read the token-capture code, not the bullet list about clean streams.
What to watch
- Whether Slack treats third-party capture of browser session tokens as a policy violation, and whether admin-forced sign-out becomes the standard response.
- Whether the project adds per-workspace consent at login or a genuinely read-only mode, instead of taking every workspace on the account.
- Whether endpoint tooling starts treating ~/.config/slackcli/workspaces.json as a credential store worth alerting on.
Clarity's read
What the record supports and how the coverage leans. The claims behind it follow.
Reality
- Evidence24
- Adoption
- Insufficient
- Hype gap+46
- Incentives84
- Confidence38
Claim ledger
Ranked by verification strength, evidence, and original report placement.
- [1]
The post states that nothing leaves your machine and that credentials land in ~/.config/slackcli/workspaces.json with file mode 0600.
ReportedSupportedSource: SlackCLI author, dev.to2 sources— create a free account to open themView cited source - [2]
SlackCLI is described as a single open-source binary that talks to Slack from the terminal, with every read command supporting JSON output.
- [3]
Per the post, getting an agent into Slack normally means building a Slack app, picking OAuth scopes, and waiting for an admin to approve it.
- [4]
SlackCLI is an unofficial project and is not affiliated with or supported by Slack Technologies.
- [5]
Installation is via a third-party Homebrew tap: brew tap shaharia-lab/tap, then brew install slackcli.
- [6]
slackcli auth login-auto opens a browser, the user signs in to Slack as usual, and SlackCLI captures the session tokens for every workspace on that account.
- [7]
An alternative auth path uses a bot token: slackcli auth login --token=xoxb-your-token --workspace-name="My Team", presented as the option for a server or a CI job.
- [8]
Adding --workspace=automation-bot to any command selects a specific identity.
- [9]
The recommended integration is to give the agent shell access plus a short instruction block listing read commands (always with --json) and write commands under the heading "ask me first".
- [10]
Search supports Slack's own operators in:, from:, before:, after:, has: and is:, for example slackcli search messages "deploy failed" --in=engineering --limit=50 --json.
- [11]
slackcli canvas read returns a Canvas as Markdown, so team runbooks and specs held in a Canvas become readable by an agent.
- [12]
Exit codes are 0 on success and 1 on failure, and an empty search result is still a success, so callers are told to check the data rather than the exit code.
- [13]
The post states that Slack access is real access and advises separating the identity by giving automation its own bot-token workspace profile.
- [14]
The only account of the tool supplied is a dev.to post under the handle shaharia, whose install instructions use the shaharia-lab Homebrew tap.
- [15]
Credentials captured by login-auto carry the signing-in person's own Slack reach, because that path involves no scope selection at all.
- [16]
A single browser login produces one credential set per workspace on the account, all in the same file, so a person in four workspaces yields four live credential sets from one sign-in.
- [17]
Mode 0600 excludes other local user accounts but not processes running as the same user, which is the privilege level of an agent given shell access.
- [18]
The read/write separation in the suggested setup exists only as prompt text addressed to the model, not as a capability of the tool.
Sources
1 independent publisher whose own reporting we read for this story.
- dev.toLet Your AI Agent Use Slack: One CLI, No Slack App Needed
1 article · August 23, 2026
Topics and entities
Follow any of these and your For You feed starts watching them — no settings page required.