DevCom.AgenticRuntime.Plugin.Slack
1.1.0
See the version list below for details.
dotnet add package DevCom.AgenticRuntime.Plugin.Slack --version 1.1.0
NuGet\Install-Package DevCom.AgenticRuntime.Plugin.Slack -Version 1.1.0
<PackageReference Include="DevCom.AgenticRuntime.Plugin.Slack" Version="1.1.0" />
<PackageVersion Include="DevCom.AgenticRuntime.Plugin.Slack" Version="1.1.0" />
<PackageReference Include="DevCom.AgenticRuntime.Plugin.Slack" />
paket add DevCom.AgenticRuntime.Plugin.Slack --version 1.1.0
#r "nuget: DevCom.AgenticRuntime.Plugin.Slack, 1.1.0"
#:package DevCom.AgenticRuntime.Plugin.Slack@1.1.0
#addin nuget:?package=DevCom.AgenticRuntime.Plugin.Slack&version=1.1.0
#tool nuget:?package=DevCom.AgenticRuntime.Plugin.Slack&version=1.1.0
DAP Slack Plugin
Trigger a DevCom Agentic Platform (DAP) agent by @mentioning a Slack bot in a channel, and get the agent's reply back in the same channel — threaded under the message that mentioned it.
Unlike the Telegram plugin (which long-polls), Slack pushes events to DAP over HTTPS via the Events API, so the plugin exposes a single public endpoint and does no polling.
Features
slack-mentiontrigger — pairs a Slack app to an agent; anapp_mentionfires the agent with the message text (mention stripped) plus Slack context (channel, user, thread).- Threaded, streamed replies — the agent's answer is posted back and edited in place as it
streams, threaded under the triggering message by default (
chat.update, debounced to respect Slack's ~1 msg/sec/channel limit). - Session continuity — follow-up @mentions in the same thread continue the same agent conversation (session keyed by channel + thread).
- Per-agent pairing / multi-tenant — bot token, signing secret, and channel allow-list live on the per-agent trigger config, so one DAP deployment can pair multiple agents to multiple Slack apps/workspaces, each routed independently.
- Human-In-The-Loop (HITL) — when an agent needs input, the prompt is posted into Slack as a
Block Kit message with one button per choice; the operator answers by clicking a button or
@mentioning the bot in the thread, which resumes the run. The prompt's buttons are stripped
once resolved (from any source). Optionally forward all of an agent's HITL prompts to a chosen
channel (
ForwardAllHitl). - Request authenticity — every inbound event and interaction is verified (
X-Slack-SignatureHMAC-SHA256 +X-Slack-Request-Timestamp±5-minute replay window); unverifiable requests get401and do nothing. Redeliveries are de-duplicated byevent_id.
Configuration
The plugin has no plugin-wide settings. Configure each agent's Slack trigger with:
| Setting | Description |
|---|---|
| Bot Token | Bot User OAuth Token (xoxb-…) — needs chat:write + app_mentions:read |
| Signing Secret | The Slack app's Signing Secret — used to verify inbound events |
| Allowed channel IDs | Optional comma-separated channel IDs (e.g. C0123ABC) permitted to trigger the agent; blank = any channel the bot is in |
| Reply in thread | Thread the reply under the triggering message (default on); off posts to the channel |
| Forward all HITL prompts | Post every HITL request from this agent to a channel, even for non-Slack sessions (default off) |
| HITL channel ID | Channel that receives forwarded HITL prompts (shown when the above is on); the bot must be a member |
Slack app setup
Create an app at https://api.slack.com/apps → Create New App → From scratch.
Add scopes — OAuth & Permissions → Bot Token Scopes: add
app_mentions:readandchat:write.Install to workspace — Install App → copy the Bot User OAuth Token (
xoxb-…).Copy the Signing Secret — Basic Information → App Credentials → Signing Secret.
Create the DAP credential — in DAP, create a
slack-mentioncredential with the bot token and signing secret, and click Test (runsauth.test) to confirm it connects.Enable Event Subscriptions — Event Subscriptions → toggle on → Request URL:
https://<your-dap-host>/api/x/DevCom.AgenticRuntime.Plugin.Slack/eventsSlack sends a one-time
url_verificationchallenge; the endpoint answers it, so the URL shows Verified. The URL must be publicly reachable and registered per environment.Subscribe to the event — Subscribe to bot events → add
app_mention→ Save Changes (reinstall the app if Slack prompts you to).Enable Interactivity (required for HITL buttons) — Interactivity & Shortcuts → toggle on → Request URL:
https://<your-dap-host>/api/x/DevCom.AgenticRuntime.Plugin.Slack/interactivityThis is where Slack POSTs button clicks. Same host rules as the events URL (public, per environment). If you don't use HITL you can skip this step.
Bind the agent — add a
slack-mentiontrigger to the agent, referencing the credential and (optionally) an allowed-channels list. Invite the bot to the channel (/invite @yourbot) and @mention it.
Human-In-The-Loop
When an agent runs a request human input step, the plugin posts the prompt into Slack:
- Session started in Slack → the prompt lands in that same thread.
- Session started elsewhere (web UI, schedule, API) → set Forward all HITL prompts + a HITL channel ID on the trigger config to receive it there.
The operator answers by clicking a button or @mentioning the bot in the thread (a plain reply
won't reach the bot — Slack only delivers app_mention); the run resumes and the prompt's buttons
are removed once resolved. Button HITL requires the Interactivity request URL (step 8);
@mention-reply answers work with just the events URL.
Out of scope
Slash commands, modals/shortcuts, Socket Mode, direct messages, non-mention channel listening, and file/attachment ingestion — see the follow-up tickets.
Changelog
1.1.0
- feat(DAP-253, slack): Human-In-The-Loop over Slack via Block Kit — HITL prompts post as
interactive button messages (or thread-reply prompts); button taps hit a new
interactivityendpoint and thread replies resume the run; prompts are cleaned up on resolve from any source. AddsForwardAllHitl+HitlChannelconfig and the Interactivity request URL.
1.0.1
- fix(DAP-251, slack): resolve a plugin-install failure —
SlackEventProcessor(a bootstrapper singleton) can't haveITriggerContextconstructor-injected because the plugin's inner DI container doesn't resolve it; it is now passed per-dispatch from the events endpoint.
1.0.0
- feat(DAP-251, slack):
slack-mentiontrigger via the Slack Events API — signedapp_mentionevents fire the bound agent and stream a threaded reply back into the channel; per-config credentials (bot token + signing secret), channel allow-list, thread session continuity, andevent_iddedupe.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net9.0
- DAP.Plugin.Sdk (>= 1.1.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.