Accessibility: Codex suggestion menu options are hidden from screen readers

Open 💬 0 comments Opened Jul 11, 2026 by kamalyaser31

Title: Accessibility: Codex suggestion menu options are hidden from Windows UIA and screen readers (missing ARIA roles)

Summary

In the Codex desktop environment (now integrated within the unified ChatGPT desktop app), typing / or triggering the autocomplete suggestions menu in the chat/work input box visually opens the suggestion popup. However, this menu is completely hidden from Windows UI Automation (UIA) and assistive technologies like screen readers (NVDA/JAWS). Users relying on screen readers receive no feedback when options appear and cannot hear which suggestion is highlighted as they navigate with the arrow keys.

Diagnostic Details

We performed a direct UI Automation (UIA) tree probe on the Electron-based application window. During the probe:

  1. No Accessibility Tree Changes:

Opening the suggestions menu did not trigger any structural changes in the Windows UIA accessibility tree. The tree difference remained 0 added, 0 removed, 0 changed.

  1. Focus Trapped in Text Input:

When pressing the Up/Down arrow keys to navigate the suggested commands, keyboard focus stayed entirely on the main text input element. Assistive technologies are unaware of any selection changes because:

  • The suggestions container is not exposed to the accessibility engine with role="listbox".
  • The suggestion options (such as commands, tasks, or prompt tools) are not exposed with role="option".
  • The main text input element does not establish a relationship link with the suggestions list (lacks aria-controls and does not dynamically update aria-activedescendant during arrow-key navigation).

Expected Behavior

To comply with standard accessibility patterns (WAI-ARIA Combobox design pattern):

  1. The suggestions container should be exposed to the accessibility engine with role="listbox".
  2. Each item in the suggestions list should have role="option" and update its aria-selected state dynamically when highlighted.
  3. The main chat input element should declare the connection using:
  • aria-haspopup="listbox"
  • aria-controls="[id-of-listbox]"
  • aria-activedescendant="[id-of-currently-highlighted-option]" (updated dynamically as the user navigates using the Arrow keys).

This ensures screen readers can capture the event changes and announce the active menu option as the user cycles through them.

View original on GitHub ↗