Skip to content

Expose Terminal Accessibility Tree for macOS Assistive Apps #11160

@derricksiawor

Description

@derricksiawor

Pre-submit Checks

Describe the solution you'd like?

Requested Accessibility Surface

Below is the minimal AX surface that would fully unblock compatibility.

  1. Window Enumeration

Windows should appear under:

AXUIElementCreateApplication(pid)
→ kAXWindowsAttribute

Each window should expose:

Stable kAXTitleAttribute

Standard NSWindow accessibility behavior

This largely appears to work today.

  1. Tab Enumeration
    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.

  1. Per-Tab Visible Buffer Text

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.

  1. Accessibility Notifications

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

  1. Selected Tab Signal

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    accessibilityAccessibility issues or requests.area:shell-terminalTerminal input/output, shell integration, prompt behavior, and block rendering.area:ui-frameworkCore Warp UI framework, rendering, layout, and windowing infrastructure.area:window-tabs-panesWindow, tab, pane, and workspace layout management.enhancementNew feature or request.os:macmacOS-specific behavior, regressions, or requests.repro:highThe report includes enough evidence that the issue appears highly reproducible.triagedIssue has received an initial automated triage pass.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions