Skip to content

Shift key broken (no capital letters) when using Ghostty terminal #397

@essentialols

Description

@essentialols

Description

When running agent deck with Claude Code inside Ghostty terminal, the Shift key stops producing capital letters entirely. Instead, pressing Shift triggers what appears to be a terminal-native selection mode (white highlight), rather than agent deck's normal copy-mode (yellow highlight).

Steps to Reproduce

  1. Open Ghostty terminal
  2. Start an agent deck session with Claude Code
  3. Try to type capital letters (Shift + any letter key)

Expected: Capital letter is typed
Actual: A white selection/highlight mode is triggered instead

Works Correctly In

  • Terminal.app (macOS default) — Shift produces capital letters normally in agent deck
  • Agent deck without Claude Code — Shift works fine in Ghostty for normal typing

Likely Cause

Ghostty supports the kitty keyboard protocol by default, while Terminal.app does not. When Claude Code starts inside agent deck, it likely queries the terminal for keyboard protocol support. Ghostty responds affirmatively, and something in agent deck's key handling layer then misinterprets bare Shift key presses as a selection trigger rather than a modifier for letter keys.

The kitty keyboard protocol can report modifier-only key events (like a bare Shift press-and-release). If agent deck is binding bare Shift to enter a selection mode, it would intercept Shift before it can modify letter keypresses.

Relevant Context

  • tmux itself has no Shift keybindings (tmux list-keys | grep -i shift returns nothing)
  • Ghostty config is default (no custom keybindings)
  • This is a known category of issues between Ghostty and tmux-based tools due to the kitty keyboard protocol mismatch (see tmux#3335)
  • Adding set -s extended-keys on / set -s extended-keys-format csi-u / set -as terminal-features 'xterm-ghostty:extkeys' to tmux.conf has not been tested as a workaround yet

Environment

  • Terminal: Ghostty (default config, macOS)
  • tmux: default config
  • Agent managed: Claude Code
  • macOS: Darwin 24.0.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions