Skip to content

fix(slack): enable the app's Messages tab so DM'd questions/approvals can be answered (v0.294.1) - #540

Merged
vikasprogrammer merged 1 commit into
mainfrom
feat/slack-dm-reply
Aug 3, 2026
Merged

fix(slack): enable the app's Messages tab so DM'd questions/approvals can be answered (v0.294.1)#540
vikasprogrammer merged 1 commit into
mainfrom
feat/slack-dm-reply

Conversation

@vikasprogrammer

Copy link
Copy Markdown
Owner

Reported from the field: an agent DM'd a design question on Slack and the recipient had no way to respond — the DM showed "Sending messages to this app has been turned off."

Two independent causes, both fixed here.

1. The Slack app manifest never enabled the Messages tab

Slack ships an app with App Home → Show Tabs → Messages Tab OFF, which renders the DM composer as a dead banner. Every inbound DM path the OS has arrives as a message.im:

  • answering a blocking ask_human (answerQuestionFromChat)
  • approving/denying a gate straight from the DM (decideApprovalFromChat)
  • chatting 1:1 with an agent (the /agent router)

The scopes (im:write, im:history) and events (message.im) were already in the manifest — necessary but not sufficient. features.app_home.messages_tab_enabled: true (+ messages_tab_read_only_enabled: false) is the other half.

A manifest change only reaches newly created apps, so the Settings → Integrations setup guide now carries a callout telling an existing workspace to flip the toggle by hand (immediate, no reinstall).

2. notify invited agents to ask questions it can't carry

Its description offered itself for "progress/updates/questions" to another teammate. But notify is strictly one-way — an Inbox update card plus a DM, neither of which has a reply affordance — so an agent that asked for a design decision through it and then held its PR waited forever. It now states the one-way contract and points at ask_human with to, which blocks and is answerable from the Inbox or the DM.

Schema change → a live session picks it up after a relaunch.

Verified

npm run typecheck, npm run build, cd web && npm run build, npm run test:governance (all green).

Still open (not in this PR)

A reply to a one-way notice (notify, session finished/crashed, task events) still has nowhere to go — with the Messages tab on it falls through to the intent router and spawns a fresh session rather than reaching the run that pinged you. Binding those DMs back to their session, the way bindQuestionDm/bindApprovalDm already do, is the follow-up.

🤖 Generated with Claude Code

… can be answered (v0.294.1)

Slack ships an app with App Home → Messages Tab OFF, which replaces the DM
composer with "Sending messages to this app has been turned off." Every inbound
DM path the OS has arrives as a `message.im` — answering a blocking `ask_human`,
deciding an approval inline, chatting 1:1 with an agent — so a human was pinged
and could not reply. Scopes and event subscriptions were already right; the tab
was the missing half. The bundled manifest now enables it, and the setup guide
calls out the toggle for already-installed apps (a manifest edit doesn't reach
those).

Also: `notify` advertised itself for "questions" to another teammate, but it is
strictly one-way (Inbox `update` card + DM, no reply affordance on either), so
an agent that asked for a decision through it and held its work waited forever.
It now states the one-way contract and points at `ask_human` with `to`.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@vikasprogrammer
vikasprogrammer merged commit e481458 into main Aug 3, 2026
1 check passed
@vikasprogrammer
vikasprogrammer deleted the feat/slack-dm-reply branch August 3, 2026 11:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant