# NousResearch/hermes-agent · Fix misattributed interrupts and placeholder responses

## Open now

- Nothing open on GitHub.

These items address bugs where terminal batch timeouts or synthetic interrupts were incorrectly attributed to the user, and where interrupted turns produced only a '\[response interrupted\]' placeholder instead of a real answer.

## TL;DR

- 5 member(s): 0 open issue(s), 1 closed issue(s), 0 open PR(s), 1 merged PR(s), 3 PR(s) closed without merging.
- A fix was merged to main in PR #133271. Verify it addresses your case.
- **Recommended:** read PR #133271 (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-133271`. 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.50`: 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

- #132949: Ordinary instruction answered with only the "\[response interrupted\]" placeholder

## Prior & competing PRs

- **#133271: Terminal batch timeouts are no longer reported as the user's stop, a user stop during a wedged batch keeps its message, and interrupted turns stop being answered with "\[response interrupted\]" (#130207, #132949, salvage #132751)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `agent/agent_runtime_helpers.py`, `agent/agent_runtime_helpers_placeholders.py`, `agent/conversation_loop.py`, `agent/interrupt_control.py`, `agent/message_sanitization.py`, `agent/terminal_approval_batch.py`, `agent/tool_executor.py`, `agent/turn_api_call.py`, `agent/turn_iteration_prep.py`, `contributors/emails/[redacted:email]`, `tests/acp_adapter/test_events.py`, `tests/agent/test_close_interrupted_tool_sequence.py`, `tests/agent/test_concurrent_interrupt.py`, `tests/agent/test_interrupt_issuer_attribution.py`, `tests/agent/test_partial_stream_finish_reason.py`, `tests/agent/test_replay_echo_retirement.py`, `tests/agent/test_run_agent.py`, `tests/agent/test_run_agent_interrupt_hook.py`, `tests/agent/test_sanitiser_escalation.py`, `tests/agent/test_steer.py` (+3 more)
- **#132751: fix(agent): attribute soft interrupts to their real issuer, and hide the synthetic interrupt close**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `70dcdd640f`, `#133271`, `#133271`
- **#133690: fix(agent): keep interruption scaffolding out of persisted history**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `70dcdd640f`, `#132949`, `#133271`, `#132751`, `#48879`
- **#134521: Ordinary instructions are no longer answered with only "\[response interrupted\]" (#132949, salvage #132751 core)**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `53e8e681ecae43a07623826337a5e48b94c3b63d`, `53e8e681ecae43a07623826337a5e48b94c3b63d`, `53e8e681ecae43a07623826337a5e48b94c3b63d`, `53e8e681ecae43a07623826337a5e48b94c3b63d`, `#134521`, `#132949`, `#132751`, `#48879`, `#95327`

## Fix status

- Merged to main in PR #133271 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-10-07`.
- Subsystem: `agent`
