# Connect Slack to Enso Cloud

Choose Slack during [Cloud setup](/docs/cloud/) and wait for the machine to be
ready. You need permission to create and install an app in your Slack workspace.

## Create the app

1. Choose **Create Slack app** to open the prefilled manifest, select your
   workspace, and create the app. **Need the app manifest?** offers copy and
   download fallbacks for Slack's *From a manifest* flow.
2. Back in Cloud, choose **I've created the app**.
3. In Slack's **OAuth & Permissions**, choose **Install to Workspace** and approve
   the requested permissions. Copy the **Bot User OAuth Token** (`xoxb-…`) into
   Cloud, then choose **Continue**.
4. In Slack's **Basic Information** → **App-Level Tokens**, generate a token with
   the `connections:write` scope. Paste that token (`xapp-…`) into Cloud and choose
   **Verify connection**.

The supplied manifest configures Socket Mode and the events Enso needs. Both
tokens must belong to the same app. Cloud checks them together on your instance.
Tokens are sent there immediately and are not saved in your Cloud account or
browser storage. Refreshing before submission may require entering them again.

## Pair your private conversation

Choose **Open Slack** to reach the bot's private conversation, then send the exact
one-time `ENSO-…` message shown in Cloud as a new direct message. **Copy pairing
message** puts it on your clipboard. Send it from the human account that will own
this connection, outside a thread.

Pairing lasts up to five minutes. It ignores old messages, bot messages, thread
replies, and messages from another workspace. The acknowledgment confirms chat
delivery; it does not check your AI account.

When Cloud reports the bot as connected, choose **Save connection** to write the
connection and your AI defaults to the machine. Then continue with
[provider sign-in](/docs/cloud/#sign-in-and-say-hello), start Enso, and send a
normal message to complete setup.

## If connection fails

Check the two token types, app identity, Socket Mode, and `connections:write`.
Refreshing the page resumes an attempt that is still waiting. If it ended, choose
**Try again** and use the new code. To submit a different app while an attempt is
still waiting, choose **Back** first: that stops the old attempt.

If reusing an app that previously had broader permissions, revoke its old bot
token before reinstalling with Enso's manifest. Reinvite the bot to its channels
after reinstalling.

## Add shared channels later

The first pairing binds your private conversation. Invite the bot to each shared
channel you want it to use, then add its [binding](/docs/configuration/#bindings)
to an existing [workspace](/docs/workspaces/). New bindings apply to the next
message without a restart. Existing connections are changed explicitly through
configuration, rather than by rerunning fresh-home pairing.
