#6553: feat(slack): expose thread-reply action
docs
channel: telegram
docker
Cluster:
Slack Integration Enhancements
## Summary
Expose `thread-reply` as a first-class action for Slack so agents don't need to discover the workaround (`send` + `replyTo`) through trial and error.
## Problem
When an agent tries `thread-reply` on Slack, it fails:
```
Action thread-reply is not supported for provider slack.
```
The agent then has to fall back to using `send` with `replyTo` - which works, but requires trial-and-error discovery.
## Solution
- Add `thread-reply` to `listActions()` under the `messages` gate
- Add handler that routes to `sendMessage` with `threadTs`
- The underlying functionality already existed, this just exposes it properly
## Changes
- `src/channels/plugins/slack.actions.ts`: Add `thread-reply` to actions list and add handler
- `src/channels/plugins/slack.actions.test.ts`: Add tests for listing, handling, and error cases
## Test plan
- [x] `thread-reply` appears in `listActions()` when messages enabled
- [x] `thread-reply` does not appear when messages disabled
- [x] `thread-reply` action routes to `sendMessage` with correct `threadTs`
- [x] `thread-reply` throws helpful error when `threadId` missing
Fixes #6542
<!-- greptile_comment -->
<h2>Greptile Overview</h2>
<h3>Greptile Summary</h3>
This PR exposes a new Slack channel action, `thread-reply`, by adding it to `listActions()` (behind the existing `messages` action gate) and implementing a handler that forwards to the existing Slack tool action `sendMessage` with `threadTs` set (falling back from `threadId` → `replyTo` → `toolContext.currentThreadTs`). Tests were added to validate that the action is listed when enabled, hidden when disabled, and that invoking it maps to `sendMessage` with the expected parameters and errors when `threadId` is missing.
<h3>Confidence Score: 4/5</h3>
- This PR looks safe to merge, with only minor correctness and test robustness issues.
- Changes are localized to Slack action listing/dispatch and a small test extension. Previously-reported logic issues cover the main behavioral risks; beyond those, remaining concerns are mainly around misleading error messaging and tests that can be order-dependent due to mock call state.
- src/channels/plugins/slack.actions.ts, src/channels/plugins/slack.actions.test.ts
<!-- greptile_other_comments_section -->
<!-- /greptile_comment -->
Most Similar PRs
#11491: feat(slack): allow agents to resolve channel IDs to names and list ...
by Lukavyi · 2026-02-07
83.3%
#14720: fix(slack): pass threadId in plugin read action (#14706)
by lailoo · 2026-02-12
81.6%
#6509: fix(slack): pass threadId param in read action
by morningstar-daemon · 2026-02-01
80.9%
#22216: fix(slack): enable thread reply reading in slack extension plugin
by lan17 · 2026-02-20
80.3%
#2917: Slack: fix thread context + prevent reply spillover
by SocialNerd42069 · 2026-01-27
80.3%
#5098: fix(slack): forward threadId for message.read
by galligan · 2026-01-31
78.9%
#22485: fix(slack): use threadId from delivery context as threadTs fallback...
by dorukardahan · 2026-02-21
78.9%
#23320: fix(slack): respect replyToMode when incomingThreadTs is auto-created
by dorukardahan · 2026-02-22
78.6%
#20406: fix(slack): respect replyToMode when computing statusThreadTs in DMs
by QuinnYates · 2026-02-18
78.2%
#9181: feat(slack): add per-channel thread config override
by halbotley · 2026-02-05
78.0%