hermes - 💡(How to fix) Fix BlueBubbles: typing indicator lingers ~10s after the agent turn completes (phantom typing — extend #3003 to BlueBubbles) [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…

On the BlueBubbles (iMessage) adapter, the "typing…" indicator persists for ~10s after the agent has already sent its reply, then clears on its own with no further message. It's cosmetic — no duplicate messages and no extra inference — but it reads as though the assistant is still composing.

This looks like the same class as #3003 ("Fix phantom Discord typing indicator after agent turn"), which was fixed for Discord but not for BlueBubbles.

Root Cause

gateway/platforms/base.py::_keep_typing refreshes the typing indicator every 2s and is explicitly tuned for Telegram/Discord ("Telegram/Discord typing status expires after ~5 seconds, so we refresh every 2"). It does call stop_typing in its finally, but the last keep-alive send_typing lands up to ~2s before the turn ends. On iMessage, BlueBubbles' own IMCore notes document a timing race where the start can be processed after the cancel:

"the isIncomingTypingMessage seems to have some timing issues and will sometimes notify after the isCancelTypingMessage" — bluebubbles-docs/private-api/imcore-documentation.md

so the bubble lingers until iMessage's own timeout clears it (~10s).

Fix Action

Fixed

Code Example

07:43:11 inbound message: platform=bluebubbles ... msg='remind me in 10 minutes ...'
07:43:23 response ready: ... time=12.3s api_calls=3 response=38 chars
07:43:23 [Bluebubbles] Sending response (38 chars)
07:45:31 [MEMORY] ...        <- next log line; nothing in between
RAW_BUFFERClick to expand / collapse

Summary

On the BlueBubbles (iMessage) adapter, the "typing…" indicator persists for ~10s after the agent has already sent its reply, then clears on its own with no further message. It's cosmetic — no duplicate messages and no extra inference — but it reads as though the assistant is still composing.

This looks like the same class as #3003 ("Fix phantom Discord typing indicator after agent turn"), which was fixed for Discord but not for BlueBubbles.

Environment

  • Hermes Agent v0.14.0, macOS
  • BlueBubbles adapter, Private API helper enabled (typing indicators require it)

It is not a follow-up / second turn

The gateway log is idle after the reply is sent — no second inference, no follow-up turn:

07:43:11 inbound message: platform=bluebubbles ... msg='remind me in 10 minutes ...'
07:43:23 response ready: ... time=12.3s api_calls=3 response=38 chars
07:43:23 [Bluebubbles] Sending response (38 chars)
07:45:31 [MEMORY] ...        <- next log line; nothing in between

The "Queued follow-up" path fired only once over two days, so the lingering typing is not an extra agent turn.

Root cause

gateway/platforms/base.py::_keep_typing refreshes the typing indicator every 2s and is explicitly tuned for Telegram/Discord ("Telegram/Discord typing status expires after ~5 seconds, so we refresh every 2"). It does call stop_typing in its finally, but the last keep-alive send_typing lands up to ~2s before the turn ends. On iMessage, BlueBubbles' own IMCore notes document a timing race where the start can be processed after the cancel:

"the isIncomingTypingMessage seems to have some timing issues and will sometimes notify after the isCancelTypingMessage" — bluebubbles-docs/private-api/imcore-documentation.md

so the bubble lingers until iMessage's own timeout clears it (~10s).

Suggested fix

Apply the #3003 approach to the BlueBubbles adapter: cancel the keep-typing loop before sending the reply, and/or re-issue stop_typing after the send so the stop is the last typing signal to land. This won't beat every IMCore-side race, but should eliminate the common case (a late keep-alive refresh racing the stop).

Severity

Cosmetic / low priority. Repro: send any message to a BlueBubbles DM and watch the typing indicator after the reply arrives.

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

hermes - 💡(How to fix) Fix BlueBubbles: typing indicator lingers ~10s after the agent turn completes (phantom typing — extend #3003 to BlueBubbles) [1 pull requests]