A Slack bot that opens pull requests, step by step
Set up a Slack bot that opens pull requests: mention it under a bug report, steer it mid-run, review the PR, and keep the thread going after the merge.
Someone pastes a stack trace into #support, two people react with the eyes emoji, a third says "I think that's the retry change from last week," and then the thread scrolls away without anyone filing a ticket. If your team does most of its triage in Slack, a Slack bot that opens pull requests lets you start the fix in the thread where the bug was reported, before anyone has to copy it into a tracker.
We build Sinatra, so this walkthrough uses it, and you should read it with that in mind. The Linear walkthrough covers the same agent and the same pull request starting from a ticket. If you're still choosing which Slack bot your team gets, the comparison of coding agents in Slack covers who you can mention and what each one bills. This post assumes you've picked and want to see what happens when you click.
Checked October 2026 against Sinatra's Slack docs. Competitor details come from the Slack comparison, which links each vendor's own page.
Step 1: connect the Slack app and match accounts
A workspace owner or admin does this once. In the Sinatra dashboard, open workspace Settings, then Slack, and click Connect Slack. That runs the normal Slack authorization for your Slack workspace. Other members see the card but can't connect it. One Sinatra workspace connects to one Slack workspace, and the app is on every plan, Free included. The Slack page has the overview.
Then everyone who will mention Sinatra needs two things. They have to be a member of the Sinatra workspace, and Sinatra has to know which Slack account is theirs. Most people get the second part for free: Sinatra links a Slack account automatically when its email matches a verified email on exactly one Sinatra account, either the address you sign in with by email link or a verified email on your GitHub account. If yours doesn't match, use Sign in with Slack on the same Settings card. A linked account still has to belong to a member of the Sinatra workspace before it can start work.
Model access works the way it does for every other task. Each member can connect their own Claude or ChatGPT subscription in Settings, or an owner or admin can add a workspace API key. When you mention Sinatra, the task runs on your connection or on the shared key, not on a teammate's subscription. Sinatra never bills for model usage. That's between you and your provider.
Step 2: invite Sinatra to the channel
Sinatra only sees mentions in channels it has been added to, so invite it to the ones where bugs actually get reported, public or private. It starts work only when someone mentions it. Once it's working in a thread, it also reads the replies there (step 5).
Direct messages aren't supported. You can't DM the app a task, so the work always happens somewhere your team can see it. We think that's mostly a good thing for a team tool, but it's a real limit if you wanted a private scratchpad.
Step 3: mention @Sinatra with the request
There are two ways to start. You can post a new message that mentions @Sinatra and says what you want. Or, the more common case, you can mention it inside the thread that already has the bug report in it. In an existing thread, Sinatra takes the thread's first message as the request, together with whatever you wrote in your mention. So "@Sinatra can you fix this?" under a pasted stack trace works, and you don't have to restate the bug.
Each thread is one task. That's worth remembering when a thread wanders: if the conversation turns into a second, unrelated problem, start a new thread for it.
A Slack thread doesn't say which repository the bug lives in, so you may have to add that. If the workspace has exactly one repository connected, Sinatra uses it. If it has several, add repo: owner/name to your message, for example @Sinatra repo: acme/web the export button 500s for users with no timezone set. Without it, the agent picks from the connected repositories based on what you asked. That works when the request is specific and goes wrong when two repos could own the code.
Not every mention needs code. "@Sinatra why does the nightly job retry three times?" gets an answer in the thread without checking out a repository at all, and the dashboard shows that task as Conversation only.
The rules for a good ticket apply to a Slack ask too. Say what happens and what should happen, and name the file or endpoint if you know it. How to write tickets for AI agents has the longer version. If the thread already has a stack trace in it, you've covered most of that.
Step 4: from the thread to a draft pull request
Sinatra adds a 👀 reaction to your message when it picks the request up. If it can't take the request because of who you are or where you asked, it tells you privately, in a message only you can see. The three usual reasons are that it couldn't match your Slack account (link it from Settings and mention it again), that you aren't a member of the Sinatra workspace (it sends the owners an access request for you), or that the channel is shared with another organization (more on that below). Billing or model-access problems get a normal reply in the thread instead, so the people in it can see why nothing started.
While it works, Sinatra keeps exactly one progress message in the thread. Its title says what the agent is doing right now, and the checklist under it is edited in place, so a busy channel doesn't fill up with status messages.
If the request is vague, the first thing you'll see is a question or a short plan, posted as an ordinary reply. Answer it in the thread. There's no separate approval step, so "yes, go ahead" in the thread is enough.
When the request needs code, the agent works in its own sandbox with a checkout of the repository, opens a draft pull request, and then Sinatra runs your test command if the repository configures one, with up to two attempts to fix failures, and reviews its own diff. The agent links the PR back to the thread, and the progress message closes with the PR link. The 👀 comes off when the turn ends.
If your plan is already running as many tasks as it allows, the new one is queued and starts on its own when a running task finishes. On Free that's 1 task at a time, plus 1 queued, with no daily limit and no card. Pro is $20 a month for the whole workspace: 3 tasks at a time, plus 10 queued, any number of people.
Step 5: reply in the thread, with or without a mention
Replying in the thread continues the task, and there are two kinds of reply.
A reply that mentions Sinatra always reaches it. Use that for follow-ups, for answering its question, or for the go-ahead on a plan.
A reply without a mention reaches it only when Sinatra judges you're talking to it. A reply that asks it something, corrects or approves its work, answers its question, or adds useful evidence (a second stack trace, the request ID from the logs) continues the task. Teammates talking to each other, a "thanks!", or a reply addressed to someone else doesn't. When it isn't sure, it stays quiet. If you need to be sure it sees a reply, mention it. This only applies in a thread Sinatra is already working in, and only to workspace members it can match.
You don't have to wait for the run to finish. A message sent while the agent is working reaches the running agent, the same as on Linear and GitHub. Sinatra decides whether your message changes the work right away, gets folded in before the run ends, or becomes its own next turn, and it says so when it waits. So "@Sinatra also handle the case where the timezone is an empty string" mid-run is fine.
Step 6: review the pull request, then keep the thread going
You review the pull request the same way you'd review a teammate's. Your CI runs on it, and nothing reaches your main branch until a person merges it. How to review AI-generated PRs covers what to look for.
Once there's a PR, leave code feedback on the PR rather than in Slack. A changes-requested review sends the agent back to rework the same branch without anyone mentioning it. A PR comment works when it mentions @sinatraai and asks for something. Slack stays the place for the conversation around the change: whether it was the right fix, what the support team should tell the customer.
Merging the PR doesn't end the task. If the same bug comes back in a slightly different shape a week later, reply in that thread and the same task picks up with the history it already has, and it can open a second PR. The dashboard shows the task as In progress, Queued, Needs your input or Idle, and lists every PR it opened.
Restarting and stopping
To throw the attempt away and start over, mention Sinatra with only the word restart in the task's thread. Sinatra drops the sandbox, deletes the branch, closes the existing PR, and starts again from the thread. Only a mention restarts a task, so "let's restart the service" in an incident channel won't trigger it.
You can't stop a task from inside Slack. To stop a running task, use Stop in the Running and queued list on the dashboard's overview, run sinatra stop <task-id> from the CLI, or call the stop_task MCP tool or the HTTP API. Stopping keeps the task, so a later mention in the thread carries on from where it was.
Slack Connect channels
Channels shared with another organization through Slack Connect are off by default. A mention there gets a private note back to whoever mentioned Sinatra, and nothing starts. An owner or admin can allow them with the Slack Connect option on the Slack settings card. Even then, everyone who mentions Sinatra still has to be a member of your Sinatra workspace with a matched Slack account, so a customer in a shared channel can't start work in your repositories.
When Slack isn't the right place to start
If your team's real queue is a tracker, assigning the ticket is the better habit. A Linear assignment or the Sinatra label on a GitHub issue (sinatraai on the hosted app) leaves a record in the place your planning already happens, and the Linear walkthrough is the same loop from there. Use Slack for bugs that haven't been filed anywhere.
If you need to hand work over in a DM, or your company is on Microsoft Teams, Sinatra doesn't support either. Per the Slack comparison, Claude Tag, ChatGPT, GitHub Copilot and Factory all document DMs, and ChatGPT, Cursor, Devin, Copilot and Factory document a Teams app. If you need to stop a run without leaving Slack, Claude Tag, Cursor, Devin and Copilot (in code channels) each document a way to do it, and Sinatra doesn't.
What to try first
Pick a bug that's already sitting in a thread with a reproduction in it: an error message, the endpoint, ideally the input that triggers it. Mention Sinatra in that thread with the repository named, reply once while it works to see the message land, and review the PR the way you'd review anyone's. A bug report that already exists is a better first test than a feature you have to describe from scratch, because you can tell in a few minutes whether the fix is the one you'd have written.
Common questions
Can I DM the Sinatra app a task?
No. Sinatra works in channels it has been invited to, public or private, and in their threads. Direct messages aren't supported.
Does everyone in the channel need a Sinatra account?
Only the people who mention it, or who reply without a mention and expect it to act. They need to be members of the Sinatra workspace with a Slack account Sinatra can match, by email or with Sign in with Slack.
Whose model subscription does a Slack task use?
The person who mentioned Sinatra: their own connected Claude or ChatGPT subscription, or a workspace API key an owner or admin added. A teammate's personal subscription doesn't cover your tasks.
How do I stop a task that started in Slack?
From the dashboard's overview, with sinatra stop, or with the stop_task MCP tool or the HTTP API. Slack itself has no stop control. The task is kept, so you can mention Sinatra in the thread to continue.
Does a Slack task cost more than a Linear or GitHub one?
No. It counts against the same tasks-at-a-time limit and queue as any other task, the plan is one price for the whole workspace, and the Slack app is included on every plan. For a small team the cheapest honest path is the subscriptions you already pay for, plus $20 a month for the whole workspace.
If you have a thread in mind already, start free, have an owner or admin connect Slack, and mention Sinatra under the stack trace. The Slack docs cover the rest of the setup, including Slack Connect channels and disconnecting.