hermes-android

Android device control for hermes-agent — bridge app + Python toolset

★ 51 Python Updated 4/11/2026
View on GitHub →

hermes-android

Give your AI agent hands. Remote Android device control for hermes-agent.

How it works

Phone (home WiFi)  ──WebSocket──>  Hermes Server (cloud)  <──HTTP──  AI Agent
                                   relay on port 8766

The phone connects out to your Hermes server — works behind any NAT, no port forwarding, no VPN, no USB. Just a 6-character pairing code.

Repository Structure

This repo contains two components:

Component Path Language Purpose
Android bridge app hermes-android-bridge/ Kotlin Runs on the phone. Connects to server via WebSocket, executes commands via AccessibilityService
Python toolset tools/, tests/ Python Runs on the server. 36 android_* tools + WebSocket relay. Also lives in hermes-agent as the production copy

Note: The Python code exists here for standalone development and testing (pip install -e ., pytest). The production copy is in the hermes-agent repo. The Android app does not use or depend on the Python files.

Install as hermes-agent plugin (v0.3.0+)

curl -sSL https://raw.githubusercontent.com/raulvidis/hermes-android/main/install.sh | bash

Or manually:

mkdir -p ~/.hermes/plugins
cp -r hermes-android-plugin ~/.hermes/plugins/hermes-android

Restart hermes — run /plugins to verify. Should show: ✓ hermes-android v0.3.0 (36 tools)

Quick Start

1. Install the bridge app on your phone

Build with Android Studio or from command line:

cd hermes-android-bridge
./gradlew assembleDebug
adb install app/build/outputs/apk/debug/app-debug.apk

2. Grant permissions on the phone

3. Connect to your Hermes server

Tell hermes (via Telegram, Discord, etc):

Connect to my phone, code is <CODE>

Where <CODE> is the 6-character pairing code shown in the app.

Hermes will reply with the server address. Enter it in the app and tap Connect.

4. Done

The agent can now control your phone. Try: "open Instagram", "take a screenshot", "what apps do I have?"

Tools (36)

Tool Description
android_setup Start relay and configure pairing code
android_ping Check if phone is connected
android_read_screen Get accessibility tree of current screen
android_screenshot Capture screenshot and send to user
android_tap Tap by coordinates or node ID
android_tap_text Tap element by visible text
android_type Type into focused input field
android_swipe Swipe up/down/left/right
android_scroll Scroll screen or element
android_open_app Launch app by package name
android_press_key Press back, home, recents, etc.
android_wait Wait for element to appear
android_get_apps List installed apps
android_current_app Get foreground app info
android_long_press Long press by coordinates or node ID
android_drag Drag from one point to another
android_pinch Pinch zoom in/out at coordinates
android_find_nodes Search accessibility nodes by text/class/clickable
android_describe_node Get detailed info about a specific node
android_screen_hash Get hash of current screen for change detection
android_diff_screen Compare current screen against a previous hash
android_location Get phone GPS location
android_search_contacts Search contacts by name
android_send_sms Send SMS to a phone number
android_call Make a phone call or open dialer
android_media Control media playback (play, pause, next, previous)
android_send_intent Send an Android intent
android_broadcast Send a broadcast intent
android_clipboard_read Read clipboard contents
android_clipboard_write Write text to clipboard
android_notifications Read current notifications
android_events Read recent accessibility events
android_event_stream Stream accessibility events in real-time
android_screen_record Record screen video for a duration
android_read_widgets Read home screen widgets
android_speak Text-to-speech output
android_speak_stop Stop text-to-speech

Permissions

Permission How to Grant Required For
Accessibility Service App button → Settings > Accessibility All tools (core requirement)
System Alert Window (Overlay) App button → Settings > Draw over apps Status overlay display
Screen Recording (MediaProjection) App button → approve system dialog android_screen_record
Location Settings > Apps > Permissions > Location android_location
Read Contacts Settings > Apps > Permissions > Contacts android_search_contacts
Send SMS Settings > Apps > Permissions > SMS android_send_sms
Call Phone Settings > Apps > Permissions > Phone android_call (auto-dial)
Notification Listener Settings > Special app access > Notification access android_notifications, android_events

Architecture

Android app (Kotlin):

Server (Python):

Security

See SECURITY.md for details. Key points:

Development

# Python tests
pip install -e ".[dev]"
python -m pytest tests/

# Android build
cd hermes-android-bridge
./gradlew assembleDebug

Roadmap

This is a working prototype. The vision: give Hermes its own phone — a fully autonomous mobile presence.

v0.2 — Polish & Reliability

v0.3 — Richer Phone Interaction

v0.4 — Multi-Device & Automation

v0.5 — Hermes Gets a Voice

v0.6 — On-Device Intelligence

Future Ideas

Links