← All posts

Slack surface, phase 1, is merged: mention an agent, it replies in the thread

Release notes 2026-09-15 — the Slack chat surface (vocion-core#251) is on main and deployed: app_mention and DM in, agent reply out, channels bound to agents, no Approve/Reject buttons in Slack yet. Updates our earlier post, which described it as in review.

Vocion Teamvocion-v2.69.0

Shipped: vocion-core#251, merged to main; deployed to the Metacto instance on 2026-09-15. Part of the 2026-09-15 release notes. This supersedes the status line in A chat surface is a trust boundary, which described the same slice as a draft PR.

The outcome

A team that already works in Slack should be able to ask an agent a question where the work is, and get the answer in the thread, without the agent gaining any new power to act. Phase 1 is exactly that and nothing more: the app manifest in the guide requests message and mention scopes only, no interactive components.

What it is

Ships dark: SLACK_SIGNING_SECRET, SLACK_BOT_TOKEN, VOCION_SLACK_EVENTS=1. Twelve tests. Setup guide: docs/guides/slack.md.

What phase 1 deliberately does not do

No Approve or Reject in Slack. An agent's proposals still go to the review queue and the Needs-you inbox; Slack is a place to ask, not a place to authorise. That was decision 025's Option 1, and the reasoning in the earlier post still holds: a chat surface is a trust boundary, and the authorisation model for a button in someone else's client is a separate decision.

Also merged today

vocion-core#253 (merged as c46580ee) adds the bot introducing itself on member_joined_channel and personas that belong to agents (an agent_persona table, migration 0090). It needs a Slack manifest change (subscribe member_joined_channel, add channels:read/groups:read) and an app reinstall to do anything live.

For operators

Register a Slack app with the manifest in the guide, set the three variables, bind a channel to an agent, mention the agent. If the signature does not verify you get a 401 and nothing runs.

Where this lives in the repo