# NousResearch/hermes-agent · Matrix typing indicator lingering after response is sent

## Open now

- Nothing open on GitHub.

One issue reports the Matrix typing indicator staying visible for up to 30 seconds after a response is sent. Two pull requests propose changes (adding a stop_typing call, and a gateway fix) aimed at clearing that indicator.

## TL;DR

- 3 member(s): 0 open issue(s), 1 closed issue(s), 0 open PR(s), 1 merged PR(s), 1 PR(s) closed without merging.
- A fix was merged to main in PR #10239. Verify it addresses your case.
- **Recommended:** read PR #10239 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `resolved` · deciding PR(s): `pr-10239`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_SPANNING`): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
- Pairwise link density `0.67`: the share of member pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. `1.00` means every pair is linked.

## Closed / duplicate issues

- #6016: \[Bug\]: Matrix typing indicator lingers for up to 30 seconds after response is sent

## Prior & competing PRs

- **#10239: fix(gateway): fix matrix lingering typing indicator**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`
  - files: `gateway/platforms/matrix.py`, `tests/gateway/test_matrix.py`
  - fix hunks:
  - `gateway/platforms/matrix.py`

    ```diff
    @@ -729,6 +729,14 @@ async def send_typing(
                 except Exception:
                     pass
     
    +    async def stop_typing(self, chat_id: str) -> None:
    +        """Stop the Matrix typing indicator."""
    +        if self._client:
    +            try:
    +                await self._client.set_typing(RoomID(chat_id), timeout=0)
    +            except Exception:
    +                pass
    +
         async def edit_message(
             self, chat_id: str, message_id: str, content: str
         ) -> SendResult:
    ```
  - `tests/gateway/test_matrix.py`

    ```diff
    @@ -335,6 +335,29 @@ def _make_adapter():
         return adapter
     
     
    +# ---------------------------------------------------------------------------
    +# Typing indicator
    +# ---------------------------------------------------------------------------
    +
    +class TestMatrixTypingIndicator:
    +    def setup_method(self):
    +        self.adapter = _make_adapter()
    +        self.adapter._client = MagicMock()
    +        self.adapter._client.set_typing = AsyncMock()
    +
    +    @pytest.mark.asyncio
    +    async def test_stop_typing_clears_matrix_typing_state(self):
    +        """stop_typing() should send typing=false instead of waiting for timeout expiry."""
    +        from gateway.platforms.matrix import RoomID
    +
    +        await self.adapter.stop_typing("!room:example.org")
    +
    +        self.adapter._client.set_typing.assert_awaited_once_with(
    +            RoomID("!room:example.org"),
    +            timeout=0,
    +        )
    +
    +
     # ---------------------------------------------------------------------------
     # mxc:// URL conversion
     # ---------------------------------------------------------------------------
    ```

    ```diff
    @@ -1831,4 +1854,3 @@ async def test_set_presence_no_client(self):
             assert result is False
     
     
    -
    ```
- **#6020: fix(matrix): add stop_typing to clear typing indicator after response**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `#10239`, `#6016`

## Fix status

- Merged to main in PR #10239 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-04-15`. This confirmation is old and may be out of date (a revert/reopen would not have invalidated it here); re-verify.
