google/artemisPublic

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.

AI summary: Autonomous AI testing framework using natural language to test Android apps via Model Context Protocol.

Stars
13.8K
+735 today
Forks
1.5K
Watchers
167
Open issues
49
Open PRs
93
Contributors
~8
Commits
121
Branches
4
Views (30d)
1

PythonApache-2.0Created Aug 13, 2026Last push 21d ago+2.1K stars this week+2.1K this month

Quick answers

What is artemis?
Autonomous AI testing framework using natural language to test Android apps via Model Context Protocol.
What does artemis do?
Artemis translates natural language instructions into real-world Android device interactions to automate testing and everyday workflows. It features a reactive observe-and-act loop with asynchronous history summaries that typically execute steps in 3-5 seconds. The tool seamlessly integrates with Model Context Protocol to let AI agents like Antigravity, Claude Code, and Windsurf drive test devices while capturing logcat and screenshots. When explicit UI element indices are unavailable, it falls back to coordinate and visual targeting to handle custom interfaces smoothly.
Who is artemis for?
QA engineers, Android developers, and AI researchers looking to automate complex mobile testing scenarios. Users need an Android device with USB debugging enabled or an emulator, plus standard toolchains like ADB and Python.
How do I get started with artemis?
git clone https://github.com/google/artemis.git && cd artemis && ./start.sh
How popular is artemis on GitHub?
google/artemis has 13,824 stars and 1,461 forks on GitHub, and gained 2,099 stars in the last 7 days.
What license does artemis use?
google/artemis is released under the Apache-2.0 license.

Star history

since Oct 14, 2026
05K10KOct 2026Oct 2026Oct 2026Oct 2026
13.8K stars as of Oct 23, 2026. Measured daily since Oct 14, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepOctMonWedFri2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 0 commits2026-08-09: 0 commits2026-08-10: 0 commits2026-08-11: 0 commits2026-08-12: 0 commits2026-08-13: 7 commits2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 13 commits2026-08-19: 2 commits2026-08-20: 1 commit2026-08-21: 3 commits2026-08-22: 1 commit2026-08-23: 1 commit2026-08-24: 2 commits2026-08-25: 7 commits2026-08-26: 5 commits2026-08-27: 3 commits2026-08-28: 0 commits2026-08-29: 0 commits2026-08-30: 1 commit2026-08-31: 1 commit2026-09-01: 19 commits2026-09-02: 6 commits2026-09-03: 6 commits2026-09-04: 9 commits2026-09-05: 0 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 2 commits2026-09-09: 1 commit2026-09-10: 5 commits2026-09-11: 4 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 0 commits2026-09-15: 0 commits2026-09-16: 0 commits2026-09-17: 0 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 0 commits2026-09-23: 0 commits2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 0 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 0 commits2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 0 commits2026-10-03: 0 commits2026-10-04: 0 commits2026-10-05: 0 commits2026-10-06: 0 commits2026-10-07: 0 commits2026-10-08: 0 commits2026-10-09: 0 commits2026-10-10: 0 commits2026-10-11: 0 commits2026-10-12: 0 commits2026-10-13: 0 commits2026-10-14: 0 commits2026-10-15: 0 commits2026-10-16: 0 commits2026-10-17: 0 commits2026-10-18: 0 commits2026-10-19: 0 commits2026-10-20: 0 commits2026-10-21: 0 commits2026-10-22: 0 commits2026-10-23: 0 commits2026-10-24: 0 commits
101 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    13,824 stars

  • Breakout launch

    13,824 stars in 71 days

  • Rising fast

    +2,099 stars this week

  • Permissive license

    Apache-2.0

  • Continuous integration

    Automated checks passing

What artemis does

Artemis translates natural language instructions into real-world Android device interactions to automate testing and everyday workflows. It features a reactive observe-and-act loop with asynchronous history summaries that typically execute steps in 3-5 seconds. The tool seamlessly integrates with Model Context Protocol to let AI agents like Antigravity, Claude Code, and Windsurf drive test devices while capturing logcat and screenshots. When explicit UI element indices are unavailable, it falls back to coordinate and visual targeting to handle custom interfaces smoothly.

QA engineers, Android developers, and AI researchers looking to automate complex mobile testing scenarios. Users need an Android device with USB debugging enabled or an emulator, plus standard toolchains like ADB and Python.

  • Cross-app automation: Executes multi-step testing workflows and everyday tasks on Android devices directly from natural language commands.
  • Multimodal targeting: Uses element indices when present and gracefully falls back to coordinate and visual locating for custom or obscure interfaces.
  • IDE diagnostics: Exposes a Model Context Protocol integration that allows AI agents to control test devices and collect logcat output and screenshots.
  • Flash execution: Runs a fast, reactive observe-and-act loop combined with asynchronous history summaries to achieve 3-5 second step times.
  • Pro exploration: Pre-validates targets before acting and intelligently returns blocked actions back to the operator for autonomous recovery.
  • AndroidWorld SOTA: Achieves a 99 percent task completion rate on Google Research's complex AndroidWorld benchmark consisting of over 100 tasks.

Where teams use it

Automated regression testing

Write tests in natural language to have AI agents execute comprehensive regression suites on real Android devices without brittle element locators.

Agentic test exploration

Utilize Antigravity and Model Context Protocol to let AI autonomously explore an app, discover edge cases, and generate detailed diagnostic reports.

Cross-app workflow automation

Automate complex scenarios that span multiple applications, like fetching route durations in Google Maps before opening a specific track on YouTube.

Performance profiling

Collect device metrics, logcat output, and screenshots automatically while the AI agent navigates the UI during long-running stability tests.

Getting started: git clone https://github.com/google/artemis.git && cd artemis && ./start.sh

README

main branch

ARTEMIS Banner

Let AI assistants and test suites use real phones like a human.

English • 中文文档 • Workflow Showcase • Quick Start • MCP for IDEs • Benchmarks • Discord Community

Python 3.12+ License: Apache-2.0 MCP Native Multi-Model AndroidWorld SOTA

Artemis in Action
Live Demo: Setup driving routes and calculate total durations in Google Maps, then open YouTube to play a Coldplay song.

Key Highlights

  • Cross-App Automation: Executes testing workflows and everyday tasks on Android from natural language instructions.
  • Multimodal Targeting: Uses element indices when available, with coordinate and visual locating fallbacks for custom interfaces.
  • IDE Diagnostics: Model Context Protocol (MCP) integration lets Antigravity, Claude Code, and Windsurf drive test devices and collect Logcat output and screenshots.
  • Flash Execution: A reactive observe-and-act loop with asynchronous history summaries, typically 3–5s per step.
  • Pro Exploration: Checks targets before individual actions and returns blocked actions to the Operator for recovery. Supports long-running exploratory and stability tests.
  • AndroidWorld Results: 99%+ task completion on Google Research's AndroidWorld benchmark (100+ multi-step tasks).

Antigravity × ARTEMIS: Autonomous Testing Workflow

Antigravity uses ARTEMIS through MCP to turn a test request into a plan, device execution, and a diagnostic report:

1. Prompt Input (Task Dispatch)
Describe your test scenario and target metrics in Antigravity

Step 1: Prompt Input in Antigravity
2. Test Plan Generation
Formulates a step-by-step test plan & architecture for review

Step 2: Test Plan Generation
3. Autonomous Test Execution
Drives real device, navigates UI, and profiles performance

Step 3: Autonomous Test Execution
4. Final Report
Delivers structured audit findings, metric tables, and raw datasets

Step 4: Final Report

Quick Start

Ensure an Android device (with USB Debugging enabled) or emulator is connected. The one-click startup script will automatically:

  • Install System Toolchains: Detect and auto-install ADB, scrcpy, FFmpeg, and Python (uv) dependencies.
  • Mount Global MCP Server & AI Agent Rules: Prompt to automatically install global MCP configurations and the Artemis Mobile Testing Mindset (rules.md) into your AI IDEs (Antigravity, Cursor, Claude Code, Codex, Windsurf, VS Code, Cline/Roo, OpenClaw).

macOS and Linux

# 1. Clone repo & navigate to directory
git clone https://github.com/google/artemis.git && cd artemis

# 2. One-click launch
./start.sh

Windows PowerShell

# 1. Clone repo & navigate to directory
git clone https://github.com/google/artemis.git
cd artemis

# 2. One-click launch
.\start.bat

PowerShell does not search the current directory for executable scripts by default, so use .\start.bat without a trailing \. In Command Prompt (CMD), use start.bat instead.

Tip: Opens http://localhost:8000 in your default browser with a device connection wizard, live screen mirroring, prompt sandbox, and execution replays. You can also run directly from CLI: uv run artemis run "Open Settings, find Battery and tell me current level" --profile flash.

MCP Setup for Codex / Antigravity / Claude Code / Windsurf (Click to expand)

ARTEMIS includes a native Model Context Protocol (MCP) server. Connect your real phone directly into AI IDEs:

1. One-Click Auto Install (Recommended)

Running ./start.sh (macOS/Linux) or .\start.bat (Windows PowerShell) will prompt you to configure global MCP and testing rules for detected IDEs (or you can install/update anytime later manually using the commands below):

# Auto-install MCP server & global rules for Antigravity / Jetski:
uv run artemis mcp --install antigravity

# Or install for all supported AI IDEs (including Codex):
uv run artemis mcp --install all

Tip: You can also configure MCP interactively during first-time setup via uv run artemis init. Pro Tip: If you want to use the artemis command globally without uv run in any directory, run uv tool install -e . once in the project root.

2. Manual Configuration (Optional)

If you prefer to configure manually, run uv run artemis mcp --generate-config <client> (for example, codex or antigravity) to output the appropriate TOML or JSON snippet. Replace /path/to/artemis with your actual repo path and point command to your .venv Python executable:

  • Codex (~/.codex/config.toml):
[mcp_servers.artemis]
command = "/path/to/artemis/.venv/bin/python"
args = ["-m", "mcp_server"]
cwd = "/path/to/artemis"

[mcp_servers.artemis.env]
PYTHONUNBUFFERED = "1"
PYTHONPATH = "/path/to/artemis"
  • Antigravity (~/.gemini/jetski/mcp_config.json):
{
  "mcpServers": {
    "artemis": {
      "command": "/path/to/artemis/.venv/bin/python",
      "args": ["-m", "mcp_server"],
      "cwd": "/path/to/artemis",
      "env": {
        "PYTHONUNBUFFERED": "1"
      },
      "tools": {
        "mobile_run_task": { "eager": true },
        "mobile_manage_task": { "eager": true },
        "mobile_get_device_state": { "eager": true },
        "mobile_inspect_trace": { "eager": true },
        "mobile_diagnose": { "eager": true }
      }
    }
  }
}
  • Claude Desktop (claude_desktop_config.json):
{
  "mcpServers": {
    "artemis": {
      "command": "/path/to/artemis/.venv/bin/python",
      "args": ["-m", "mcp_server"],
      "cwd": "/path/to/artemis"
    }
  }
}

3. Mount Behavioral Rules for AI Agents (Highly Recommended)

To ensure your AI coding assistant acts with the rigor of a senior mobile test engineer and never hallucinates UI interactions, we provide a dedicated testing mindset rules file at mcp_server/rules.md (covering Active Exploration before coding, Flash vs. Pro routing strategy, Latency & Timing compensation, and the "Dynamic-First, Coordinate-Fallback" locator pattern).

You can mount or copy mcp_server/rules.md into your AI IDE's rule configuration:

  • Antigravity: Add the contents of rules.md to your Workspace Rules, Global Rules settings, or agent instructions.
  • Claude Code: Run artemis mcp --install claude to install the rules to ~/.claude/rules/artemis.md (install to exactly one location — Claude Code loads both ~/.claude/CLAUDE.md and ~/.claude/rules/*.md, so duplicating the rules wastes context).
  • Cursor: Copy the contents into .cursorrules or create a rule file at .cursor/rules/artemis.mdc.
  • Codex: Add the contents to ~/.codex/AGENTS.md (or the active AGENTS.override.md).
  • Windsurf / OpenClaw: Add the rules to your workspace rules or global system prompts.

For more details on the testing mindset and MCP architecture, see the MCP Server README.

4. Prompt Your Phone in the IDE Chat

In Codex, Antigravity, or Claude Code, simply prompt:

"Build the latest changes into an APK, install it on the connected device, open the login screen with a test account, verify if there are any unexpected popups after login, and return screenshots of the final page."

Python SDK Integration (Click to expand)

Install the zero-runtime-dependency client on the development machine. ADB, agents, models, and image processing remain on the device host:

uv add "artemis-client @ git+https://github.com/google/artemis.git#subdirectory=packages/artemis-client"
import asyncio
from artemis_client import ArtemisClient


async def main():
    client = ArtemisClient(
        "http://artemis-host:8000",
        device_serial="emulator-5554",  # optional: target specific device serial
        default_profile="flash",  # "flash" (fast reactive) or "pro" (deep reasoning)
    )

    result = await client.run(
        "Open System Settings, go to 'Battery', verify battery percentage is displayed, and check for any crash dialogs.",
    )

    assert result.succeeded, f"Test failed: {result.error or result.status}"
    print(f"✅ Test Passed! Device: {result.device_serial} | Trace ID: {result.trace_id}")


if __name__ == "__main__":
    asyncio.run(main())

Usage Modes

Artemis Web Console
Console Overview: ① View Switcher (Home / Workspace) · ② Model & Replay (Flash/Pro status & video replay) · ③ Live Agent Stream (Action perception, target coordinates & structured results) · ④ Prompt Dock (Natural language dispatch) · ⑤ Task Queue & Dashboard (Lifecycle & history)

  • Web Visual Test Console (uv run artemis ui): Real-time screen projection and interactive panel, supporting natural language test dispatch, live reasoning telemetry, action trajectories, and execution replay; manage server lifecycle anytime from any terminal using uv run artemis restart, uv run artemis stop, and uv run artemis status;
  • MCP Server: Connects Antigravity, Claude Code, Windsurf, and other MCP clients to real devices for bug reproduction and test execution;
  • Developer CLI (uv run artemis run): Direct terminal execution for automated test cases, exploratory stability inspection, or AndroidWorld benchmarks with high-fidelity structured terminal output;
  • Python SDK: Integrates as a standard Python library into existing automated testing frameworks (e.g., pytest) or CI/CD pipelines with strongly typed Pydantic structured outputs and assertion support.

What ARTEMIS Installs on Your Phone

The first task on a device installs the Artemis Accessibility Helper, a small accessibility service that reads the screen layout without taking the UiAutomation connection. Tools using UiAutomation can suppress the helper unless they enable FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES. You will see a collapsed "Artemis test helper is running" notification and a new entry under Settings > Accessibility; both are that helper. It listens only on the phone itself and sends nothing elsewhere.

  • Pre-install it (avoids the ~3 s delay on the first task): uv run artemis helper install
  • Inspect it: uv run artemis helper status / uv run artemis doctor
  • Remove it any time: uv run artemis helper uninstall
  • Use UIAutomator2 instead: ARTEMIS_HIERARCHY_BACKEND=uiautomator in .env
  • Prevent automatic installation: ARTEMIS_HELPER_AUTO_INSTALL=false in .env

If the helper ever fails mid-task, ARTEMIS falls back to UIAutomator2 and says so in the task timeline, in mobile_manage_task status, and in the final report.

Benchmarks: AndroidWorld (SOTA 99%+)

Artemis achieved a 99%+ completion rate on AndroidWorld, Google Research's benchmark spanning 20+ apps and 100+ multi-step tasks.

AndroidWorld Benchmark Comparison

How ARTEMIS is Architected

  • Pre-Execution Checks and Action Bursts: Pro checks the target against the live UI tree and pixels before dispatching an individual action. Action bursts handle transient controls without waiting for another model turn.
  • Element Locating: Combines accessibility hierarchies and OCR with visual models for custom Canvas, Compose, and Flutter interfaces.
  • Shared History Compression: Flash and Pro replace older screenshots with visual summaries and compress completed steps into searchable history chunks. Context thresholds control when raw turns are replaced.

ARTEMIS System Architecture Diagram

Execution Profiles: Flash vs. Pro

ARTEMIS supports two execution profiles tailored for different automation requirements:

  • Flash Profile (--profile flash): Fast and token-efficient reactive loop (~3–5s per step): one model observes the live screen, thinks, and acts, with no graph orchestration. Ideal for routine, deterministic UI tasks. The loop is unbounded by default (agent.flash.max_turns, 0 = unlimited) because history is compressed rather than capped: Flash shares the Pro session transcript ledger (session-relative T+mm:ss clock, screenshots folded into visual summaries, older steps chunked into eras and recallable on demand via search_history / replay_steps) and can query the session recording through video_analyzer. Transient UI (auto-fading control bars, toasts) is handled by chaining taps into one click_sequence. Limitations: No task plan or notes, no pre-execution safety net, no checkpoint verification or final report, and no ADB shell.
  • Pro Profile (--profile pro): A planning and verification workflow (~15–40s per step), built as a multi-agent graph. A Planner maintains a living Markdown task plan with milestones and verify / assert check items; the Operator executes it with the full toolset (Explorer grounding whose flash / pro / ultra tier is a user setting per profile — pro.explorer.mode / flash.explorer_mode in config/artemis.jsonc or --explorer-pro-mode — never chosen by the agent; notes, history recall, video analysis, ADB diagnostics). Every single action passes a pre-execution Safety Net (XML-first, pixel fallback), while multi-action fast-action bursts fire back to back to beat turn latency on transient UI. A blocked or failed action opens an execution incident that stays in the Operator's context until a later action succeeds, so recovery is handled by the Operator itself with no separate repair agent. A read-only Checker verifies plan checkpoints and runs an exit final review against the original goal (--verification-level: off / final (default) / checkpoints / strict), and plan milestone edits get an advisory review. Handles 100+ step long-horizon workflows, [Loop:continuous] monitoring, and an optional written report.

Roadmap

  • Android Studio Integration: Native IDE plugin and workflow integration to enable in-editor debugging, test recording, and automated device control directly within Android Studio.
  • iOS Platform Expansion: Extending multimodal perception and mobile automation to iOS devices and simulators.
  • On-Device Lightweight VLMs: Local execution with lightweight edge vision models for low-latency, privacy-first automation.
  • Real-time Duplex Voice Interaction: Voice-driven task dispatch with real-time conversational control and interruption handling.

Community & Contributing

Contributions are warmly welcomed!

License

This project is licensed under the Apache License 2.0.

Third-party code

Code not owned by Google lives under third_party/, one directory per upstream project, each with its own LICENSE and METADATA.

View on GitHub

Recent activity

commits and pull requests

Code frequency

additions and deletions
+123.5K-123.5KWeek of 2026-08-09: +123,496 linesWeek of 2026-08-09: -13,819 linesWeek of 2026-08-16: +69,992 linesWeek of 2026-08-16: -36,672 linesWeek of 2026-08-23: +26,234 linesWeek of 2026-08-23: -4,567 linesWeek of 2026-08-30: +85,713 linesWeek of 2026-08-30: -52,710 linesWeek of 2026-09-06: +43,756 linesWeek of 2026-09-06: -16,788 linesWeek of 2026-09-13: +0 linesWeek of 2026-09-13: -0 linesWeek of 2026-09-20: +0 linesWeek of 2026-09-20: -0 linesWeek of 2026-09-27: +8,111 linesWeek of 2026-09-27: -9,114 linesWeek of 2026-10-04: +0 linesWeek of 2026-10-04: -0 linesWeek of 2026-10-11: +0 linesWeek of 2026-10-11: -0 linesWeek of 2026-10-18: +0 linesWeek of 2026-10-18: -0 linesAug 9, 2026Oct 18, 2026
+357.3K lines added, -133.7K removed over the last year.

Commits per week

last 52 weeks
420Week of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 0 commitsWeek of 2026-06-21: 0 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 0 commitsWeek of 2026-07-12: 0 commitsWeek of 2026-07-19: 0 commitsWeek of 2026-07-26: 0 commitsWeek of 2026-08-02: 0 commitsWeek of 2026-08-09: 7 commitsWeek of 2026-08-16: 20 commitsWeek of 2026-08-23: 18 commitsWeek of 2026-08-30: 42 commitsWeek of 2026-09-06: 12 commitsWeek of 2026-09-13: 0 commitsWeek of 2026-09-20: 0 commitsWeek of 2026-09-27: 2 commitsWeek of 2026-10-04: 0 commitsWeek of 2026-10-11: 0 commitsWeek of 2026-10-18: 0 commitsOct 26, 2025Oct 18, 2026
101 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 1 commitsSun 1:00 — 0 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 0 commitsSun 10:00 — 0 commitsSun 11:00 — 0 commitsSun 12:00 — 0 commitsSun 13:00 — 1 commitsSun 14:00 — 0 commitsSun 15:00 — 0 commitsSun 16:00 — 0 commitsSun 17:00 — 0 commitsSun 18:00 — 0 commitsSun 19:00 — 0 commitsSun 20:00 — 0 commitsSun 21:00 — 0 commitsSun 22:00 — 0 commitsSun 23:00 — 0 commitsMon 0:00 — 0 commitsMon 1:00 — 0 commitsMon 2:00 — 0 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 0 commitsMon 9:00 — 0 commitsMon 10:00 — 0 commitsMon 11:00 — 0 commitsMon 12:00 — 0 commitsMon 13:00 — 0 commitsMon 14:00 — 1 commitsMon 15:00 — 0 commitsMon 16:00 — 1 commitsMon 17:00 — 2 commitsMon 18:00 — 0 commitsMon 19:00 — 0 commitsMon 20:00 — 1 commitsMon 21:00 — 0 commitsMon 22:00 — 0 commitsMon 23:00 — 0 commitsTue 0:00 — 0 commitsTue 1:00 — 0 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 0 commitsTue 9:00 — 0 commitsTue 10:00 — 1 commitsTue 11:00 — 3 commitsTue 12:00 — 0 commitsTue 13:00 — 1 commitsTue 14:00 — 0 commitsTue 15:00 — 9 commitsTue 16:00 — 2 commitsTue 17:00 — 11 commitsTue 18:00 — 2 commitsTue 19:00 — 0 commitsTue 20:00 — 3 commitsTue 21:00 — 6 commitsTue 22:00 — 3 commitsTue 23:00 — 0 commitsWed 0:00 — 4 commitsWed 1:00 — 0 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 0 commitsWed 9:00 — 0 commitsWed 10:00 — 0 commitsWed 11:00 — 1 commitsWed 12:00 — 0 commitsWed 13:00 — 0 commitsWed 14:00 — 0 commitsWed 15:00 — 1 commitsWed 16:00 — 2 commitsWed 17:00 — 1 commitsWed 18:00 — 0 commitsWed 19:00 — 0 commitsWed 20:00 — 0 commitsWed 21:00 — 2 commitsWed 22:00 — 1 commitsWed 23:00 — 2 commitsThu 0:00 — 2 commitsThu 1:00 — 0 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 0 commitsThu 9:00 — 0 commitsThu 10:00 — 3 commitsThu 11:00 — 3 commitsThu 12:00 — 2 commitsThu 13:00 — 0 commitsThu 14:00 — 3 commitsThu 15:00 — 1 commitsThu 16:00 — 3 commitsThu 17:00 — 2 commitsThu 18:00 — 1 commitsThu 19:00 — 1 commitsThu 20:00 — 1 commitsThu 21:00 — 0 commitsThu 22:00 — 0 commitsThu 23:00 — 0 commitsFri 0:00 — 1 commitsFri 1:00 — 1 commitsFri 2:00 — 0 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 0 commitsFri 10:00 — 0 commitsFri 11:00 — 4 commitsFri 12:00 — 1 commitsFri 13:00 — 0 commitsFri 14:00 — 0 commitsFri 15:00 — 0 commitsFri 16:00 — 1 commitsFri 17:00 — 5 commitsFri 18:00 — 0 commitsFri 19:00 — 3 commitsFri 20:00 — 0 commitsFri 21:00 — 0 commitsFri 22:00 — 0 commitsFri 23:00 — 0 commitsSat 0:00 — 0 commitsSat 1:00 — 0 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 0 commitsSat 10:00 — 0 commitsSat 11:00 — 0 commitsSat 12:00 — 0 commitsSat 13:00 — 0 commitsSat 14:00 — 0 commitsSat 15:00 — 0 commitsSat 16:00 — 0 commitsSat 17:00 — 0 commitsSat 18:00 — 0 commitsSat 19:00 — 1 commitsSat 20:00 — 0 commitsSat 21:00 — 0 commitsSat 22:00 — 0 commitsSat 23:00 — 0 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Oct 15, 2026monthly#18+7,039
Oct 14, 2026monthly#18+7,039
  • public-apis/public-apis

    A collective list of free APIs

    491.6K stars · Python

  • donnemartin/system-design-primer

    Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.

    375.3K stars · Python

  • morluto/rea

    Reverse engineer anything with agents, from app behavior down to native binaries.

    370.6K stars · TypeScript

  • practical-tutorials/project-based-learning

    Curated list of project-based tutorials

    287.7K stars · Python

  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    287K stars · JavaScript

  • NousResearch/hermes-agent

    The agent that grows with you

    256.4K stars · Python