Compare commits

...

2 Commits

Author SHA1 Message Date
Teknium
2cad88fb9d docs: add reply_in_thread config to Slack docs 2026-04-02 12:15:10 -07:00
Animesh Mishra
edc8c0632f feat(slack): add reply_in_thread config option
By default, Hermes always threads replies to channel messages. Teams
that prefer direct channel replies had no way to opt out without
patching the source.

Add a reply_in_thread option (default: true) to the Slack platform
extra config:

  platforms:
    slack:
      extra:
        reply_in_thread: false

When false, _resolve_thread_ts() returns None for top-level channel
messages, so replies go directly to the channel. Messages already
inside an existing thread are still replied in-thread to preserve
conversation context. Default is true for full backward compatibility.
2026-04-02 12:12:27 -07:00
2 changed files with 28 additions and 0 deletions

View File

@@ -323,7 +323,18 @@ class SlackAdapter(BasePlatformAdapter):
Prefers metadata thread_id (the thread parent's ts, set by the
gateway) over reply_to (which may be a child message's ts).
When ``reply_in_thread`` is ``false`` in the platform extra config,
top-level channel messages receive direct channel replies instead of
thread replies. Messages that originate inside an existing thread are
always replied to in-thread to preserve conversation context.
"""
# When reply_in_thread is disabled (default: True for backward compat),
# only thread messages that are already part of an existing thread.
if not self.config.extra.get("reply_in_thread", True):
existing_thread = (metadata or {}).get("thread_id") or (metadata or {}).get("thread_ts")
return existing_thread or None
if metadata:
if metadata.get("thread_id"):
return metadata["thread_id"]

View File

@@ -217,6 +217,23 @@ In channels, always @mention the bot. Simply typing a message without mentioning
This is intentional — it prevents the bot from responding to every message in busy channels.
:::
### Reply Threading
By default, Hermes replies in a **thread** attached to the original message in channels. If your team prefers replies to go **directly to the channel** instead, you can disable threading:
```yaml
platforms:
slack:
extra:
reply_in_thread: false
```
When `reply_in_thread` is `false`:
- **Channel messages** — Hermes replies directly in the channel (no thread created)
- **Thread messages** — Hermes still replies inside the existing thread to preserve conversation context
The default is `true` (threaded replies), which matches the original behavior.
---