Playwright,
for every app on your desktop
Open-source desktop automation that drives native Windows apps through accessibility APIs, not OCR or pixel matching. Playwright-shaped SDK plus an MCP server that gives Claude, Cursor, and VS Code real OS-level hands.
For developers already burned by PyAutoGUI, AutoHotkey, UIAutomation, and screenshot agents.
$ claude mcp add terminator "npx -y terminator-mcp-agent@latest"Windows
Full support
macOS
In development
Linux
In development
From brittle pixels to structural selectors
Same automation, two worlds apart. Hardcoded coordinates and image matches break the moment your DPI, theme, or layout shifts. Terminator queries the accessibility tree, so the script just keeps working.
PyAutoGUI / AutoHotkey
brittleimport pyautogui, time
# pray the user's DPI hasn't changed
pyautogui.click(x=842, y=317)
time.sleep(1.5)
pyautogui.click(x=842, y=317) # double-click hack
# image match the Save button — fails on dark mode,
# theme changes, locale, antialiasing, scaling...
loc = pyautogui.locateOnScreen(
'save_btn.png', confidence=0.85
)
if loc is None:
raise Exception("Save button not found 🤞")
pyautogui.click(loc)
pyautogui.typewrite("invoice.pdf", interval=0.05)
pyautogui.press('enter')- Coordinates break on every DPI / resolution change
- PNG image matching fails on themes, locale, antialiasing
- Sleep-then-pray sync, no real waits, no element semantics
Terminator
structuralimport { Desktop } from '@mediar-ai/terminator';
const desktop = new Desktop();
await desktop.openApplication('notepad');
// find by role + name, not pixels
await desktop
.locator('role:Button && name:Save')
.click();
// real input, real focus, real waits
await desktop
.locator('role:Edit && name:File name')
.typeText('invoice.pdf');
await desktop
.locator('role:Button && name:Save')
.click();
// done. survives DPI, theme, and layout changes.- Selectors target real UI elements, not pixels
- Survives DPI, theme, locale, and most layout changes
- Auto-waits, type-safe, fluent Playwright-style API
What developers ship with Terminator
Give Claude / Cursor / Windsurf real OS-level hands beyond the browser.
Replace flaky PyAutoGUI / Selenium-for-desktop scripts on legacy WinForms, WPF, and Electron.
Drive Excel, SAP, Outlook, and line-of-business apps without a hosted RPA platform.
Mix accessibility-tree actions with vision fallback only when you actually need it.
Click
Find and click any UI element by role, name, or text. No XPath. No brittle selectors.
Type
Input text into any field. Handles focus, clearing, and special keys automatically.
See
Capture screenshots, read UI trees, OCR text, or use AI vision for complex elements.
Built for reliability
Deterministic automation through Windows accessibility APIs. Falls back to AI vision only when needed.
TypeScript SDK
Full-featured Desktop class with 60+ methods. Type-safe, async/await, fluent API.
MCP Server
35 tools for Claude, Cursor, and VS Code. AI assistants can control any app.
Smart Selectors
role:Button && name:Submit — intuitive selector syntax that just works.
Cross-App
Not just browsers. Automate Notepad, Excel, SAP, legacy apps — anything with a UI.
100x Faster
Pre-recorded workflows run instantly. No AI latency for deterministic paths.
AI Recovery
When the unexpected happens, Gemini vision kicks in to handle dynamic UIs.
Simple, powerful API
Playwright-style API that works on any Windows application.
TypeScript SDK
import { Desktop } from '@mediar-ai/terminator';
const desktop = new Desktop();
// Open Notepad and type
await desktop.openApplication('notepad');
const editor = await desktop
.locator('role:Edit')
.first();
await editor.typeText('Hello from Terminator!');
// Click a button
const saveBtn = await desktop
.locator('role:Button && name:Save')
.first();
await saveBtn.click();MCP for Claude
{
"mcpServers": {
"terminator-mcp-agent": {
"command": "npx",
"args": ["-y", "terminator-mcp-agent@latest"],
"env": {
"LOG_LEVEL": "info"
}
}
}
}
// Claude can now use tools like:
// - click_element
// - type_into_element
// - get_window_tree
// - capture_screenshot
// ... and 30 moreSelector Cheatsheet
| Selector | Finds |
|---|---|
| role:Button | Any button |
| name:Submit | Element named "Submit" |
| role:TextBox && name:Email | Email input field |
| text:Click me | Element with text |
| window:Notepad >> role:Edit | Editor in Notepad |
Why Terminator?
Desktop automation that actually works.
| Feature | Terminator | Playwright | Vision AI |
|---|---|---|---|
| Desktop apps | |||
| Browser automation | |||
| Reliability | >95% | >99% | ~70% |
| Speed | Fast | Fast | Slow |
| MCP support | Varies | ||
| Open source | Varies | ||
| Session reuse |
Pick your stack, copy one line
Plug into any AI coding assistant via MCP, or pull the SDK straight into TypeScript, Python, or Rust. Same selectors, same reliability story, six install paths.
One-liner MCP install. Claude Code can drive any Windows app on your desktop, not just the browser.
claude mcp add terminator "npx -y terminator-mcp-agent@latest"Honest FAQ
Straight answers, including when Terminator is the wrong tool.
How is this different from PyAutoGUI or AutoHotkey?+
Is it just a wrapper around Windows UIAutomation?+
Does it use screenshots, OCR, or pixel matching?+
Which AI coding assistants can drive it via MCP?+
Should I use this instead of Playwright for browser work?+
Is macOS and Linux support ready?+
Is it really MIT-licensed and open source?+
Ship your first automation today
One-liner MCP install. Full TypeScript, Python, and Rust bindings. MIT licensed. Star the repo to follow the project, or book a call if you're building something serious.