/slack-channel:configure
Overview
Configure the Slack channel with its bot and app-level tokens. This is the only
token-writing path: validate prefixes, write .env with owner-only
permissions, never echo secrets, and return control to the install walkthrough.
Prerequisites
- A Slack app already created (via
/slack-channel:install Step 1 or
manually at api.slack.com/apps) with:
- the Bot User OAuth Token (
xoxb-...) from OAuth & Permissions, and
- the App-Level Token (
xapp-..., scope connections:write) from
Socket Mode settings.
- A writable home directory — state lives at
~/.claude/channels/slack/.
Usage
Pass both tokens as arguments, bot token first. Obtain them directly from the
Slack app dashboard and avoid shell history or shared transcripts:
/slack-channel:configure <xoxb-bot-token> <xapp-app-token>
Authentication
- The
xoxb- Bot User OAuth Token represents the installed bot and authorizes
Web API calls within its granted bot scopes.
- The
xapp- app-level token represents the Slack app and requires
connections:write to open the Socket Mode WebSocket.
- Prefix checks establish token type, not validity.
install doctor verifies
liveness against Slack without printing the credential.
- Store tokens only in
~/.claude/channels/slack/.env; never commit them or
include them in output, logs, screenshots, or issue reports.
Read references/official-auth.md when creating,
rotating, revoking, or diagnosing either token type.
Instructions
Parse the two arguments from $ARGUMENTS:
- First token must start with
xoxb- (Bot User OAuth Token)
- Second token must start with
xapp- (App-Level Token)
If either token is missing or has the wrong prefix, show this error and stop:
Error: Two tokens required.
- Bot token (starts with xoxb-) from OAuth & Permissions
- App token (starts with xapp-) from Socket Mode settings
Usage: /slack-channel:configure xoxb-... xapp-...
Create the state directory if it doesn't exist, then make the directory
owner-only before writing any secret-bearing file:
mkdir -p ~/.claude/channels/slack
# 0700 = owner may read/write/traverse; no group or other access
chmod 700 ~/.claude/channels/slack
Pre-create the fixed candidate path with owner-only permissions, then use
Write to replace its complete contents. This makes the file 0600 from
the instant it exists, independent of the process umask:
# 0600 = owner read/write; no group or other access
install -m 600 /dev/null ~/.claude/channels/slack/.env.tmp
Write this complete content to ~/.claude/channels/slack/.env.tmp:
SLACK_BOT_TOKEN=<bot-token>
SLACK_APP_TOKEN=<app-token>
Set the candidate file to owner-only, then atomically replace .env. If
Write, chmod, or mv fails before replacement, remove only the exact
candidate path ~/.claude/channels/slack/.env.tmp; leave the prior .env
untouched.
# 0600 = owner read/write; no group or other access
chmod 600 ~/.claude/channels/slack/.env.tmp
mv ~/.claude/channels/slack/.env.tmp ~/.claude/channels/slack/.env
Confirm success:
Slack channel configured.
Start Claude with the Slack channel:
claude --channels plugin:slack-channel@claude-code-plugins
Or for development:
claude --dangerously-load-development-channels server:slack
Next: opt in a channel and pick its interaction mode with
/slack-channel:access channel <id> (defaults to mention-to-engage;
pass --ambient for a dedicated bot channel). See ACCESS.md "Interaction modes".
Output
- On success:
~/.claude/channels/slack/.env atomically replaced with both
tokens and mode 0600, plus the confirmation block above (server start
command and the pointer to channel opt-in). Tokens are never echoed.
- On failure: the two-token usage error from step 2 and no file changes.
Error Handling
- Missing token or wrong prefix — show the step-2 error block and stop;
nothing is written. Bot tokens must start with
xoxb-, app tokens with
xapp-.
- Tokens swapped — the prefix check catches it; re-run with the bot token
first.
- Existing
.env — re-running atomically replaces it; this is the
supported token-rotation path (rotation happens at api.slack.com/apps).
- Write, permission, or move failure — remove only the fixed candidate
~/.claude/channels/slack/.env.tmp, leave the previous .env intact, and
report only the failed stage without printing values.
- Revoked/invalid tokens — this skill only validates prefixes, not
liveness. If the server later fails auth, run
/slack-channel:install doctor (checks 4–5 test both tokens live against
the Slack API).
Examples
Both flows are the same command — the second run simply overwrites .env:
# First-time setup (illustrative placeholders, not live credentials)
/slack-channel:configure xoxb-WORKSPACE-EXAMPLE xapp-APP-EXAMPLE
# Rotation after regenerating tokens in the Slack UI — same command, overwrites .env
/slack-channel:configure xoxb-NEW-TOKEN xapp-NEW-TOKEN
Security
- Never echo the tokens back in the confirmation message
- Never log tokens to stdout or any file other than
.env
- Secure the state directory as
0700 before writing the candidate
- Always set
0600 on the candidate before atomically moving it into place
Safety justification
rm is permitted only to clean the single fixed candidate path
~/.claude/channels/slack/.env.tmp after a failed rotation. Never pass a
variable, glob, directory, recursive flag, or any other path to rm; never
remove the previous .env.
Resources
skills/install/SKILL.md — the full install lifecycle that delegates to this skill (Step 3) and the doctor that verifies token liveness
skills/access/SKILL.md — the next step after configuring: channel opt-in and pairing
ACCESS.md — interaction modes referenced in the confirmation message
README.md — quick start, including Node.js and Docker server alternatives
1---2name: configure-33description: Configure Slack channel tokens (bot token + app-level token). Use when writing or rotating the Slack bot and app-level tokens for the slack-channel plugin. Trigger with "/slack-channel:configure", "configure slack tokens", or "set up my slack bot token".4license: Apache-2.05---67# /slack-channel:configure89## Overview1011Configure the Slack channel with its bot and app-level tokens. This is the only12token-writing path: validate prefixes, write `.env` with owner-only13permissions, never echo secrets, and return control to the install walkthrough.1415## Prerequisites1617- A Slack app already created (via `/slack-channel:install` Step 1 or18 manually at api.slack.com/apps) with:19 - the **Bot User OAuth Token** (`xoxb-...`) from **OAuth & Permissions**, and20 - the **App-Level Token** (`xapp-...`, scope `connections:write`) from21 **Socket Mode** settings.22- A writable home directory — state lives at `~/.claude/channels/slack/`.2324## Usage2526Pass both tokens as arguments, bot token first. Obtain them directly from the27Slack app dashboard and avoid shell history or shared transcripts:2829```30/slack-channel:configure <xoxb-bot-token> <xapp-app-token>31```3233## Authentication3435- The `xoxb-` Bot User OAuth Token represents the installed bot and authorizes36 Web API calls within its granted bot scopes.37- The `xapp-` app-level token represents the Slack app and requires38 `connections:write` to open the Socket Mode WebSocket.39- Prefix checks establish token type, not validity. `install doctor` verifies40 liveness against Slack without printing the credential.41- Store tokens only in `~/.claude/channels/slack/.env`; never commit them or42 include them in output, logs, screenshots, or issue reports.4344Read [`references/official-auth.md`](references/official-auth.md) when creating,45rotating, revoking, or diagnosing either token type.4647## Instructions48491. Parse the two arguments from `$ARGUMENTS`:50 - First token must start with `xoxb-` (Bot User OAuth Token)51 - Second token must start with `xapp-` (App-Level Token)52532. If either token is missing or has the wrong prefix, show this error and stop:5455 ```56 Error: Two tokens required.57 - Bot token (starts with xoxb-) from OAuth & Permissions58 - App token (starts with xapp-) from Socket Mode settings5960 Usage: /slack-channel:configure xoxb-... xapp-...61 ```62633. Create the state directory if it doesn't exist, then make the directory64 owner-only **before writing any secret-bearing file**:6566 ```bash67 mkdir -p ~/.claude/channels/slack68 # 0700 = owner may read/write/traverse; no group or other access69 chmod 700 ~/.claude/channels/slack70 ```71724. Pre-create the fixed candidate path with owner-only permissions, then use73 `Write` to replace its complete contents. This makes the file `0600` from74 the instant it exists, independent of the process umask:7576 ```bash77 # 0600 = owner read/write; no group or other access78 install -m 600 /dev/null ~/.claude/channels/slack/.env.tmp79 ```8081 Write this complete content to `~/.claude/channels/slack/.env.tmp`:8283 ```84 SLACK_BOT_TOKEN=<bot-token>85 SLACK_APP_TOKEN=<app-token>86 ```87885. Set the candidate file to owner-only, then atomically replace `.env`. If89 `Write`, `chmod`, or `mv` fails before replacement, remove only the exact90 candidate path `~/.claude/channels/slack/.env.tmp`; leave the prior `.env`91 untouched.9293 ```bash94 # 0600 = owner read/write; no group or other access95 chmod 600 ~/.claude/channels/slack/.env.tmp96 mv ~/.claude/channels/slack/.env.tmp ~/.claude/channels/slack/.env97 ```98996. Confirm success:100 ```101 Slack channel configured.102103 Start Claude with the Slack channel:104 claude --channels plugin:slack-channel@claude-code-plugins105106 Or for development:107 claude --dangerously-load-development-channels server:slack108109 Next: opt in a channel and pick its interaction mode with110 /slack-channel:access channel <id> (defaults to mention-to-engage;111 pass --ambient for a dedicated bot channel). See ACCESS.md "Interaction modes".112 ```113114## Output115116- On success: `~/.claude/channels/slack/.env` atomically replaced with both117 tokens and mode `0600`, plus the confirmation block above (server start118 command and the pointer to channel opt-in). Tokens are never echoed.119- On failure: the two-token usage error from step 2 and no file changes.120121## Error Handling122123- **Missing token or wrong prefix** — show the step-2 error block and stop;124 nothing is written. Bot tokens must start with `xoxb-`, app tokens with125 `xapp-`.126- **Tokens swapped** — the prefix check catches it; re-run with the bot token127 first.128- **Existing `.env`** — re-running atomically replaces it; this is the129 supported token-rotation path (rotation happens at api.slack.com/apps).130- **Write, permission, or move failure** — remove only the fixed candidate131 `~/.claude/channels/slack/.env.tmp`, leave the previous `.env` intact, and132 report only the failed stage without printing values.133- **Revoked/invalid tokens** — this skill only validates prefixes, not134 liveness. If the server later fails auth, run135 `/slack-channel:install doctor` (checks 4–5 test both tokens live against136 the Slack API).137138## Examples139140Both flows are the same command — the second run simply overwrites `.env`:141142```143# First-time setup (illustrative placeholders, not live credentials)144/slack-channel:configure xoxb-WORKSPACE-EXAMPLE xapp-APP-EXAMPLE145146# Rotation after regenerating tokens in the Slack UI — same command, overwrites .env147/slack-channel:configure xoxb-NEW-TOKEN xapp-NEW-TOKEN148```149150## Security151152- Never echo the tokens back in the confirmation message153- Never log tokens to stdout or any file other than `.env`154- Secure the state directory as `0700` before writing the candidate155- Always set `0600` on the candidate before atomically moving it into place156157## Safety justification158159`rm` is permitted only to clean the single fixed candidate path160`~/.claude/channels/slack/.env.tmp` after a failed rotation. Never pass a161variable, glob, directory, recursive flag, or any other path to `rm`; never162remove the previous `.env`.163164## Resources165166- [`skills/install/SKILL.md`](https://github.com/jeremylongshore/claude-code-slack-channel/blob/main/skills/install/SKILL.md) — the full install lifecycle that delegates to this skill (Step 3) and the doctor that verifies token liveness167- [`skills/access/SKILL.md`](https://github.com/jeremylongshore/claude-code-slack-channel/blob/main/skills/access/SKILL.md) — the next step after configuring: channel opt-in and pairing168- [`ACCESS.md`](https://github.com/jeremylongshore/claude-code-slack-channel/blob/main/ACCESS.md) — interaction modes referenced in the confirmation message169- [`README.md`](https://github.com/jeremylongshore/claude-code-slack-channel/blob/main/README.md) — quick start, including Node.js and Docker server alternatives