Skip to main content

macOS GUI testing framework with background testing, sub-millisecond element access, and self-healing locators

Reason this release was yanked:

Deprecated. Use: cargo install axterminator --features cli

Project description

AXTerminator

CI Crates.io Downloads PyPI macOS Rust License dependency status Discussions

MCP server that gives AI agents the ability to see and control macOS applications.

Deploy · MCP Tools · CLI · Wiki · Known Limitations


Up to 30 MCP tools (19 core + optional audio, camera, spaces). Background interaction via the macOS Accessibility API. 379us per element access. Audio capture, camera input, virtual desktop isolation. Your AI agent connects and your Mac becomes an extension of it.

Deploy

git clone https://github.com/MikkoParkkola/axterminator
cd axterminator
cargo build --release --features cli

Grant accessibility permissions: System Settings > Privacy & Security > Accessibility (add your terminal app).

Connect your AI agent

Add to MCP config (Claude Code, OpenCode, Cursor):

{
  "mcpServers": {
    "axterminator": {
      "command": "/path/to/axterminator",
      "args": ["mcp", "serve"]
    }
  }
}

Done. Your agent has 19 core tools (up to 30 with all feature flags) to control any macOS app.

MCP Tools

Category Tools What the agent can do
GUI ax_connect, ax_find, ax_click, ax_click_at, ax_type, ax_set_value, ax_get_value, ax_scroll, ax_drag, ax_key_press Connect to apps, find elements, interact
Observe ax_is_accessible, ax_screenshot, ax_get_tree, ax_get_attributes, ax_list_windows, ax_list_apps, ax_wait_idle Check permissions, see UI state, screenshots
Verify ax_assert, ax_find_visual Assert element state, AI vision fallback
Audio ax_listen, ax_speak, ax_audio_devices Capture mic/system audio, text-to-speech
Camera ax_camera_capture, ax_gesture_detect, ax_gesture_listen Camera frames, gesture recognition
Spaces ax_list_spaces, ax_create_space, ax_move_to_space, ax_switch_space, ax_destroy_space Virtual desktop isolation

Resources

Agents can browse app state without tool calls:

Resource What
axterminator://apps Running applications
axterminator://app/{name}/tree Live element hierarchy
axterminator://app/{name}/screenshot Current screenshot
axterminator://app/{name}/state Focused element, window title
axterminator://system/displays Monitor layout

Security

Destructive actions require confirmation via elicitation. HTTP transport requires bearer token auth. The AI has hands, not root.

CLI

axterminator apps                        # List accessible apps
axterminator find "Save" --app Safari    # Find element
axterminator click "Save" --app Safari   # Click it
axterminator screenshot --app Safari     # Capture screenshot
axterminator tree --app Finder           # Element hierarchy
axterminator mcp serve --http 8080 --token secret  # HTTP transport

How It Works

AXTerminator uses an undocumented behavior of Apple's Accessibility API: AXUIElementPerformAction() works on unfocused windows. Your agent clicks buttons in one app while you work in another. Neither notices.

379us per element access (Criterion, M1 MacBook Pro). Appium needs 500ms for the same thing.

7-strategy self-healing locators survive UI changes: data_testid, aria_label, identifier, title, xpath, position, visual_vlm.

Known Limitations

Operation Background? Notes
Click, press, read values, screenshots Yes Core operations work without focus
Text input Partial Some apps need focused text field
Drag, system dialogs No Require cursor control / always grab focus
Gesture recognition Yes Verified: thumbs_up at 88.8% confidence
Speech transcription Yes Verified: on-device, requires Dictation enabled

Feature Flags

Build with optional capabilities:

cargo build --release --features "cli,audio,camera,spaces"
Flag What
cli CLI + MCP server (default)
audio Microphone/system audio, speech
camera Camera capture, gesture detection
spaces Virtual desktop management
http-transport HTTP MCP transport with auth

Python API

Also available as a Python package for test scripts and pytest:

pip install axterminator
import axterminator as ax
app = ax.app(name="Calculator")
app.find("7").click()
app.find("+").click()
app.find("3").click()
app.find("=").click()

See API Reference for full Python docs.

Community

Acknowledgements

Inspired by Terminator by mediar-ai, which pioneered accessible desktop GUI automation on Windows.

License

MIT OR Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

axterminator-0.6.1-cp39-abi3-macosx_11_0_arm64.whl (427.8 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

axterminator-0.6.1-cp39-abi3-macosx_10_12_x86_64.whl (443.0 kB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file axterminator-0.6.1-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for axterminator-0.6.1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 80e2087c3b721cfef52550df8416d6fa3b3e8accf8a69433c897fdfada186bfa
MD5 70c9fc43f224b2acff6fe3a3fda2afe8
BLAKE2b-256 0dad7fa4c600563f5c077eabfad72382fc6f39a0d0f1f3a35a2795ae41971351

See more details on using hashes here.

Provenance

The following attestation bundles were made for axterminator-0.6.1-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on MikkoParkkola/axterminator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file axterminator-0.6.1-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for axterminator-0.6.1-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1d8c7f554130b260c0aff8c3a68679d88356ccc8aab9e7552d33f13e8785561d
MD5 06d82975739b7c531fc391ca0cd4fcf0
BLAKE2b-256 abeabc1df1fde4ccd0460cf94ecda65ecd03d2a02bf5a9ed861d4ca827722bad

See more details on using hashes here.

Provenance

The following attestation bundles were made for axterminator-0.6.1-cp39-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on MikkoParkkola/axterminator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page