NousResearch/hermes-agent

Ctrl+D CLI behavior: delete char vs EOF exit

Cluster 6448 · hermes cli. Data as of

1 open item. Fix merged in #15383 on 24 Apr 2026. Check it covers your case.

The short answer

1open issue
0open PRs
8items grouped
Known?
Yes. 8 related items grouped here, 1 issue already closed.
Fix event
A fix was merged to main in PR #15383. Check it covers your case. No release data is tracked.
Tracker
The maintainers' tracker marks this unresolved. That is separate from the fix event.
Still open
1 issue and 0 PRs.

These issues and pull requests address how the CLI handles Ctrl+D, specifically whether it should delete the character under the cursor or exit the session, with proposals to match standard readline/bash/zsh semantics (exit only on empty input).

Open issues1

  • Issue#8478fix: Ctrl+D deletes character under cursor instead of sending EOF

Open PRs0

No open pull requests.

Fixes on record

Merged to main. A stamp counts the issues a fix is linked to.

  • #15383 fix(cli): Ctrl+D = readline semantics (delete-char + EOF-only-when-empty)

    merged to main

    files: cli.py, scripts/release.py

    Show the diff
    • cli.py
      @@ -9525,9 +9525,20 @@ def handle_ctrl_c(event):
               
               @kb.add('c-d')
               def handle_ctrl_d(event):
      -            """Handle Ctrl+D - exit."""
      -            self._should_exit = True
      -            event.app.exit()
      +            """Ctrl+D: delete char under cursor (standard readline behaviour).
      +            Only exit when the input is empty — same as bash/zsh. Pending
      +            attached images count as input and block the EOF-exit so the
      +            user doesn't lose them silently.
      +            """
      +            buf = event.app.current_buffer
      +            if buf.text:
      +                buf.delete()
      +            elif self._attached_images:
      +                # Empty text but pending attachments — no-op, don't exit.
      +                return
      +            else:
      +                self._should_exit = True
      +                event.app.exit()
       
               _modal_prompt_active = Condition(
                   lambda: bool(self._secret_state or self._sudo_state)
    • scripts/release.py
      @@ -68,6 +68,7 @@
           "[email protected]": "stablegenius49",
           "[email protected]": "batuhankocyigit",
           "[email protected]": "ismell0992-afk",
      +    "[redacted:email]": "iRonin",
           "[redacted:email]": "jvcl",
           "[redacted:email]": "aj-nt",
           "[redacted:email]": "francip",

5 PRs closed without merging

From the close comments: superseded by another PR 2 · closed without comment 1 · duplicate 1 · merged via another change 1

  • #4783 fix: Ctrl+D deletes char under cursor, exits only on empty input · merged via another change → #15383
  • #6471 fix(cli): only exit on Ctrl+D when input buffer is empty · closed without comment
  • #6476 [codex] Fix Ctrl+D EOF behavior in the CLI · superseded by another PR → #15383
  • #8489 fix: Ctrl+D deletes char under cursor, only exits on empty input (bash/zsh behaviour) · duplicate → #4783
  • #9252 fix(cli): make Ctrl-D respect Unix EOF semantics · superseded by another PR → #15383, #4783
Closed issues · 1
  • Closed#6448Ctrl+D unconditionally exits CLI session even with text in input buffer
How this cluster was grouped
  • Link evidence (structural links throughout): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
  • Pairwise link density 0.26: the share of item 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.

Pick up a Lab task

Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.

Open the Lab

At a glance

Subsystem
hermes cli
Merged PRs
#15383
Closed issues
1
Attempts
5 PRs closed without merging
Fix link checked
24 Apr 2026. This confirmation is old and may be out of date (a revert or reopen would not have invalidated it here); re-verify.

For your agent

The same facts, typed.