What would you like to do on your phone?

@if (activeTab() === 'diagnostics') {
@if (isEnvironmentReady()) { check } @else { 1 }

System & Environment

Core tools, Android debug bridge, and video recording runtime

@if (hasReadinessReport() && !isEnvironmentReady()) {
bolt
Automated Dependency Setup
Run in terminal to install ADB, FFmpeg, scrcpy, and project dependencies:
{{ oneClickSetupCmd() }}
}
terminal
Python Runtime
{{ pythonProbe()?.summary || 'Checking…' }}
@if (pythonProbe()?.status === 'fail') {
$ uv python install 3.12
}
construction
Android Platform-Tools
{{ !adbProbe() ? 'Checking…' : (adbProbe()?.metadata?.['installed'] ? 'ADB Installed' : 'ADB Missing') }}
@if (adbProbe()?.status === 'fail') {
$ {{ adbInstallCmd() }}
}
tune
System Configuration
{{ configProbe()?.summary || 'Config Valid' }}
@if (configProbe()?.status === 'fail') {
$ artemis init
}
videocam
Video Toolchain
{{ toolchainProbe()?.summary || 'FFmpeg & scrcpy' }}
@if (toolchainProbe()?.status !== 'pass') {
$ {{ toolchainInstallCmd() }}
}
@if (isCredentialsReady()) { check } @else { 2 }

AI Model Setup

Google Gemini or custom LLM providers (OpenAI, Claude, Ollama)

Google Gemini Recommended

Fast multimodal reasoning with free API key from Google AI Studio.

tune
Custom Configuration

Define models in config/artemis.jsonc & keys in .env (OpenAI, Claude, Ollama).

@if (modelSetupMode() === 'gemini') {
key @if (geminiKeyInput()) { }
@if (geminiSaveMessage()) { } @if (geminiSaveError()) { }
document_scanner
Optional: Google Cloud Vision OCR
@if (isOcrConfigured()) { } {{ showOcrConfig() ? 'expand_less' : 'expand_more' }}
@if (showOcrConfig()) {

Provides screen text coordinate grounding to improve element detection and interaction accuracy on text-heavy apps.

key Cloud Vision API Key:
key @if (ocrKeyInput()) { }
@if (ocrSaveMessage()) { } @if (ocrSaveError()) { }
}
} @else {
tune
Active Model Configuration Defined in {{ modelConfigEnv()?.config_path || 'config/artemis.jsonc' }}
Default Model
{{ modelConfigEnv()?.default_model?.provider || 'google' }} / {{ modelConfigEnv()?.default_model?.model || 'gemini-3.8-flash' }}
@if (modelConfigEnv()?.default_model?.fallback) {
Fallback Model
{{ modelConfigEnv()?.default_model?.fallback?.provider }}/{{ modelConfigEnv()?.default_model?.fallback?.model }}
}
@if (showFullConfigFile()) {
{{ modelConfigEnv()?.config_content }}
}
vpn_key
Environment Variables & API Keys Loaded from {{ modelConfigEnv()?.env_path || '.env' }}
@for (envItem of modelConfigEnv()?.env_vars || []; track envItem.name) {
{{ envItem.name }}
@if (envItem.is_set) { check_circle Configured @if (envItem.preview) { ({{ envItem.preview }}) } } @else { radio_button_unchecked Not Set }
}
}
@if (isDeviceReady()) { check } @else { 3 }

Android Device & Emulator Connection

Local emulator, attached phone, wireless device, or another ADB server

@if (isDeviceReady()) {
phone_android
{{ activeDevice()?.model || activeDevice()?.serial }}
@if (activeDevice()?.is_emulator) { Virtual Device · } {{ activeDevice()?.serial }} @if (activeDevice()?.screen_resolution) { · {{ activeDevice()?.screen_resolution }} } @if (activeDevice()?.android_version) { · Android {{ activeDevice()?.android_version }} } @if (isRemoteAdbServer()) { · Remote via {{ adbServerStatus()?.endpoint?.host }}:{{ adbServerStatus()?.endpoint?.port }} }
Connected
@if (connectedDevices().length > 1) {
Select Active Device:
@for (dev of connectedDevices(); track dev.serial) { }
}
} @if (isEmulatorLaunching() || (!isDeviceReady() && adbProbe()?.summary === 'Device Booting')) {
sync

Launching Android Emulator: {{ emulatorLaunchState()?.avd_name || activeDevice()?.serial || 'Virtual Device' }}

{{ emulatorLaunchState()?.status === 'booting' ? 'OS Booting' : 'Starting' }}

{{ emulatorLaunchState()?.stage_message || 'Initializing Android Virtual Device...' }}

@if (emulatorLaunchState()?.progress_percent! >= 35) { check } @else { }
1. Process Start
@if (emulatorLaunchState()?.progress_percent! >= 65) { check } @else if (emulatorLaunchState()?.status === 'waiting_for_adb') { } @else { 2 }
2. ADB Handshake
@if (emulatorLaunchState()?.status === 'ready') { check } @else if (emulatorLaunchState()?.status === 'booting' || adbProbe()?.summary === 'Device Booting') { } @else { 3 }
3. Android OS Boot
check_circle
4. Ready
{{ emulatorLaunchState()?.progress_percent || 25 }}% Complete timer Elapsed: {{ emulatorLaunchState()?.elapsed_seconds || 0 }}s
info Android virtualization cold boot usually takes 20-45 seconds. Live progress is actively tracked above—please do not click launch repeatedly.
@if (showLaunchLogs()) {
terminal Emulator Console Stream (stdout / stderr)
@if (emulatorLaunchState()?.logs?.length) {@for (log of emulatorLaunchState()?.logs; track log) {
{{ log }}
}} @else {
Waiting for process output...
}
}
} @if (!isDeviceReady() && !isEmulatorLaunching() && emulatorLaunchState()?.status === 'failed') {
error

Emulator Launch Failed

{{ emulatorLaunchState()?.error || 'The Android emulator process failed to start or crashed during initialization.' }}

@if (emulatorLaunchState()?.logs?.length) {
Process Output / Failure Logs:
@for (log of emulatorLaunchState()?.logs; track log) {
{{ log }}
}
}
@if (emulatorLaunchState()?.avd_name) { }
} @if (showConnectionMethods() || (!isDeviceReady() && !isEmulatorLaunching() && adbProbe()?.summary !== 'Device Booting' && adbProbe()?.summary !== 'Device Unauthorized' && adbProbe()?.summary !== 'Device Locked' && adbProbe()?.summary !== 'Lock State Unknown' && adbProbe()?.status !== 'fail' && emulatorLaunchState()?.status !== 'failed')) {
@if (activeAdbGuideTab() !== 'remote' && isRemoteAdbServer()) {
hub Artemis is currently using {{ adbServerStatus()?.endpoint?.host }}:{{ adbServerStatus()?.endpoint?.port }}. Switch to local ADB before using a local emulator, USB cable, or Wireless ADB.
} @if (activeAdbGuideTab() === 'emulator') {
@if (installedAvds().length > 0) {
devices Installed Virtual Devices (AVD) {{ installedAvds().length }} Available
@for (avd of installedAvds(); track avd) {
smartphone
{{ avd }} Virtual Device
}
} @else {
@if (emulatorSetupMode() === 'studio') {
1 download
Install Android Studio
Download for {{ effectiveOs() === 'darwin' ? 'macOS' : (effectiveOs() === 'windows' ? 'Windows' : 'Linux') }} from developer.android.com/studio and install.
2 developer_mode
Open Device Manager
On Studio welcome screen, open More Actions > Virtual Device Manager (or Tools > Device Manager).
3 add_circle
Create Virtual Device
Click Create Device, choose Pixel 8, select Android 14 (API 34), and click Finish.
4 play_arrow
Launch Emulator
Click ▶ Play in Device Manager. Artemis will detect and connect to it automatically!
} @if (emulatorSetupMode() === 'cli') {
1
{{ emuHypervisorTitle() }}

{{ emuHypervisorDesc() }}

{{ effectiveOs() === 'windows' ? 'PS>' : '$' }} {{ emuHypervisorCmd() }}
2
Download Emulator & System Image (API 34)

Install Android 14 Google APIs system image using SDK Manager:

{{ effectiveOs() === 'windows' ? 'PS>' : '$' }} {{ emuSdkInstallCmd() }}
3
Create Virtual Device (Pixel 8 AVD)

Initialize a new Android Virtual Device named Pixel_8_API_34:

{{ effectiveOs() === 'windows' ? 'PS>' : '$' }} {{ emuCreateAvdCmd() }}
4
Start the Emulator

Launch the virtual device (or add -no-window for headless execution):

{{ effectiveOs() === 'windows' ? 'PS>' : '$' }} emulator -avd Pixel_8_API_34 -no-boot-anim
}
}
} @if (activeAdbGuideTab() === 'usb') {
cable Connect your Android phone via USB cable and enable USB Debugging:
1 usb
Connect USB Cable
Plug your Android phone into this computer with a data cable.
2 touch_app
Enable Developer Options
In phone Settings > About Phone, tap Build Number 7 times.
3 toggle_on
Enable USB Debugging
In Settings > Developer Options, turn USB Debugging ON.
4 verified_user
Authorize Computer
Check "Always allow" and tap Allow on the phone prompt.
} @if (activeAdbGuideTab() === 'wifi') {
wifi Connect your phone and computer on the same Wi-Fi network:
router
tag
@if (wifiConnectMessage()) {
check_circle {{ wifiConnectMessage() }}
} @if (wifiConnectError()) {
error {{ wifiConnectError() }}
}
help_outline
Find IP & port in phone Settings > Developer Options > Wireless Debugging.
} @if (activeAdbGuideTab() === 'remote') {
hub Enter the host and port of an ADB server endpoint that this computer can access, so Artemis can discover and control a phone physically connected to another computer.
dns
tag
@if (remoteAdbMessage()) {
check_circle {{ remoteAdbMessage() }}
} @if (remoteAdbError()) { } @if (remoteAdbDevices().length > 0) {
@for (device of remoteAdbDevices(); track device.serial) {
phone_android
{{ device.model || device.serial }} {{ device.serial }}
{{ device.state === 'device' ? 'Ready' : device.state }}
}
} @if (remoteAdbProbeResult()?.success && !isProbedRemoteAdbActive()) { }

Artemis sends all ADB commands to this server instead of the default local server. Any phone visible to that server becomes available to Artemis.

}
} @if (adbProbe()?.status === 'warn' && (adbProbe()?.summary === 'Device Locked' || adbProbe()?.summary === 'Lock State Unknown')) {
lock
{{ adbProbe()?.summary === 'Device Locked' ? 'Device Is Locked' : 'Unable to Verify Lock State' }}
{{ adbProbe()?.description }}
@if (connectedDevices().length > 1) {
Select Active Device:
@for (dev of connectedDevices(); track dev.serial) { }
}
} @if (adbProbe()?.status === 'warn' && adbProbe()?.summary === 'Device Unauthorized') {
screen_lock_portrait
USB Debugging Authorization Pending
Your Android device was detected, but it requires authorization. Please unlock your phone screen and tap "Allow USB Debugging".
} @if (adbProbe()?.status === 'fail') {
error
Android Platform Tools (adb) not found. Please install ADB on your operating system:
Linux (Ubuntu / Debian) @if (effectiveOs() === 'linux') { Detected }
$ sudo apt-get install -y adb
macOS (Homebrew) @if (effectiveOs() === 'darwin') { Detected }
$ brew install android-platform-tools
Windows (WinGet) @if (effectiveOs() === 'windows') { Detected }
> winget install Google.PlatformTools
}
@if (isReady()) { }
} @if (activeTab() === 'launcher') {
@if (hasReadinessReport() && !isReady()) {
{{ adbProbe()?.summary === 'Device Locked' ? 'lock' : 'warning' }} {{ adbProbe()?.summary === 'Device Locked' ? 'Android device is locked. Unlock it and enter the home screen before running a task.' : 'Prerequisites incomplete: runtime, credentials, or Android device is not ready. Click here to open Setup Guide.' }} arrow_forward
}
@if (showIntentSuggestion()) {
auto_awesome Continuous monitoring or complex task detected. Recommended: Pro Mode
}
{{ selectedProfile() === 'flash' ? 'bolt' : 'psychology' }}
@if (selectedProfile() === 'flash') {

Flash · Token-efficient, rapid 3–5s/step decisions straight from the live screen. Best for everyday tasks with a clear path, however long they run. (No plan, no result check, no ADB commands)

} @else {

Pro · Plans first, checks its results and recovers when a tap is blocked. Handles 100+ step workflows and live phone monitoring (15–40s / step).

}
@if (errorMessage()) {
error {{ errorMessage() }}
}
@if (taskGoal().length > 0) { {{ taskGoal().length }} chars }
@if (selectedProfile() === 'pro') {
Expected Output (Optional)
@if (expectedOutput().trim()) { }
Pro settings @if (!isTuningDefault()) { }
@for (slider of tuningSliders(); track slider.kind) {
{{ slider.name }} {{ slider.level.label }}
@if (slider.index === slider.ladder.length - 1) { } @if (activeTuningTip() === slider.kind) { }
}
}
@for (item of filteredSuggestions(); track item.id) {
@for (app of item.apps; track app.name) {
{{ app.icon }}
} {{ getAppNamesDisplay(item.apps) }}
{{ item.profile === 'pro' ? 'Pro' : 'Flash' }}

{{ item.title }}

{{ item.description }}

}
}