ARTEMIS: Google's MCP-Native Android Automation Agent
ARTEMIS turns natural-language instructions into reliable Android automation. It automates end-to-end workflows, captures logs, and integrates seamlessly with AI coding assistants such as Antigravity, Codex, and Claude Code. It also achieves 99%+ success rate on AndroidWorld Benchmark. Created by Google's Pixel-Test-Engineering (PTE) Fusion team.
At a glance
- What is it?
- ARTEMIS turns natural-language prompts into Android device workflows and exposes them to AI coding assistants through a Model Context Protocol server. The design is coherent and the tooling is unusually complete, but the 99%+ AndroidWorld figure is self-reported and the project ships no tagged releases.
- Who is it for?
- Adopt ARTEMIS if you already run Android instrumentation or emulator-based testing and want an MCP server that lets Claude Code, Codex, Antigravity or Windsurf drive a real handset and pull Logcat back into the same session. Do not adopt it if you need a frozen, versioned dependency: there are no tagged releases, so pinning means pinning a commit SHA.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 4 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The gap ARTEMIS fills between a test suite and a phone
Most Android automation stacks assume you can write the selector before you know what the screen looks like. Espresso and UI Automator want resource IDs or matchers authored up front; Appium wants a driver session and a page object. That works when you own the app under test. It stops working when the task is exploratory, when the target is a third-party app, or when the instruction arrives as prose from a person or a language model rather than as code from an engineer.
ARTEMIS targets that second case. The README describes it as letting AI assistants and test suites use real phones like a human, and the framing is accurate: the input is a natural-language instruction such as the CLI example in the documentation, and the output is a sequence of device actions plus captured evidence. The audience is Pixel-Test-Engineering style teams, QA groups running stability or exploratory passes, and individual engineers who want an AI assistant in their IDE to reach a physical device without writing a bespoke bridge.
The observe-and-act loop and its two execution profiles
The mechanism the README describes is a reactive observe-and-act loop. The agent looks at the current screen, decides on one action, performs it, and looks again. Element indices are the primary targeting method when the accessibility tree exposes them. When it does not, the system falls back to coordinate and visual locating, which is what makes custom-drawn interfaces reachable at all. That fallback is also where precision degrades, and the README does not quantify how often the fallback path is taken or how its accuracy compares.
Two profiles are documented. Flash is the default-shaped path: a reactive loop with asynchronous history summaries, quoted at typically 3 to 5 seconds per step. Pro adds a verification pass before each individual action and returns blocked actions to an Operator for recovery, which is what the README positions for long-running exploratory and stability tests. The split is sensible. Flash optimises wall-clock time per step; Pro trades that time for a check that the intended target is actually present before committing to the action. The README does not state the per-step cost of Pro, so the trade-off is described but not measured in the material available.
MCP as the integration surface, not an afterthought
The most distinctive architectural choice is that ARTEMIS ships a native Model Context Protocol server rather than only a CLI. The README states that this lets Antigravity, Claude Code, and Windsurf drive test devices and collect Logcat output and screenshots. The server is therefore the product boundary: the same device-driving capability that the CLI exposes is also advertised to any MCP-capable client.
The repository also ships a rules file, described as the Artemis Mobile Testing Mindset (rules.md), which the installer can place into supported IDEs. That is a deliberate choice to shape how the host assistant behaves, not just what tools it can call. Whether that helps or constrains depends on how much you want a vendor-supplied prompt layer sitting between your assistant and its other tools. The README lists Antigravity, Cursor, Claude Code, Codex, Windsurf, VS Code, Cline/Roo, and OpenClaw as targets for installation, which is a wide surface to keep working.
Getting a device connected and a first run executed
The prerequisites are explicit: an Android device with USB debugging enabled, or an emulator, connected before you start. The one-click script is the documented path.
On macOS and Linux:
git clone https://github.com/google/artemis.git && cd artemis ./start.sh
On Windows PowerShell:
git clone https://github.com/google/artemis.git cd artemis .\start.bat
The README notes that PowerShell does not search the current directory for executable scripts by default, so the .\ prefix matters, and that Command Prompt users should run start.bat instead. The script detects and installs ADB, scrcpy, FFmpeg, and uv, then prompts to install global MCP configuration and the rules file into detected IDEs. It opens http://localhost:8000 with a device connection wizard, live screen mirroring, a prompt sandbox, and execution replays.
For a direct CLI run, the README gives this example:
uv run artemis run "Open Settings, find Battery and tell me current level" --profile flash
MCP installation is a separate command, either uv run artemis mcp --install antigravity for a single client or uv run artemis mcp --install all for every supported IDE. Manual configuration uses uv run artemis mcp --generate-config <client> to emit a TOML or JSON snippet. The Codex example writes to ~/.codex/config.toml with command pointing at the project virtualenv Python, args of ["-m", "mcp_server"], cwd set to the repo, and PYTHONUNBUFFERED and PYTHONPATH set in an env block. The Antigravity example writes a mcpServers object into ~/.gemini/jetski/mcp_config.json. The README also mentions uv tool install -e . for a global artemis command and uv run artemis init for interactive setup.
Where the design shows strain
The coordinate and visual fallback is the weakest link in the described pipeline. Element indices are reliable when the accessibility tree is populated; a canvas-drawn game or a heavily customised surface gives you pixels and nothing else. Any team whose targets are mostly custom UI should treat the visual path as the primary path and expect to validate it themselves, because the README does not break down accuracy by targeting mode.
The 99%+ AndroidWorld figure is a self-reported benchmark result on a specific suite of 100+ multi-step tasks. AndroidWorld is a research benchmark, and benchmark performance on a fixed task set does not transfer automatically to your app's flows, your device model, or your locale. Nothing in the supplied material shows a per-task breakdown, a variance figure, or a device matrix, so the number should be read as a claim to reproduce rather than a property of the tool.
The absence of tagged releases compounds this. The repository shows no releases retrieved, so there is no version number to pin, no changelog to read before upgrading, and no way to distinguish a stable point from a work in progress. Anyone integrating this into a CI pipeline is tracking the main branch by necessity.
ARTEMIS against Appium and UI Automator
The obvious comparison is Appium, and the difference is not a matter of degree. Appium is a WebDriver-protocol server that executes locator strategies you write. The test author owns the selector, the wait strategy, and the assertion. It is deterministic, it is versioned, and it fails in ways you can debug from a stack trace.
ARTEMIS inverts that. The instruction is prose, the model chooses the action, and the locator is resolved at runtime by the agent rather than by you. That makes it suitable for tasks where you cannot write the selector in advance, and unsuitable for regression suites where you need the same assertion to produce the same result on every run. The two are not substitutes. A team running a stable Appium suite for its own app would gain little from swapping it out; the same team would gain something from adding ARTEMIS as a separate exploratory pass where the flows are not yet codified.
Android's own UI Automator sits closer to Appium than to ARTEMIS in this respect. It gives you the device-side primitives, and you supply the logic.
Licence, maintenance and what the upgrade path actually looks like
The licence is Apache-2.0. That is a permissive licence with an explicit patent grant and a requirement to state changes when you redistribute modified files. It is compatible with commercial use, and it is not the same as MIT, so a legal review that treats all permissive licences as interchangeable should look at the patent termination clause specifically. This is a description of the licence text, not legal advice.
The maintenance story is harder to assess from the material. The repository is not archived, the last push is dated 2026-09-10, and the primary language is Python with a stated requirement of 3.12 or later. The installer auto-installs ADB, scrcpy, FFmpeg and uv, which means the surface area you inherit includes three external binaries plus a Python toolchain. When one of those moves, the start script is the thing that breaks first.
Upgrade cost is dominated by the missing release tags. Without them, an upgrade is a diff against main, and the two things most likely to move under you are the MCP client configuration formats and the rules file that gets written into your IDE directories. The manual configuration snippets in the README are tied to specific paths such as ~/.codex/config.toml and ~/.gemini/jetski/mcp_config.json, and those paths belong to the client applications, not to ARTEMIS. A client-side config format change is outside this project's control and would surface as a broken MCP connection rather than a clear error.
Editorial conclusion
Adopt ARTEMIS if you already run Android instrumentation or emulator-based testing and want an MCP server that lets Claude Code, Codex, Antigravity or Windsurf drive a real handset and pull Logcat back into the same session. Do not adopt it if you need a frozen, versioned dependency: there are no tagged releases, so pinning means pinning a commit SHA. Before committing, verify the AndroidWorld claim on your own device matrix, confirm that the flash profile's reported 3 to 5 second per-step cadence holds on your hardware, and read the Apache-2.0 patent grant rather than assuming it matches the MIT terms your other tooling uses.
Community notes