Skip to content

📥 Installation

Get from zero to running automation in 10 minutes. No API keys required for core features.

RequirementVersionHow to Check
Python3.10+python3 --version
ADBAny recentadb --version
Android phone5.0+ (API 21+)Physical device or emulator
USB cableData-capableNot a charge-only cable

Ubuntu/Debian:

Terminal window
sudo apt install android-tools-adb

macOS:

Terminal window
brew install android-platform-tools

Windows:

Download from Android SDK Platform-Tools, extract, and add the folder to your PATH.

Verify ADB is installed:

Terminal window
adb --version
# Android Debug Bridge version 1.0.41
Terminal window
git clone https://github.com/ghost-in-the-droid/android-agent.git
cd ghost-in-the-droid
# Install in development mode (recommended)
pip install -e .
# Or install dependencies manually
pip install flask requests pyyaml openai

The -e flag installs in editable mode so changes to the source take effect immediately.

Create a .env file by copying the example:

Terminal window
cp .env.example .env

No API keys are needed for core automation. The following work out of the box:

  • ADB device control (tap, swipe, type, screenshots)
  • Skill system (load, run, create skills)
  • Macro recording and replay
  • Dashboard (all 9 tabs)
  • Job scheduler
  • App Explorer

Add these to .env only if you need AI-powered features:

Terminal window
# LLM features: Skill Creator, Content Agent (pick one or more)
OPENAI_API_KEY=your_key_here
ANTHROPIC_API_KEY=your_key_here
OPENROUTER_API_KEY=your_key_here

The Skill Creator supports 4 LLM backends. Configure whichever you want to use:

BackendConfigDefault Model
OpenRouterOPENROUTER_API_KEY env varanthropic/claude-sonnet-4
Claude APIANTHROPIC_API_KEY env varclaude-sonnet-4-20250514
OllamaAuto-detect at localhost:11434llama3
Claude Codeclaude CLI installedsonnet
Terminal window
# Start the server
python3 run.py

Open http://localhost:5055 in your browser. You should see the dashboard with 9 tabs.

Terminal window
# Quick Python verification
python3 -c "
from gitd.bots.common.adb import Device
from gitd.skills.tiktok import load
s = load()
print(f'Skill: {s.name} | Actions: {len(s.list_actions())} | Workflows: {len(s.list_workflows())}')
"
# Expected: Skill: tiktok | Actions: 13 | Workflows: 9

If you have multiple phones connected, set the default device:

Terminal window
# List connected devices
adb devices
# Set default via environment variable
export DEVICE=YOUR_DEVICE_SERIAL
# Or pass per-command
DEVICE=YOUR_DEVICE_SERIAL_2 python3 -m pytest tests/ -v
android-agent/
run.py # Entry point (port 5055)
pyproject.toml # Package config
.env # Your API keys (gitignored)
gitd/ # All application code
server.py # Flask API (113+ routes)
db.py # SQLite ORM (20+ tables)
bots/common/adb.py # Device class
skills/ # Skill packages
agent/ # LLM content planner
static/dashboard.html # SPA dashboard
data/ # Runtime data
gitd.db # SQLite database
tests/ # Pytest suite (19 files)
config/ # Credentials (gitignored)