Skip to main content
This guide will help you get Droidrun installed and running quickly, controlling your Android device through natural language in minutes.

Prerequisites

Before installing Droidrun, ensure you have:
  1. Python 3.11+ installed on your system
  2. Android Debug Bridge (adb) installed and configured
  3. Android device with:

Installation

Droidrun is installed using uv, a fast Python package installer and resolver. Install uv (if not already installed):
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
Choose your installation method: For CLI usage only:
uv tool install 'droidrun[google,anthropic,openai,deepseek,ollama,openrouter]'
For CLI + Python code integration:
uv pip install 'droidrun[google,anthropic,openai,deepseek,ollama,openrouter]'
If you only need specific providers, you can install just those. For example, uv tool install 'droidrun[google,openai]' installs only Google Gemini and OpenAI support.

Setup the Portal APK

Droidrun requires the Portal app to be installed on your Android device for device control. The Portal app provides accessibility services that expose the UI accessibility tree, enabling the agent to see and interact with UI elements.
droidrun setup
This command automatically:
  1. Downloads the latest Portal APK
  2. Installs it on your connected device
  3. Enables the accessibility service

Test Connection

Verify that Droidrun can communicate with your device:
droidrun ping
If successful, you’ll see:
✓ Portal is running
✓ Accessibility service enabled
✓ Device ready

Configure Your LLM

Droidrun uses a configuration-driven approach. On first run, Droidrun creates a config.yaml file with default settings. You’ll need to set your API key for your chosen LLM provider. Set your API key:
# For Google Gemini (default)
export GOOGLE_API_KEY=your-api-key-here

# For OpenAI
export OPENAI_API_KEY=your-api-key-here

# For Anthropic Claude
export ANTHROPIC_API_KEY=your-api-key-here

# For DeepSeek
export DEEPSEEK_API_KEY=your-api-key-here

Run Your First Command via CLI

Now you’re ready to control your device with natural language:
# Using default configuration (Google Gemini)
droidrun run "Open the settings app and tell me the Android version"

# Override provider and model
droidrun run "Check the battery level" --provider OpenAI --model gpt-4o

# Enable vision mode (sends screenshots to LLM)
droidrun run "What app is currently open?" --vision

# Enable reasoning mode (uses Manager-Executor workflow for complex tasks)
droidrun run "Find a contact named John and send him an email" --reasoning
Common CLI flags:
  • --provider - LLM provider (GoogleGenAI, OpenAI, Anthropic, etc.)
  • --model - Model name (models/gemini-2.5-pro, gpt-4o, etc.)
  • --vision - Enable screenshot processing
  • --reasoning - Enable multi-agent planning mode
  • --steps N - Maximum execution steps (default: 15)
  • --debug - Enable detailed logging

Create a Simple Agent via Script

For complex automation or integration into your Python projects, create a script:
import asyncio
from droidrun import DroidAgent
from droidrun.config_manager.config_manager import DroidrunConfig

async def main():
    # Use default configuration with built-in LLM profiles
    config = DroidrunConfig()

    # Create agent
    # LLMs are automatically loaded from config.llm_profiles
    agent = DroidAgent(
        goal="Open Settings and check battery level",
        config=config,
    )

    # Run agent
    result = await agent.run()

    # Check results (result is a ResultEvent object)
    print(f"Success: {result.success}")
    print(f"Reason: {result.reason}")
    print(f"Steps: {result.steps}")

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

Next Steps

Now that you’ve got Droidrun running, explore these topics:
I