AI-Native Desktop Automation SDK — Playwright for your entire desktop. Drives any desktop app via native accessibility APIs.
Terminator is an OS-level desktop automation framework developed by Mediar AI. It leverages native accessibility APIs (e.g., Windows UI Automation) to capture accessibility trees for UI element discovery and manipulation, replacing traditional pixel-matching and OCR approaches. The project supports three localization dimensions — pixel, DOM, and accessibility tree — and provides an intelligent selector system with prefixes like role:, name:, process:, plus logical and positional combinators. The core is implemented in Rust for performance, with TypeScript (via NAPI-RS) and Python (via PyO3) bindings.
For AI integration, Terminator includes a built-in MCP server that exposes 35+ desktop automation tools to AI coding assistants such as Claude Code, Cursor, VS Code, and Windsurf, enabling direct AI control over desktop applications. The workflow engine adopts a "deterministic execution + AI recovery" strategy — normal paths run as pure code, invoking Gemini Vision only on exceptions for recovery, balancing speed and robustness. Additional features include a workflow recorder, a Zod-based type-safe workflow SDK, a Chrome extension (DOM overlay and session reuse), and pluggable KV storage (Redis/filesystem/in-memory).
Full support is currently limited to Windows (v0.24.32, 279 releases). macOS and Linux core layers exist but upper-layer packages are not yet published. The project is open-sourced under the MIT license, positioned as a developer-oriented alternative to traditional RPA tools.
Installation#
MCP Agent (recommended starting point)
claude mcp add terminator "npx -y terminator-mcp-agent@latest"
TypeScript SDK: npm install @mediar-ai/terminator
Python SDK: pip install terminator-py
Rust SDK: cargo add terminator-rs
All packages currently ship Windows binaries only; macOS/Linux support TBD.
Core API Example#
import { Desktop } from '@mediar-ai/terminator';
const desktop = new Desktop();
await desktop.openApplication('notepad');
const editor = await desktop.locator('role:Edit').first(5000);
await editor.typeText('Hello from Terminator!');
const saveBtn = await desktop.locator('role:Button && name:Save').first(5000);
await saveBtn.click();
Key constraints: .first() and .all() require explicit timeout in ms; always scope selectors to a process (e.g., process:chrome >> role:Button); avoid #id selectors; some controls need setSelected(true) or invoke() instead of click().
Architecture#
`` terminator/ (Rust workspace) ├── crates/ → core lib, CLI, MCP server, computer-use agent, workflow recorder ├── packages/ → Node.js (NAPI-RS), Python (PyO3), workflow SDK, pluggable KV store └── docs/
**Platform adapters**: Windows (UIA COM API), macOS (Accessibility API), Linux (AT-SPI2).
## Unverified Claims
- macOS/Linux public support date unspecified
- >95% success rate claimed but no independent benchmark found
- $2.8M funding mentioned in README, not cross-verified
- Mediar IDE launch (2025-01-09) not further verified