# NousResearch/hermes-agent · Fix interrupt attribution for terminal and batch timeouts

## Open now

- Nothing open on GitHub.

These items address incorrect attribution of soft interrupts and terminal batch timeouts, where system-initiated stops were being misidentified as user interruptions. The work involves routing blame to the correct issuer and adjusting how synthetic interrupt events are surfaced.

## TL;DR

- 4 member(s): 0 open issue(s), 1 closed issue(s), 0 open PR(s), 1 merged PR(s), 2 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

- #130207: \[Bug\]: Terminal batch timeout self-aborts via a soft interrupt(message) — system stop is booked as interrupted_by_user and shown as "Operation interrupted."

## 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`
  - 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)
- **#130209: fix(agent): attribute terminal batch timeouts to system**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `70dcdd640f`, `#133271`
- **#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`

## 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`
