-
Notifications
You must be signed in to change notification settings - Fork 4.6k
Expose Terminal Accessibility Tree for macOS Assistive Apps #11160
Copy link
Copy link
Open
Labels
accessibilityAccessibility issues or requests.Accessibility issues or requests.area:shell-terminalTerminal input/output, shell integration, prompt behavior, and block rendering.Terminal input/output, shell integration, prompt behavior, and block rendering.area:ui-frameworkCore Warp UI framework, rendering, layout, and windowing infrastructure.Core Warp UI framework, rendering, layout, and windowing infrastructure.area:window-tabs-panesWindow, tab, pane, and workspace layout management.Window, tab, pane, and workspace layout management.enhancementNew feature or request.New feature or request.os:macmacOS-specific behavior, regressions, or requests.macOS-specific behavior, regressions, or requests.repro:highThe report includes enough evidence that the issue appears highly reproducible.The report includes enough evidence that the issue appears highly reproducible.triagedIssue has received an initial automated triage pass.Issue has received an initial automated triage pass.
Metadata
Metadata
Assignees
Labels
accessibilityAccessibility issues or requests.Accessibility issues or requests.area:shell-terminalTerminal input/output, shell integration, prompt behavior, and block rendering.Terminal input/output, shell integration, prompt behavior, and block rendering.area:ui-frameworkCore Warp UI framework, rendering, layout, and windowing infrastructure.Core Warp UI framework, rendering, layout, and windowing infrastructure.area:window-tabs-panesWindow, tab, pane, and workspace layout management.Window, tab, pane, and workspace layout management.enhancementNew feature or request.New feature or request.os:macmacOS-specific behavior, regressions, or requests.macOS-specific behavior, regressions, or requests.repro:highThe report includes enough evidence that the issue appears highly reproducible.The report includes enough evidence that the issue appears highly reproducible.triagedIssue has received an initial automated triage pass.Issue has received an initial automated triage pass.
Pre-submit Checks
Describe the solution you'd like?
Requested Accessibility Surface
Below is the minimal AX surface that would fully unblock compatibility.
Windows should appear under:
AXUIElementCreateApplication(pid)
→ kAXWindowsAttribute
Each window should expose:
Stable kAXTitleAttribute
Standard NSWindow accessibility behavior
This largely appears to work today.
Tabs should be discoverable inside each window through either:
Option A — Standard Tab Group
AXTabGroup
└── kAXTabsAttribute
Returning tab elements.
Option B — Radio/Button Style Tabs
Expose tab children as:
AXRadioButton
AXTab
With:
kAXTitleAttribute → tab display title
kAXValueAttribute → selected state (1 / 0)
This matches what Terminal.app and iTerm2 already expose.
Each tab/window should expose an:
AXTextArea
(or equivalent text-role accessibility element)
whose:
kAXValueAttribute
returns the currently visible terminal buffer as plain text.
Minimum Requirement
Visible viewport buffer
Nice-to-Have
Scrollback buffer access
The visible buffer alone is sufficient to fully support Echo.
The following AX notifications would enable efficient real-time updates:
kAXFocusedWindowChangedNotification
kAXValueChangedNotification on the text area
kAXUIElementDestroyedNotification
These are important for:
tab lifecycle tracking
window lifecycle tracking
incremental buffer updates
active-session detection
The active tab should be identifiable via either:
kAXValueAttribute == 1 on the selected tab element
kAXFocusedAttribute
equivalent focused-state signaling
Polling is acceptable if notifications are unavailable.
Is your feature request related to a problem? Please describe.
Echo is a macOS companion app that observes terminal activity across multiple terminal emulators (Terminal.app, iTerm2, etc.) to power voice and agent workflows.
Our detection layer is intentionally adapter-free and universal:
We walk each terminal application's Accessibility (AX) tree via:
AXUIElementCreateApplication(pid)
kAXWindowsAttribute
We enumerate tabs under:
AXTabGroup
kAXTabsAttribute
AXRadioButton children
We read the visible terminal buffer through:
kAXValueAttribute on the AXTextArea child
This architecture currently works across every major macOS terminal except Warp.
Warp appears to render its UI through a custom GPU surface that exposes little to no meaningful Accessibility tree information:
No AXTabGroup
No AXRadioButton / AXTab hierarchy
No AXTextArea
No accessible visible buffer text
As a result, Warp becomes a special-case / tier-2 terminal in our compatibility matrix, which is the opposite of what we want — Warp users are exactly the developer cohort we'd most like to support first-class.
Additional context
This would not only unblock Echo, but also improve interoperability with the broader macOS accessibility ecosystem:
VoiceOver
screen readers
dictation tools
accessibility automation
terminal-aware AI agents
developer productivity tooling
Terminal.app and iTerm2 already expose this AX structure successfully, so the precedent on macOS is well-established.
Even a minimal opt-in setting such as:
Settings → Privacy → Expose accessibility tree to assistive apps
would immediately unlock support for a large category of accessibility and automation tooling.
Operating system (OS)
macOS
How important is this feature to you?
5 (Can't work without it!)
Warp Internal (ignore) - linear-label:39cc6478-1249-4ee7-950b-c428edfeecd1
None