Indmrt Agent
Ringkasan Teknis
indmrt-agent adalah sistem otomasi Android on-device yang memungkinkan AI agent mengontrol aplikasi mobile native secara mandiri (dibangun untuk use case belanja di Klik Indomaret dan Alfagift). Sejak Android 14 hingga Android 16 (diuji pada HyperOS), sistem operasi Android memblokir injeksi input level shell (adb shell input tap, uiautomator2, dan Appium) lewat restriksi permission INJECT_EVENTS. Project ini mengatasi limitasi tersebut dengan menjalankan daemon HTTP JavaScript ringan di dalam AutoJs6, membuka akses gesture AccessibilityService bawaan Android lewat REST API lokal di port 9318 tanpa perlu root.
Arsitektur Teknis & Alur Eksekusi
[ LLM Orchestrator ] (Claude Code / Hermes-termux)
│
│ Menentukan aksi via JSON schema / Tool calling
▼
[ Local HTTP Client ] (client.py atau curl)
│
│ GET /launch?pkg=... | /find?q=... | /tap?x=..&y=..
▼
[ AutoJs6 agent_server.js ] (Listening di port :9318 on-device)
│
│ Menerjemahkan request ke pemanggilan AccessibilityService
│ Menggunakan dispatchGesture() (bypass INJECT_EVENTS)
▼
[ Android AccessibilityService ]
├── Inspeksi Elemen (/find: penelusuran bounds teks, id, desc)
├── Gesture Dispatcher (stroke path, tap center x/y, swipe ms)
└── Evaluasi Bounds Window (menangani split-screen & resolusi)
▼
[ Aplikasi Target ] (Klik Indomaret / Alfagift)
- Pemisahan Tanggung Jawab: Otak vs Tangan:
- LLM/Orchestrator (Otak & Mata): Berjalan lokal di Termux atau host machine (diuji pakai Claude Code harness dan Hermes-termux). Bertugas menganalisis kondisi UI, menentukan keputusan langkah (seperti menutup banner pop-up promo atau mencari produk), dan merangkai urutan aksi.
- AccessibilityService (Tangan): Service sistem Android yang diberikan izin ke AutoJs6. Bertugas mengeksekusi aksi fisik: tap layar, swipe, typing teks, hingga inspeksi koordinat elemen.
- Bypass Blokir INJECT_EVENTS: Injeksi shell biasa selalu gagal di Android modern tanpa akses signature/root. Sementara itu, gesture yang dikirim via
AccessibilityService.dispatchGesture()diproses langsung olehAccessibilityManagerService, sehingga bypass aturan keamananINJECT_EVENTSsecara legal dan mulus. - Deteksi Elemen yang Efisien (Hemat Token):
- Inspeksi Zero-Token (Tree Accessibility): Daripada buang-buang token dengan terus-menerus mengirim screenshot ke model vision, agent terlebih dahulu memanggil endpoint
/find?q=<label>untuk menelusuri teks, resource ID, atau deskripsi elemen secara rekursif. Posisi koordinat bounds ([left, top, right, bottom]) didapat instan dengan $0 biaya LLM. - Partial Vision Screenshot: Ketika ada elemen dinamis atau view ter-obfuscate yang tidak muncul di tree accessibility, agent mengambil screenshot parsial (misal hanya crop 250px area atas untuk search bar). Karena biaya multimodal vision dihitung berdasarkan dimensi pixel gambar (bukan kepadatan teks), teknik crop parsial ini memangkas biaya token secara drastis.
- Workflow Berbasis Data Terstruktur: Setiap urutan langkah navigasi yang berhasil dipelajari disimpan ke format JSON terstruktur. Hal ini memungkinkan alur pencarian dan pengisian keranjang belanja di-replay secara deterministik tanpa perlu looping trial-and-error yang boros biaya.
- Guardrails & Keamanan Akses: Memberi izin Accessibility Service sama saja memberikan AI akses penuh ke layar perangkat. Project ini menerapkan batasan ketat: agent dilarang menyentuh alur transaksi sensitif seperti checkout final, payment gateway, atau aplikasi perbankan. Server HTTP juga dibatasi hanya listen di interface localhost agar tidak bisa di-remote sembarangan oleh perangkat lain di jaringan Wi-Fi yang sama.
Tech stack
Architecture
indmrt-agent/
├── agent/
│ ├── agent_server.js # HTTP server daemon running inside AutoJs6 (port 9318)
│ ├── client.py # Python client wrapper for endpoint interactions
│ └── README.md # Full REST API endpoint reference
├── bin/
│ ├── pair-adb.sh # Wireless debugging pairing automation
│ ├── push-agent.sh # Script sync tool to /sdcard/AutoJs6/
│ └── launch-agent.sh # Background daemon launcher
├── docs/
│ ├── phase-1/ # Technical findings, architecture specs & RCAs
│ │ ├── architecture.md
│ │ ├── findings.md # Android 16 security injection analysis
│ │ └── rca/ # Root cause analysis on gestures & port conflicts
│ └── phase-2/ # Remote server-driven execution backlog
├── SETUP.md # End-to-end non-root setup instructions
└── README.md