# Slack Setup Guide

This guide walks you through connecting **cc-connect** to Slack, so you can chat with your local Claude Code via a Slack bot.

## Prerequisites

- A Slack workspace account (with permission to create apps)
- A machine that can run cc-connect (no public IP needed)
- Claude Code installed and configured

> 💡 **Advantage**: Uses Socket Mode (WebSocket) — no public IP, no domain, no reverse proxy needed.

---

## Step 1: Create a Slack App

### 1.1 Open the Slack API Console

Go to [Slack API](https://api.slack.com/apps) and sign in with your Slack account.

### 1.2 Create a New App

1. Click "Create New App"
2. Select "From scratch"
3. Fill in the app details:

| Field | Suggested Value |
|-------|----------------|
| App Name | `cc-connect` |
| Development Slack Workspace | Select your workspace |

4. Click "Create App"

---

## Step 2: Configure Bot User

### 2.1 Go to App Home

In the left sidebar, click "App Home".

### 2.2 Set Bot Info

1. Click "Edit" to configure the bot display name
2. Fill in:

| Field | Suggested Value |
|-------|----------------|
| Display Name (Bot Name) | `cc-connect` |
| Default Username | `cc_connect` |

### 2.3 Always Show Bot Online

Toggle on "Always Show My Bot as Online".

---

## Step 3: Configure Permissions (OAuth Scopes)

### 3.1 Go to OAuth & Permissions

In the left sidebar, click "OAuth & Permissions".

### 3.2 Add Bot Token Scopes

Under "Scopes" → "Bot Token Scopes", add:

| Scope | Purpose |
|-------|---------|
| `app_mentions:read` | Read @mention messages |
| `chat:write` | Send messages |
| `im:history` | Read DM history |
| `im:read` | Read DM list |
| `im:write` | Send DMs |
| `channels:history` | Read channel messages (optional) |
| `groups:history` | Read private channel messages (optional) |
| `users:read` | Get user info |

---

## Step 4: Enable Socket Mode

### 4.1 Go to Socket Mode Settings

In the left sidebar, click "Socket Mode".

### 4.2 Enable Socket Mode

1. Toggle on "Enable Socket Mode"
2. Click "Generate Token and Enter Socket Mode"

### 4.3 Generate App-Level Token

1. Enter a token name (e.g. `cc-connect-socket-token`)
2. Add the following scope:
   - `connections:write` — establish WebSocket connections
3. Click "Generate"

### 4.4 Save the Token

The system will generate an App-Level Token (format: `xapp-xxxxxxx...`). Save it immediately.

> ⚠️ The token is only shown once — copy it now!

---

## Step 5: Configure Event Subscriptions

### 5.1 Go to Event Subscriptions

In the left sidebar, click "Event Subscriptions".

### 5.2 Enable Events

1. Toggle on "Enable Events"
2. Since we're using Socket Mode, no Request URL is needed

### 5.3 Subscribe to Bot Events

Under "Subscribe to bot events", add:

| Event | Purpose |
|-------|---------|
| `app_mention` | Triggered when the bot is @mentioned |
| `message.im` | Triggered when a DM is received |

### 5.4 Save Changes

Click "Save Changes".

---

## Step 6: Install App to Workspace

### 6.1 Install the App

In the left sidebar, click "Install App" → "Install to Workspace".

### 6.2 Authorize

Review the permissions and click "Allow".

### 6.3 Get the Bot Token

After installation, you'll see:

```
Bot User OAuth Token: xoxb-xxxxxxx...
```

> ⚠️ Save this token — you'll need it for configuration.

---

## Step 7: Configure cc-connect

Add both tokens to your `config.toml`:

```toml
[[projects]]
name = "my-project"

[projects.agent]
type = "claudecode"

[projects.agent.options]
work_dir = "/path/to/your/project"
mode = "default"

[[projects.platforms]]
type = "slack"

[projects.platforms.options]
bot_token = "xoxb-xxxxxxx..."
app_token = "xapp-xxxxxxx..."
```

### Token Reference

| Token | Prefix | Purpose |
|-------|--------|---------|
| Bot Token | `xoxb-` | Bot API authentication |
| App Token | `xapp-` | Socket Mode connection |

---

## Step 8: Start cc-connect

### 8.1 Launch

```bash
cc-connect
# Or specify a config file
cc-connect -config /path/to/config.toml
```

### 8.2 Verify Connection

You should see logs like:

```
level=INFO msg="slack: connected"
level=INFO msg="platform started" project=my-project platform=slack
level=INFO msg="cc-connect is running" projects=1
```

---

## Step 9: Start Chatting

### 9.1 Direct Message

1. Search for your bot name in Slack
2. Open a DM conversation
3. Send a message

### 9.2 Channel Usage

1. Add the bot to a channel (`/invite @cc_connect`)
2. @mention the bot: `@cc_connect help me analyze the code`
3. The bot will respond

---

## Usage Example

```
User: @cc_connect Help me analyze the current project structure

cc-connect: 🤔 Thinking...
cc-connect: 🔧 Tool: Bash(ls -la)
cc-connect: Here's the project structure...
```

---

## Architecture

```
┌─────────────────────────────────────────────────────────────┐
│                       Slack Cloud                            │
│                                                              │
│   User Message ──→ Slack API ──→ Socket Mode Gateway         │
│                                       │                      │
└───────────────────────────────────────┼──────────────────────┘
                                        │
                                        │ WebSocket (no public IP needed)
                                        ▼
┌─────────────────────────────────────────────────────────────┐
│                    Your Local Machine                         │
│                                                              │
│   cc-connect ◄──► Claude Code CLI ◄──► Your Project Code    │
│                                                              │
└─────────────────────────────────────────────────────────────┘
```

---

## Socket Mode vs Webhook

| Feature | Socket Mode | Webhook |
|---------|-------------|---------|
| Public IP | ❌ Not needed | ✅ Required |
| Domain | ❌ Not needed | ✅ Required |
| HTTPS cert | ❌ Not needed | ✅ Required |
| Reverse proxy | ❌ Not needed | ✅ Required |
| Connection | WebSocket | HTTP callback |
| Complexity | Simple | More complex |
| Best for | Local dev, private network | Production |

---

## FAQ

### Q: Socket Mode connection fails?

Check the following:
1. Is the App Token correct? (starts with `xapp-`)
2. Does the App Token have `connections:write` scope?
3. Is Socket Mode enabled in the app settings?

### Q: Bot doesn't respond to messages?

Check the following:
1. Is the Bot Token correct? (starts with `xoxb-`)
2. Are event subscriptions configured correctly?
3. Are the required scopes added?

### Q: Changes to permissions don't take effect?

**⚠️ Important**: After modifying scopes or events, you must reinstall the app!

1. Go to "Install App"
2. Click "Reinstall to Workspace"

### Q: Bot doesn't respond in DMs?

Make sure you've subscribed to the `message.im` event.

### Q: Bot doesn't respond in channels?

Make sure:
1. You've subscribed to the `app_mention` event
2. The bot has been added to the channel
3. You @mentioned the bot in your message

---

## References

- [Slack API Documentation](https://api.slack.com/)
- [Slack App Building Guide](https://api.slack.com/start/building)
- [Socket Mode Documentation](https://api.slack.com/apis/connections/socket)
- [Bot Token Scopes](https://api.slack.com/scopes)
- [Event Types](https://api.slack.com/events)

---

## See Also

- [Feishu Setup](./feishu.md)
- [DingTalk Setup](./dingtalk.md)
- [Weibo Setup](./weibo.md)
- [Telegram Setup](./telegram.md)
- [Discord Setup](./discord.md)
- [Back to README](../README.md)
