# NousResearch/hermes-agent · TUI /q alias conflict: quit vs queue

## Open now

- 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.

## TL;DR

- 12 member(s): 0 open issue(s), 4 closed issue(s), 0 open PR(s), 2 merged PR(s), 6 PR(s) closed without merging.
- A fix was merged to main in PR #10538. Verify it addresses your case.
- **Recommended:** read PR #10538 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `partially_resolved` · deciding PR(s): `pr-10538,pr-32074`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_PARTIAL`): 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 member 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.

## Closed / duplicate issues

- #10467: Bug: /queue alias q is shadowed by /quit in command registry
- #14712: CLI command alias collision: /q resolves to quit, making queue shorthand unreachable
- #18927: \[Bug\]: TUI /q alias incorrectly mapped to quit instead of queue
- #31983: TUI: /q alias resolves to /quit instead of /queue

## Prior & competing PRs

- **#10538: fix: remove 'q' alias from /quit so /queue's 'q' alias works**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `hermes_cli/commands.py`, `tests/hermes_cli/test_commands.py`
  - fix hunks:
  - `hermes_cli/commands.py`

    ```diff
    @@ -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`

    ```diff
    @@ -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"
    ```
- **#18941: fix(tui): remap /q alias from quit to queue (#18927)**. closed without merge · fix tier `suggested`
  - maintainer direction: category `superseded_by_pr`; implication `superseded`; refs `3b4ecf8ee`, `#18927`
  - _suggested-tier fix detail withheld; re-request with `?tier=all` to include it._
- **#31985: fix(tui): drop /quit alias 'q' so /q routes to backend /queue**. closed without merge · fix tier `suggested`
  - maintainer direction: category `superseded_by_pr`; implication `superseded`; refs `#14681`, `#31983`, `#14681`, `#14681`
  - _suggested-tier fix detail withheld; re-request with `?tier=all` to include it._
- **#32074: fix(tui): remap /q alias from quit to queue (salvage #14681 + #31985)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `scripts/release.py`, `ui-tui/src/__tests__/slashParity.test.ts`, `ui-tui/src/app/slash/commands/core.ts`
  - fix hunks:
  - `scripts/release.py`

    ```diff
    @@ -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`

    ```diff
    @@ -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'
     
    ```

    ```diff
    @@ -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`

    ```diff
    @@ -110,7 +110,7 @@ export const coreCommands: SlashCommand[] = [
       },
     
       {
    -    aliases: ['exit', 'q'],
    +    aliases: ['exit'],
         help: 'exit hermes',
         name: 'quit',
         run: (_arg, ctx) => ctx.session.die()
    ```

    ```diff
    @@ -547,6 +547,7 @@ export const coreCommands: SlashCommand[] = [
       },
     
       {
    +    aliases: ['q'],
         help: 'inspect or enqueue a message',
         name: 'queue',
         run: (arg, ctx) => {
    ```
- **#14681: fix(tui): remove 'q' alias from /quit, add to /queue**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#32074`, `#31985`
- **#14957: fix: stabilization fixes and architectural enhancements**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `#14712`, `#12176`, `#12184`, `#12190`, `#12108`, `#24276`, `#23255`, `#14712`, `#12176`
- **#18928: fix(tui): move /q alias from quit to queue**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#14681`
- **#49523: fix: stabilization fixes and architectural enhancements**. closed without merge
  - maintainer direction: category `superseded_by_pr`; implication `superseded`; refs `#48290`, `#14909`, `#14913`, `#14957`

## Fix status

- Merged to main in PR #10538 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-05-25`.
- Subsystem: `gateway`
