DevCom.AgenticRuntime.Plugin.Slack 1.1.2

dotnet add package DevCom.AgenticRuntime.Plugin.Slack --version 1.1.2
                    
NuGet\Install-Package DevCom.AgenticRuntime.Plugin.Slack -Version 1.1.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DevCom.AgenticRuntime.Plugin.Slack" Version="1.1.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DevCom.AgenticRuntime.Plugin.Slack" Version="1.1.2" />
                    
Directory.Packages.props
<PackageReference Include="DevCom.AgenticRuntime.Plugin.Slack" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add DevCom.AgenticRuntime.Plugin.Slack --version 1.1.2
                    
#r "nuget: DevCom.AgenticRuntime.Plugin.Slack, 1.1.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package DevCom.AgenticRuntime.Plugin.Slack@1.1.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DevCom.AgenticRuntime.Plugin.Slack&version=1.1.2
                    
Install as a Cake Addin
#tool nuget:?package=DevCom.AgenticRuntime.Plugin.Slack&version=1.1.2
                    
Install as a Cake Tool

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-mention trigger — pairs a Slack app to an agent; an app_mention fires 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-Signature HMAC-SHA256 + X-Slack-Request-Timestamp ±5-minute replay window); unverifiable requests get 401 and do nothing. Redeliveries are de-duplicated by event_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

  1. Create an app at https://api.slack.com/apps → Create New App → From scratch.

  2. Add scopes — OAuth & Permissions → Bot Token Scopes: add app_mentions:read and chat:write.

  3. Install to workspace — Install App → copy the Bot User OAuth Token (xoxb-…).

  4. Copy the Signing Secret — Basic Information → App Credentials → Signing Secret.

  5. Create the DAP credential — in DAP, create a slack-mention credential with the bot token and signing secret, and click Test (runs auth.test) to confirm it connects.

  6. Enable Event Subscriptions — Event Subscriptions → toggle on → Request URL:

    https://<your-dap-host>/api/x/DevCom.AgenticRuntime.Plugin.Slack/events
    

    Slack sends a one-time url_verification challenge; the endpoint answers it, so the URL shows Verified. The URL must be publicly reachable and registered per environment.

  7. Subscribe to the event — Subscribe to bot events → add app_mention → Save Changes (reinstall the app if Slack prompts you to).

  8. Enable Interactivity (required for HITL buttons) — Interactivity & Shortcuts → toggle on → Request URL:

    https://<your-dap-host>/api/x/DevCom.AgenticRuntime.Plugin.Slack/interactivity
    

    This 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.

  9. Bind the agent — add a slack-mention trigger 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.2

  • fix(DAP-253, slack): a HITL choice with a blank label (or a blank prompt) made Slack reject the whole message (invalid_blocks) — blank button labels now fall back to the choice value, buttons blank in both are dropped, and a blank prompt gets a placeholder. Slack's response_metadata validation messages are now included in the failure log so future block errors are self-diagnosing.

1.1.1

  • fix(DAP-253, slack): HITL prompts failed to post (invalid_blocks) whenever there was more than one choice — every button shared the same action_id, which Slack rejects. Each button now gets a unique action_id (the choice still travels in the button value).

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 interactivity endpoint and thread replies resume the run; prompts are cleaned up on resolve from any source. Adds ForwardAllHitl + HitlChannel config and the Interactivity request URL.

1.0.1

  • fix(DAP-251, slack): resolve a plugin-install failure — SlackEventProcessor (a bootstrapper singleton) can't have ITriggerContext constructor-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-mention trigger via the Slack Events API — signed app_mention events 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, and event_id dedupe.
Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.2 295 7/14/2026
1.1.1 104 7/14/2026
1.1.0 110 7/14/2026
1.0.1 108 7/14/2026
1.0.0 113 7/14/2026