TUI /q alias conflict: quit vs queue

NousResearch/hermes-agent · cluster 10467 · gateway

Data as of

Nothing open on GitHub. Fix merged in #10538. Check it covers your case.

The short answer

0open issues
0open PRs
12items grouped
Known?
Yes. 12 related items grouped here, 4 issues already closed.
Fix event
A fix was merged to main in PR #10538. Check it covers your case. No release data is tracked.
Tracker
The maintainers' tracker marks this partially resolved, deciding PRs #10538, #32074. That is separate from the fix event.
Still open
Nothing open on GitHub.

Multiple bug reports and fix attempts addressing a command alias collision where '/q' resolves to '/quit' instead of '/queue' in the TUI. The fixes involve removing the 'q' alias from the quit command and assigning it to the queue command.

Open issues0

No open issues.

Open PRs0

No open pull requests.

Fixes on record

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

  • #10538 fix: remove 'q' alias from /quit so /queue's 'q' alias works

    merged to main

    files: hermes_cli/commands.py, tests/hermes_cli/test_commands.py

    Show the diff
    • hermes_cli/commands.py
      @@ -164,7 +164,7 @@ class CommandDef:
       
           # Exit
           CommandDef("quit", "Exit the CLI", "Exit",
      -               cli_only=True, aliases=("exit", "q")),
      +               cli_only=True, aliases=("exit",)),
       ]
       
       
    • tests/hermes_cli/test_commands.py
      @@ -97,7 +97,7 @@ def test_canonical_name_resolves(self):
           def test_alias_resolves_to_canonical(self):
               assert resolve_command("bg").name == "background"
               assert resolve_command("reset").name == "new"
      -        assert resolve_command("q").name == "quit"
      +        assert resolve_command("q").name == "queue"
               assert resolve_command("exit").name == "quit"
               assert resolve_command("gateway").name == "platforms"
               assert resolve_command("set-home").name == "sethome"
  • #32074 fix(tui): remap /q alias from quit to queue (salvage #14681 + #31985)

    merged to main

    files: scripts/release.py, ui-tui/src/__tests__/slashParity.test.ts, ui-tui/src/app/slash/commands/core.ts

    Show the diff
    • scripts/release.py
      @@ -1308,6 +1308,8 @@
           "[redacted:email]": "wanwan2qq",  # PR #10215 (strip brackets/quotes from /resume; gateway session-ID lookup)
           "[redacted:email]": "SimoKiihamaki",  # PR #30773 (Windows /reset+/new freeze; stdin fallback for modal)
           "[redacted:email]": "Tranquil-Flow",  # PR #27518 (bracketed-paste timeout)
      +    "[redacted:email]": "8bit64k",  # PR #14681 (TUI /q alias from quit to queue)
      +    "[redacted:email]": "hclsys",  # PR #31985 (TUI /q alias regression test)
       }
       
       
    • ui-tui/src/__tests__/slashParity.test.ts
      @@ -4,7 +4,7 @@ import { fileURLToPath } from 'node:url'
       
       import { describe, expect, it } from 'vitest'
       
      -import { SLASH_COMMANDS } from '../app/slash/registry.js'
      +import { findSlashCommand, SLASH_COMMANDS } from '../app/slash/registry.js'
       
       type CommandRoute = 'fallback' | 'local' | 'native'
       
      @@ -110,4 +110,14 @@ describe('slash parity matrix', () => {
             expect(routes[name], `mutating command must not fallback: ${name}`).not.toBe('fallback')
           }
         })
      +
      +  it('/q alias resolves to queue, not quit (#31983)', () => {
      +    // Regression for #31983: the TUI `quit` command used to carry alias `q`,
      +    // which collided with the Python-side `/queue` alias. TUI-local commands
      +    // dispatch before the backend, so `/q` resolved to /quit (session.die)
      +    // instead of queueing a prompt.
      +    const cmd = findSlashCommand('q')
      +    expect(cmd, '/q must resolve to a command').toBeDefined()
      +    expect(cmd!.name).toBe('queue')
      +  })
       })
    • ui-tui/src/app/slash/commands/core.ts
      @@ -110,7 +110,7 @@ export const coreCommands: SlashCommand[] = [
         },
       
         {
      -    aliases: ['exit', 'q'],
      +    aliases: ['exit'],
           help: 'exit hermes',
           name: 'quit',
           run: (_arg, ctx) => ctx.session.die()
      @@ -547,6 +547,7 @@ export const coreCommands: SlashCommand[] = [
         },
       
         {
      +    aliases: ['q'],
           help: 'inspect or enqueue a message',
           name: 'queue',
           run: (arg, ctx) => {

6 PRs closed without merging

From the close comments: superseded by another PR 3 · done elsewhere 1 · duplicate 1 · merged via another change 1

  • #14681 fix(tui): remove 'q' alias from /quit, add to /queue · merged via another change → #32074, #31985
  • #14957 fix: stabilization fixes and architectural enhancements · done elsewhere → #14712, #12176, #12184, #12190, #12108, #24276, #23255
  • #18928 fix(tui): move /q alias from quit to queue · duplicate → #14681
  • #18941 fix(tui): remap /q alias from quit to queue (#18927) · superseded by another PR → 3b4ecf8, #18927
  • #31985 fix(tui): drop /quit alias 'q' so /q routes to backend /queue · superseded by another PR → #14681, #31983
Show 1 more
  • #49523 fix: stabilization fixes and architectural enhancements · superseded by another PR → #48290, #14909, #14913, #14957
Closed issues · 4
  • Closed#10467Bug: /queue alias q is shadowed by /quit in command registry
  • Closed#14712CLI command alias collision: /q resolves to quit, making queue shorthand unreachable
  • Closed#18927[Bug]: TUI /q alias incorrectly mapped to quit instead of queue
  • Closed#31983TUI: /q alias resolves to /quit instead of /queue
How this cluster was grouped
  • Link evidence (partly structural links): some members are connected by structural evidence (shared changed files, or a closing/superseded reference); the rest are joined by an automated relevance judgement over their text.
  • Members outside that structural core may belong to a different underlying problem.
  • Pairwise link density 0.18: 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
gateway
Merged PRs
#10538, #32074
Closed issues
4
Attempts
6 PRs closed without merging
Fix link checked
25 May 2026

For your agent

The same facts, typed.