brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
accessManage Slack channel access control — pairing, allowlist, channel opt-in. Use when approving a pairing code, changing the DM policy, editing the user allowlist, or opting a channel in or out. Trigger with "/slack-channel:access", "pair my slack account", "add user to slack allowlist", or "opt in a slack channel".
Independent GitHub snapshot · Automated classification · Original documentation governs
Manage who can reach your Claude Code session through Slack. This skill is the
terminal-side half of the access-control model: it approves pairing codes,
sets the DM policy, maintains the user allowlist, and opts channels in or out
with an interaction mode. Every subcommand reads and rewrites the single state
file (access.json) atomically.
/slack-channel:access pair <code> # Approve a pending pairing
/slack-channel:access policy <pairing|allowlist|disabled> # Set DM policy
/slack-channel:access add <slack_user_id> # Add user to allowlist
/slack-channel:access remove <slack_user_id> # Remove from allowlist
/slack-channel:access channel <channel_id> [--ambient] [--allow <user_id,...>] # Opt in a channel (default: mention-to-engage)
/slack-channel:access channel remove <channel_id> # Remove channel opt-in
/slack-channel:access status # Show current config
/slack-channel:install) — the state directory
~/.claude/channels/slack/ must exist.~/.claude/channels/slack/access.json — every subcommand
operates on this one file. It holds the DM policy, allowlist, channel
opt-ins, and pending pairing codes, and must stay mode 0o600.pair, the MCP server should be running so the confirmation message
can be delivered back to the Slack user.Parse $ARGUMENTS and execute the matching subcommand:
pair <code>access.json<code> (case-insensitive)entry.senderId to allowFromaccess.json with permissions 0o600Approved! User <senderId> can now DM this session.policy <mode>pairing, allowlist, disableddmPolicy in access.jsonpairing: New DMs get a code to approve (default)allowlist: Only pre-approved users can DMdisabled: No DMs acceptedadd <user_id>allowFrom (deduplicate)remove <user_id>allowFromallowFrom listschannel <channel_id> [--ambient] [--allow <ids>]Opting a channel in chooses an interaction mode. There are three; pick one:
| Mode | access.json | Behavior |
|---|---|---|
| Mention-to-engage (default) | requireMention: true | Humans converse freely; Claude only sees messages that @-mention it. Once a human mentions the bot in a thread, they keep talking in that thread without re-mentioning (thread-stickiness, ccsc-apj.1). Peer agents are never sticky — they must @-mention every message. |
Ambient (--ambient) | requireMention: false | Claude sees every message in the channel. Use for a dedicated bot channel where every message is for Claude. |
Per-user allowlist (--allow) | allowFrom: [ids] | Only the listed users are heard. Composes with either mode above. |
requireMention: true (the safe default — humans can chat without Claude listening to everything).--ambient → ambient: write requireMention: false.--allow <id1,id2> → also set the channel's allowFrom to those users (works with either mode).channels[channel_id] in access.json. Default requireMention: true unless --ambient is given.channel remove <channel_id>channels[channel_id]statusaccess.jsonpair — Approved! User <senderId> can now DM this session. plus a Slack
confirmation to the user when the MCP server is running.policy — the new DM policy and a one-line explanation of what it means.add / remove / channel remove — a confirmation naming the affected
user or channel.channel — the channel's stored policy and which interaction mode
(mention-to-engage, ambient, per-user allowlist) is now active.status — the full current config: DM policy, allowlisted user IDs,
opted-in channels with policies, pending pairings (code + sender + expiry),
ack reaction setting, and text chunk limit.access.json rewritten atomically with
mode 0o600.policy mode — only pairing, allowlist, disabled are
accepted; anything else stops with a usage error.access.json — move it aside (keep the broken copy for
inspection) and start fresh; re-pair afterwards./slack-channel:install instead of creating partial state here.Common flows, from first pairing to locking the channel down:
/slack-channel:access pair 7GK2QF # approve the code the bot DM'd you
/slack-channel:access policy allowlist # lock DMs to pre-approved users only
/slack-channel:access add U0123ABCD # allowlist a Slack user ID
/slack-channel:access channel C0456XYZ # opt in a channel (mention-to-engage default)
/slack-channel:access channel C0456XYZ --ambient # dedicated bot channel — hears everything
/slack-channel:access status # show the full current config
access.jsonaccess.jsonaccess.json is corrupt, move it aside and start freshACCESS.md — full access-control schema, DM policies, and interaction modesskills/install/SKILL.md — install lifecycle; pairing happens at its Step 5skills/policy/SKILL.md — tool-call policy rules (the policy field of the same state file)README.md — project quick start and security model