hermes - 💡(How to fix) Fix [Feature] Universal interrupt keywords for gateway sessions (platform-independent) [1 pull requests]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

Fix Action

Fixed

Code Example

stop, interrupt, cancel, abort, halt

---

# In _handle_active_session_busy_message, before the mode branch:
_INTERRUPT_KEYWORDS = frozenset({"stop", "interrupt", "cancel", "abort", "halt"})

def _is_interrupt_signal(self, text: str) -> bool:
    normalized = text.strip().lower().lstrip("/")
    return normalized in self._INTERRUPT_KEYWORDS
RAW_BUFFERClick to expand / collapse

Feature Description

Add a universal interrupt mechanism for gateway sessions that works independently of busy_input_mode and doesn't rely on platform-specific slash command support.

Problem

Current gateway interrupt mechanism has several gaps:

  1. #26813: /stop and /interrupt are treated as steer text instead of interrupts in steer mode
  2. Platform inconsistency: Slack uses !stop (bang-rewrite), Discord uses /stop, Feishu has no slash commands, Telegram has native commands but they conflict with bot commands
  3. No escape hatch: When the agent enters an infinite tool-call loop, users on gateway platforms have no reliable way to stop it

Proposed Solution

Universal interrupt keywords: Define a set of plain-text interrupt triggers that always work, regardless of busy_input_mode:

stop, interrupt, cancel, abort, halt

These should be matched case-insensitively as standalone messages (not substrings in longer messages).

Implementation:

# In _handle_active_session_busy_message, before the mode branch:
_INTERRUPT_KEYWORDS = frozenset({"stop", "interrupt", "cancel", "abort", "halt"})

def _is_interrupt_signal(self, text: str) -> bool:
    normalized = text.strip().lower().lstrip("/")
    return normalized in self._INTERRUPT_KEYWORDS

Reactions: When an interrupt is received, the gateway should send an immediate acknowledgment reaction (e.g., 👍 on Slack, ✅ on Feishu) so the user knows the signal was received.

Related

  • #26813 (/stop fed as steer text)

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING