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.
Authorize 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 at
slack/channels/<slug>--<channelId>/threads/<yyyy>/<mm>/<threadTs>/thread.md - Frontmatter identity:
captured_at, Slack permalink, channel and thread ids, andcaptured_byhandle + name (never a Slack user id) - Readable names for message authors and inline user mentions
- Files and explicit embedded media copied into the thread's
assets/directory with relative Markdown links. Private, signed, and expiring download URLs are never written to git. - Assets over 25 MiB, a thread over its 100 MiB asset budget, or unsafe/failed downloads leave a source permalink or textual stub instead
- 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)
- 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-authorize 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.