# NousResearch/hermes-agent · Desktop duplicate message rendering and hydration fixes

## Open now

- 0 issues, 1 PR open on GitHub.
- PR #71877: fix(desktop): preserve active stream across hydration

Multiple reports and fixes addressing duplicate assistant message rendering in the desktop app, primarily caused by race conditions between active streams and hydration. One unrelated TUI fix for raw vs. Rich-rendered ANSI text display is also included.

## TL;DR

- 5 member(s): 0 open issue(s), 3 closed issue(s), 1 open PR(s), 1 merged PR(s), 0 PR(s) closed without merging.
- A fix was merged to main in PR #70232. Verify it addresses your case.
- **Recommended:** read PR #70232 (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: `partially_resolved` · deciding PR(s): `pr-70232`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_PARTIAL`): some members are connected by structural evidence (shared changed files, or a closing/superseded reference); the rest are joined by an automated relevance judgement over their text.
- Members outside that structural core may belong to a different underlying problem.
- Pairwise link density `0.27`: 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

- #38319: Duplicate messages in desktop app — hydration race condition with active stream
- #63194: Desktop App: Duplicate assistant response (streaming vs hydration race)
- #63679: Desktop App: every assistant message renders twice after recent update

## Prior & competing PRs

- **#70232: fix(desktop): stop assistant reply rendering twice after a tool-call turn (#63679)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`
  - files: `apps/desktop/src/app/session/hooks/use-message-stream/index.ts`, `apps/desktop/src/app/session/hooks/use-message-stream/interim-sealing.test.tsx`
- **#71877: fix(desktop): preserve active stream across hydration**. open
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`
  - files: `apps/desktop/src/app/contrib/wiring.tsx`, `apps/desktop/src/app/session/hooks/use-message-stream/hydration-stream-race.test.tsx`, `apps/desktop/src/app/session/hooks/use-message-stream/index.ts`, `apps/desktop/src/app/session/hooks/use-session-actions/utils.test.ts`, `apps/desktop/src/app/session/hooks/use-session-actions/utils.ts`

## Fix status

- Merged to main in PR #70232 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-07-23`.
- Subsystem: `apps/desktop`
