Skip to content

[Bug] hermes -c resume recap is unusable in tool-heavy sessions: tool-call clutter and hardcoded truncation limits #4337

@NoJster

Description

@NoJster

Bug Description

When resuming a session with hermes -c, the "Previous Conversation" recap panel is effectively useless for understanding what happened in the prior session. There are two compounding problems:

1. Tool-call-only messages eat the display slots

In tool-heavy sessions (debugging, file investigation, terminal work), the MAX_DISPLAY_EXCHANGES = 10 cap fills up entirely with [1 tool call: terminal] entries that carry no useful information. Meaningful exchanges get pushed out or buried.

2. Hardcoded truncation limits make text unreadable

Even when a text response does appear, the display truncates it to 200 characters / 3 lines — barely one sentence of a real response. This makes the recap useless even when it does show something.

Steps to Reproduce

  1. Run a session with significant tool use (debugging, investigation, multi-step terminal work)
  2. Exit and re-enter with hermes -c
  3. Observe the recap panel

Actual Behavior

... 106 earlier messages ...

◆ Hermes: [1 tool call: terminal]
◆ Hermes: [1 tool call: terminal]
◆ Hermes: [1 tool call: terminal]
◆ Hermes: [1 tool call: terminal]
◆ Hermes: [1 tool call: terminal]
◆ Hermes: [1 tool call: terminal]
◆ Hermes: [1 tool call: terminal]
◆ Hermes: [1 tool call: terminal]
◆ Hermes: Got everything I need. Here's the full picture:

**This is intended behavior, and it's by design — but the d...   ← truncated mid-sentence

Expected Behavior

The recap should show the last N meaningful exchanges — skipping tool-call-only messages — with enough text to actually understand the context. Both the slot count and truncation limits should be configurable.

Root Cause

In cli.py, _display_resumed_history(), all constants are hardcoded with no config hooks:

MAX_DISPLAY_EXCHANGES = 10   # consumes slots on tool-only messages
MAX_USER_LEN = 300           # truncates user messages
MAX_ASST_LEN = 200           # truncates assistant text — too short
MAX_ASST_LINES = 3           # truncates assistant text — too few lines

Proposed Fix

Two changes:

1. Skip tool-call-only assistant entries when filling MAX_DISPLAY_EXCHANGES — only count messages that have actual text content toward the cap.

2. Expose all limits as config options under the existing display section in config.yaml:

display:
  resume_display: full           # existing option
  resume_exchanges: 10           # new: max meaningful exchanges to show
  resume_max_user_chars: 300     # new: truncation for user messages
  resume_max_assistant_chars: 200  # new: truncation for assistant text
  resume_max_assistant_lines: 3  # new: max lines of assistant text
  resume_skip_tool_only: true    # new: skip tool-call-only entries

This gives users a Claude Code-style full-context experience if they want it (set chars/lines to 0 for unlimited), while keeping the compact default for those who prefer it.

Environment

  • Hermes version: current main
  • Platform: CLI (hermes -c)
  • Session type: investigation/debugging session with many sequential terminal calls

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Low — cosmetic, nice to havecomp/cliCLI entry point, hermes_cli/, setup wizardtype/bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions