Slack workspace channel catalog

Purpose: Single place to discover Brainforge Slack channels: IDs (for bots, MCP, automation), stated purpose/topic, whether a channel is internal vs external-facing, membership signal, and recency (last message time). Teammates and agents use this to pick the right channel without hunting in the Slack UI.

Living data: The wide table is machine-generated — edit slack-workspace-channel-catalog.generated.md only by re-running the script, not by hand.

How to regenerate

  1. Use a Slack token with conversations.list, conversations.history, and conversations.members. users.list is only needed when SLACK_MEMBER_SAMPLE is greater than 0 (default 6) so sample names can exclude bots. Use the same SLACK_BOT_TOKEN as platform Slack integrations when possible; the bot must be in private channels you want listed.
  2. From the monorepo root:
node --env-file=apps/platform/.env.local knowledge/engineering/scripts/slack-channel-catalog.mjs

Or:

SLACK_BOT_TOKEN=xoxb-… npm run slack:channel-catalog
  1. Commit the updated slack-workspace-channel-catalog.generated.md on a branch when the catalog should advance (monthly, or after major channel churn).

Optional env:

VariableMeaning
SLACK_CHANNEL_CATALOG_OUTOverride output path (default: knowledge/engineering/slack-workspace-channel-catalog.generated.md).
SLACK_MEMBER_SAMPLEMax sample member display names per channel (0 = skip; default 6). Full roster is not exported—use Slack for membership management.

What each column means

ColumnSource / notes
ChannelName with # prefix.
Channel IDStable ID (C…) for APIs, MCP slack_send_message, Railway envs, etc.
Purpose / topicFrom Slack purpose and topic (truncated). May be empty if unset.
AudienceExternal (Slack Connect) when is_ext_shared. Otherwise a heuristic (Internal vs Mixed / external-facing) from channel name + purpose/topic keywords—not authoritative. Fix ambiguous channels here in prose or ask Ops to rename/clarify purpose in Slack.
VisibilityPublic vs private channel.
ArchivedWhether the channel is archived.
Slack ConnectSame as external shared indicator.
Membersnum_members when the API returns it.
Sample membersAlphabetically sorted sample of display names (optional; see SLACK_MEMBER_SAMPLE). Bots are excluded using users.list is_bot when member sampling is enabled.
CreatedChannel creation time (UTC).
Latest messageTimestamp of the latest message visible to the token (UTC), not “last read.” Empty channels show —.

Limits and privacy

  • Not all channels: Only channels the token can see appear (e.g. private channels the bot was never invited to are missing).
  • Not a substitute for Slack: Membership changes, invites, and compliance live in Slack and IT policy.
  • Internal use: Treat the generated file as internal; it may contain channel names tied to clients or partners.
  • Slack MCP fallback and discovery: knowledge/standards/04-prompts/slack-mcp-context.md
  • Platform env vars for Slack: apps/platform/.env.example (SLACK_BOT_TOKEN, etc.)