# Slack & channels

Connect Slack to a project and control sessions from a channel.

Canonical page: https://themachine.myapps.ai/docs/connect/slack

A channel connects a chat platform to a project. A message in a connected
channel starts a [session](/docs/work/sessions). The agent replies in the
same thread.

## Channels you can connect

Every project's **Settings → Channels** page offers these channels:

- **Slack**: connect with one click through the Machine-managed Slack app, or
  bring your own bot token.
- **Inkbox**: iMessage, text, email, or call the agent through your own Inkbox
  account. See [Inkbox: iMessage, SMS, email & calls](/docs/connect/inkbox).
- **Glyph**: talk with the agent live, by voice, from any session, through
  your own Glyph account. See [Glyph: live voice](/docs/connect/glyph).
- **Microsoft Teams** (experimental): connect through org admin-consent OAuth,
  or bring your own Azure Bot. Turn it on first under **Settings →
  Experimental → Microsoft Teams**.

Two older experimental channels, **Email** (an AgentMail inbox) and **Voice**
(a LiveKit call), can no longer be switched on from **Settings →
Experimental**. A project that turned one on before keeps it.

Slack and Microsoft Teams also connect from the CLI. This page covers Slack.
Teams follows the same session, identity-linking, and credential rules.

## How a channel starts a session

The first message in a Slack thread or Teams conversation creates a session.
Every later message in that thread goes to the same session, even after the
sandbox stops and resumes. A Slack workspace connected to more than one
project shows a project picker on the first mention.

## Identity linking

Machine links each chat sender to a Machine account before the agent runs for
them. Run `/kortix login` in Slack and follow the link to sign in. Teams uses
the same requirement. An unlinked sender gets a prompt to link instead of a
session run.

## Where credentials live

A connected channel's bot token (and, for your own Slack app, its signing
secret) is stored encrypted on the project as connector-scoped [secrets](/docs/project/secrets) with **Machine
service** delivery, so these values can show on the project's Secrets page.
Machine never injects them into a sandbox. Machine resolves the token server-side when
the agent sends a chat message.

## Connect Slack

### Start the connection

From the [CLI](/docs/cli) on your computer, run:

```
machine channels connect
```

On a host with the shared Slack app configured (Machine's cloud, for example),
this prints a one-click install link. Open the link and pick the workspace.
Click **Allow**. Add `--wait` to make the command poll until the install
lands.

From the web app, open the project's **Settings → Channels** page and connect
Slack there instead. It uses the same install flow.

### Use your own Slack app

On a self-hosted deployment with no shared Slack app configured, `machine
channels connect` falls back to manual mode automatically. Run `machine
channels manifest` to print an app manifest. Create the app at
`api.slack.com/apps` from that manifest. Install the app to your workspace.
Then run:

```
machine channels connect --manual --bot-token xoxb-... --signing-secret ...
```

### Check the connection

```
machine channels status
```

Run `machine channels disconnect` to remove the connection. See the
[CLI reference](/docs/cli) for every flag.

Connecting Slack adds a `channel` [connector](/docs/connect/connectors) entry
to `kortix.yaml` for you. You never write this entry by hand.

## Use Slack

Mention the bot with a task, in any channel it has joined, or open a direct
message. The thread keeps its session as described above. A bare mention with
no task gets a reminder to add one instead of starting a session.

## Control a session with slash commands

Type these as `/kortix <command>` in Slack, or as plain text in a DM. Slash
commands do not run inside the Assistant DM pane, so Machine parses the same
words from plain text there.

| Command | What it does |
|---|---|
| `login`, `logout` | Link or unlink your Slack identity |
| `switch`, `unbind` | Rebind or unbind this channel from its project |
| `projects` | List projects you can bind to |
| `sessions` | List recent sessions started in this workspace |
| `whoami` | Show the channel panel: project, agent, model, policy, and your linked identity |
| `agent <name>`, `model <id>` | Set the agent or model this channel uses |
| `policy <mode>` | Set who can start sessions here |
| `help` | List all commands |

`policy` accepts `project_open` (default — any project member who mentions
the bot gets a session), `owner_approval`, or `owner_only`.

## What does not work

- Slash commands do not fire inside the Assistant DM pane. Type
  `/kortix <command>` as plain text there instead.
- Other chat platforms, including Telegram and WhatsApp, are not supported
  channels. Only Slack and Microsoft Teams connect through the CLI; Inkbox and
  Glyph connect from **Settings → Channels**.
