Overview
Connect Slack to start Capy threads directly from messages, sync conversations, and let agents read and search your Slack workspace for context.Installing the Slack app
1
Open Slack settings
Go to Settings → Integrations → Slack. You need to be an org admin.
2
Install the app
Click Install and authorize Capy in your Slack workspace. This connects the workspace for your entire organization.
3
Set a default project
Choose a default project for Slack-originated threads. This is used for DMs and channels without an explicit mapping.
Starting threads from Slack
Mention @Capy in any channel where the app is installed. Capy starts a thread from your message and responds in a Slack thread. You can continue the conversation there - messages are synced to the Capy thread. You can also share images and files in the message. Capy will pick them up as context for the thread.Thread controls
Use thread controls to manage what Capy sees and when it responds inside a Slack thread.Aside messages
Prefix a message withaside to exclude it from Capy’s processing entirely.
- Capy won’t see the message
- Capy won’t respond to it
- It won’t appear in the agent’s context when Capy reads thread history
aside ... and @Capy aside .... The check is case-insensitive, and aside must be at the start of the message.
Mute and unmute
Mute a thread to stop Capy from responding to regular thread replies.- Type
muteor@Capy mutein the thread to mute it - Type
unmuteor@Capy unmuteto turn replies back on - When muted, Capy ignores regular thread replies
- Direct
@Capymentions still go through - DMs still work
Thread muted - Capy will ignore messages here unless directly mentioned with @Capy.Thread unmuted - Capy will respond to messages in this thread again.
Archive
Archive a Slack thread to stop Capy and close the Capy thread.- Type
archiveor@Capy archivein the thread - Capy stops any running work and archives the Capy thread
- Later messages and direct mentions in the archived Slack thread are ignored and do not unarchive it
- Type
unarchiveor@Capy unarchiveto explicitly reopen it - To keep the archived thread closed, start a new
@Capymention outside the old Slack thread
Thread archived - Capy has stopped and this session is closed.
When explicitly reopened, Capy confirms with: Thread unarchived - Capy will respond to messages here again.
Stop
Stop the current run without archiving the thread.- Type
stopor@Capy stopin the thread - Capy stops the current run and keeps the thread active
- Send another message in the thread when you want Capy to start again
Capy stopped the current run. If no run is active, it replies with Capy is not currently running.
Unlink from Slack
Typeunlink or @Capy unlink as the whole reply to pause Slack sync for the current thread. The Capy thread keeps running on web, and Slack receives a pause notice with an Open in Capy link. Resume sync from the thread’s Slack control on web.
Start a separate web thread
Add!web anywhere in a message to start a separate thread on web without linking it to Slack. In an existing Capy Slack thread, the new thread starts with the source transcript while the original thread and its Slack sync remain unchanged. In an ordinary Slack conversation, mention @Capy; Capy reads a bounded snapshot as context, then leaves that conversation unlinked. Muted and archived Capy threads also require an explicit @Capy mention.
Capy posts a Started on web card with an Open in Capy link. Continue the new thread on web: later Slack replies never enter it, and its replies, status, pull-request cards, and completion stay off Slack. You can link it to a new Slack thread later from its web menu, but it does not reattach to the source conversation.
Channel mappings
Map specific Slack channels to Capy projects so threads started from those channels are automatically assigned to the right project.- Go to Settings → Integrations → Slack
- Scroll to Channel mappings
- Select a channel and a project, then click Save
Message directives
Configure a thread withkey=value directives anywhere in your @Capy message. Directives are stripped from the prompt before the agent sees it, and quoted values are supported.
project, folder, title, and machine apply when Capy creates a thread, including channel=, !new, and !web starts. A machine= directive on a normal continuation is refused because an existing thread’s machine cannot be resized. Project names match case-insensitively with a safe fuzzy match; when the match is uncertain, Capy asks you to pick instead of guessing.
model= accepts a full catalog ID (openai/gpt-5.6-sol), a model name without its route prefix (gpt-5.6-terra), or a shortcut phrase: fable, opus, sonnet, haiku, sol, terra, luna, gemini, grok, kimi, qwen, glm. A phrase served by more than one connected route (Capy-billed vs a subscription) asks you to pick a route once for the org; a phrase that matches nothing gets an error reply, never a silent guess.
Use whitespace-delimited bang flags for thread, model, and delivery controls:
Capy refuses conflicting mode flags and an explicit Pro-plus-reasoning combination. A mode-only reply in an existing thread updates later replies and confirms the new selection once.
!new and !web also work in an existing active Capy thread without a mention. !new creates a new Slack thread, while !web creates a web-origin thread with the source conversation as context. !web cannot be combined with !new or channel=.
Repository and branch instructions are ordinary task context, not directives. Write them naturally - “use the backend repository on the staging branch” - and the agent handles them inside the selected project.
Personal connection
Team members can link their Slack identity to their Capy account from Settings → Integrations → Slack. Linking attributes your Slack messages to your Capy user - threads you start from Slack belong to you on the dashboard, and replies carry your name into the agent’s context. Unlinked teammates can still talk to Capy in threads; their messages just aren’t tied to a Capy account.Pull request cards
When a Slack-started thread opens or takes over a pull request, Capy posts a card for it into the Slack thread and keeps it current from GitHub state - status, checks, branches, and diff totals update in place, so the card never goes stale as work continues.- One card per pull request per thread. A thread working across five PRs gets five cards, each updating independently.
- Cards carry Open in Capy and View on GitHub actions.
- Merging or closing a PR posts one compact follow-up sentence, so you’re notified even after the card has scrolled away. Everything else - checks progressing, drafts flipping ready, reopens - only updates the card.
- A muted thread gets no new cards, but its existing cards keep updating: muting silences conversation, not a status object you can already see.
What agents can do with Slack
When a thread is started from Slack, agents have access to these capabilities:- Read messages from public channels and private channels where the Capy bot is a member
- Search messages across the workspace
- Send messages to channels or threads, with optional file attachments
- React to messages with emoji
- List channels to find the right conversation
Permissions
Troubleshooting
Capy doesn't respond to mentions
Capy doesn't respond to mentions
Make sure the Capy app is installed in the channel. Type
/invite @Capy to add it. Also verify the Slack workspace is connected in Settings → Integrations → Slack.Threads go to the wrong project
Threads go to the wrong project
Check your channel mappings. If the channel isn’t mapped, threads use the default project. Set one in Settings → Integrations → Slack.
Capy ignores messages in a thread
Capy ignores messages in a thread
The thread may be muted. Type
unmute or @Capy unmute in the thread to re-enable normal replies. Direct @Capy mentions still work while a thread is muted.Capy didn't react to an `aside` message
Capy didn't react to an `aside` message
That’s expected. Messages starting with
aside are excluded from Capy’s processing and do not appear in the thread context the agent reads later.Agent can't read a private channel
Agent can't read a private channel
The Capy bot reads private channels only where it is a member. Invite it with
/invite @Capy in that channel.