Skip to content

fix: remove post-compression file-read history injection#2226

Merged
teknium1 merged 1 commit into
mainfrom
hermes/hermes-3369cdb1
Mar 20, 2026
Merged

fix: remove post-compression file-read history injection#2226
teknium1 merged 1 commit into
mainfrom
hermes/hermes-3369cdb1

Conversation

@teknium1

Copy link
Copy Markdown
Contributor

Removes the [Files already read — do NOT re-read these] user message injected after context compression.

Problem: This message used role="user" for system-generated content, creating a fake user turn mid-conversation. Models interpret it as user instructions, which can confuse state tracking and contribute to task-redo behavior. Found in 7 real sessions during audit.

Why it's safe to remove: The file_tools.py read tracker already handles re-read prevention inline — warns on 3rd consecutive read, blocks on 4th+. This is the correct mechanism (feedback at the point of action, no synthetic messages). The compression summary also already describes what files were examined.

Changes:

  • run_agent.py: Remove 19-line file-read history injection from _compress_context()
  • tests/tools/test_read_loop_detection.py: Remove TestCompressionFileHistory test class (73 lines) that validated the removed behavior. All other read-loop detection tests (warn/block escalation, task isolation, search tracking) remain.

5670 passed, 0 failures.

Closes #2224.

Remove the [Files already read — do NOT re-read these] user message
that was injected into the conversation after context compression.

This message used role='user' for system-generated content, creating
a fake user turn that confused models about conversation state and
could contribute to task-redo behavior.

The file_tools.py read tracker (warn on 3rd consecutive read, block
on 4th+) already handles re-read prevention inline without injecting
synthetic messages.

Closes #2224.
@teknium1 teknium1 merged commit 4263350 into main Mar 20, 2026
1 check passed
outsourc-e pushed a commit to outsourc-e/hermes-agent that referenced this pull request Mar 26, 2026
…h#2226)

Remove the [Files already read — do NOT re-read these] user message
that was injected into the conversation after context compression.

This message used role='user' for system-generated content, creating
a fake user turn that confused models about conversation state and
could contribute to task-redo behavior.

The file_tools.py read tracker (warn on 3rd consecutive read, block
on 4th+) already handles re-read prevention inline without injecting
synthetic messages.

Closes NousResearch#2224.

Co-authored-by: Test <test@test.com>
angelburgosrosado pushed a commit to angelburgosrosado/hermes-agent that referenced this pull request Apr 27, 2026
…h#2226)

Remove the [Files already read — do NOT re-read these] user message
that was injected into the conversation after context compression.

This message used role='user' for system-generated content, creating
a fake user turn that confused models about conversation state and
could contribute to task-redo behavior.

The file_tools.py read tracker (warn on 3rd consecutive read, block
on 4th+) already handles re-read prevention inline without injecting
synthetic messages.

Closes NousResearch#2224.

Co-authored-by: Test <test@test.com>
02356abc pushed a commit to 02356abc/hermes-agent that referenced this pull request May 14, 2026
…h#2226)

Remove the [Files already read — do NOT re-read these] user message
that was injected into the conversation after context compression.

This message used role='user' for system-generated content, creating
a fake user turn that confused models about conversation state and
could contribute to task-redo behavior.

The file_tools.py read tracker (warn on 3rd consecutive read, block
on 4th+) already handles re-read prevention inline without injecting
synthetic messages.

Closes NousResearch#2224.

Co-authored-by: Test <test@test.com>
olympus-terminal pushed a commit to olympus-terminal/hermes-agent that referenced this pull request May 16, 2026
…h#2226)

Remove the [Files already read — do NOT re-read these] user message
that was injected into the conversation after context compression.

This message used role='user' for system-generated content, creating
a fake user turn that confused models about conversation state and
could contribute to task-redo behavior.

The file_tools.py read tracker (warn on 3rd consecutive read, block
on 4th+) already handles re-read prevention inline without injecting
synthetic messages.

Closes NousResearch#2224.

Co-authored-by: Test <test@test.com>
gweeteve pushed a commit to gweeteve/hermes-agent that referenced this pull request Jun 2, 2026
…h#2226)

Remove the [Files already read — do NOT re-read these] user message
that was injected into the conversation after context compression.

This message used role='user' for system-generated content, creating
a fake user turn that confused models about conversation state and
could contribute to task-redo behavior.

The file_tools.py read tracker (warn on 3rd consecutive read, block
on 4th+) already handles re-read prevention inline without injecting
synthetic messages.

Closes NousResearch#2224.

Co-authored-by: Test <test@test.com>
Egavasyug pushed a commit to Egavasyug/hermes-agent that referenced this pull request Jun 10, 2026
…h#2226)

Remove the [Files already read — do NOT re-read these] user message
that was injected into the conversation after context compression.

This message used role='user' for system-generated content, creating
a fake user turn that confused models about conversation state and
could contribute to task-redo behavior.

The file_tools.py read tracker (warn on 3rd consecutive read, block
on 4th+) already handles re-read prevention inline without injecting
synthetic messages.

Closes NousResearch#2224.

Co-authored-by: Test <test@test.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug: post-compression file-read history injected as role=user, breaking message semantics

1 participant