{"adoption": {"forks": 243, "observed_at": "2026-08-28T04:06:37.370066+00:00", "stars": 2325}, "canonical_url": "https://ross.abutalabs.com/products/roubao", "card": {"archived": false, "artifact_type": "application", "description": "Android Automation Tool Based on Vision-Language Models", "domain": ["mobile-development", "artificial-intelligence"], "enriched": true, "function": ["agent-framework", "machine-learning", "workflow-automation", "computer-vision", "nlp"], "health_score": 73, "homepage": null, "language": "Kotlin", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["Turbo1123/roubao"], "name": "Turbo1123/roubao", "platform": ["jvm"], "pushed_at": "2026-01-08T10:44:44+00:00", "repo": "Turbo1123/roubao", "stars": 2325, "tags": ["vlm", "phone-automation", "shizuku", "mobile-agent", "on-device-ai", "gui-automation", "no-pc-required", "ai-agents", "automation", "android", "mobile"], "topics": ["ai", "ai-agents", "android", "android-automation", "kotlin", "mobile-agents", "mobileagent", "phone-automation"], "urls": [], "use_cases": ["automate android phone tasks with ai", "control my phone hands-free using a vision language model", "open source alternative to doubao phone assistant", "automate ordering food or booking on android without adb", "run mobile agent automation directly on the phone without a computer", "let ai tap and swipe through apps on my android", "batch apply to jobs automatically on my phone"], "what_it_is": "Roubao is an open-source AI phone automation assistant for Android, built natively in Kotlin and powered by vision-language models. It runs entirely on-device without a PC, using Shizuku for system-level permissions and a Tools/Skills multi-agent architecture to automate tasks like ordering food or filling forms.", "when_to_avoid": ["you need iOS or desktop automation", "you cannot or do not want to set up Shizuku for elevated permissions", "you require fully offline operation without any LLM API", "you need guaranteed reliability for critical workflows, since VLM-driven GUI automation can be error-prone"], "when_to_choose": ["you want on-device android automation with no PC, ADB, or Python setup", "you need an open-source, self-hosted alternative to closed AI phone assistants", "you want to bring your own LLM/VLM API key and customize models", "you prefer a native Kotlin app over Python-based MobileAgent scripts"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/roubao", "repo": "Turbo1123/roubao", "role": "main", "score": 53}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.370066+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:38:23.089192+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3f2b7aa79fafb226401b4cf5b889ec227b89f1e7c230ad8f6a5e7e1dd1491bd", "fetched_at": "2026-08-28T04:06:37.370066+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Turbo1123/roubao"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.370066+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:38:23.089192+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3f2b7aa79fafb226401b4cf5b889ec227b89f1e7c230ad8f6a5e7e1dd1491bd", "fetched_at": "2026-08-28T04:06:37.370066+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Turbo1123/roubao"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:38:23.089192+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3f2b7aa79fafb226401b4cf5b889ec227b89f1e7c230ad8f6a5e7e1dd1491bd", "fetched_at": "2026-08-28T04:06:37.370066+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Turbo1123/roubao"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.370066+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.370066+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.370066+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:38:23.089192+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3f2b7aa79fafb226401b4cf5b889ec227b89f1e7c230ad8f6a5e7e1dd1491bd", "fetched_at": "2026-08-28T04:06:37.370066+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Turbo1123/roubao"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.370066+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.370066+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:38:23.089192+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3f2b7aa79fafb226401b4cf5b889ec227b89f1e7c230ad8f6a5e7e1dd1491bd", "fetched_at": "2026-08-28T04:06:37.370066+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Turbo1123/roubao"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.370066+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.370066+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.370066+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:38:23.089192+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3f2b7aa79fafb226401b4cf5b889ec227b89f1e7c230ad8f6a5e7e1dd1491bd", "fetched_at": "2026-08-28T04:06:37.370066+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Turbo1123/roubao"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.370066+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:37.370066+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:38:23.089192+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3f2b7aa79fafb226401b4cf5b889ec227b89f1e7c230ad8f6a5e7e1dd1491bd", "fetched_at": "2026-08-28T04:06:37.370066+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Turbo1123/roubao"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:38:23.089192+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3f2b7aa79fafb226401b4cf5b889ec227b89f1e7c230ad8f6a5e7e1dd1491bd", "fetched_at": "2026-08-28T04:06:37.370066+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Turbo1123/roubao"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:38:23.089192+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3f2b7aa79fafb226401b4cf5b889ec227b89f1e7c230ad8f6a5e7e1dd1491bd", "fetched_at": "2026-08-28T04:06:37.370066+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Turbo1123/roubao"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:38:23.089192+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c3f2b7aa79fafb226401b4cf5b889ec227b89f1e7c230ad8f6a5e7e1dd1491bd", "fetched_at": "2026-08-28T04:06:37.370066+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Turbo1123/roubao"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 61, "longevity": 19, "rhythm": 62}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 267, "days_push": 237, "days_rel": 258, "gap_med": 0, "n_releases_24m": 8}, "score": 53, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}