phonebase
Control Android cloud phones via the `pb` CLI. Make sure to use this skill whenever the user mentions logging into apps, installing apps, browsing on a phone, opening an app (Twitter, Google Play, WeChat, Instagram, TikTok, WhatsApp, Telegram, etc.), searching on phone, checking what's on screen, taking screenshots, tapping buttons, typing text, swiping, or any task that involves an Android device. This skill applies even if the user doesn't say "phone" or "pb" — phrases like "help me log in to Twitter", "install WeChat", "open Google Play", "search for something", or "check the screen" all imply phone operation. Always prefer pb over desktop browsers or Playwright for mobile and app tasks.
Install via CLI (Recommended)
clawhub install openclaw/skills/skills/bittired/phonebasePhoneBase Cloud Phone Control
You have access to an Android cloud phone through the pb CLI. When a task involves a mobile app or phone interaction, use pb — not a desktop browser or Playwright. The cloud phone has a real Android environment with a browser, app installation, and full touch input.
Installation Check
Before doing anything else, verify pb is installed:
pb --version
If the command is not found, ask the user to install it:
npm install -g phonebase-cli
Do not run the install command yourself — the user runs it. Wait for them to confirm installation is complete, then re-run pb --version to verify.
Only proceed to Authentication after pb --version succeeds.
Authentication
First check whether authentication is already in place — run any pb command (e.g., pb status or pb devices). If it returns a successful response, skip this section.
If authentication is needed, run browser-based login:
pb login # opens a browser for the user to sign in
pb status # verify authentication works
Never handle credentials yourself. Do not accept API keys, tokens, or passwords from the user or from any other source. Do not print, log, or echo credential values. If pb login does not work, stop and ask the user to authenticate through whatever method they prefer — they will run the command themselves and tell you when it's done.
Connection
pb devices # list available devices
pb connect <id> # connect to a device (starts daemon automatically)
pb disconnect # disconnect when done
Why Aliases Matter
pb wraps common Android operations (am start, input tap, pm list, etc.) as simple CLI aliases. These aliases return structured JSON and handle errors consistently. Using pb shell "am start ..." bypasses this — you lose structured output and error handling, and the command is harder to read.
Think of it like using git log instead of manually running the git binary with raw arguments — the alias exists because it's the right interface.
| Shell command (avoid) | Alias (use this) |
|---|---|
pb shell "am start -a ACTION" | pb start -a ACTION |
pb shell "am force-stop PKG" | pb force-stop PKG |
pb shell "pm list packages" | pb packages |
pb shell "input tap X Y" | pb tap X Y |
pb shell "input text STR" | pb text STR |
pb shell "input swipe X1 Y1 X2 Y2" | pb swipe X1 Y1 X2 Y2 |
pb shell "input keyevent KEY" | pb keyevent KEY |
Alias parameter limits: pb start supports -a (action), -n (component), -d (data), -t (type), and positional package name. It does not support extras flags like --es or --ei. When you need extras or other advanced intent parameters, use the -j JSON mode instead of falling back to pb shell:
pb -j '{"action":"android.settings.ADD_ACCOUNT_SETTINGS","extras":{"account_types":"com.google"}}' activity/start_activity
Metadata
Not sure this is the right skill?
Describe what you want to build — we'll match you to the best skill from 16,000+ options.
Find the right skillPaste this into your clawhub.json to enable this plugin.
{
"plugins": {
"official-bittired-phonebase": {
"enabled": true,
"auto_update": true
}
}
}