artemis

CLI Tool

google/artemis

AI agent turning natural-language instructions into reliable Android automation.

Overview

ARTEMIS is an AI agent that executes end-to-end Android workflows from natural-language instructions, using multimodal element targeting with visual fallbacks. It integrates with AI coding assistants via a native MCP server to drive devices, capture Logcat output and screenshots. It achieves 99%+ task completion on the AndroidWorld benchmark.

README Preview

\n  \n\n\n\n  Let AI assistants and test suites use real phones like a human.\n\n\n\n  English •\n  中文文档 •\n  Workflow Showcase •\n  Quick Start •\n  MCP for IDEs •\n  Benchmarks •\n  Discord Community\n\n\n\n  \n  \n  \n  \n  \n\n\n\n\n  \n  \n  Live Demo: Setup driving routes and calculate total durations in Google Maps, then open YouTube to play a Coldplay song.\n\n\n## Key Highlights\n\n* **Cross-App Automation**: Executes testing workflows and everyday tasks on Android from natural language instructions.\n* **Multimodal Targeting**: Uses element indices when available, with coordinate and visual locating fallbacks for custom interfaces.\n* **IDE Diagnostics**: **Model Context Protocol (MCP)** integration lets **Antigravity, Claude Code, and Windsurf** drive test devices and collect **Logcat** output and screenshots.\n* **Flash Execution**: A reactive observe-and-act loop with asynchronous history summaries, typically **3–5s per step**.\n* **Pro Exploration**: Checks targets before individual actions and returns blocked actions to the Operator for recovery. Supports long-running exploratory and stability tests.\n* **AndroidWorld Results**: **99%+ task completion** on Google Research's **AndroidWorld** benchmark (100+ multi-step tasks).\n\n\n## Antigravity × ARTEMIS: Autonomous Testing Workflow\n\n**Antigravity** uses **ARTEMIS** through MCP to turn a test request into a plan, device execution, and a diagnostic report:\n\n\n  \n    \n      1. Prompt Input (Task Dispatch)\n      Describe your test scenario and target metrics in Antigravity\n      \n    \n    \n      2. Test Plan Generation\n      Formulates a step-by-step test plan & architecture for review\n      \n    \n  \n  \n    \n      3. Autonomous Test Execution\n      Drives real device, navigates UI, and profiles performance\n      \n    \n    \n      4. Final Report\n      Delivers structured audit findings, metric tables, and raw datasets\n      \n    \n  \n\n\n\n## Quick Start\n\nEnsure an Android dev

FAQ (3)

Troubleshooting
Why does ./start.sh fail at 'uv sync' when setting up Google Artemis, and how to fix it?

The failure happens because uv.lock in the repo mistakenly pointed to Google's internal Artifact Registry proxy (airlock-proxy.uplink.goog), which is unreachable outside Google's network, so uv sync cannot download dependencies and .venv/ stays empty. Workaround: delete the lock file before running the setup so uv resolves dependencies from PyPI:

rm uv.lock
./start.sh

The maintainers have since fixed the uv.lock file upstream, so pulling the latest version of the repo also resolves the issue.

GitHub Issue #28
Troubleshooting
How to fix 'Unexpected token' ParserError when running start.bat in PowerShell on Windows 11?

Update to the latest main branch (fixed in commit 38a2de6) and run start.bat again. The error is not a Node.js detection problem — it happens while PowerShell parses scripts/start.ps1. Windows PowerShell 5.1 reads BOM-less scripts using the system ANSI code page (cp1252), so a UTF-8 symbol in the script was misdecoded as a quote delimiter, causing the cascade of Unexpected token and The output stream for this command is already redirected errors. The fix converts both Windows bootstrap scripts to ASCII-only status labels, and a regression test keeps them ASCII-only. Run git pull in your artemis folder, then execute start.bat again.

GitHub Issue #15
Troubleshooting
Why does Artemis Flash profile fail with 'ChatGoogleGenerativeAI missing Google credentials' error when using an OpenAI-compatible provider?

This is a known bug: even with a non-Google default model (e.g., MiniMax-M3 via the openai provider), several Flash profile internals hardcode Gemini clients and fail at startup when Google credentials are absent. Workarounds:

1. **Quick fix**: set a Google/Gemini API key (GOOGLE_API_KEY) so the hardcoded clients can initialize, even if unused.

2. **Patch the hardcoded paths** (verified by the reporter):
- artemis/agents/flash/summarizer.py: VisualStepSummarizer calls get_google_llm() directly — change it to use the configured summarizer model node and its fallback.
- artemis/memory/chunking.py: StepCapsuleLens calls get_google_llm() for primary/fallback — route through configured nodes.
- artemis/agents/flash/runner.py: _init_llm() silently falls back to a hardcoded Gemini model on init errors — remove this fallback so the real config error surfaces.
- artemis/config/llm.py: explicitly configure the validator_pixel_safety_net and planner_validation nodes to your provider, otherwise they default to a lightweight Gemini model.

3. Alternatively, disable the Flash step summarizer and history compression if your deployment allows.

Note: as of the latest comment, this issue is still unresolved upstream, so the local patch is required.

GitHub Issue #179