{"repo":"NousResearch/hermes-agent","public_id":"120826","display_label":"Preserving executed tool calls on empty-response exit","summary":"These issues and PRs concern a bug where tool calls that have already been executed are lost from the model's context when an agent exits due to an empty response or Stop, causing them to be re-run. The members explore fixes to retain that tool call history when the empty-response scaffolding is dropped.","subsystem":null,"counts":{"members":5,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":3},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":121279},"resolution":{"state":"resolved","by":"pr-121279"},"freshness":{"state":"verified","last_verified_at":"2026-09-24T10:14:27+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.4},"fix_edges":[{"issue_number":120826,"pr_number":121279,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true}],"members":[{"kind":"issue","number":120826,"title":"[Bug]: after an empty-response give-up or Stop, an already-executed tool call vanishes from the model's context and gets re-run","url":null,"state":"closed"},{"kind":"pr","number":120827,"title":"fix(agent): keep executed tool calls when empty-response scaffolding is dropped","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"dae147fb40","number":0},{"kind":"commit","value":"299dfd35f3","number":0},{"kind":"pr","value":"#120826","number":120826},{"kind":"pr","value":"#121279","number":121279},{"kind":"pr","value":"#121279","number":121279},{"kind":"pr","value":"#120883","number":120883},{"kind":"pr","value":"#121279","number":121279},{"kind":"pr","value":"#121279","number":121279}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":120867,"title":"fix(agent): keep empty-response tool history at exit owners","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#120827","number":120827}],"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":120883,"title":"fix(agent): preserve executed tools after empty-response exits","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"c92c72c850","number":0},{"kind":"commit","value":"6ef6e83272","number":0},{"kind":"commit","value":"299dfd35f3","number":0},{"kind":"pr","value":"#121279","number":121279},{"kind":"pr","value":"#121279","number":121279},{"kind":"pr","value":"#120826","number":120826},{"kind":"pr","value":"#120827","number":120827},{"kind":"pr","value":"#121279","number":121279},{"kind":"pr","value":"#121279","number":121279}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":121279,"title":"Empty-response give-up or Stop no longer erases an executed tool call (#120826, salvage #120827)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/session_persistence.py","agent/turn_api_call.py","agent/turn_recovery.py","tests/agent/test_empty_response_recovery_persistence.py","tests/agent/test_message_sequence_repair.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}