Automation
steve avatar

steve

Automate macOS applications using the Accessibility API for deterministic UI control, automated testing, and agent-based scripting.

Introduction

Steve is a powerful command-line interface designed for macOS that leverages the Accessibility API to provide deterministic, scriptable control over desktop applications. It is tailored for developers, automation engineers, and AI agents that need to programmatically interact with GUI elements like windows, menus, buttons, and text fields. By offering structured JSON output and reliable element identification, Steve removes the ambiguity typically associated with GUI automation, allowing for robust UI smoke tests and complex workflow orchestration.

  • Precise UI targeting: Drive applications using app names, process IDs (PID), bundle identifiers, or window titles to scope commands effectively.

  • Robust element discovery: Locate UI elements via text matching, identifiers, roles, or coordinates, ensuring compatibility with complex app layouts.

  • Rich interaction set: Perform clicks, text entry, keyboard shortcuts, scrolling, and menu navigation with optional activation and frontmost-app modifiers.

  • State monitoring and assertions: Validate app states with built-in commands for checking existence, values, or element presence, and use waiting mechanisms to handle asynchronous UI updates.

  • Snapshot and diff utilities: Capture application state trees into JSON format and compare snapshots to detect UI regressions or unexpected changes in application layout.

  • Structured reporting: Receive consistent JSON responses for every action, facilitating integration into CI/CD pipelines and programmatic agent decision-making.

  • Steve requires Accessibility permissions to be granted to the terminal or execution environment to function correctly.

  • It is highly recommended to prefer element-based identification (using --text or --title) over raw screen coordinates to ensure script stability across screen resolutions.

  • Interaction results and errors are output to stdout and stderr respectively, with specific exit codes provided for programmatic handling of timeouts or permission errors.

  • While Steve excels at deterministic UI tasks, element IDs are stable only within a single session and may change across application restarts.

  • The tool is effectively used for driving macOS apps in automated testing suites, performing repetitive desktop tasks, or enabling AI agents to operate within a graphical environment.

Repository Stats

Stars
161
Forks
6
Open Issues
3
Language
Swift
Default Branch
main
Sync Status
Idle
Last Synced
May 1, 2026, 09:54 AM
View on GitHub