# Channels

import Screenshot from "@docs/Screenshot.astro"
import SurfaceTabs from "@docs/SurfaceTabs.astro"

A channel connects a Ren project to Slack, GitHub, Linear, Telegram, or email. You send requests there, and Ren replies in the same conversation.

## What a channel is

A channel is another way to reach the same [project](/docs/concepts/projects/). Channel chats use the same project instructions, skills, apps, and storage as web app chats.

- **Project mapping:** Map each channel to a project. People in that conversation can send requests, subject to sender matching and fallback rules. Slack DMs use your personal space without a mapping. An open [task](/docs/concepts/tasks/) assigned to a project can route its linked conversation to that task's chat.
- **Conversation history:** The first message starts a Ren [chat](/docs/concepts/chats/). Later messages in the same conversation continue it with the existing context. The table below lists each channel's conversation boundary.
- **Files:** Replies can include files.
- **Web app:** Every channel chat also appears in the web app, so you can pick it up there. Chats from Slack, GitHub, and Linear have an **Open in** link in the chat header that takes you back to the original conversation.

In the API and CLI, the channel resources are `slack`, `github`, `linear`, `telegram`, and `email`.

Slack, GitHub, and Linear are installed once for the organization in **Settings → Mentions**, and only an organization admin can install them or map them to projects. Telegram and email need no install, and you set them up per project on the project's **@Ren** tab.

In a shared space, the project's **@Ren** tab is for organization admins. In your [personal space](/docs/concepts/spaces/), you can turn on email and add Telegram chats yourself.

<SurfaceTabs>
<Fragment slot="app">

Open **Settings → Mentions** to see each channel and whether it's connected.

<Screenshot
  shot="channels/overview/settings-mentions"
  alt="Settings Mentions listing each channel with its connection status"
/>

</Fragment>
</SurfaceTabs>

## Each channel

| Channel                              | A project maps to               | How you reach Ren                       | One chat is            |
| ------------------------------------ | ------------------------------- | --------------------------------------- | ---------------------- |
| [Slack](/docs/channels/slack/)       | A Slack channel                 | @mention Ren in a thread, or DM Ren     | A Slack thread         |
| [Linear](/docs/channels/linear/)     | A Linear project                | Assign an issue to Ren, or @mention Ren | A Linear agent session |
| [GitHub](/docs/channels/github/)     | A GitHub repository             | Mention `@renagent` on a pull request   | A pull request         |
| [Email](/docs/channels/email/)       | The project's own email address | Send an email to the address            | An email thread        |
| [Telegram](/docs/channels/telegram/) | A Telegram group or DM          | @mention the bot, reply to it, or DM it | A reply chain          |

**Slack:** Ren replies to mentions in mapped channels through threads. DMs use your personal space and need no mapping.

**Linear:** Ren works as a [Linear agent](https://linear.app/docs/agents-in-linear) and posts progress and responses on the issue. One issue can contain several agent sessions, each with a separate Ren chat.

**GitHub:** Mention `@renagent` in a pull request comment or a comment on a diff line. Ren reads the pull request, replies, and can push commits.

**Email:** Projects have individual addresses, like `acme.support@agents.renai.build`. Include the address in **To**, **CC**, or **BCC**. Ren replies in the email thread.

**Telegram:** A project link adds the bot to a group or DM. In a group, mention the bot or reply to it, and in a DM, send a message. Reply to a Ren message to continue its chat.

## Work across channels

A project can use every channel that's mapped to it, not only the one a message came from. For example, if a project has a Slack channel and a Linear project mapped, a chat that starts from a Linear issue can post a summary to the project's Slack channel.

Ren can only post to channels mapped to the chat's project. It can always reply in the conversation the chat came from, even after a [task](/docs/concepts/tasks/) moves the work to another project.

```text
When you finish this issue, post a two-line summary in our Slack channel.
```

## How Ren picks a project

Each incoming message goes to its mapped project. When a conversation is linked to an open [task](/docs/concepts/tasks/) that's assigned to a project, the message goes to that task's chat first.

When nothing matches:

| Channel  | What happens                                                                                              |
| -------- | --------------------------------------------------------------------------------------------------------- |
| Slack    | Ren posts "This channel isn't connected to a Ren project yet." with a **Connect to Ren** button.          |
| Linear   | Ren posts "No Ren project is mapped to this issue" on the issue.                                          |
| GitHub   | Ren ignores the mention.                                                                                  |
| Email    | Ren drops the email without replying.                                                                     |
| Telegram | In a DM, the bot replies that the chat isn't connected to a Ren project yet. In a group, it stays silent. |

## Who Ren acts as

Ren runs each message as the person who sent it, so the chat is attributed to them. It matches the sender to a Ren user in the project's space:

| Channel  | How Ren matches the sender                                               |
| -------- | ------------------------------------------------------------------------ |
| Slack    | Signing in to Ren with Slack, or the email on the sender's Slack profile |
| Linear   | The email on the sender's Linear account                                 |
| GitHub   | The sender's public GitHub email                                         |
| Email    | The sender's email address                                               |
| Telegram | A Telegram account linked to Ren in **Settings → Mentions → Telegram**   |

Ren uses the mapping's **fallback sender** if the sender has no matching Ren account or doesn't belong to the project's [space](/docs/concepts/spaces/). Choose a space member when you map the channel. GitHub calls this the **default sender**, and Linear calls it the **session sender**. If neither account belongs to the space, Ren doesn't run the request. Slack, GitHub, and Telegram explain the rejection, while Linear and email send no reply.

A fallback sender lets teammates without a Ren account send work to Ren. Ren checks the sender again on every message, so several people can work in the same conversation.

## Attachment limits

| Channel  | What Ren receives                 | Limits                                    |
| -------- | --------------------------------- | ----------------------------------------- |
| Slack    | Files and snippets in the message | Files over 32 MB are skipped with a note. |
| Telegram | Documents and photos              | Files over 32 MB are skipped with a note. |
| Email    | Attachments on the email          | None set by Ren.                          |
| GitHub   | The comment text only             | Ren reads the pull request itself.        |
| Linear   | The issue and comment text only   | None.                                     |

Ren reads images, text files, and PDFs directly. Other file types, like ZIP archives, are saved to the space's machine, where Ren can open them with its tools.

## When to use a channel

- **Your whole team should use Ren.** Channels bring Ren to everyone in the tools they already use, including people who never open the web app.
- **You want to hand work off and come back to it later.** Mention Ren where the work comes up and read the reply when it lands.

Use the [web app](/docs/surfaces/web-app/) instead for longer sessions, or when you need to answer Ren's questions or approve its actions.

## FAQ

<details>
<summary>How many channels can a project use?</summary>

A project can have several GitHub repositories, Linear projects, and Telegram chats. The **@Ren** tab maps one Slack channel per project. Each project has one email address.

</details>

<details>
<summary>Can one channel point to several projects?</summary>

No. Each Slack channel, repository, Linear project, Telegram chat, and email address maps to one project at a time.

</details>

<details>
<summary>Why doesn't Ren ask for permission in a channel?</summary>

Channel chats deny actions that need approval and continue without them, and they can't ask clarification questions. Set required actions to **Allow** in the project's [permissions](/docs/concepts/projects/#permissions).

</details>

<details>
<summary>Whose credentials does Ren use?</summary>

The [credentials](/docs/concepts/credentials/) available to the project's space, not those of the person who sent the message. In a shared space, that's the space's credentials, then the organization's.

</details>