feat(slack): thread engagement — reply-to-bot and @mention-thread auto-tracking#5754
Closed
hhhonzik wants to merge 1 commit into
Closed
feat(slack): thread engagement — reply-to-bot and @mention-thread auto-tracking#5754hhhonzik wants to merge 1 commit into
hhhonzik wants to merge 1 commit into
Conversation
…king Adds two new Slack interaction behaviors: 1. **Reply to bot message → bot responds** Track timestamps of all messages sent by the bot in `_bot_message_ts`. When a new channel message arrives in a thread whose root ts is in that set, the message is processed without requiring an @mention. 2. **@mention in thread → all thread messages trigger bot** When the bot is @mentioned in a thread, record `thread_ts` in `_mentioned_threads`. All subsequent messages in that thread are processed automatically (no re-mention needed). Also adds `_fetch_thread_context()` which fetches the prior thread history via `conversations.replies` and prepends it as a `[Thread context]` block before the triggering message text, giving the model full conversational context when it enters a mid-thread discussion. Both sets are capped (`_BOT_TS_MAX = 5000`, `_MENTIONED_THREADS_MAX = 5000`) with a prune-oldest-half strategy to prevent unbounded memory growth. Removes `_has_active_session_for_thread()` in favour of the simpler and more reliable `_bot_message_ts`-based approach that does not require SessionStore introspection.
10 tasks
teknium1
added a commit
that referenced
this pull request
Apr 7, 2026
…ioned threads When the bot sends a message in a thread, track its ts in _bot_message_ts. When the bot is @mentioned in a thread, register it in _mentioned_threads. Both sets enable auto-responding to future messages in those threads without requiring repeated @mentions — making the bot behave like a team member that stays engaged once a conversation starts. Channel message gating now checks 4 signals (in order): 1. @mention in this message 2. Reply in a thread the bot started/participated in (_bot_message_ts) 3. Message in a thread where the bot was previously @mentioned (_mentioned_threads) 4. Existing session for this thread (_has_active_session_for_thread — survives restarts) Thread context fetching now triggers on ANY first-entry path (not just @mention), so the agent gets context whether it's entering via a mention, a bot-thread reply, or a mentioned-thread auto-trigger. Both tracking sets are bounded (5000 cap with prune-oldest-half) to prevent unbounded memory growth in long-running deployments. Salvaged from PR #5754 by @hhhonzik. Preserves our existing approval buttons, thread context fetching, and session key fix. Does NOT include the edit_message format_message() removal (that was a regression in the original PR). Tests: 4 new tests for bot-ts tracking and mentioned-thread bounds.
teknium1
added a commit
that referenced
this pull request
Apr 7, 2026
…ioned threads (#5897) When the bot sends a message in a thread, track its ts in _bot_message_ts. When the bot is @mentioned in a thread, register it in _mentioned_threads. Both sets enable auto-responding to future messages in those threads without requiring repeated @mentions — making the bot behave like a team member that stays engaged once a conversation starts. Channel message gating now checks 4 signals (in order): 1. @mention in this message 2. Reply in a thread the bot started/participated in (_bot_message_ts) 3. Message in a thread where the bot was previously @mentioned (_mentioned_threads) 4. Existing session for this thread (_has_active_session_for_thread — survives restarts) Thread context fetching now triggers on ANY first-entry path (not just @mention), so the agent gets context whether it's entering via a mention, a bot-thread reply, or a mentioned-thread auto-trigger. Both tracking sets are bounded (5000 cap with prune-oldest-half) to prevent unbounded memory growth in long-running deployments. Salvaged from PR #5754 by @hhhonzik. Preserves our existing approval buttons, thread context fetching, and session key fix. Does NOT include the edit_message format_message() removal (that was a regression in the original PR). Tests: 4 new tests for bot-ts tracking and mentioned-thread bounds.
Contributor
|
Merged via PR #5897. Your thread engagement design (_bot_message_ts tracking and _mentioned_threads auto-registration) was salvaged onto current main. We kept _has_active_session_for_thread as a fallback that survives restarts, and preserved the edit_message format_message() call (removing it was an unintentional regression). Thank you @hhhonzik! |
Tommyeds
pushed a commit
to Tommyeds/hermes-agent
that referenced
this pull request
Apr 12, 2026
…ioned threads (NousResearch#5897) When the bot sends a message in a thread, track its ts in _bot_message_ts. When the bot is @mentioned in a thread, register it in _mentioned_threads. Both sets enable auto-responding to future messages in those threads without requiring repeated @mentions — making the bot behave like a team member that stays engaged once a conversation starts. Channel message gating now checks 4 signals (in order): 1. @mention in this message 2. Reply in a thread the bot started/participated in (_bot_message_ts) 3. Message in a thread where the bot was previously @mentioned (_mentioned_threads) 4. Existing session for this thread (_has_active_session_for_thread — survives restarts) Thread context fetching now triggers on ANY first-entry path (not just @mention), so the agent gets context whether it's entering via a mention, a bot-thread reply, or a mentioned-thread auto-trigger. Both tracking sets are bounded (5000 cap with prune-oldest-half) to prevent unbounded memory growth in long-running deployments. Salvaged from PR NousResearch#5754 by @hhhonzik. Preserves our existing approval buttons, thread context fetching, and session key fix. Does NOT include the edit_message format_message() removal (that was a regression in the original PR). Tests: 4 new tests for bot-ts tracking and mentioned-thread bounds.
7 tasks
angelburgosrosado
pushed a commit
to angelburgosrosado/hermes-agent
that referenced
this pull request
Apr 27, 2026
…ioned threads (NousResearch#5897) When the bot sends a message in a thread, track its ts in _bot_message_ts. When the bot is @mentioned in a thread, register it in _mentioned_threads. Both sets enable auto-responding to future messages in those threads without requiring repeated @mentions — making the bot behave like a team member that stays engaged once a conversation starts. Channel message gating now checks 4 signals (in order): 1. @mention in this message 2. Reply in a thread the bot started/participated in (_bot_message_ts) 3. Message in a thread where the bot was previously @mentioned (_mentioned_threads) 4. Existing session for this thread (_has_active_session_for_thread — survives restarts) Thread context fetching now triggers on ANY first-entry path (not just @mention), so the agent gets context whether it's entering via a mention, a bot-thread reply, or a mentioned-thread auto-trigger. Both tracking sets are bounded (5000 cap with prune-oldest-half) to prevent unbounded memory growth in long-running deployments. Salvaged from PR NousResearch#5754 by @hhhonzik. Preserves our existing approval buttons, thread context fetching, and session key fix. Does NOT include the edit_message format_message() removal (that was a regression in the original PR). Tests: 4 new tests for bot-ts tracking and mentioned-thread bounds.
angelburgosrosado
pushed a commit
to angelburgosrosado/hermes-agent
that referenced
this pull request
Apr 28, 2026
…ioned threads When the bot sends a message in a thread, track its ts in _bot_message_ts. When the bot is @mentioned in a thread, register it in _mentioned_threads. Both sets enable auto-responding to future messages in those threads without requiring repeated @mentions — making the bot behave like a team member that stays engaged once a conversation starts. Channel message gating now checks 4 signals (in order): 1. @mention in this message 2. Reply in a thread the bot started/participated in (_bot_message_ts) 3. Message in a thread where the bot was previously @mentioned (_mentioned_threads) 4. Existing session for this thread (_has_active_session_for_thread — survives restarts) Thread context fetching now triggers on ANY first-entry path (not just @mention), so the agent gets context whether it's entering via a mention, a bot-thread reply, or a mentioned-thread auto-trigger. Both tracking sets are bounded (5000 cap with prune-oldest-half) to prevent unbounded memory growth in long-running deployments. Salvaged from PR NousResearch#5754 by @hhhonzik. Preserves our existing approval buttons, thread context fetching, and session key fix. Does NOT include the edit_message format_message() removal (that was a regression in the original PR). Tests: 4 new tests for bot-ts tracking and mentioned-thread bounds.
02356abc
pushed a commit
to 02356abc/hermes-agent
that referenced
this pull request
May 14, 2026
…ioned threads (NousResearch#5897) When the bot sends a message in a thread, track its ts in _bot_message_ts. When the bot is @mentioned in a thread, register it in _mentioned_threads. Both sets enable auto-responding to future messages in those threads without requiring repeated @mentions — making the bot behave like a team member that stays engaged once a conversation starts. Channel message gating now checks 4 signals (in order): 1. @mention in this message 2. Reply in a thread the bot started/participated in (_bot_message_ts) 3. Message in a thread where the bot was previously @mentioned (_mentioned_threads) 4. Existing session for this thread (_has_active_session_for_thread — survives restarts) Thread context fetching now triggers on ANY first-entry path (not just @mention), so the agent gets context whether it's entering via a mention, a bot-thread reply, or a mentioned-thread auto-trigger. Both tracking sets are bounded (5000 cap with prune-oldest-half) to prevent unbounded memory growth in long-running deployments. Salvaged from PR NousResearch#5754 by @hhhonzik. Preserves our existing approval buttons, thread context fetching, and session key fix. Does NOT include the edit_message format_message() removal (that was a regression in the original PR). Tests: 4 new tests for bot-ts tracking and mentioned-thread bounds.
olympus-terminal
pushed a commit
to olympus-terminal/hermes-agent
that referenced
this pull request
May 16, 2026
…ioned threads (NousResearch#5897) When the bot sends a message in a thread, track its ts in _bot_message_ts. When the bot is @mentioned in a thread, register it in _mentioned_threads. Both sets enable auto-responding to future messages in those threads without requiring repeated @mentions — making the bot behave like a team member that stays engaged once a conversation starts. Channel message gating now checks 4 signals (in order): 1. @mention in this message 2. Reply in a thread the bot started/participated in (_bot_message_ts) 3. Message in a thread where the bot was previously @mentioned (_mentioned_threads) 4. Existing session for this thread (_has_active_session_for_thread — survives restarts) Thread context fetching now triggers on ANY first-entry path (not just @mention), so the agent gets context whether it's entering via a mention, a bot-thread reply, or a mentioned-thread auto-trigger. Both tracking sets are bounded (5000 cap with prune-oldest-half) to prevent unbounded memory growth in long-running deployments. Salvaged from PR NousResearch#5754 by @hhhonzik. Preserves our existing approval buttons, thread context fetching, and session key fix. Does NOT include the edit_message format_message() removal (that was a regression in the original PR). Tests: 4 new tests for bot-ts tracking and mentioned-thread bounds.
gweeteve
pushed a commit
to gweeteve/hermes-agent
that referenced
this pull request
Jun 2, 2026
…ioned threads (NousResearch#5897) When the bot sends a message in a thread, track its ts in _bot_message_ts. When the bot is @mentioned in a thread, register it in _mentioned_threads. Both sets enable auto-responding to future messages in those threads without requiring repeated @mentions — making the bot behave like a team member that stays engaged once a conversation starts. Channel message gating now checks 4 signals (in order): 1. @mention in this message 2. Reply in a thread the bot started/participated in (_bot_message_ts) 3. Message in a thread where the bot was previously @mentioned (_mentioned_threads) 4. Existing session for this thread (_has_active_session_for_thread — survives restarts) Thread context fetching now triggers on ANY first-entry path (not just @mention), so the agent gets context whether it's entering via a mention, a bot-thread reply, or a mentioned-thread auto-trigger. Both tracking sets are bounded (5000 cap with prune-oldest-half) to prevent unbounded memory growth in long-running deployments. Salvaged from PR NousResearch#5754 by @hhhonzik. Preserves our existing approval buttons, thread context fetching, and session key fix. Does NOT include the edit_message format_message() removal (that was a regression in the original PR). Tests: 4 new tests for bot-ts tracking and mentioned-thread bounds.
Egavasyug
pushed a commit
to Egavasyug/hermes-agent
that referenced
this pull request
Jun 10, 2026
…ioned threads (NousResearch#5897) When the bot sends a message in a thread, track its ts in _bot_message_ts. When the bot is @mentioned in a thread, register it in _mentioned_threads. Both sets enable auto-responding to future messages in those threads without requiring repeated @mentions — making the bot behave like a team member that stays engaged once a conversation starts. Channel message gating now checks 4 signals (in order): 1. @mention in this message 2. Reply in a thread the bot started/participated in (_bot_message_ts) 3. Message in a thread where the bot was previously @mentioned (_mentioned_threads) 4. Existing session for this thread (_has_active_session_for_thread — survives restarts) Thread context fetching now triggers on ANY first-entry path (not just @mention), so the agent gets context whether it's entering via a mention, a bot-thread reply, or a mentioned-thread auto-trigger. Both tracking sets are bounded (5000 cap with prune-oldest-half) to prevent unbounded memory growth in long-running deployments. Salvaged from PR NousResearch#5754 by @hhhonzik. Preserves our existing approval buttons, thread context fetching, and session key fix. Does NOT include the edit_message format_message() removal (that was a regression in the original PR). Tests: 4 new tests for bot-ts tracking and mentioned-thread bounds.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds two new Slack interaction behaviors that make Hermes more natural to use in channels and threads.
Changes
1. Reply to a bot message → bot responds (no @mention needed)
Track timestamps of all messages sent by the bot in
_bot_message_ts. When a new channel message arrives in a thread whose roottsis in that set, the message is processed without requiring an explicit@mention.2. @mention in thread → all subsequent thread messages trigger the bot
When the bot is @mentioned in a thread, record
thread_tsin_mentioned_threads. All subsequent messages in that thread are processed automatically — no need to keep re-mentioning the bot.3. Thread context injection via
_fetch_thread_context()When the bot is triggered inside a thread, it fetches the prior thread history via
conversations.repliesand prepends it as a[Thread context]block before the triggering message text. This gives the model full conversational context when entering a mid-thread discussion.4. Memory bounds
Both sets are capped (
_BOT_TS_MAX = 5000,_MENTIONED_THREADS_MAX = 5000) with a prune-oldest-half strategy to prevent unbounded memory growth across long-running deployments.5. Cleanup
Removes the
_has_active_session_for_thread()method in favour of the simpler and more reliable_bot_message_ts-based approach, which avoids brittleSessionStoreintrospection.Motivation
In its default behaviour, Hermes in a Slack channel only responds when explicitly @mentioned. This creates friction in threaded conversations where it's natural to continue a discussion without re-mentioning the bot every time. This PR makes Hermes behave more like a team member — once you start a thread with it, it stays engaged.