ARTEMIS is an autonomous multimodal Android agent and mobile UI automation platform engineered for physical devices and emulators. It combines state-of-the-art multimodal Vision-Language Models (VLMs) with hierarchical closed-loop planning, resilient self-healing, and deep Android subsystem integration. Key Features & Architectural Highlights: - Dual-Engine Orchestration: * Pro Engine: Multi-agent closed-loop (Planner -> Operator -> Validator/Failure Analyzer -> Summarizer) powered by LangGraph. * Flash Engine: Ultra-fast reactive loop for deterministic, low-latency UI execution (<35 steps). - Multimodal Perception & Grounding: * Hybrid visual screenshot grounding, real-time OCR extraction, and XML accessibility hierarchy parsing. * Dynamic-First, Coordinate-Fallback locating strategy for maximum resilience against UI drift. - Autonomous Self-Healing & Diagnostics: * Failure analyzer and safety net for popup dismissal, crash recovery, and auto-retry. * Diagnostic sub-agents for log analysis, video recording inspection, and object detection. - Unified CLI & Python SDK: * Rich CLI with commands: init, doctor, run, trace, batch, bench, server, and mcp. * Fluent Python SDK with Pydantic structured output models and package locking. - Multi-Provider LLM Architecture: * Support for Google Gemini, OpenAI, Anthropic Claude, Vertex AI, OpenRouter, xAI Grok, and local endpoints (Ollama/vLLM). * Centralized configuration in config/artemis.jsonc. - Native MCP & Observability: * Model Context Protocol (MCP) server endpoints for AI IDEs. * Full trace recording with before/after screenshots, action overlays, and execution replays. Change-Id: I430b93ee2b76b54cc5a3c6eeccd15d2cf29830a1
400 lines
16 KiB
Markdown
400 lines
16 KiB
Markdown
# ARTEMIS βπ±
|
||
|
||
**Autonomous Multimodal Android Agent & Mobile UI Automation Platform**
|
||
|
||
[](https://www.python.org/downloads/)
|
||
[](LICENSE)
|
||
[](https://github.com/langchain-ai/langgraph)
|
||
[](https://ai.google.dev/)
|
||
|
||
ARTEMIS is a next-generation, production-grade autonomous agent and testing framework engineered for Android devices and emulators. Combining state-of-the-art multimodal Large Vision-Language Models (VLMs) with hierarchical closed-loop planning, resilient self-healing, and deep Android subsystem integration (ADB, UIAutomator2, accessibility trees), ARTEMIS enables autonomous UI navigation, robust automated testing, and intelligent device diagnostics.
|
||
|
||
---
|
||
|
||
## π Table of Contents
|
||
|
||
- [Key Features](#-key-features)
|
||
- [Architecture Overview](#-architecture-overview)
|
||
- [Prerequisites](#-prerequisites)
|
||
- [Installation & Setup](#-installation--setup)
|
||
- [Quick Start](#-quick-start)
|
||
- [Command Line Interface (CLI)](#command-line-interface-cli)
|
||
- [Python SDK](#python-sdk)
|
||
- [Execution Profiles: Flash vs. Pro](#-execution-profiles-flash-vs-pro)
|
||
- [Model Context Protocol (MCP) Integration](#-model-context-protocol-mcp-integration)
|
||
- [Configuration Guide](#-configuration-guide)
|
||
- [Using Non-Google LLMs](#using-non-google-llms)
|
||
- [Trace Inspection & Observability](#-trace-inspection--observability)
|
||
- [Development & Testing](#-development--testing)
|
||
- [License](#-license)
|
||
|
||
---
|
||
|
||
## β¨ Key Features
|
||
|
||
- **Dual-Engine Execution**:
|
||
- **ARTEMIS Flash**: High-speed, reactive single-agent loop for deterministic, low-latency tasks (< 35 steps).
|
||
- **ARTEMIS Pro**: Multi-agent closed-loop graph orchestration (Planner $\rightarrow$ Operator $\rightarrow$ Failure Analyzer $\rightarrow$ Summarizer) powered by LangGraph.
|
||
- **Multimodal Perception**:
|
||
- Combined visual screenshot grounding, real-time OCR, accessibility hierarchy (XML) parsing, and dynamic video analysis.
|
||
- **Resilient Locating Strategy ("Dynamic-First, Coordinate-Fallback")**:
|
||
- Prioritizes semantic IDs, XPath, and accessibility text matching to withstand UI layout drift; seamlessly falls back to calibrated absolute/relative coordinates.
|
||
- **Autonomous Self-Healing**:
|
||
- Built-in failure analyzer and safety net detect blocked flows, system dialogs, app crashes, or unexpected states and auto-recover in real time.
|
||
- **App Locking & Session Boundaries**:
|
||
- Restricts execution context to target application packages with automatic foreground recovery.
|
||
- **Model Context Protocol (MCP) Native**:
|
||
- Exposes Android automation, state inspection, and trace querying as MCP tools for IDEs and AI orchestrators.
|
||
- **Structured Pydantic Outputs**:
|
||
- Automatically parses agent observations and findings into validated Pydantic schemas.
|
||
|
||
---
|
||
|
||
## π Architecture Overview
|
||
|
||
ARTEMIS operates on a closed-loop multi-agent architecture:
|
||
|
||
```
|
||
βββββββββββββββββββββββββββββββββββ
|
||
β User Goal / Task β
|
||
ββββββββββββββββββ¬βββββββββββββββββ
|
||
β
|
||
βΌ
|
||
βββββββββββββββββββββββββββββββββ
|
||
β Planner Agent β
|
||
β (Hierarchical Task Breakdown) β
|
||
βββββββββββββββββ¬ββββββββββββββββ
|
||
β
|
||
ββββββββββββββββ΄βββββββββββββββ
|
||
βΌ βΌ
|
||
βββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββ
|
||
β Operator Agent β β Diagnostic Agents β
|
||
β (Screen VLM + XML Grounding) β β (Log Reader, Video Analyzer, β
|
||
ββββββββββββββββββ¬βββββββββββββββββ β Object Detector, Explorer) β
|
||
β βββββββββββββββββββββββββββββββββ
|
||
βΌ
|
||
βββββββββββββββββββββββββββββββββββ
|
||
β Execution & Device Control β
|
||
β (ADB / UIAutomator2 / Taps) β
|
||
ββββββββββββββββββ¬βββββββββββββββββ
|
||
β
|
||
[Action Success / State Change?]
|
||
β β
|
||
(Yes) (No / Blocked)
|
||
β β
|
||
βΌ βΌ
|
||
ββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββββββββββββ
|
||
β Next Step / Complete β β Failure Analyzer & Safety Net β
|
||
ββββββββββββ¬ββββββββββββ β (Popup dismissal, Retry, Self-healing) β
|
||
β ββββββββββββββββββββββ¬βββββββββββββββββββββ
|
||
βΌ β
|
||
ββββββββββββββββββββββββ β
|
||
β Summarizer / Output βββββββββββββββββββββββββ
|
||
β (Reports, Traces) β
|
||
ββββββββββββββββββββββββ
|
||
```
|
||
|
||
---
|
||
|
||
## π§ Prerequisites
|
||
|
||
1. **Python**: Version `3.12` or higher.
|
||
2. **Android SDK / ADB**:
|
||
- `adb` must be installed and accessible in your system `PATH`.
|
||
- Verify with `adb devices`.
|
||
3. **Android Device or Emulator**:
|
||
- A physically connected Android device with **USB Debugging** enabled, or
|
||
- An active Android Emulator (AVD) running on your local machine.
|
||
4. **Screen Recording & Video Tools** *(optional for `--with-video-recording-tools`)*:
|
||
- **`scrcpy`**: Required for live Android device screen video recording (`apt install scrcpy` / `brew install scrcpy`).
|
||
- **`ffmpeg`**: Required for video transcoding, trimming, and audio extraction (`apt install ffmpeg` / `brew install ffmpeg`).
|
||
|
||
---
|
||
|
||
## π Installation & Setup
|
||
|
||
### 1. Clone the Repository
|
||
|
||
```bash
|
||
git clone https://github.com/google/artemis.git
|
||
cd artemis
|
||
```
|
||
|
||
### 2. Install Dependencies
|
||
|
||
Using [`uv`](https://docs.astral.sh/uv/) (recommended):
|
||
|
||
```bash
|
||
# Install dependencies into a virtual environment
|
||
uv sync --dev
|
||
```
|
||
|
||
Or using standard `pip`:
|
||
|
||
```bash
|
||
python3 -m venv .venv
|
||
source .venv/bin/activate
|
||
pip install -e ".[dev]"
|
||
```
|
||
|
||
### 3. Quick Setup (10 Seconds)
|
||
|
||
Run the interactive setup wizard to configure your API key and connect your device:
|
||
|
||
```bash
|
||
artemis init
|
||
```
|
||
|
||
Verify your environment and connected devices anytime with the doctor diagnostic tool:
|
||
|
||
```bash
|
||
artemis doctor
|
||
```
|
||
|
||
*(Alternatively, copy `.env.example` to `.env` and set `GEMINI_API_KEY` for LLM reasoning and `OCR_API_KEY` for Vision perception.)*
|
||
|
||
---
|
||
|
||
## π‘ Quick Start
|
||
|
||
### Command Line Interface (CLI)
|
||
|
||
ARTEMIS installs a unified command-line tool `artemis`:
|
||
|
||
```bash
|
||
# 1. Environment & Device Diagnostics
|
||
artemis doctor
|
||
|
||
# 2. Interactive Setup Wizard
|
||
artemis init
|
||
|
||
# 3. Basic task execution (ARTEMIS Pro by default)
|
||
artemis run "Open YouTube and search for Lo-Fi Hip Hop"
|
||
|
||
# 4. Fast reactive profile (ARTEMIS Flash)
|
||
artemis run "Open Settings and verify Airplane Mode is turned off" --profile flash
|
||
|
||
# 5. Execute with trace recording and structured output
|
||
artemis run "Open Maps, search for coffee shops, and extract the top 3 results" \
|
||
--test-name "coffee_search_test" \
|
||
--traces-path "./traces" \
|
||
--output-description '{"places": "list of shop names", "ratings": "list of rating scores"}'
|
||
|
||
# 6. Enable dynamic video recording analysis
|
||
artemis run "Play the latest video in the feed and verify playback" --with-video-recording-tools
|
||
```
|
||
|
||
### Python SDK
|
||
|
||
Use the fluent SDK to integrate ARTEMIS into your test suites or automation workflows:
|
||
|
||
```python
|
||
import asyncio
|
||
from pydantic import BaseModel, Field
|
||
from artemis.sdk import Agent
|
||
|
||
|
||
class VideoSearchResult(BaseModel):
|
||
query: str = Field(..., description="The search term used")
|
||
top_video_title: str = Field(..., description="Title of the first video result")
|
||
channel_name: str = Field(..., description="Channel name of the first video")
|
||
|
||
|
||
async def main():
|
||
# 1. Initialize the agent
|
||
agent = Agent()
|
||
await agent.init()
|
||
|
||
try:
|
||
# 2. Build task specification
|
||
task = (
|
||
agent.new_task("Search for 'Pixel 9 Pro' and get the first video details")
|
||
.with_name("youtube_search_verification")
|
||
.with_locked_app_package("com.google.android.youtube")
|
||
.with_output_format(VideoSearchResult)
|
||
.with_max_steps(50)
|
||
.build()
|
||
)
|
||
|
||
# 3. Execute task
|
||
result: VideoSearchResult = await agent.run_task(request=task)
|
||
|
||
if result:
|
||
print("Search Results:")
|
||
print(f"- Query: {result.query}")
|
||
print(f"- First Video: {result.top_video_title}")
|
||
print(f"- Channel: {result.channel_name}")
|
||
else:
|
||
print("Task did not complete successfully.")
|
||
|
||
finally:
|
||
# 4. Clean up agent session & device connections
|
||
await agent.clean()
|
||
|
||
|
||
if __name__ == "__main__":
|
||
asyncio.run(main())
|
||
```
|
||
|
||
---
|
||
|
||
## β‘ Execution Profiles: Flash vs. Pro
|
||
|
||
| Feature | ARTEMIS Flash (`--profile flash`) | ARTEMIS Pro (`--profile default`) |
|
||
| :--- | :--- | :--- |
|
||
| **Model Loop** | Single reactive agent (Observe-Think-Act) | Multi-node LangGraph orchestration |
|
||
| **Best For** | Short, deterministic tasks (< 35 steps) | Deep, complex, multi-stage workflows |
|
||
| **Step Latency** | ~3β5 seconds / step | ~15β30 seconds / turn (with planning & validation) |
|
||
| **Planning** | Direct goal execution | Hierarchical multi-step plan decomposition |
|
||
| **Diagnostics** | Basic error reporting | Deep diagnostics, log analysis & self-healing |
|
||
|
||
---
|
||
|
||
## π Model Context Protocol (MCP) Integration
|
||
|
||
ARTEMIS includes built-in MCP servers and tools to allow AI IDEs (such as Claude Desktop, Cursor, and Gemini Jetski) to control Android devices directly:
|
||
|
||
| Tool Name | Description |
|
||
| :--- | :--- |
|
||
| `mobile_run_task` | Launches an autonomous background automation task on the connected device. |
|
||
| `mobile_manage_task` | Inspects status, terminates tasks, or injects real-time steering instructions. |
|
||
| `mobile_get_device_state` | Retrieves real-time screenshots or simplified accessibility UI trees. |
|
||
| `mobile_inspect_trace` | Inspects step-by-step screenshots, visual action overlays, and execution logs. |
|
||
|
||
---
|
||
|
||
## βοΈ Configuration Guide
|
||
|
||
All model configurations, thinking budgets, agent capabilities, and tool filtering are consolidated into a single self-explanatory configuration file: [`config/artemis.jsonc`](config/artemis.jsonc).
|
||
|
||
```jsonc
|
||
{
|
||
// 1. Global Default Model (Applied across all sub-agents unless overridden)
|
||
"default": {
|
||
"provider": "google",
|
||
"model": "gemini-3.6-flash",
|
||
"thinking_level": "medium",
|
||
"fallback": {
|
||
"provider": "google",
|
||
"model": "gemini-3.5-flash"
|
||
}
|
||
},
|
||
|
||
// 2. Built-in Presets
|
||
"presets": {
|
||
"gemini-flagship": { "provider": "google", "model": "gemini-3.6-flash" },
|
||
"openai-gpt4o": { "provider": "openai", "model": "gpt-4o" },
|
||
"cost-saving": { "provider": "google", "model": "gemini-3.5-flash-lite" },
|
||
"local-ollama": { "provider": "openai", "model": "llama3.2-vision" }
|
||
},
|
||
|
||
// 3. Agent & Sub-Agent Node Customizations (Optional overrides)
|
||
"nodes": {
|
||
// π§ Planner: High-level goal decomposition and strategic step planning
|
||
"planner": { "thinking_level": "medium" },
|
||
|
||
// π― Operator: Screen perception, element interaction, and direct execution
|
||
"operator": { "thinking_level": "medium", "include_thoughts": true },
|
||
|
||
// π‘οΈ Validator & Failure Analyzer: Self-healing and auto-recovery
|
||
"validator_failure_analyzer": { "thinking_level": "medium" }
|
||
},
|
||
|
||
// 4. Agent Capabilities & Tool Filtering
|
||
"agent": {
|
||
"explorer_versions": { "operator": "flash", "validator": "flash" },
|
||
"blacklisted_tools": {
|
||
"explorer": ["ask_image_processor", "get_ocr_list", "inspect_region"]
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
> [!TIP]
|
||
> **Zero-Friction Global Change**: To switch the entire platform from Gemini to GPT-4o or Claude, simply edit the `"default"` block once in `config/artemis.jsonc`. All 15 sub-agents automatically inherit the new model!
|
||
|
||
### Using Non-Google LLMs
|
||
|
||
ARTEMIS supports multi-provider LLM backends via standard LangChain integrations (Google Gemini, OpenAI, OpenRouter, xAI / Grok, or Google Vertex AI).
|
||
|
||
#### Supported Providers & API Key Setup
|
||
|
||
| Provider | Provider Key | Environment Variable | Base URL Override | Example Models |
|
||
| :--- | :--- | :--- | :--- | :--- |
|
||
| **Google Gemini** | `google` *(default)* | `GEMINI_API_KEY` | N/A | `gemini-3.6-flash`, `gemini-3.5-flash` |
|
||
| **Google Vision OCR** | `ocr` | `OCR_API_KEY` | N/A | Google Cloud Vision Text Detection |
|
||
| **Google Vertex AI** | `vertexai` | Google ADC (`gcloud auth application-default login`) | N/A | `gemini-3.6-flash` |
|
||
| **OpenAI** | `openai` | `OPENAI_API_KEY` | `OPENAI_BASE_URL` | `gpt-4o`, `gpt-4o-mini`, `o3` |
|
||
| **OpenRouter** | `openrouter` | `OPEN_ROUTER_API_KEY` | N/A | `anthropic/claude-3.5-sonnet`, `meta-llama/llama-3.3-70b-instruct` |
|
||
| **xAI (Grok)** | `xai` | `XAI_API_KEY` | N/A | `grok-2-vision-1212`, `grok-beta` |
|
||
|
||
> [!NOTE]
|
||
> ARTEMIS uses multimodal visual grounding (screenshots) for UI navigation. When assigning non-Google models to vision-dependent agents (such as `operator`), ensure the selected model supports image/vision inputs.
|
||
|
||
#### Switching Provider in `config/artemis.jsonc`
|
||
|
||
To use OpenAI or Claude globally, simply change the `default` section in [`config/artemis.jsonc`](config/artemis.jsonc):
|
||
|
||
```jsonc
|
||
{
|
||
"default": {
|
||
"provider": "openai",
|
||
"model": "gpt-4o",
|
||
"fallback": {
|
||
"provider": "openai",
|
||
"model": "gpt-4o-mini"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
#### Custom / Local OpenAI-Compatible Endpoints (Ollama, vLLM, LocalAI)
|
||
|
||
To connect ARTEMIS to local or self-hosted LLM endpoints (e.g., Ollama or vLLM), set `OPENAI_BASE_URL` in `.env` and specify `openai` as the provider in your configuration:
|
||
|
||
```bash
|
||
# Route OpenAI provider calls to local Ollama / vLLM endpoint
|
||
OPENAI_API_KEY=ollama # dummy key if required by client
|
||
OPENAI_BASE_URL=http://localhost:11434/v1
|
||
```
|
||
|
||
---
|
||
|
||
## π Trace Inspection & Observability
|
||
|
||
Every task execution can record rich execution artifacts stored in `./traces/<trace_id>/`:
|
||
- **`notes/`**: High-level planner notes, step summaries, and generated reports (`output.md`).
|
||
- **`screenshots/`**:
|
||
- `before_screenshot.jpg`: Initial screen observed by the agent.
|
||
- `action_overlay_screenshot.jpg`: Screen with visual tap markers (red circles) and swipe vectors (red arrows).
|
||
- **`logs/`**: Raw framework, operator, and failure analyzer diagnostic logs.
|
||
|
||
---
|
||
|
||
## π Development & Testing
|
||
|
||
ARTEMIS provides standard `make` targets for development:
|
||
|
||
```bash
|
||
# Setup environment and pre-commit hooks
|
||
make setup
|
||
|
||
# Run test suite
|
||
make test
|
||
|
||
# Run code formatters (ruff)
|
||
make format
|
||
|
||
# Run linter checks
|
||
make lint
|
||
|
||
# Run static type checker (pyright)
|
||
make typecheck
|
||
```
|
||
|
||
---
|
||
|
||
## π License
|
||
|
||
This project is licensed under the [Apache License 2.0](LICENSE).
|