Slack connector
Capture specific Slack threads into a GitHub context repository by mentioning the ctx| bot.
Fully managed app flow
This page covers the fully managed ctx| app, where one Slack app is owned by the deployment. Self-hosted operators must create and configure their own Slack app first. See Self-host Slack.
The Slack connector promotes durable engineering context — decisions, incidents, and design debates — from Slack into a git-backed context repository. It does not mirror whole channels, index the workspace, or sync banter in the background. Captures are auditable (git history records who captured, when, and which Slack thread), not a reviewed pull-request gate.
Connect Slack to ctx|, bind a context repository, then @mention the bot in
Slack. Mentioning the bot starts a small in-thread agent. Ask it to capture
this, or mention it with no extra text, to snapshot the thread as Markdown
under slack/channels/. Later mentions on the same thread update the same
file. Other intents get a short capability reply; v1 does not answer product
questions in Slack.
A Slack workspace can be connected to one ctx| organization.
Two ways to work with Slack
| Approach | Job |
|---|---|
| ctx| Slack connector (this page) | Durable, auditable context: capture chosen threads into git for indexing |
| Slack MCP server | Query-time access: search and read the live workspace from your developer agent |
If you want general access to your Slack workspace from tools such as Cursor or Claude, add Slack’s MCP server to your developer environment. See Slack’s Guide to Model Context Protocol in Slack. ctx| does not replace Slack MCP, and Slack MCP does not create the same git-native, ingested context that the connector does.
Prerequisites
- An active GitHub connection in ctx|.
- A context repository (we recommend
ctxpipe-context). - Permission to install the ctx| Slack app in the workspace.
- Ability to
/invitethe bot into any channel where you will capture threads.
Setup flow
Start from Connectors
Open Connectors, choose Add connection, then Slack.
Authorise the workspace
Complete the Slack OAuth popup. ctx| stores an encrypted bot token for that workspace connection. One Slack workspace maps to one ctx| org.
Bind a context repository
Select the repository that should receive captured threads. ctx| commits snapshots to its default branch. Prefer a separate private repo when captures may include sensitive private-channel content. The ctx| GitHub App must have access to the selected repository and permission to write contents.
Capture threads in Slack
In each channel where you want capture, /invite the bot (use its Slack
@handle from the connector card), then mention it inside an existing
thread — a channel-top-level mention is refused:
@your-bot-handle capture thisA bare mention with no extra text also captures. ctx| replies in the thread with ctx| agent working…, then updates that message (or posts a new reply if the update cannot land) to Engineering context captured with a View in GitHub link, or a short capability reply if you asked for something else. Later replies are not mirrored unless you mention the bot again on that thread (that recapture overwrites the same snapshot).
What is captured
- Thread-first Markdown under
slack/channels/<slug>--<channelId>/threads/… - Frontmatter identity:
captured_at, Slack permalink, channel and thread ids, andcaptured_byhandle + name (never a Slack user id) - File and image attachments as Markdown links to the Slack permalink (no binaries and no private download URLs in git)
- The in-thread status reply is excluded from the snapshot
- Threads longer than 500 messages are truncated (oldest kept); Slack status calls that out. Hosted deployments share one Slack app quota.
What is out of scope (v1)
- Continuous channel mirroring or history backfill
- Direct messages and multi-party DMs
- Automatic refresh when someone replies after a capture
- Slack Q&A / retrieval in-thread (future tool on the same agent)
- Full video or file binary archival (attachments are permalink stubs)
- Deleting git history when you uninstall Slack. Uninstall marks the connection revoked; captured files stay in the repository.
Troubleshooting
Capture does nothing
Confirm the connector status is Connected (repository bound), the bot is
invited to the channel, and you used Slack autocomplete to @mention the bot.
Bare mention or “capture this” snapshots the thread. Self-hosted operators
should confirm Event Subscriptions include app_mention and that
MODEL_PROVIDER* is set so the mention agent can interpret extra text — see
Self-host Slack. If the Slack app's bot scopes were
changed after installation, re-authorise the workspace; existing bot tokens do
not gain new permissions automatically.
Private channel
Private channels work only after the bot is a member. Direct messages are not supported in v1.