PokeClaw (PocketClaw) — first on-device AI that controls your Android phone. Gemma 4, no cloud, no API key. Poke is short for Pocket.
Kotlin
1,096
248 commits
updated Jun 2, 2026
🌐 Landing Page — available in English · हिन्दी · 日本語 · Deutsch · 繁中
PokeClaw, also known as PocketClaw, is an open-source Android app for AI phone automation.
It can run Gemma 4 on-device for local, private phone control, and it also supports optional cloud models when you want stronger reasoning for harder tasks.
The current public build is a local-first prototype for turning an Android phone into an AI-operated device.
In Local mode, model execution stays inside your device. No account or API key is required for Local mode.
Everyone else: Phone → Internet → Cloud API → Internet → Phone
💳Credit card needed, API key required. Monthly bill attached.
PokeClaw local: Phone → LLM → Phone
Local-first when you want it. Optional cloud when you need it.
AI can control your phone, with local-first execution and optional cloud help.
The current public build is open-source and already handles real chat, task, and automation flows on Android.
Monitor a WhatsApp contact and auto-reply:
Context-aware WhatsApp auto-reply:
https://github.com/user-attachments/assets/5a43d4d5-458a-4eea-a0a5-58d113255741
https://github.com/user-attachments/assets/5c2966c5-04e6-4b22-8d66-11915ae62096
☝️ Auto-reply demo: PokeClaw monitors messages from Mom, reads what she said, and replies based on context using the on-device LLM. Watch in higher resolution on YouTube
☝️ Context demo: Mom asks "what did I tell you to bring?" — the AI opens the chat, reads the full conversation on screen, sees the earlier message about wine, and replies correctly. This is the difference between context-aware and context-free replies.
https://github.com/user-attachments/assets/89999dd8-a1be-49ad-9419-60c2b38f6374
Why is the "hi" demo slow? That clip was recorded on a CPU-only Android device with no usable GPU or NPU path. Running Gemma 4 E2B on pure CPU takes about 45 seconds to warm up. On stronger phones it is much faster:
- Google Tensor G3/G4 (Pixel 8, Pixel 9)
- Snapdragon 8 Gen 2/3 (Galaxy S24, OnePlus 12)
- Dimensity 9200/9300 (recent MediaTek flagships)
- Snapdragon 7+ Gen 2+ (mid-range with GPU)
On these devices, warmup drops to seconds. Same model, better hardware.
I'm building this solo. When Gemma 4 landed with native tool calling on LiteRT-LM, I wanted to know whether a phone could become a real on-device agent instead of just another chatbot. PokeClaw is the result.
The interesting part is not just chatting with a local model. The interesting part is getting a local model to read the screen, choose tools, operate apps, keep task state, and finish real phone workflows. That is exactly what this project is built for.
PokeClaw already supports fully on-device automation with Gemma 4 and optional cloud models for stronger task execution. The current focus is broader device support, more generic skills, more local model options, and a cleaner public release path.
If you hit something interesting, open an issue. Real device reports are how this gets better fast.
PokeClaw is not just a chat app with a few phone-control tricks glued on top.
At its core, it is becoming a mobile agent harness:
That distinction matters. The long-term goal is not to hardcode one-off app flows forever. The goal is to build the strongest practical harness for AI phone agents on Android, then ship product experiences on top of that foundation.
That is also why the project invests so heavily in:
That direction affects how bugs are prioritized. PokeClaw should fix deterministic harness, runtime, hardware, storage, accessibility, foreground-service, signing, and QA-runner problems before drilling into one flaky model task.
Examples of harness problems worth fixing immediately:
Examples that should usually be treated as model-performance or exploratory-agent limits unless logs prove otherwise:
Prompts, tools, skills, and playbooks should stay generic. Add structure when it improves a reusable class of tasks; avoid one-off prompt hacks or coordinate scripts just to make a single demo pass.
There are already strong mobile-agent frameworks for developers, benchmarks, and cloud/desktop-controlled devices. DroidRun/Mobilerun, minitap/mobile-use, Mobile-Agent, and AppAgent-style systems are useful references, especially for planning, UI observation, benchmark design, and failure recovery. They are not the same deployment category as PokeClaw:
PokeClaw should not try to become another PC/SDK/ADB-driven mobile automation framework. Its product lane is different:
External automation tools are still useful. Tasker, MacroDroid, Locale, and similar apps are good deterministic trigger engines. PokeClaw should let them trigger an AI task, but PokeClaw should remain the phone-resident execution harness.
👉 Try the interactive demo on our landing page — click through every screen without installing anything.
The model picks the right tool, fills in the parameters, and executes. You don't configure anything per-app. It just reads the screen and acts.
These are tasks we have already run end-to-end during on-device QA.
pokeclawEvery number below comes from repeated trials on a physical Pixel 8 Pro running release builds. No cherry-picked runs, no emulators. The full verified task list and tier breakdown is in thoughts/verified-task-capabilities.md.
| Task | Result | Rounds | What happens |
|---|---|---|---|
| Search YouTube for lofi beats | ✅ | 9 | Opens YouTube, types query, hits search |
| Open Chrome and search for weather | ✅ | 9 | Opens Chrome, types query, reads results |
| Open Chrome and go to reddit.com | ✅ | 7 | URL navigation with node_id targeting |
| Compose email to [email protected] | ✅ | 12 | Opens Gmail, fills To + Subject + Body |
| Install Telegram from Play Store | ✅ | 14 | Search + tap Install + wait |
| Turn on do not disturb | ✅ | 12 | Navigates Settings, toggles DND |
| Open Settings, go to About Phone | ✅ | varies | Deep settings navigation |
| Send hi to Mom on WhatsApp | ✅ | 5 | Opens WhatsApp, finds contact, types, sends |
| Check my Instagram messages | ✅ | 5 | Handles typo ("instagarm"), opens correct app |
| 部機仲有幾多storage | ✅ | 2 | Cantonese input, returns answer in 中文 |
| 打開Instagram | ✅ | varies | Chinese command |
| Draft an email saying I'll be late | ✅ 10/10 | 8 | Repeated trials: 100% pass rate |
| Copy latest email subject and Google it | ✅ 8/10 | 15 | Gmail to Chrome cross-app flow, 80% pass rate |
All tasks use zero hardcoded app logic. The model reads the screen, picks tools, and figures out the flow on its own. Multi-language works out of the box, including Cantonese, Mandarin, and misspelled English.
| Task family | Result | CPU avg (Pixel 8 Pro) | GPU avg (Pixel 8 Pro) | Notes |
|---|---|---|---|---|
| Clipboard explain | ✅ | 2m 43s | 2m 11s | Real clipboard read |
| Notifications summary | ✅ | 2m 49s | 2m 53s | Reads live notifications and summarizes |
| Battery advice | ✅ | 2m 12s | 2m 53s | Returns level + charging state |
| Storage + apps cleanup advice | ✅ | 2m 33s | 3m 06s | Harness used to mislabel this as blocked because the answer mentioned the Contacts app |
For the current local-core quick-task bundle on a Pixel 8 Pro, Gemma 4 E2B passed 4/4 on both CPU and GPU. Cold-start average time was 2m 34s on CPU versus 2m 46s on GPU, so GPU is now verified and usable on this device, but it is not yet a cold-start speed win for this short task bundle. The value of the recent hardening work is stability and real backend verification, not inflated benchmark theater.
PokeClaw gives a small on-device LLM a set of tools (tap, swipe, type, open app, send message, enable auto-reply, etc.) and lets it decide what to do. The LLM sees a text representation of the current screen, picks an action, sees the result, picks the next action, until the task is done.
Local execution runs via LiteRT-LM with native tool calling. In Local mode, the model runs on-device.
The LLM has access to these tools and picks them autonomously:
| Tool | What it does |
|---|---|
tap / swipe / long_press | Touch the screen |
input_text | Type into any text field |
open_app | Launch any installed app |
send_message | Full messaging flow: open app, find contact, type, send |
auto_reply | Monitor a contact and reply automatically using LLM |
get_screen_info | Read current UI tree |
take_screenshot | Capture screen |
finish | Signal task completion |
These tools are generic — they work with any app, any contact, any language. The LLM picks the right tool and fills in the parameters from your request.
Small on-device models get dramatically better when you give them a strong playbook. So we give PokeClaw reusable skills on top of generic tools.
The auto-reply feature is a good example. It doesn't work by magic — there's a predefined workflow behind it: open the chat → read all visible messages on screen → generate a context-aware reply → send it → go back to home. The model follows this recipe step by step. Every tool in that chain is generic: open_app works with any app, read_screen works on any screen, send_message works with any contact. The workflow just tells the model which tools to use and in what order.
This is what we're calling Skills — reusable workflows built from generic tools. We're actively designing a skill system inspired by Claude Code's skill architecture. The idea: anyone can write a skill as a simple text file that describes the steps, and the LLM follows it.
Some examples of what skills can do:
Each skill is just a combination of the same generic tools (open_app, tap, type, read_screen, send_message, etc.) arranged in a specific order. The tools are the building blocks, the skills are the recipes.
Both are designed to be extensible. We're building the first 8-10 skills as built-in defaults. If the system works well, we'll open it up for the community to create and share their own tools and skills. You know your phone better than we do — you should be able to teach it new tricks.
As on-device models get smarter, more of this can become free-form. Right now, skills are how we get reliable automation out of a small local model while keeping the tool layer generic.
Note: If you are updating from an older public debug build and Android says the package is incompatible, uninstall the old build once and then install the latest APK fresh. Older public debug builds still receive the in-app update prompt, but they need a one-time reinstall before joining the stable-signed
0.6.xline.
| Minimum | Recommended | |
|---|---|---|
| Android | 9+ | 12+ |
| Architecture | arm64 | arm64 |
| RAM | 8 GB | 12 GB+ |
| Storage | 3 GB free (model download) | 5 GB+ |
| GPU | Not required (CPU works) | Tensor G3/G4, Snapdragon 8 Gen 2+, Dimensity 9200+ |
| Root | Not required | Not required |
⚠️ 8 GB gets you in the door. 12 GB+ is the sweet spot for the built-in Gemma 4 local models, especially if you want smoother multitasking and faster model bring-up.
Local mode needs no account and no API key. Cloud mode is optional.
This is the current direction for PokeClaw based on real device testing, open issues, and the most common feature requests.
.litertlm models. User-accessible local model import is on the roadmap so you can bring your own LiteRT model instead of being locked to the built-in download list.Android/data/... sandboxes from normal file-pickers, so PokeClaw cannot generically "see" Edge Gallery's downloaded models unless they are exported into a user-accessible location first./start or task-message step. Treat this as an environment blocker, not a PokeClaw channel failure.PokeClaw exposes a user-enabled Android intent entrypoint for Tasker, MacroDroid, Locale, ADB, and other trusted local automation tools.
The setting is off by default. Enable it from Settings -> Remote Control -> External Automation.
The external automation contract is designed for Tasker, MacroDroid, Locale, and similar Android automation apps. The verified end-to-end path today is MacroDroid.
Verified on a Pixel 8 Pro on 2026-04-30:
Shortcut LaunchedSend IntentActivityio.agents.pokeclaw.RUN_TASKio.agents.pokeclawio.agents.pokeclaw.automation.ExternalAutomationActivitytask = how much battery leftMacroDroid setup:
Settings -> Remote Control -> External Automation.User Input -> Shortcut Launched.Device Actions -> Send Intent.Target to Activity.Action to io.agents.pokeclaw.RUN_TASK.Package to io.agents.pokeclaw.Class to io.agents.pokeclaw.automation.ExternalAutomationActivity.Extra 1 name to task.Extra 1 value to the task text, for example how much battery left.Test macro.Expected result: PokeClaw opens, records the task in the chatroom, runs the task through the normal harness, and shows the result. The intent does not bypass PokeClaw safety, permissions, or tool rules.
For chat instead of task mode, use:
io.agents.pokeclaw.RUN_CHATchatThe same pattern should work from Tasker or Locale-style tools as long as they launch the exported PokeClaw automation activity with an explicit package/class. The broadcast receiver is still available for ADB and compatible callers, but Android can block a background broadcast receiver from opening an activity on modern target SDKs.
Task example:
adb shell am broadcast \
-a io.agents.pokeclaw.RUN_TASK \
-p io.agents.pokeclaw \
--es task "Summarize my notifications and tell me what is urgent"
Chat example:
adb shell am broadcast \
-a io.agents.pokeclaw.RUN_CHAT \
-p io.agents.pokeclaw \
--es chat "What can you see on my phone right now?"
Supported extras:
task / task_b64chat / chat_b64request_idreturn_actionreturn_packageIf return_action is provided, PokeClaw sends callback broadcasts with status, request_id, and either result or error. Current statuses are accepted, completed, failed, cancelled, blocked, and rejected. RUN_TASK sends accepted plus a terminal callback; RUN_CHAT currently sends only the immediate accepted callback.
If you want something added, please open an issue. The roadmap above is intentionally built from real requests like:
PokeClaw is moving fast, and the roadmap is being shaped directly by real device reports, feature requests, and QA results. If you want to help push local phone agents forward:
Every star helps more people find the project. Every issue helps shape the next release.
AgentConfig.Builder.build() but the runtime construction path is ResolvedModelConfig.toAgentConfig() which uses the data class constructor directly. Verified via in-app logs: zero PromptUtils entries on v0.7.0 even with the prompt set. v0.7.1 also injects in toAgentConfig so the global prompt now reaches every cloud + local LLM call..litertlm URL (HuggingFace mirror, your own server, etc.) and it appears as a new row in the Available Models list alongside the built-in Gemma options. File-size validation is relaxed for custom models because we can't know the expected size up front.libOpenCL.so is present at any of the well-known driver paths — community OEM reporters can self-diagnose GPU-path issues without a back-and-forth.io.agents.pokeclaw.automation.ExternalAutomationActivity with RUN_TASK / RUN_CHAT and the same task / chat extras.RUN_TASK and RUN_CHAT Android broadcast entrypoints for MacroDroid, Tasker, Locale-style automation apps, and ADB callers.Send Intent macro successfully triggered PokeClaw, ran how much battery left, and returned the live battery result in the PokeClaw chatroom.Settings -> Remote Control -> External Automation is off by default and shows a confirmation before allowing trusted local automation apps to call PokeClaw.RUN_TASK supports immediate accepted and terminal completed / failed / cancelled / blocked / rejected callback statuses when callers provide a return action. True callback-consumer E2E remains open for a Tasker/MacroDroid receiver profile..litertlm downloads.models directory cannot be created or written on a device/ROM, PokeClaw falls back to internal app storage instead of failing later with ENOENT while opening the .downloading file.Settings -> About -> Report a Bug includes the selected, external, and internal model directories, their readable/writable/stat status, and any storage-selection error.LocalModelManager, so download/storage failures carry the storage decision path.QA_CHECKLIST.md now has a per-release gate record template so future releases must explicitly record direction, harness, scope, build/test, artifact, device-smoke, distribution, and user-followup status.send hi to Girlfriend on WhatsApp now route straight to the direct send_message tool, and the focused Pixel 8 Pro regression for the wrong-chat send path now passes.ToolResult, and always clean up task state, which prevents a class of ANR-style failures during quick tasks.ForegroundServiceDidNotStartInTimeException crashes when a task exits early.Failed: task answers as real failures.17 PASS / 0 FAIL / 1 BLOCKED / 2 TIMEOUT / 20 TOTAL; WhatsApp latest-chat summary and copy-latest-email-subject-to-Google still time out, and one call task remains blocked by missing test contact data.ENOENT before the .litertlm file could even be written.Settings -> About -> Report a Bug generates a ZIP with app state, filtered logcat, rolling app logs, and recent HTTP logs for device-specific model, download, accessibility, and monitor failures.0.6.4 bugfix line. This ships the fixes that were only sitting in the 0.6.5 debug prerelease, so users no longer need to test a debug cut to get them.LocalBackendHealthTest now matches the current crash-marker API again, so the release branch passes its backend-health unit tests instead of failing on stale constructor calls.say hi no longer misroute into send-message behavior, while Cloud task flows still retain their multi-step capability.Active model, Default local model, and Default cloud model, and linked built-in Gemma rows no longer pretend the model is missing when the file is already usable.Task running... bar, while true long-running work still shows the correct active state.session already exists race.10/10, and the Gmail-subject-to-Google exploratory task passed 8/10, which is the right standard for stochastic Cloud flows.release APK instead of accidentally shipping a debug artifact.SHA256SUMS.txt alongside the APK for easier verification.Unlimited when no manual budget is set.0.4.0 builds do show the v0.5.0 in-app update prompt, but upgrading from the old public debug signing path to the new public APK is a one-time uninstall + reinstall instead of an in-place replace.Experimental — more workflows coming soon.PokeClaw exists because of Gemma 4 by Google DeepMind. Thank you to Clément Farabet, Olivier Lacombe, and the entire Gemma team for shipping an open model with native tool calling under Apache 2.0. You made it possible for a solo developer to build a working phone agent in two nights. The LiteRT-LM runtime is what makes on-device inference practical.
Also inspired by the OpenClaw community 🦞 for proving that AI agents that actually do things are what people want.
And thank you to Claude Code by Anthropic. I'm a CS dropout with zero Android development experience. Claude Code made it possible for me to go from nothing to a working app in two nights. The future is wild.
PokeClaw is a trademark of Nicole / agents.io. The name "PokeClaw" and the PokeClaw logo may not be used to endorse or promote products derived from this software without prior written permission. Forks must be renamed before distribution.
Apache 2.0
Contributors sign our CLA before their first PR is merged.
712 followers · starred Apr 2026
416 followers · starred Apr 2026
3 followers · starred Apr 2026
177 followers · starred Apr 2026
PokeClaw (PocketClaw) — first on-device AI that controls your Android phone. Gemma 4, no cloud, no API key. Poke is short for Pocket.
Kotlin
1,096
248 commits
updated Jun 2, 2026
🌐 Landing Page — available in English · हिन्दी · 日本語 · Deutsch · 繁中
PokeClaw, also known as PocketClaw, is an open-source Android app for AI phone automation.
It can run Gemma 4 on-device for local, private phone control, and it also supports optional cloud models when you want stronger reasoning for harder tasks.
The current public build is a local-first prototype for turning an Android phone into an AI-operated device.
In Local mode, model execution stays inside your device. No account or API key is required for Local mode.
Everyone else: Phone → Internet → Cloud API → Internet → Phone
💳Credit card needed, API key required. Monthly bill attached.
PokeClaw local: Phone → LLM → Phone
Local-first when you want it. Optional cloud when you need it.
AI can control your phone, with local-first execution and optional cloud help.
The current public build is open-source and already handles real chat, task, and automation flows on Android.
Monitor a WhatsApp contact and auto-reply:
Context-aware WhatsApp auto-reply:
https://github.com/user-attachments/assets/5a43d4d5-458a-4eea-a0a5-58d113255741
https://github.com/user-attachments/assets/5c2966c5-04e6-4b22-8d66-11915ae62096
☝️ Auto-reply demo: PokeClaw monitors messages from Mom, reads what she said, and replies based on context using the on-device LLM. Watch in higher resolution on YouTube
☝️ Context demo: Mom asks "what did I tell you to bring?" — the AI opens the chat, reads the full conversation on screen, sees the earlier message about wine, and replies correctly. This is the difference between context-aware and context-free replies.
https://github.com/user-attachments/assets/89999dd8-a1be-49ad-9419-60c2b38f6374
Why is the "hi" demo slow? That clip was recorded on a CPU-only Android device with no usable GPU or NPU path. Running Gemma 4 E2B on pure CPU takes about 45 seconds to warm up. On stronger phones it is much faster:
- Google Tensor G3/G4 (Pixel 8, Pixel 9)
- Snapdragon 8 Gen 2/3 (Galaxy S24, OnePlus 12)
- Dimensity 9200/9300 (recent MediaTek flagships)
- Snapdragon 7+ Gen 2+ (mid-range with GPU)
On these devices, warmup drops to seconds. Same model, better hardware.
I'm building this solo. When Gemma 4 landed with native tool calling on LiteRT-LM, I wanted to know whether a phone could become a real on-device agent instead of just another chatbot. PokeClaw is the result.
The interesting part is not just chatting with a local model. The interesting part is getting a local model to read the screen, choose tools, operate apps, keep task state, and finish real phone workflows. That is exactly what this project is built for.
PokeClaw already supports fully on-device automation with Gemma 4 and optional cloud models for stronger task execution. The current focus is broader device support, more generic skills, more local model options, and a cleaner public release path.
If you hit something interesting, open an issue. Real device reports are how this gets better fast.
PokeClaw is not just a chat app with a few phone-control tricks glued on top.
At its core, it is becoming a mobile agent harness:
That distinction matters. The long-term goal is not to hardcode one-off app flows forever. The goal is to build the strongest practical harness for AI phone agents on Android, then ship product experiences on top of that foundation.
That is also why the project invests so heavily in:
That direction affects how bugs are prioritized. PokeClaw should fix deterministic harness, runtime, hardware, storage, accessibility, foreground-service, signing, and QA-runner problems before drilling into one flaky model task.
Examples of harness problems worth fixing immediately:
Examples that should usually be treated as model-performance or exploratory-agent limits unless logs prove otherwise:
Prompts, tools, skills, and playbooks should stay generic. Add structure when it improves a reusable class of tasks; avoid one-off prompt hacks or coordinate scripts just to make a single demo pass.
There are already strong mobile-agent frameworks for developers, benchmarks, and cloud/desktop-controlled devices. DroidRun/Mobilerun, minitap/mobile-use, Mobile-Agent, and AppAgent-style systems are useful references, especially for planning, UI observation, benchmark design, and failure recovery. They are not the same deployment category as PokeClaw:
PokeClaw should not try to become another PC/SDK/ADB-driven mobile automation framework. Its product lane is different:
External automation tools are still useful. Tasker, MacroDroid, Locale, and similar apps are good deterministic trigger engines. PokeClaw should let them trigger an AI task, but PokeClaw should remain the phone-resident execution harness.
👉 Try the interactive demo on our landing page — click through every screen without installing anything.
The model picks the right tool, fills in the parameters, and executes. You don't configure anything per-app. It just reads the screen and acts.
These are tasks we have already run end-to-end during on-device QA.
pokeclawEvery number below comes from repeated trials on a physical Pixel 8 Pro running release builds. No cherry-picked runs, no emulators. The full verified task list and tier breakdown is in thoughts/verified-task-capabilities.md.
| Task | Result | Rounds | What happens |
|---|---|---|---|
| Search YouTube for lofi beats | ✅ | 9 | Opens YouTube, types query, hits search |
| Open Chrome and search for weather | ✅ | 9 | Opens Chrome, types query, reads results |
| Open Chrome and go to reddit.com | ✅ | 7 | URL navigation with node_id targeting |
| Compose email to [email protected] | ✅ | 12 | Opens Gmail, fills To + Subject + Body |
| Install Telegram from Play Store | ✅ | 14 | Search + tap Install + wait |
| Turn on do not disturb | ✅ | 12 | Navigates Settings, toggles DND |
| Open Settings, go to About Phone | ✅ | varies | Deep settings navigation |
| Send hi to Mom on WhatsApp | ✅ | 5 | Opens WhatsApp, finds contact, types, sends |
| Check my Instagram messages | ✅ | 5 | Handles typo ("instagarm"), opens correct app |
| 部機仲有幾多storage | ✅ | 2 | Cantonese input, returns answer in 中文 |
| 打開Instagram | ✅ | varies | Chinese command |
| Draft an email saying I'll be late | ✅ 10/10 | 8 | Repeated trials: 100% pass rate |
| Copy latest email subject and Google it | ✅ 8/10 | 15 | Gmail to Chrome cross-app flow, 80% pass rate |
All tasks use zero hardcoded app logic. The model reads the screen, picks tools, and figures out the flow on its own. Multi-language works out of the box, including Cantonese, Mandarin, and misspelled English.
| Task family | Result | CPU avg (Pixel 8 Pro) | GPU avg (Pixel 8 Pro) | Notes |
|---|---|---|---|---|
| Clipboard explain | ✅ | 2m 43s | 2m 11s | Real clipboard read |
| Notifications summary | ✅ | 2m 49s | 2m 53s | Reads live notifications and summarizes |
| Battery advice | ✅ | 2m 12s | 2m 53s | Returns level + charging state |
| Storage + apps cleanup advice | ✅ | 2m 33s | 3m 06s | Harness used to mislabel this as blocked because the answer mentioned the Contacts app |
For the current local-core quick-task bundle on a Pixel 8 Pro, Gemma 4 E2B passed 4/4 on both CPU and GPU. Cold-start average time was 2m 34s on CPU versus 2m 46s on GPU, so GPU is now verified and usable on this device, but it is not yet a cold-start speed win for this short task bundle. The value of the recent hardening work is stability and real backend verification, not inflated benchmark theater.
PokeClaw gives a small on-device LLM a set of tools (tap, swipe, type, open app, send message, enable auto-reply, etc.) and lets it decide what to do. The LLM sees a text representation of the current screen, picks an action, sees the result, picks the next action, until the task is done.
Local execution runs via LiteRT-LM with native tool calling. In Local mode, the model runs on-device.
The LLM has access to these tools and picks them autonomously:
| Tool | What it does |
|---|---|
tap / swipe / long_press | Touch the screen |
input_text | Type into any text field |
open_app | Launch any installed app |
send_message | Full messaging flow: open app, find contact, type, send |
auto_reply | Monitor a contact and reply automatically using LLM |
get_screen_info | Read current UI tree |
take_screenshot | Capture screen |
finish | Signal task completion |
These tools are generic — they work with any app, any contact, any language. The LLM picks the right tool and fills in the parameters from your request.
Small on-device models get dramatically better when you give them a strong playbook. So we give PokeClaw reusable skills on top of generic tools.
The auto-reply feature is a good example. It doesn't work by magic — there's a predefined workflow behind it: open the chat → read all visible messages on screen → generate a context-aware reply → send it → go back to home. The model follows this recipe step by step. Every tool in that chain is generic: open_app works with any app, read_screen works on any screen, send_message works with any contact. The workflow just tells the model which tools to use and in what order.
This is what we're calling Skills — reusable workflows built from generic tools. We're actively designing a skill system inspired by Claude Code's skill architecture. The idea: anyone can write a skill as a simple text file that describes the steps, and the LLM follows it.
Some examples of what skills can do:
Each skill is just a combination of the same generic tools (open_app, tap, type, read_screen, send_message, etc.) arranged in a specific order. The tools are the building blocks, the skills are the recipes.
Both are designed to be extensible. We're building the first 8-10 skills as built-in defaults. If the system works well, we'll open it up for the community to create and share their own tools and skills. You know your phone better than we do — you should be able to teach it new tricks.
As on-device models get smarter, more of this can become free-form. Right now, skills are how we get reliable automation out of a small local model while keeping the tool layer generic.
Note: If you are updating from an older public debug build and Android says the package is incompatible, uninstall the old build once and then install the latest APK fresh. Older public debug builds still receive the in-app update prompt, but they need a one-time reinstall before joining the stable-signed
0.6.xline.
| Minimum | Recommended | |
|---|---|---|
| Android | 9+ | 12+ |
| Architecture | arm64 | arm64 |
| RAM | 8 GB | 12 GB+ |
| Storage | 3 GB free (model download) | 5 GB+ |
| GPU | Not required (CPU works) | Tensor G3/G4, Snapdragon 8 Gen 2+, Dimensity 9200+ |
| Root | Not required | Not required |
⚠️ 8 GB gets you in the door. 12 GB+ is the sweet spot for the built-in Gemma 4 local models, especially if you want smoother multitasking and faster model bring-up.
Local mode needs no account and no API key. Cloud mode is optional.
This is the current direction for PokeClaw based on real device testing, open issues, and the most common feature requests.
.litertlm models. User-accessible local model import is on the roadmap so you can bring your own LiteRT model instead of being locked to the built-in download list.Android/data/... sandboxes from normal file-pickers, so PokeClaw cannot generically "see" Edge Gallery's downloaded models unless they are exported into a user-accessible location first./start or task-message step. Treat this as an environment blocker, not a PokeClaw channel failure.PokeClaw exposes a user-enabled Android intent entrypoint for Tasker, MacroDroid, Locale, ADB, and other trusted local automation tools.
The setting is off by default. Enable it from Settings -> Remote Control -> External Automation.
The external automation contract is designed for Tasker, MacroDroid, Locale, and similar Android automation apps. The verified end-to-end path today is MacroDroid.
Verified on a Pixel 8 Pro on 2026-04-30:
Shortcut LaunchedSend IntentActivityio.agents.pokeclaw.RUN_TASKio.agents.pokeclawio.agents.pokeclaw.automation.ExternalAutomationActivitytask = how much battery leftMacroDroid setup:
Settings -> Remote Control -> External Automation.User Input -> Shortcut Launched.Device Actions -> Send Intent.Target to Activity.Action to io.agents.pokeclaw.RUN_TASK.Package to io.agents.pokeclaw.Class to io.agents.pokeclaw.automation.ExternalAutomationActivity.Extra 1 name to task.Extra 1 value to the task text, for example how much battery left.Test macro.Expected result: PokeClaw opens, records the task in the chatroom, runs the task through the normal harness, and shows the result. The intent does not bypass PokeClaw safety, permissions, or tool rules.
For chat instead of task mode, use:
io.agents.pokeclaw.RUN_CHATchatThe same pattern should work from Tasker or Locale-style tools as long as they launch the exported PokeClaw automation activity with an explicit package/class. The broadcast receiver is still available for ADB and compatible callers, but Android can block a background broadcast receiver from opening an activity on modern target SDKs.
Task example:
adb shell am broadcast \
-a io.agents.pokeclaw.RUN_TASK \
-p io.agents.pokeclaw \
--es task "Summarize my notifications and tell me what is urgent"
Chat example:
adb shell am broadcast \
-a io.agents.pokeclaw.RUN_CHAT \
-p io.agents.pokeclaw \
--es chat "What can you see on my phone right now?"
Supported extras:
task / task_b64chat / chat_b64request_idreturn_actionreturn_packageIf return_action is provided, PokeClaw sends callback broadcasts with status, request_id, and either result or error. Current statuses are accepted, completed, failed, cancelled, blocked, and rejected. RUN_TASK sends accepted plus a terminal callback; RUN_CHAT currently sends only the immediate accepted callback.
If you want something added, please open an issue. The roadmap above is intentionally built from real requests like:
PokeClaw is moving fast, and the roadmap is being shaped directly by real device reports, feature requests, and QA results. If you want to help push local phone agents forward:
Every star helps more people find the project. Every issue helps shape the next release.
AgentConfig.Builder.build() but the runtime construction path is ResolvedModelConfig.toAgentConfig() which uses the data class constructor directly. Verified via in-app logs: zero PromptUtils entries on v0.7.0 even with the prompt set. v0.7.1 also injects in toAgentConfig so the global prompt now reaches every cloud + local LLM call..litertlm URL (HuggingFace mirror, your own server, etc.) and it appears as a new row in the Available Models list alongside the built-in Gemma options. File-size validation is relaxed for custom models because we can't know the expected size up front.libOpenCL.so is present at any of the well-known driver paths — community OEM reporters can self-diagnose GPU-path issues without a back-and-forth.io.agents.pokeclaw.automation.ExternalAutomationActivity with RUN_TASK / RUN_CHAT and the same task / chat extras.RUN_TASK and RUN_CHAT Android broadcast entrypoints for MacroDroid, Tasker, Locale-style automation apps, and ADB callers.Send Intent macro successfully triggered PokeClaw, ran how much battery left, and returned the live battery result in the PokeClaw chatroom.Settings -> Remote Control -> External Automation is off by default and shows a confirmation before allowing trusted local automation apps to call PokeClaw.RUN_TASK supports immediate accepted and terminal completed / failed / cancelled / blocked / rejected callback statuses when callers provide a return action. True callback-consumer E2E remains open for a Tasker/MacroDroid receiver profile..litertlm downloads.models directory cannot be created or written on a device/ROM, PokeClaw falls back to internal app storage instead of failing later with ENOENT while opening the .downloading file.Settings -> About -> Report a Bug includes the selected, external, and internal model directories, their readable/writable/stat status, and any storage-selection error.LocalModelManager, so download/storage failures carry the storage decision path.QA_CHECKLIST.md now has a per-release gate record template so future releases must explicitly record direction, harness, scope, build/test, artifact, device-smoke, distribution, and user-followup status.send hi to Girlfriend on WhatsApp now route straight to the direct send_message tool, and the focused Pixel 8 Pro regression for the wrong-chat send path now passes.ToolResult, and always clean up task state, which prevents a class of ANR-style failures during quick tasks.ForegroundServiceDidNotStartInTimeException crashes when a task exits early.Failed: task answers as real failures.17 PASS / 0 FAIL / 1 BLOCKED / 2 TIMEOUT / 20 TOTAL; WhatsApp latest-chat summary and copy-latest-email-subject-to-Google still time out, and one call task remains blocked by missing test contact data.ENOENT before the .litertlm file could even be written.Settings -> About -> Report a Bug generates a ZIP with app state, filtered logcat, rolling app logs, and recent HTTP logs for device-specific model, download, accessibility, and monitor failures.0.6.4 bugfix line. This ships the fixes that were only sitting in the 0.6.5 debug prerelease, so users no longer need to test a debug cut to get them.LocalBackendHealthTest now matches the current crash-marker API again, so the release branch passes its backend-health unit tests instead of failing on stale constructor calls.say hi no longer misroute into send-message behavior, while Cloud task flows still retain their multi-step capability.Active model, Default local model, and Default cloud model, and linked built-in Gemma rows no longer pretend the model is missing when the file is already usable.Task running... bar, while true long-running work still shows the correct active state.session already exists race.10/10, and the Gmail-subject-to-Google exploratory task passed 8/10, which is the right standard for stochastic Cloud flows.release APK instead of accidentally shipping a debug artifact.SHA256SUMS.txt alongside the APK for easier verification.Unlimited when no manual budget is set.0.4.0 builds do show the v0.5.0 in-app update prompt, but upgrading from the old public debug signing path to the new public APK is a one-time uninstall + reinstall instead of an in-place replace.Experimental — more workflows coming soon.PokeClaw exists because of Gemma 4 by Google DeepMind. Thank you to Clément Farabet, Olivier Lacombe, and the entire Gemma team for shipping an open model with native tool calling under Apache 2.0. You made it possible for a solo developer to build a working phone agent in two nights. The LiteRT-LM runtime is what makes on-device inference practical.
Also inspired by the OpenClaw community 🦞 for proving that AI agents that actually do things are what people want.
And thank you to Claude Code by Anthropic. I'm a CS dropout with zero Android development experience. Claude Code made it possible for me to go from nothing to a working app in two nights. The future is wild.
PokeClaw is a trademark of Nicole / agents.io. The name "PokeClaw" and the PokeClaw logo may not be used to endorse or promote products derived from this software without prior written permission. Forks must be renamed before distribution.
Apache 2.0
Contributors sign our CLA before their first PR is merged.
712 followers · starred Apr 2026
416 followers · starred Apr 2026
3 followers · starred Apr 2026
177 followers · starred Apr 2026