Changelog
[v0.0.13] - 2026-02-13
Other
- Add CI checks for host control Docker scripts across macOS/Linux/Windows (#981) (ci, env)
- Publish to official MCP registry (#26) (release engineering)
- Publish AutoMobile on Docker Hub (#25) (release engineering)
[v0.0.12] - 2026-02-11
Other
[v0.0.11] - 2026-02-11
Added
- IDE plugin: always use active (white) toolbar icon (#1214) (intellij plugin)
- Remove feature flag for video test recording (#1203) (video)
- IDE plugin: show ‘Device Disconnected’ when observed device becomes unavailable (#1202) (intellij plugin)
- IDE Plugin: Add full-window FileEditor mode for dashboard (#1167) (intellij plugin)
- feat: iOS version matrix testing in CI (#836) (ios, ci, testing)
- Support custom accessibility rules (#104) (devxp, a11y)
Changed
- refactor: ViewHierarchy has near-clone findFocusedElement / findAccessibilityFocusedElement (#1191)
- refactor: UIStateExtractor reimplements ElementParser traversal and property extraction (#1190)
- refactor: BugReport.traverseNode() reimplements ElementParser inline (#1189)
- refactor: DebugSearch reimplements ElementParser, TextMatcher, and ElementFinder inline (#1188)
- chore: upgrade GitHub Actions upload-artifact and download-artifact to v4.6+ (#1158) (ci)
- Dead Code Detection: Threshold Exceeded (#1143) (automated, dead-code)
Fixed
- IDE plugin: device disconnected notification is too aggressive (#1244) (intellij plugin)
- iOS: toggle switch tap does not trigger view hierarchy or screenshot update (#1227)
- bug: IDE plugin settings page fails to load feature flags with MCP error -32603 (#1213) (intellij plugin)
- Bug: IDE plugin crashes with IllegalArgumentException when opening test plan YAML file (#1205) (intellij plugin)
- Bug: failing JUnit Runner test does not produce a failing JUnit test result (#1204) (testing)
- iOS: Unable to observe system permission dialogs in view hierarchy (#1147) (ios)
Other
- CI: add Xcode 26 to iOS build and test matrix (#1207) (ios, ci)
- CI: auto-retry iOS jobs when no simulator runtimes are installed on macOS runner (#1206) (ios, ci)
- CI: add macOS job for iOS Accessibility Bridge build + XCTest runner tests (#372) (ios, ci)
- Publish AutoMobile Android SDK on Maven Central (#122) (android, ci, release engineering)
- Publish AutoMobile JUnitRunner Library (#121) (android, ci, release engineering, testing)
[v0.0.10] - 2026-02-06
Added
- Support custom accessibility rules (#104) (devxp, a11y)
Other
- chore: upgrade GitHub Actions upload-artifact and download-artifact to v4.6+ (#1158)
- Publish AutoMobile Android SDK on Maven Central (#122) (android, ci, release engineering)
- Publish AutoMobile JUnitRunner Library (#121) (android, ci, release engineering, testing)
[v0.0.9] - 2026-02-04
Added
- Test Runners: Cascade MCP tool failures to JUnitRunner/XCTestRunner via executePlan response (#1078) (android, ios, testing)
- IDE Plugin: Add Cancel button to Record Test entry screen (#1075) (intellij plugin)
- IDE Plugin: Add ‘Refine’ button to simplify exported test plans with AI (#1074) (intellij plugin, ai)
- IDE Plugin: Merge Exploratory Test into Record Test UX (#1072) (intellij plugin)
- IDE Plugin: Expose startTestRecording MCP tool (#1071) (intellij plugin)
- IDE Plugin: Expose exportPlan MCP tool for Finish Recording (#1070) (intellij plugin)
- [IDE Plugin] Wire up StreamingFailuresDataSource for real-time failure updates (#1066) (intellij plugin)
- [SDK] Add handled exceptions API for non-fatal error reporting (#1065) (android)
- [IDE Plugin] Implement RealStorageDataSource for key-value storage inspection (#1064) (intellij plugin)
- [MCP Server] Add storage inspection tools and Unix socket push channel for key-value data (#1063)
- [AccessibilityService] Add WebSocket message types for storage data and real-time sync (#1062) (android)
- [SDK] Add SharedPreferences/DataStore reading API for key-value storage inspection (#1061) (android)
- Live performance data for currently selected app (#1060) (performance, intellij plugin)
- Navigation Graph should only accept named nodes (#1059)
- Navigation Graph Fog Mode (#1058)
- Research: iOS real-time screen streaming options (#1034) (ios, research)
- Android: Implement video server JAR (VirtualDisplay + MediaCodec) (#1031) (android)
- Research: Android real-time screen streaming architecture (MediaProjection/MediaCodec) (#1030) (research)
- Feature: Android SharedPreferences Inspection and Management (#1021) (android, devxp, testing)
- Feature: Crash and ANR Monitoring via ADB, simctl, and AccessibilityService (#1020) (android, ios, devxp, testing)
- Feature: Database Inspection and Management for Android AutoMobile SDK (#1019) (android, devxp, testing)
- feat(mcp): add setUI tool for declarative form field population (#986) (android, ai)
- IDE plugin: Compose charting for performance timelines (#306) (android, intellij plugin)
- IDE Plugin: Display recent performance debug data (#283) (android, performance, intellij plugin)
- IDE plugin: MCP resource viewer UI (#255) (intellij plugin)
- IDE plugin: add source mapping support (#247) (intellij plugin)
Changed
- refactor: move src/features/observe/accessibility/ to src/features/observe/android/ (#1123) (android)
- refactor: consolidate screenshot utilities (#1121)
- refactor: decompose SwipeOn - extract overlay detection and scroll-until (#1120) (android)
- refactor: decompose ViewHierarchy - separate screenshot handling (#1119) (android)
- refactor: decompose TapOnElement - extract focus navigation (#1118) (android)
- refactor: replace getInstance() singletons with constructor injection (#1117)
- refactor: add interfaces for ObserveScreen, Window, AwaitIdle (#1116)
- refactor: decompose XCTestServiceClient using delegate pattern (#1115) (ios)
- refactor: migrate raw setTimeout/setInterval to Timer interface (#1114)
- refactor: replace inline retry logic with DefaultRetryExecutor (#1113)
- refactor: consolidate ad-hoc caches to use TTLCache (#1112)
- Decompose Explore.ts (1870 lines) (#1108)
- Decompose AccessibilityServiceClient.ts (4652 lines) (#1107) (android)
- Migrate remaining AdbClient instantiations to AdbClientFactory (#1106) (android)
- Dead Code Detection: Threshold Exceeded (#1027) (automated, dead-code)
Fixed
- pressButton should properly await fresh view hierarchy before returning observation (#1051)
Other
- perf: explore queueMicrotask optimization for FakeTimer (#1130) (devxp, performance)
- Navigation nodes should preserve aspect ratio instead of cropping screenshots (#1052) (android, devxp, intellij plugin)
- Research: DevXP for work profile app install tracking (#754) (android, devxp, research)
[v0.0.8] - 2026-01-24
Added
- View hierarchy contains duplicate elements from merged sources (#999) (performance)
- criticalSection: accept normalized params in nested steps (#960)
- Abstract other macOS CLI tools through host control daemon (#932) (ios, env)
- Abstract xcodebuild commands through host control daemon for Docker support (#931) (ios, env)
- Abstract simctl commands through host control daemon for Docker support (#930) (ios, env)
- feat(ios): Xcode provisioning profile integration for physical device deployment (#913) (ios)
- feat(ios): Add iproxy port forwarding lifecycle management for physical devices (#912) (ios)
- feat(ios): download XCTestService.ipa from GitHub releases instead of building from source (#906) (ios, release engineering, devxp)
- Automatic wakefulness check and unlock on Android emulator boot (#879) (android, devxp)
- feat: streamlined development workflow for iOS XCTestService updates (#878) (ios, devxp)
- iOS: Interactive installer with Xcode/simulator validation (#871) (ios)
- iOS: Doctor tool for iOS dependency verification (#869) (ios)
- iOS: MCP resources for simulator sessions and installed apps (#868) (ios)
- iOS: Parallel multi-simulator test orchestration (#867) (ios)
- iOS: Session context for multi-simulator tool execution (#866) (ios)
- iOS: Multi-simulator session allocation in daemon (#865) (ios)
- iOS: Integrate visual highlights with bug report generation (#864) (ios)
- iOS: Integrate visual highlights with video recording (#863) (ios, video)
- iOS: MCP tool for visual highlighting during debugging (#862) (ios)
- iOS: WebSocket commands for visual highlight control (#861) (ios)
- iOS: Visual highlight overlay for XCTest service (#860) (ios)
- iOS: Expose navigation graph as MCP resource (#859) (ios)
- iOS: Implement identifyInteractions tool (#858) (ios)
- iOS: Implement explore tool for automatic app discovery (#857) (ios)
- iOS: Navigation graph building and exploration (#856) (ios)
- iOS: MCP tools and resources for video recording (#855) (ios, video)
- iOS: Integrate video recordings with FFmpeg post-processing (#854) (ios, video)
- iOS: Video recording capture backend using simctl (#853) (ios, video)
- iOS: Add comprehensive tests for simulator snapshot feature (#852) (ios, testing)
- iOS: Implement simulator snapshot restore (#851) (ios)
- iOS: Implement simulator snapshot capture using simctl (#850) (ios)
- feat: built-in Claude plugin for marketplace distribution with AutoMobile skills (#848) (release engineering, devxp)
- feat: optimize CLAUDE.md for progressive disclosure and automatic validation updates (#847) (documentation, devxp, ai)
- feat: simplify MCP tool schema - move selector id/text to top-level parameters (#845) (devxp)
- feat: seamless release workflow - consolidate bump version and changelog into single Release workflow (#844) (ci, release engineering)
- feat: automatically match target device light/dark mode to host system settings (#837) (android, ios, devxp)
- feat: harden regex parsing for device data (#834) (android, ios)
- feat: streamlined development workflow for Android/iOS embedded service updates (#831) (android, ios, devxp)
- ci: only run iOS CI checks when iOS or TypeScript code changes (#829) (ios, ci, devxp)
- ci: only run Android CI checks when Android or TypeScript code changes (#828) (android, ci, devxp)
- MCP resource URIs are confusing and inconsistent (#804) (devxp)
- Integrate focus-based navigation into tapOn tool (transparent to MCP consumers) (#471) (android, a11y)
- Set up release keystore for production builds (#431) (android, ci, release engineering)
- Validation: implement all_fast_validate_checks.sh aggregator (#371) (ci, devxp)
doctor: iOS checks for missing companion app + download link (#363) (ios, devxp)
- XCTest Runner: timing capture + publish timing history (#356) (ios, testing)
- XCTest Runner: implement AutoMobileTestCase + plan executor (#355) (ios, testing)
- Daemon: add iOS simulator discovery + session allocation (#354) (ios, devxp)
- simctl integration: status bar demo mode configuration (#352) (ios)
- simctl integration: app install/launch/terminate + capability reporting (#351) (ios)
- simctl integration: simulator lifecycle management (#350) (ios)
- AXe automation layer: coordinate translation + gesture injection (#349) (ios)
- AXe automation layer: MCP tool handlers + WebSocket client (#348) (ios)
- Accessibility Bridge: emit view hierarchy change events over WebSocket (#347) (ios)
- Accessibility Bridge: implement element lookup + bounds + focus state (#346) (ios)
- IDE plugin: real-time performance streaming + cache (#305) (android, performance, intellij plugin)
- Enhanced contrast detection for gradients and overlays (#102) (a11y)
Changed
- Upgrade json-schema-validator to 3.0.0 (requires Jackson 3 migration) (#967) (android, dependencies)
- Remove unused kotlinx-datetime dependency (#966) (android, dependencies)
- Remove p99 from MCP Tool Throughput Benchmarks (#950) (performance)
- Improving TypeScript dead code detection (#946) (devxp, dead-code)
- Dead Code Detection: Threshold Exceeded (#939) (automated, dead-code)
- Reduce slow wakeAndUnlock unit tests (<100ms) (#919) (testing)
- chore: remove checkForeground parallel mode - single dumpsys is 12.9x faster (#872) (android, performance)
- chore: cleanup top-level leftover planning markdown files (#849) (documentation)
- chore: set up GitHub Sponsors for project donations (#846)
- chore: update changelog for v0.0.7 release (#843) (documentation, release engineering)
- chore: set up release key signing for iOS libraries (#842) (ios, release engineering)
- chore: set up Dependabot for iOS Swift Package Manager dependencies (#841) (ios, dependencies)
- chore: set up Dependabot for Android Gradle dependencies (#840) (android, dependencies)
- chore: update Python/uv dependencies in /scripts/github (#839) (dependencies, python:uv)
- chore: update TypeScript dependencies - research major version upgrades (#838) (dependencies)
- docs: clean up and organize documentation (#830) (documentation)
- Chore: Test notification triggering (#765)
Fixed
- MCP startup benchmark sometimes hangs without reasonable timeout (#1002) (ci, performance)
- setActiveDevice does not single out iOS simulators for observe (#1001) (ios)
- rawViewHierarchy tool doesn’t support iOS (#1000) (ios)
- iOS: Cannot detect or launch system apps (Settings, Fitness, etc.) (#984) (ios)
- iOS: Home button press and homeScreen tool not working (#983) (ios)
- MCP tools/list fails due to tapOn schema using union type at root (#973) (ai)
- Security: Update qs to fix arrayLimit bypass DoS vulnerability (#964) (dependencies)
- Security: Update @modelcontextprotocol/sdk to fix ReDoS vulnerability (#963) (dependencies)
- Security: Update hono to fix JWT Middleware algorithm confusion (#962) (dependencies)
- Security: Update hono to fix JWK Auth Middleware JWT algorithm confusion (#961) (dependencies)
- Handle corrupted migrations in daemon startup (#947)
- bug: hot reload development workflow not working (#832) (devxp)
- Bug: Auto-generated bump versions PR does not trigger CI workflows (#812) (ci, release engineering)
- Upgrade Bun to 1.3.6 to fix CI segmentation fault crashes (#811) (ci, dependencies)
- Accessibility service state detection issues after automatic setup (#801) (android, a11y)
- Prevent automated changelog PR from erroring on fork origin (#793) (ci, release engineering)
- Fallback to uiautomator when AccessibilityWindowInfo.root returns null for active window (#775) (android, a11y)
Other
- docs: add reveal/collapse wrappers for demos to reduce page distraction (#987) (documentation)
- Add CI checks for host control docker scripts across macOS/Linux/Windows (#980)
- ci: run TypeScript Node build/test on macOS/Windows/Linux matrix (#958) (ci, testing)
- ci: run interactive installer on macOS/Windows/Linux matrix (#957) (ci, release engineering, testing)
- Add recorded GIF demo to interactive install script documentation (#953) (documentation)
- AGP 9.0 bump fails due to org.jetbrains.kotlin.android plugin (#896) (android, ci, automated, dependencies)
- Dependabot Android PRs fail CI due to missing signing secrets (#895) (android, ci, automated, dependencies)
- iOS: First-run path documentation from setup to first task (#870) (documentation, ios)
- chore: research slim Docker image for Android emulator management (#833) (android, env, research)
- Codex setup missing in install docs (#825) (documentation, ai)
- Explore automatic retry for flaky emulator tests in CI (#808) (flaky test, ci, research)
- Benchmark NPM Unpacked Size (#796) (release engineering, research)
- Reduce NPM Unpacked Size (#795) (release engineering, performance)
- Accessibility Bridge distribution without App Store (#376) (ios, release engineering)
- CI: audit workflows to keep Linux for non-iOS checks and macOS only where required (#374) (ios, ci, devxp)
- XCTest Runner: configuration via env vars + sample test target docs (#357) (documentation, ios, testing)
- Run AutoMobile self tests on Emulator.wtf (#77) (android, ci, testing)
- iOS ViewHierarchy WebSocket Accessibility Service/App (#33) (ios)
[0.0.7] - 2026-01-15
Added
- Add configurable fade animation for highlights (1-5 second duration) (#656) (android, devxp)
- Add smooth ink-line path drawing for freehand annotations (#655) (android, devxp)
- Add runtime permission handling for drawing overlays (#654) (android, devxp)
- Integrate visual highlights with video recording for reproduction videos (#653) (devxp)
- Integrate visual highlights with bug report generation (#652) (devxp)
- Add MCP tool for visual highlighting during debugging (#651) (devxp)
- Add Node.js client for visual highlight control (#650) (devxp)
- Add WebSocket commands for controlling visual highlights (#649) (devxp)
- Add drawing API for shapes in AccessibilityService overlay (#648) (android, devxp)
- Add cmdline-tools installation to doctor MCP tool (#620) (android, devxp, ai)
- Detect Homebrew avdmanager when system images are in $ANDROID_HOME (#619) (android, devxp)
- Detect old avdmanager with JAXB error and provide helpful message (#618) (android, devxp)
- Add Device Owner/Device Admin setup for advanced operations and CA certificate management (#615) (android, devxp)
- Complete implementation of Last Screenshot MCP resource (#613)
- Feature: Enable element search across both main hierarchy and window hierarchies in tapOn/interaction tools (#543) (android)
- Feature: Keep screen awake on physical devices during automation (#536) (android)
- Implement Android AccessibilityService clipboard operations (#500) (android)
- Implement focus path calculation and navigation engine (#470) (android, a11y)
- Implement focus position tracking and accessibility tree traversal (#469) (android, a11y)
- Design focus-based navigation algorithm for TalkBack element targeting (#468) (android, a11y, research)
- Implement network traffic capture MCP tools with mitmproxy (#466) (android)
- Implement postNotification MCP tool with SDK hook and cmd notification fallback (#463) (android)
- Implement setNetworkState MCP tool for Wi-Fi/cellular/airplane mode control (#462) (android)
- Implement clipboard MCP tool with ADB and helper APK fallback (#461) (android)
- Implement biometricAuth MCP tool with emulator fingerprint support (#460) (android, research)
- Add accessibility focus tracking to observations (#459) (android, a11y)
- Adapt swipeOn tool for TalkBack using two-finger swipe and scroll actions (#458) (android, a11y)
- Adapt tapOn tool for TalkBack mode using ACTION_CLICK (#457) (android, a11y)
- Implement TalkBack auto-detection and infrastructure (#456) (android, a11y)
- Add capability detection for settings-based accessibility toggle (#409) (android, devxp)
- Implement adb settings-based accessibility service toggle (#408) (android, devxp)
- Add optional device labels to device-scoped tool calls (#388) (android)
- Block MCP tool calls during executePlan (#330) (devxp)
- Video recording: Android + iOS capture backends (#326) (android, ios, video)
- Video recording: MCP tools/resources + CLI config (#324) (devxp, video)
- Video recording: core service + archive retention (#323) (video)
- Interactive install script with gum + animated AutoMobile logo (#322) (env, devxp)
- Implement hybrid iOS automation architecture (#319) (ios)
- Feature Request: Implement pinch-to-zoom gesture in accessibility service (#264) (android, a11y)
- IDE plugin: MCP feature flags UI (#256) (intellij plugin)
- IDE plugin: navigation graph rendering (#253) (intellij plugin)
- IDE plugin: Unix socket transport for MCP attachment (#252) (intellij plugin)
- Explore scrollToward/contentDirection for swipeOn semantics (#249) (android, devxp)
- IDE plugin: support TCP/HTTP transport for bun dev mode (#246) (devxp, intellij plugin)
- Add visual fallback for selected-state detection (#242) (android, devxp, ai)
- Add identifyInteractions MCP tool to suggest available actions (#224) (android)
- Add dry run mode for explore tool call (#223) (android)
- Allow whitelisting navigation graph nodes and edge tool calls (#222) (android)
- Add await element option to tapOn for waiting on next UI state (#219) (android)
- Support tapOn for non-unique text within a specific container (#211) (android)
- Cancel in-progress MCP commands when AI agent or JUnitRunner disconnects (#204) (android, devxp)
- startDevice should error if AVD already running (#176) (devxp)
- openSystemTray should avoid redundant swipe when tray already open (#173) (android, devxp)
- Add retry mechanism for transient CI failures (Maven 403, network issues) (#172) (ci, devxp)
- MCP Resource: Installed Apps per Device (#163) (android)
- MCP Resource: Connected Devices (#162) (devxp)
- MCP Resource: Available Emulators/Simulators List (#161) (devxp)
- Doctor Tool for Onboarding and Diagnosis (#160) (devxp)
- Expose tool call history as MCP resource (#130) (devxp)
- Expose navigation graph nodes as individual MCP resources (#129)
- Expose navigation graph as MCP resource for IntelliJ plugin (#128) (android, intellij plugin)
- Expose internal debugging as MCP resource (#127) (devxp)
- Include Debug Information in MCP Tool Error Responses (#108)
- Back stack awareness (#78)
- IntelliJ IDE plugin (#67) (android, devxp)
- Permission Audit & Capability Inventory (auditPermissions) (#59)
- Sensitive Data Exposure Scanner (scanDataLeakage) (#57)
- Element Search Fallbacks (#54)
- TalkBack Navigation Simulator (simulateTalkBack) (#53)
- Dark Mode Consistency Checker (#50)
- Locale & System Configuration Manager (#49)
- Battery & Charging State Simulator (#48)
- Sensor Simulation Framework (#47)
- Live Interactive Element Inspector (#43)
- HTTP Request Mocking & Recording (mockNetwork) (#42)
- Network Condition Simulator (simulateNetworkCondition) (#41)
- ANR Risk Detector (profileAnrRisk) (#39)
- Navigation graph: Handle bottom sheets, popups, and dialogs (#28)
- Navigation graph: Handle scroll position as UI state (#27)
- Retain and Reuse Navigation (#10)
- clipboard get action returns empty string after successful copy operation (#778)
- systemTray find with both title AND body criteria always fails to find notifications (#777)
- Tool registration regression: interaction tools silently failed to register (#745) (ai)
- dragAndDrop schema allows empty selectors; runtime rejects (#686) (devxp)
- dragAndDrop should check accessibility service availability (enabled + installed) (#681) (android, a11y)
- Android drag requests never execute; dragAndDrop always times out (#680) (android, a11y)
- Preserve double-tap behavior in TalkBack mode (#672) (android, a11y)
- Dead code detection job fails with ‘Argument list too long’ when issue count is high (#641) (ci, devxp)
- Navigation graph MCP resources remain empty after active app observation (#614)
- AutoMobile fails to detect installed Android system images (#612) (android, env)
- Material3 navigation text labels missing from accessibility hierarchy due to sibling occlusion bug (#591)
- installApp MCP tool fails with ‘adb: unknown command dump’ (#587) (android)
- MCP observe responses are excessively large due to unfiltered data (#539) (ai)
- IDE plugin: AutoMobile tool window ignores IntelliJ theme (#335) (android, intellij plugin)
- swipeOn direction parameter causes AI agents to swipe opposite of intended direction (#226) (android, devxp)
- swipeOn tool description causes AI agents to swipe on screen instead of targeting lists (#225) (android, devxp)
- Selected state not correctly interpreted from view hierarchy (#213) (android)
- Git state becomes dirty from .mcp.json and .gitignore changes on branch/worktree checkout (#212) (devxp)
- Stale view hierarchy returned to AI agents after interactions (#205) (android, devxp)
- MCP client fails to connect at startup with handshaking error (#186) (env, devxp)
- AutoMobile CLI hangs and doesn’t exit after executePlan completes (#109)
- Large MCP response warning on Accessibility Service websocket timeout (#86) (devxp)
- Observe call happening right after an action that should have included observation (#66)
- Add stub listDevices MCP tool (#781) (devxp, ai)
- Add stub listApps MCP tool (#780) (devxp, ai)
- Add keyboard MCP tool with open/close/detect actions (#779) (devxp, ai)
- Google Weather app filtered out from listApps MCP resource (#715)
- Accessibility service filters out Android home launcher widgets from view hierarchy (#714)
- Make identifyInteractions a debug-only MCP tool (#673)
- Add polling support to tapOn action with searchUntil parameter (#662)
- Add optional waitFor parameter to observe MCP tool (#658)
- Add overlay window capability to AccessibilityService (#647)
- tapOn should use parent clickable element when matched element is not clickable (#646)
- swipeOn container selection should avoid overlaying clickable elements (#645)
- Playground app: Add accessibility semantics to navigation components (#571)
- Research TalkBack/VoiceOver MCP tool behavior and create design doc (#430) (a11y, research)
- Experiment: Toggle AutoMobile accessibility service via adb settings (#384) (android, a11y, research)
- Feature Request: Implement drag-and-drop gesture and MCP tool call (#265)
- swipeOn tool needs better container parameter schema, docs, examples (#263)
- tapOn tool needs better container parameter schema, docs, examples and validation (#262)
- explore should stay within current foreground app (#174)
- [Android] Automatic Work Profile adaptation (#35) (android)
- Debug Interactions (#11)
- Retain Navigation in Memory (#9)
- Android Library SDK (#8)
- Android WebSocket server (#7)
- Dockerize AutoMobile (#5) (env)
- Database for memory and settings (#2)
- Rewrite internals with interfaces (#1)
Changed
- Cache installed apps list in SQLite and update via package broadcast receivers (#750) (performance)
- Optimize observe: Make screenshot capture async/non-blocking (#749) (performance)
- Optimize launchApp: Run detectTargetUser and checkInstalled in parallel (#748) (performance)
- Add strict ‘exactly one’ selector enforcement to swipeOn.lookFor (#740) (android, testing, chore)
- Add strict ‘exactly one’ selector enforcement to pinchOn container (#739) (android, testing, chore)
- Add strict ‘exactly one’ selector enforcement to tapOn tool (#738) (android, testing, chore)
- Clean up MCP response message when searchUntil doesn’t need to poll (#700)
- Add toolResults parsing in AutoMobilePlanExecutor for JUnitRunner (#697) (android, testing)
- Create Kotlin serialization data classes for tool results in :test-plan-validation (#696) (android, testing)
- Enhance tapOn response to include selectedElement metadata (#694) (android, testing)
- Add selectionStrategy parameter to tapOn tool (#693) (android, testing)
- Add boomerang field to swipeOn for dry-run gesture testing (#675) (devxp, ai)
- Convert listApps to MCP resource with query support to reduce context usage (#674) (devxp, ai)
- Optimize Docker publish job cache export settings to reduce build time by ~60% (#640) (ci, performance)
- Improve error output in startup benchmark script (#639) (ci, performance)
- Convert daemon management tools to unix socket requests (#608) (ai)
- Merge enableDemoMode and disableDemoMode into unified demoMode tool (#605) (ai)
- Merge localization tools into unified changeLocalization tool (#604) (ai)
- Restrict executePlan and criticalSection tools to daemon mode only (#603) (ai)
- Refactor deviceSnapshot MCP tools (#601) (ai)
- Move test recording from MCP tools to unix socket interface (#600) (ai)
- Refactor MCP video recording tools (#596) (ai)
- Evolve MCP tool call openSystemTray (#595) (ai)
- Move identifyInteractions and getNavigationGraph to debug-only tools (#594) (ai)
- Validate accessibility service version compatibility even when skipAccessibilityDownload is true (#580) (android)
- Consolidate MCP benchmark PR comments into a single unified comment (#576) (ci, devxp)
- Optimize accessibility service setup: rename skipAccessibilitySetup to skipAccessibilityDownload (#570) (performance)
- Feature: Merge window hierarchies into main hierarchy for unified view (#544) (android)
- Write integration tests for AccessibilityService focus tracking (#533) (android, a11y, testing)
- Write unit tests for AccessibilityFocusTracker (#532) (testing)
- Implement dead code detection for TypeScript (#518) (ci, devxp, testing)
- Memory leak detection and profiling for TypeScript MCP server (#512) (performance, testing)
- Additional performance benchmarks: observe latency, device boot, test plan execution (#510) (performance, testing)
- Implement MCP server and daemon startup time benchmark (#509) (devxp, performance, testing)
- Implement MCP tool call throughput benchmark (#508) (performance, testing)
- Add comprehensive tests for device snapshot feature (#506) (testing)
- Implement full app data backup and restore for ADB snapshots (#505) (android, testing)
- Refactor: Convert all ‘java’ directories to ‘kotlin’ in Android project structure (#504) (android, chore)
- CI: Cache Android system images to reduce emulator test setup time from 11+ min to <1 min (#497) (android, ci, devxp, performance)
- IDE plugin: YAML autocomplete for test plan files (#493) (devxp, intellij plugin)
- CI: Split IDE Plugin validation into separate Build and Test jobs (#486) (ci, intellij plugin)
- ‘On Merge’ workflow should require all jobs to pass before publishing to Docker Hub (#475) (ci, release engineering)
- Change explore tool to navigate known graph instead of building it (#445) (devxp)
- Skip long-running CI jobs for documentation-only PRs (#438) (documentation, ci, devxp, performance)
- Skip CI checks for accessibility service SHA256 update PRs (#437) (ci, performance, chore)
- Optimize MCP tools context usage to reduce token consumption (#434) (devxp, performance, ai)
- Update accessibility setup flow to prefer settings-based toggle (#410) (android, devxp)
- executePlan schema: multi-device + criticalSection (#392) (devxp, testing)
- JUnitRunner/Daemon: allocate devices for plan labels (#391) (android, testing)
- executePlan: multi-device labels + implicit parallelism (#390) (android, testing)
- Add criticalSection tool call for serialized multi-device steps (#389) (android, testing)
- IDE plugin: test plan YAML linting (#387) (devxp, intellij plugin)
- Validate executePlan YAML on read/author (#386) (devxp, testing)
- Add YAML validation across repo (#385) (devxp, testing)
- Validation: add XML auto-format/fix script (#370) (ci, devxp)
- Validation: add shell script auto-fix via shfmt (#369) (ci, devxp)
- Validation: add TypeScript test validation script (#368) (ci, devxp, testing)
- Validation: add TypeScript build validation script (#367) (ci, devxp)
- Validation: add ESLint validation + auto-fix scripts (#366) (ci, devxp)
- Xcode companion app: core UI surfaces (nav graph, performance, feature flags, logs) (#360) (ios, devxp)
- Accessibility Bridge distribution: bundle vs on-demand download/caching (#353) (ios, release engineering)
- Feature: enforce MCP context thresholds via benchmark script (#339) (devxp, performance)
- Feature: estimate MCP context usage (tools, resources, operations) (#338) (devxp, performance)
- Recorded test plan migrations + MCP versioning (#331) (devxp)
- IDE plugin: migrate all UX to Jewel + Compose (#328) (android, intellij plugin)
- Add curl-based interactive installer entrypoint in README + docs/install (#327) (documentation, env, devxp)
- Video recording: FFmpeg backend with hardware acceleration (macOS/Linux) (#325) (performance, video)
- Add AutoMobile tests/plans for Playground docs/using demos (#321) (android, testing)
- Playground app: add demo flows for docs/using workflows (#320) (android, devxp)
- IDE plugin: add test recording and YAML plan generation (#318) (android, intellij plugin)
- Add MCP resources for test timings and performance results (#317) (performance)
- Feature: Extract Android ‘Displayed’ time metrics from logcat for startup profiling (#311) (android, performance)
- IDE Plugin: Display recent UI performance results (#282) (android, performance, intellij plugin)
- IDE Plugin: Display historical test timing data for visual analysis (#281) (android, performance, testing, intellij plugin)
- JUnitRunner: Use historical test timing to optimize execution order (#280) (android, testing)
- MCP Daemon: Provide historical test timing to JUnitRunner on startup (#279) (android, testing)
- MCP Daemon: Record test execution timing in SQLite database (#278) (testing)
- Rely on view hierarchy updates for navigation destination instead of SDK navigation events (#277) (android)
- Add GHA workflow to update CHANGELOG from issues since last tag (#274) (release engineering)
- Add manually triggered GHA workflow for version bumping (#273) (release engineering)
- Track historical accuracy of predictive UI state (#221) (android, performance)
- Add predictive UI state to observations based on navigation graph (#220) (android, performance)
- Start test recording via in-app overlay or accessibility service shortcut (#218) (android)
- Auto-update accessibility service APK SHA256 via PR when source changes (#217) (android, ci, release engineering)
- Enable AccessibilityService to filter out views completely hidden by overlays (#214) (android, performance)
- Track Compose recomposition counts in observation results (#202) (android, devxp, performance)
- Auto-detect and upgrade accessibility service APK when SHA mismatch (#199) (android, release engineering, devxp)
- Add Codex MCP client installation docs (#184) (documentation, devxp)
- Revamp Hot Reload Development Workflow (#164) (devxp)
- Session State Management to Reduce Required Tool Parameters (#159) (devxp)
- Dynamic MCP Tool Loading via Workflow-Based Selection (#158) (devxp)
- Test parallel execution across multiple devices (#151) (testing)
- Update core tools to respect sessionUuid for device targeting (#150) (testing)
- Integrate session context into tool execution (#149) (testing)
- Update CLI to accept –session-uuid parameter (#148) (testing)
- Add daemon commands for device/session queries (#147) (testing)
- Make UI stability thresholds configurable (#138) (performance)
- Analyze and prevent JUnitRunner test pollution (#134) (android, devxp, testing)
- CI: Run Playground Automobile tests on emulator (#132) (android, ci, testing)
- Expose latest observation as MCP resource (#131) (devxp)
- CI: Auto-install accessibility APK for JUnitRunner emulator tests (#126) (ci, performance)
- MCP Server Daemon for CLI (#125) (performance, testing)
- Optimize accessibility audit performance with contrast caching (#105) (performance, a11y)
- Add comprehensive unit tests for accessibility audit checks (#101) (devxp, a11y)
- Add ESLint rule to prevent .js extensions in TypeScript imports (#90) (devxp)
- Touch latency testing implementation (#85) (devxp, performance)
- Migrate test runner from Mocha to Bun’s built-in test runner (#81) (ci, devxp)
- Natural Language Test Commands (#56)
- Navigation Graph Test Coverage and Recommendations (#55) (testing)
- –accessibility-audit mode where WCAG violations fail tests (#52)
- Flaky Test Detection & Quarantine (#51)
- Device State Snapshot & Restore (#46) (devxp, performance)
- Test Recording & Playback with Smart Locators (#45)
- Parallel Multi-Device Test Orchestration (#44)
- Visual Regression Testing (compareScreenshot) (#40)
- –mem-perf-audit mode where leaks, excessive GC, memory pressure, etc fail tests (#38)
- App Startup Performance Analyzer (profileAppStartup) (#37)
- –ui-perf-audit mode where jank and poor FPS fail tests (#36)
- Consolidate scroll, swipeOnScreen, and swipeOnElement into swipeOn (#30)
- Create monkeyNavigate tool for efficient graph exploration (#29)
- systemTray find returns cached observation instead of system tray when tray is closed (#776) (android)
- gfxinfo not reaching stability after launchApp for simple UX (#699) (performance)
- Test plan/IDE validator doesn’t validate dragAndDrop params (#687) (devxp, intellij plugin)
- dragAndDrop uses stale cached hierarchy (can drag wrong coords) (#684) (android)
- dragAndDrop uses fixed 5s timeout; long gestures always fail (#683) (android, performance, a11y)
- dragAndDrop dropDelay default mismatch with schema/docs (#682) (documentation)
- MCP Startup Benchmark PR comment has mangled output with escaped newlines (#575) (ci, devxp)
- AccessibilityService: Hierarchy optimization removes clickable elements with text labels (#572) (android)
- JUnit runner + MCP daemon parallel execution completely broken (3 critical bugs) (#541) (android, testing, ai)
- CI: Android Emulator Tests Failing Due to Disk Space Exhaustion (#522) (android, ci)
- 3 JUnit Runner emulator tests are skipped due to missing test plan file (#473) (android, testing)
- GitHub Actions runner: No space left on device during Docker Hub publish (#435) (ci, release engineering, env)
- Build Docker Image CI failing: MCP stdio protocol ENOENT /workspace/src/db/migrations (#382) (ci, env)
- Update Changelog workflow should use AUTO_MOBILE_PR_TOKEN for PRs (#297) (ci, release engineering)
- Bump Versions workflow fails because ripgrep is missing (#296) (ci, release engineering)
- Flaky ClockAppAutoMobileTest fails to reach MCP server in CI (#257) (flaky test, testing)
- listApps returns all system apps for every profile, causing huge MCP response (#215) (android, performance)
- Improve long press implementation and add playground testing areas (#203) (android, testing)
- Flaky accessibility-service WebSocketServerIntegrationTest in CI (#197) (android, flaky test, ci, testing)
- Navigation tests fail with Robolectric OnBackPressedDispatcher incompatibility (#190) (android, ci)
- Playground emulator tests fail: koog-agents dependency classloading issue (#189) (android, ci, testing)
- CI: Android emulator tests failing with shell exit code 1 (#156) (android)
- JUnit Runner Emulator Tests failing with shell syntax error (#140) (android, ci)
- Migrate from better-sqlite3 to bun:sqlite for Bun compatibility (#118) (enhancement)
- JUnit Runner: Test Timeout When Running Multiple Tests Together (#107)
- PluginException: TestPlanInspection shortName mismatch (#768)
- Chore: Test clipboard tool (#767)
- Chore: Test system tray lookFor (#766)
- Chore: Test biometrics stubbing (#763)
- Chore: Test takeScreenshot fallback tool (#762)
- Add unit tests for accessibility APK download/verification paths (#730) (android, testing)
- Harden accessibility APK download (HTTP status + curl fallback + integrity check) (#729) (android, release engineering, env)
- Use unique, OS-portable temp path for accessibility APK download (#728) (android, release engineering, env)
- APK download fails on macOS due to sha256sum dependency (#727) (android, release engineering, env)
- Add tests for occlusion filtering behavior (#719) (android, performance, testing)
- Update tool-definitions.json for tapOn selectionStrategy and selectedElement (#695) (documentation, android, testing)
- Add dragAndDrop test coverage; fakes/interface lack requestDrag (#685) (devxp, testing)
- Research effectiveness of current navigation graph implementation (#676) (documentation, research)
- Enhancement: Hybrid hierarchy combining accessibility service + UIAutomator for apps with poor accessibility (#588)
- Change accessibility service SHA256 update to run daily instead of on every main merge (#577)
- CI: bun pm trust heapdump exits 1 in memory leak detection (#569)
- CI failures after #562: native addon build errors (#568)
- Standardize naming convention: auto-mobile for Maven artifacts, automobile for package names (#540) (android, release engineering, chore)
- Build and deploy AccessibilityService APK with focus tracking (#534) (android, devxp)
- CI: Optimize Android emulator test daemon warmup (currently ~90s overhead) (#527) (android, ci, devxp, performance)
- Memory leak detection and profiling for IntelliJ IDE Plugin (#515) (devxp, performance, testing, intellij plugin)
- Memory leak detection and profiling for JUnitRunner library (#514) (android, performance, testing)
- Memory leak detection and profiling for Android AccessibilityService (#513) (android, performance, a11y, testing)
- Validate and test VM snapshot emulator console commands (#507) (android, testing, research)
- End-to-end testing for clipboard MCP tool (#501) (testing)
- Refactor gradle modules: extract shared test plan validation into android/test-plan-validation (#492)
- Standardize environment variable naming: AUTOMOBILE_ vs AUTO_MOBILE_ prefix (#483) (documentation, env, devxp, chore)
- Optimize slow TypeScript unit tests (35 files exceed 100ms) (#481) (performance, testing)
- Add Gradle test report patterns to root .gitignore (#476) (android, testing, chore)
- Optimize Android emulator test job runtime and reduce flakiness (#446) (android, flaky test, ci, performance)
- Enable auto-merge on accessibility service update PR (#436) (ci, devxp, chore)
- Document settings-based accessibility toggle (#412) (documentation, devxp)
- Test settings-based accessibility toggle on API 29 & 35 (#411) (android, devxp, testing)
- Research: validate Android design-doc experiments with adb (#393) (android, research)
- Clarify bug reproduction doc with snapshot and MCP action links (#345) (documentation)
- Link test recording and YAML plan workflow from user docs (#344) (documentation, android)
- Call out accessibility service enablement in install/usage docs (#343) (documentation, android)
- Add decision guide for MCP vs IDE plugin vs JUnitRunner vs SDK (#342) (documentation, android)
- Add Android first-run path from device setup to a concrete task (#341) (documentation, android)
- Review docs/ directory for accuracy and add implementation citations (#276) (documentation)
- Setup Trusted Publishing for npm packages with GitHub Actions (#275) (release engineering)
- Refactor Tap and Long Press tabs into unified screen with real-time duration tracking (#266)
- Optimize JUnitRunner heartbeat mechanism for faster daemon timeout detection (#232) (android, devxp, performance, testing)
- Docker Hub publish job fails: missing bun installation (#188) (ci, release engineering, env, devxp)
- Phase 3b: JUnitRunner Direct Socket IPC (170ms/test optimization) (#145) (android, performance, testing)
- Optimize JUnitRunner performance based on #133 research (#135) (android, ci, devxp, performance)
- Analyze and optimize JUnitRunner performance bottlenecks (#133) (ci, performance)
- Performance Research, Analysis, and Upgrade of Emulator CI jobs (#123) (android, ci, performance)
- Register Maven central namespace (#120) (android, release engineering)
- Enable JUnit Runner tests in GitHub Actions CI (#110) (android, ci, devxp)
- Improve Android user profile parsing to use structured data instead of regex (#106) (android, devxp)
- Run Android AutoMobile self tests on an Android Emulator in GHA (#94) (ci, devxp)
- Android CI Perf Improvements (#93) (ci, devxp, performance)
- Rename monkeyNav MCP tool call to explore (#80) (devxp)
- Migrate from pnpm to bun for peak performance (#79) (ci, devxp)
- Convert from npm to pnpm (#63)
- Skip Docker CI if Dockerfiles and package.json did not change (#62)
- Document Claude Code installation and usage (#31) (documentation)
- Publish scoped package on NPM (#19) (release engineering)
Fixed
- Bug: Duplicate/embedded observe in launchApp causing bloated MCP responses (#751) (performance)
- Fix swipeOn coordinate calculation and overlay detection bugs (#722)
- Bug: swipeOn with lookFor scrolls in wrong direction repeatedly (#671) (android)
- Fix: Taps via accessibility service were being interpreted as long presses (#666) (android)
- Bug: launchApp not correctly observing app state after launch (#537) (android)
- Bug: tapOn schema validation error - container field expects object but receives string (#535)
- Flaky test: planExecutionLock ‘allows MCP tool calls when no plan is executing’ times out in CI (#482) (flaky test, ci, testing)
- Fix Android emulator CI job failures - 13m wasted on bugs, Gradle times out (#447) (android, ci)
- Regression: JUnitRunner tests only using 1 device instead of device pool (#444) (testing)
- Bug: AutoMobile incorrectly identifies system notification permission dialog as permission controller (#402)
- Bug: Work profile apps fail observation due to hardcoded u0 user profile in regex patterns (#314) (android)
- Fix FakeAccessibilityServiceManager interface import path (#731) (android, testing)
- Flaky test: Session Lifecycle with Device Reuse sometimes returns different device (#548) (flaky test, ci, testing)
- Fix MonkeyNavigate integration test timeouts (#73)
- Flaky test: AccessibilityServiceClient WebSocket connection failure handling (#72) (flaky test)
- Flaky test: AccessibilityServiceClient WebSocket connection failure timeout (#68) (flaky test)
Deprecated
- Enhance devices resource with pool status and deprecate listDevices tool (#606) (ai)
Removed
- Remove deprecated listApps MCP tool (#713)
- Remove daemon_available_devices tool and forward usage to listDevices (#607) (ai)
- Remove listSnapshots tool - create automobile:snapshots resource instead (#602) (ai)
- Remove listPerformanceAuditResults MCP tool (#599) (ai)
- Remove getTestTimings tool (#598) (ai)
- Remove listVideoRecordings tool - already exposed via automobile:video/archive resource (#597) (ai)
- Remove duplicate ‘Publish Docker Image’ workflow - Docker publishing already handled by ‘On Merge’ workflow (#474) (ci, release engineering, chore)
- Remove KotlinPoet and automated test authoring references (#200) (documentation, android)
- Remove installPlatformDependencies now that AutoMobile is dockerized (#177)
- Remove getAllConfigs/setDeviceMode/resetConfig MCP tool calls (#175)
- Delete source mapping and automatic test authoring (#4)
- Delete iOS implementation (#3)
Security
- Deep Link Security Validator (validateDeepLinkSecurity) (#58)
- Security: Insecure temporary file creation in daemon manager (#157)
- CodeQL check failing in CI (#141) (ci)
[0.0.6] - Unreleased
Changed
- Placeholder: started fork; release notes not recorded.
[0.0.5] - 2025-07-22
Added
- Add ADB command auto retry
Changed
- Improve view hierarchy search for elements with auto retry
- Refactor ConfigurationManager
Fixed
[0.0.4] - 2025-07-08
Added
- Automate Accessibility Service install and enablement on first ADB command for a device
- Check APK SHA256 before installing
- Allow element search to restrict to specific containers in the view hierarchy
Changed
- Increase accessibility node inspection for better view hierarchy data
- Filter unnecessary view hierarchy data to reduce observe payloads
- Parallelize and cache observation and idling steps
- Refactor BaseVisualChange
- Reduce tool calls to make it easier for agents to determine tool call selection
[0.0.3] - 2025-07-08
Added
- Automate Accessibility Service install and enablement
- Check APK SHA256 before installing
- Allow element search to restrict to specific containers in the view hierarchy
Changed
- Increase accessibility node inspection for better view hierarchy data
- Filter unnecessary view hierarchy data to reduce observe payloads
- Parallelize and cache observation and idling steps
- Refactor BaseVisualChange
- Reduce tool calls to make it easier for agents to determine tool call selection
[0.0.2] - 2025-07-01
Added
- Accessibility service with availability checks
- Active window caching
- Device session management
Changed
- Improved docs for setup and installation
- More test coverage
[0.0.1] - 2025-06-24
Added