Android-first AI agent framework for automation, testing, and debugging.
AgentDroid has 11 tools with basic schemas and descriptions, but significant quality gaps. Most tools lack parameter descriptions (e.g., 'serial' param in screenshot, dump_ui, tap, launch_app has no description). Tool descriptions are present but generic (avg ~50 chars, well below the 194-char baseline). No output schemas documented. Error handling is minimal, tools return ToolResult with success/error but no recovery guidance. The 'record_skill' and 'replay_skill' tools conflate recording and playback concerns. Missing parameter validation rules, enums for constrained inputs, and actionable error messages. No tool annotations (readOnlyHint/destructiveHint). Schemas are minimal JSON objects with few constraints.
Discover deep links/intent filters for an app package
Dump UI hierarchy (XML) from an Android device
Enable or disable visual layout bounds (Show Layout Bounds) on the device
Launch an app by package name
List connected Android devices
Mirror the device screen using scrcpy
Start recording manual actions on the device to create a new skill.
Parameter descriptions missing or minimal. 'serial' parameter appears in 8 tools with no description; 'x', 'y' in tap lack context; 'url' in teleport undescribed. LLMs cannot infer parameter meaning from names alone.
No output schemas documented. Tools return ToolResult(success, output, error) but LLMs have no visibility into what fields to expect. Breaks downstream tool chaining and forces parsing unstructured output.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2026-07-28+ | v2 |
Replay a previously recorded skill
Capture a screenshot from an Android device
Tap at specific coordinates on the device
Jump to a specific screen using a deep link URL
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). Agents cannot distinguish safe read-only tools from destructive ones. 'tap', 'launch_app', 'inspect_layout' are write operations but unmarked.
Error handling lacks recovery guidance. ToolResult returns raw exception strings (e.g., 'str(e)') with no actionable next steps. LLMs cannot self-correct or retry intelligently.
Tool descriptions too short (avg ~45 chars vs 194-char baseline). 'Tap at specific coordinates on the device' lacks context on when to use tap vs other interaction tools, what coordinates mean (screen pixels?), or prerequisites.