Plan · Slack integration · v13

Superset in Slack: a teammate in the channel, not a bot you summon

Reads every message, speaks only when it should. Turns a thread into a working session on a real workspace and agent. Acts as the person who asked, with their Linear and GitHub. Remembers per channel.

v13 · 2026-09-08 · branch lace-scene · author: Claude for Avi

Changed from v1

00The model

SLACK #platform-eng top-level: every message read, few answered Thread: fix checkout latency replies reach it, no mention needed Thread: file vendor bug in Linear checklist edited in place · 👀 → ✅ other threads: side chatter, ignored respond automatically: on · unanswered: 37/100 DM always answered · your own connections SUPERSET Channel session · one per channel reads context + memory → nothing · short reply · start work · hand off Haiku, no tools, cached · replaced after ~1h idle Working session · one per thread = workspace + agent session (or a tool loop when no code) transcript + entity log durable · compute ephemeral tools: Superset MCP + author's Linear / GitHub connections runs on the author's host or a cloud sandbox Channel memory instructions · decisions did people act on replies? Routines = automations w/ Slack triggers already shipped Teal is new. Red is existing Superset machinery wired to a thread.

It joins the conversation

Replies in threads it's in, answers when it's talked about, stays quiet otherwise.

It uses your integrations

Linear, GitHub and the rest come from the asker's own plugin connections.

It remembers

Per-thread transcript and entity log; per-channel memory anyone can edit.

01Where it stands

02When it speaks

message arrives DM or a thread it's already in? yes always reply · feed the working session no: top-level channel message @-mentioned? yes react 👀 · reply or start work in a thread respond-automatically on and not backed off? no yes Channel session reads context + memory, picks one: 1. Nothing (the usual outcome) 2. Short reply in a thread, only if it already knows 3. Start a working session, only if the channel asked 4. Hand off silently to a thread already on it no per-message classifier; decision uses recent channel context silent
Mentions and joined threads always get a reply. Everything else goes through the four-outcome decision.

What that looks like. Same channel, nine moments.

# platform-engside chatter
S
Satya
anyone up for lunch at 12:30?
H
Harshith
in, the usual place
Superset says nothing. Unanswered count: 38 / 100.
outcome 1 · nothing
# platform-engits name, not addressed to it
H
Harshith
saw the superset launch thread on HN, marketing did a nice job
S
Satya
yeah the superset invoice for Sept also came through, forwarded to finance
Superset says nothing. The word appeared; nobody was talking to it.
outcome 1 · name is not a trigger
# platform-engaddressed by name, no @
S
Satya
superset, did #7331 make it into 1.26?
Su
SupersetAPP
Yes. #7331 (read-only worktree delete) is in the 1.26.0 release notes, shipped Sept 5.
H
Harshith
can we have superset file the coupon bug as a task too
Su
SupersetAPP
Filed SUP-412 "Safari login 500 with coupon in cart", linked to the open thread.
addressed · treated like a mention
# platform-enga concrete need
S
Satya
checkout p95 is back at 900ms since this morning, no idea which deploy did it
Su
SupersetAPP
I can bisect this against today's deploys on web and post what changed. Want me to?
One offer, in a thread. If nobody answers, that's it.
outcome 1 · the one exception
# platform-engit already knows
H
Harshith
what's our branch naming again? feat/ or feature/?
Su
SupersetAPP
feat/<ticket>-short-slug. From channel memory, saved by Satya on Aug 14.
outcome 2 · short reply, no tools
# platform-engthe channel asked for it
S
Satya
@Superset remember for this channel: pick up bug reports without waiting to be tagged
Su
SupersetAPP
Saved. I'll start a thread on bug reports here.
H
Harshith
login page 500s on Safari 18 when the session cookie is expired
👀 1
Su
SupersetAPP
On it, on Harshith's mbp in a new workspace.
☑ Reproduced with an expired cookie
☑ Found the redirect in auth/session.ts
☐ Fix + test
☐ Open PR
Superset [fixing Safari login 500] is thinking…
outcome 3 · working session in the thread
# platform-engadds to work in progress
S
Satya
oh and the safari thing only happens when the cart has a coupon applied
Nothing posted here. The message lands in the login thread:
Su
SupersetAPP
Satya says it only reproduces with a coupon in the cart. Adding that to the repro.
outcome 4 · hand-off
# platform-engin a thread it's already in
H
Harshith
@Superset where are we on the launch checklist?
✅ 1
Su
SupersetAPP
8 of 11 done. Waiting on legal for the venue contract, since the 2nd.
S
Satya
fold in the vendor quotes from last week too
Su
SupersetAPP
Added, three quotes, all under budget. Updated the checklist above.
joined thread · no mention needed
# platform-engtoo chatty, told to stop
S
Satya
@Superset only respond in this thread when I mention you
Su
SupersetAPP
Got it. I'll stay out of this thread unless tagged.
Channel-wide: "@Superset only respond here when mentioned" flips the channel setting.
quieted · thread or channel

03A thread is a working session

9:02 9:04 9:10 … 5 hours … 2:30 2:41 IN SLACK RUNNING KEPT Satya @Superset fix it 👀 in seconds Harshith "only w/ coupon" queued, no @ Superset ✅ PR #418 final reply notifies thread sits quiet Satya "add a test too" no @, same thread Superset ✅ pushed to #418 agent on a workspace picks up Harshith's reply at the next turn checklist edited in place nothing running no cost, no laptop needed resumes same workspace re-reads the thread the thread's memory never stops: what was said, what was made, what's queued so "add a test too" knows which PR, which workspace, which bug Compute comes and goes. The thread's memory doesn't. That's the whole trick, and Superset's version keeps the workspace files too.
One thread over a day. Read left to right; each lane is a different question: what did people see, what was running, what was remembered.

How Claude Tag does it, and how everyone else does

Every implementation answers the same three questions differently: where the agent's compute lives, what survives between turns, and whose machine or account the work belongs to.

SystemComputeBetween turnsBelongs toThe bet
Claude TagEphemeral cloud sandbox per thread, the same engine as Claude Code on the web. Two threads, two sandboxes.Sandbox released minutes after a turn and rebuilt on the next reply. Transcript durable on Anthropic's side. Files only in the sandbox are lost; pushed branches and posted artifacts survive.The channel. Service accounts an admin attaches per channel; DMs use your own connectors.Team work must not depend on anyone's laptop. Anyone in the thread can steer.
Open-InspectModal sandbox per session, OpenCode inside, a Durable Object per session holding state.Snapshot on idle, restore on the next prompt. Heartbeats and inactivity timeouts.One shared GitHub App for the whole org. Single-tenant by design.Fire and forget: kick it off, close the laptop, read the PR later.
CyrusA machine you control runs the edge worker; a git worktree per issue on that disk. Cloud only for webhooks and OAuth. A hosted option exists too.The worktree stays on disk. Follow-ups queue while a turn runs.The machine's owner. Bring your own keys and subscriptions.Your environment, your tokens, your box. Cheapest to run.
Local Claude Code botsThe developer's own laptop, Claude Agent SDK, one process.A session file on disk. Dies when the laptop sleeps.One person.Personal convenience, not a team surface.
Superset todayWorkspaces on a user's host. Cloud sandboxes exist on Blaxel, gated to internal users.Host worktrees persist until archived. A cloud sandbox wakes on the first inbound connection; there is no idle stop, TTL, or quota yet.The host's owner; cloud rows belong to the org with a creator.Both, which is the opportunity.

The best of each, and the pattern to move toward

TAKE FROM Claude Tag Cyrus Local Claude Code bots Open-Inspect quiet by default · react in seconds checklist in place · anyone steers, no re-mention thread persists, compute doesn't the work lands where you can open it follow-ups queued mid-task · 👀 → ✅ one streamed, live-updating reply Approve button before any write session survives restarts clarify with a dropdown, not a question completion card with PR links, signed callbacks THE SUPERSET PATTERN What a person sees, start to finish 1 Say it in the channel. No @ needed if you're talking to it. 2 👀 within seconds. Typing status, not a placeholder. 3 Short answers stream. Long tasks get a live checklist. 4 Anyone in the thread steers. Mid-task replies queue. 5 Anything irreversible waits for Approve in the thread. 6 A final reply that notifies: links, PR, "Changes" footer. 7 The workspace is in your sidebar. Open it on your machine. 8 Come back tomorrow; the thread picks up where it left off. Only Superset can do 7. Claude Tag can't hand work to your machine. Only 5 and 6 fix what people complain about in Claude Tag. Everything else on this page is in service of these eight lines.
Four sources, one experience. This is the bar each phase is measured against.

This is the pattern to move toward. Claude Tag's conversational contract is the baseline, because it is the only one of the five that feels like a teammate rather than a tool. Superset adds the two things it structurally can't: the result lands in a workspace you can open in the desktop, and irreversible actions wait for a button. The other borrowings (streamed replies, queued follow-ups, dropdown clarification, signed completion callbacks) are how the baseline gets built without re-learning what the others already learned.

Three ways Superset could answer it

A · Author's host B · Cloud per thread C · Split by surface Cyrus · local bots Claude Tag · Open-Inspect recommended + real env, setup scripts, sidebar + no new infra, no new cost + credentials already there + always on, nobody's laptop + contained blast radius + anyone in the thread can steer + channels: cloud, always on + DMs: your host, your connectors + channel can pin a runner host − dies when the lid closes − teammates' follow-ups run on your box − untrusted channel text, full creds − costs per thread, needs idle policy − sandbox items still gated (below) − only pushed work survives − two code paths to keep honest − cloud must ship first for channels v3 proposal: A with B as fallback what Claude Tag ships + "open on my machine" from any thread Option C is Claude Tag's channel-versus-DM split applied to compute, with Cyrus's runner-machine idea as a per-channel setting.

My pick: C. Cloud is the channel default, not the fallback.

Cloud has to clear these first (open items in the Sandboxes project, a Phase 3 dependency):

Until then, Phase 1 runs mentions and DMs on the author's host, which works today. Channel working sessions wait rather than ship on a fallback.

04Identity and integrations

Slack userwho asked linked Superset useruser_identities Superset MCP, in-processsame tRPC the CLI calls plugin_connectionsper user, OAuth credential proxylistTools / callTool Linear GitHub Notion…
Every action runs as the person who asked. No per-channel service accounts, which is the part of Claude Tag security reviews criticised.
SurfaceActs asUnlinked author
DMThe person, their connectionsConnect prompt
Thread, mentioned or addressedThe author of the triggering messageConnect prompt in thread
Channel, unpromptedShort replies need nobody. Working sessions need a linked author.Silence, or an offer naming the missing link
RoutineThe automation's ownern/a

05Tool policy

auto require approval deny from Slack reads · list · search create task, issue, branch, PR create workspace + agent delete · merge · close terminals_send · automation edits → Approve button in the thread bulk writes anything outside channel scope tools a plugin didn't opt in resolved org → channel → default, strictest wins · per-channel plugin scope like tools.toml

06Memory

07Mechanics

TableKeyHolds
slack_channel_settingsteam, channelrespond_automatically, plugin scope, unanswered count
slack_channel_sessionsteam, channelcurrent session, started_at, config hash
slack_thread_sessionsteam, channel, thread_tsworkspace, agent session, transcript ref, entity log, checklist ts, queue, quiet
slack_channel_memoryorg, channel, entrycurated entries, author, shared flag
slack_outboxidempotency keypending and sent replies

08Phasing

Phase 0 Phase 1 Phase 2 Phase 3 ~2 days ~1 week ~1.5 weeks ~1 week bug fixes model + cache one handler tests thread = session follow-ups, queue Linear + GitHub tools completion callback channel session, 4 outcomes back-off, engagement channel memory + controls Approve button code tasks → workspace + agent checklist, PR posted back !restart, hand-off, pane Notion + Sentry plugins then ongoing: transcript evals (acted / stayed quiet / right tool / linked result) and PostHog on decisions and mutes

09Decisions needed

  1. Where working sessions run. Recommended: cloud sandbox for channel threads, author's host for DMs, optional pinned runner host per channel. Alternatives: host-first with cloud fallback, or cloud-only. Section 03 has the comparison.
  2. Respond-automatically default. On like Claude Tag, or off until a channel opts in?
  3. Identity in channels. Per-user as proposed, or add channel service connections later?
  4. Approval quorum. Any linked member, or only the author?
  5. Gating. All Pro, or presence free and working sessions plus plugin tools paid?
  6. Google. Skip, or fund a bundled MCP server?

10Prior art