Skip to content

Connecting Slack, Linear and ClickUp

Each service connects one of two ways, chosen in setup or in Settings → Connections. You can pick differently for each service, or turn any of them off.

Your connection (default when Claude Code is signed in) Relay’s own bot or account
Needs Claude Code, with Slack, Linear or ClickUp connected in claude.ai → Settings → Connectors (or /mcp in claude) Slack: a Slack app. Linear and ClickUp: an account for Relay and its API key
What it picks up The wake word from anyone, plus what comes to you: @mentions, DMs and replies in your threads (Slack), tickets assigned to you and comments that mention you (Linear, ClickUp) @mentions of the bot and DMs to it. Linear and ClickUp: tickets assigned to Relay, the hand-off label or status, or an @mention
Replies Under your name, signed “— via Relay” Under Relay’s own name
Speed On demand by default: press Check now, or choose a schedule (every 5–60 minutes) Slack live; Linear and ClickUp every minute
Cost A small model call per check, on your Claude plan Free
Approvals In the app Slack buttons, or the app

Relay uses the connection you already set up in Claude Code. It has no account of its own, so people call it with the wake word: a message that starts with it, or tags it.

relay, what changed in login this week?
hey relay: can you summarise this thread?
@relay why is the build failing?

A message that uses the word mid-sentence (“relay this to Ama”) doesn’t count. You can change the wake word in Settings.

Relay also picks up things that come to you: @mentions, DMs and group DMs, replies in threads you’re in, and tickets assigned to you. Each can be switched off. Replies to these wait for your OK in the app, because they’d be posted in your name. Turn on Reply without asking to skip that. Ticket changes asked for this way always wait for your approval, even with Reply without asking on.

Because a search index can lag behind, when Check now finds nothing new it looks once more a minute later.

Setting up the bot is a guided, seven-step flow in the app. Each step is checked before the next one opens:

  1. Name the bot.
  2. Create the app. Slack opens with the manifest already filled in. It uses Socket Mode, so no public URL is needed.
  3. Install it to your workspace.
  4. Paste the bot token (xoxb-…). Relay checks it with Slack and shows the workspace and bot name.
  5. Paste the app-level token (xapp-… with connections:write). Relay checks it by connecting.
  6. Invite it to channels. Each one ticks as the bot joins.
  7. Send a test message. The flow waits until it arrives.

If your workspace needs an admin to approve the app, use your own connection in the meantime.

Bot messages that need approval carry Approve and Reject buttons. Only the Slack members listed under Settings → Connections → Who can approve in Slack can press them (by member ID, from their Slack profile → ⋯ → Copy member ID). With no one listed, approvals happen in the app only. This matters: anyone who can see a thread could otherwise approve a code change on your computer.

Requests to run a saved action also start without asking when one of these people makes them.

  1. Create a member for Relay, for example relay@yourcompany.com.
  2. Sign in as that member and create a personal API key (Linear) or API token (ClickUp).
  3. Paste it in setup or in Settings → Connections.

Then hand work to Relay by assigning the ticket to it, adding the hand-off label (agent), moving it to the hand-off status (Ready for agent), or @mentioning it in a comment. The label and status can be renamed to match your workflow.

When Relay starts on a handed-off ticket it moves it to In Progress, and to In Review when it’s done. Both statuses can be changed or left empty in Settings.

Ticket changes Relay makes on request (creating, commenting, assigning, labelling, moving and approved deletes) always go through Claude Code’s Linear or ClickUp connection, even when Relay has its own account. See Ticket changes.