Set up Android Backstage
What you need
On your phone
Android 11 or newer, Wi-Fi for the first setup, and permission to turn on Developer options.
For your agent
A relay address and the relay owner’s API key. Local clients also need Node.js 20 or newer.
Prepare your phone
- Install Android Backstage.
Open this page on your phone and download the app. Open the APK and allow installation from your browser if Android asks.
Download Android app ↓1.1.0-alpha3 · Android 11+
- Open Backstage and allow notifications.
The notification lets you enter Android’s pairing code without closing its settings screen.
- Set up Android access.
In Backstage, open Android access and follow its link to Developer options. Turn on Wireless debugging, then choose Pair device with pairing code.
No Developer options? In Settings → About phone, tap Build number seven times and enter your phone PIN. Your phone may place Build number under Software information.
- Enter Android’s 6-digit code in Backstage’s notification.
Keep the pairing-code screen open while you do this. If notifications are unavailable, use split screen to show Backstage beside Settings. Return to Backstage when pairing finishes.
Choose your agent
Test the connection
Enable the Backstage tools in your agent, then send this:
Use Android Backstage on the device named phone. Read ro.product.model with a background command. Do not open or touch the main screen.
A working connection returns your phone’s model. If it fails, use the matching fix below.
Manage connections
“Codex on this computer” identifies a client installation. It does not identify one model, task, or conversation. All tasks using that client share its phone permission.
Pair clients separately
Pair ChatGPT Work, Cursor Cloud, and each computer separately. Pause or remove one in the phone app without cutting off the others.
Control access from the phone
Use the client’s card to rename, pause, allow, limit, or remove it. The short app-testing permission is limited; it does not allow full shell or arbitrary taps.
The relay dashboard shows connected devices and encrypted request traffic. Phone permissions stay in the phone app.
Downloads
1.1.0-alpha3
CLI, setup helper, MCP configs, plugins and skills
File checksums · Source on GitHub ↗ · GitHub repository access required.
Troubleshooting
I don’t see Wireless debugging
Connect the phone to Wi-Fi and enable Developer options. Android 11+ is required. Work-managed phones may disable this setting; ask the device owner or administrator.
The Android code expires or no notification appears
Allow Backstage notifications, open a new “Pair device with pairing code” screen, and leave it open. Enter its fresh six digits in the Backstage notification. Split screen is an alternative. This is not your agent’s Backstage link code.
The Backstage link code doesn’t connect
Keep the pairing command running on the client. Use the relay address that command shows and its current link code. Review the connection in the phone app and tap Connect assistant. If the command expired, start pairing again to get a fresh code.
It was working, then disconnected
Open Backstage on the same phone and check its access status. Resume access if paused. After a reboot or if Android stopped the helper, connect to Wi-Fi and turn Wireless debugging back on. Also check that the relay host and tunnel are running. A short network interruption normally reconnects automatically.
ChatGPT says the connection is blocked
Check that your account or workspace allows Developer mode and custom plugins. The server must use the exact public HTTPS MCP address. Ask the relay owner for a fresh approval code. If your workspace policy blocks custom tools, its administrator must allow them.
My agent has no Android tools
Check the config file location for your chosen agent, restart or refresh its MCP servers, and enable Android Backstage. The Node and CLI paths must point to files on the machine running that client. A local path on your laptop will not work inside a cloud VM.
The relay dashboard asks for a key
Use the relay account API key. It is not an Android pairing code, Backstage link code, or ChatGPT approval code. The owner can find the original key in the relay’s private first-api-key.txt file. Keep it private. The dashboard keeps the key in memory only and forgets it when you close or reload the page.
A request timed out — should I repeat it?
Check its job state in the dashboard. If the outcome is “unknown,” the phone may already have done the action. Check the result before repeating a write, send, install, or purchase.
Host your own relay
The relay forwards encrypted requests between a phone and a paired client. It needs a stable HTTPS address, Node.js 20+, and a persistent data folder.
- Get the source repository with your GitHub account. The repository is currently private.
- Run the relay on your server: Save the account API key printed on first start. Keep the data folder private and backed up.
RELAY_DATA_DIR=/var/lib/backstage node relay/server.mjs
- Put HTTPS in front of the relay with Cloudflare Tunnel or your reverse proxy. Point it at the relay’s port, 18421. Use your own stable domain.
- Use your HTTPS address and account key with the agent kit. Keep the relay running using your server’s service manager.
relay.android-backstage.com runs on the owner’s computer. Phone access needs that computer online.For ChatGPT Work, also run the separate trusted Work gateway and pair it with the phone. See the Work host guide. For Docker, storage and backups, see deployment docs.
Permissions
Full access lets a client run commands as Android’s shell user. Only grant it to clients you trust.
Local and cloud-VM clients encrypt commands and results before sending them to the relay. The relay can see device names, client IDs, timing, sizes and delivery states, but cannot read those commands.
ChatGPT Work uses a trusted gateway on the relay host. That gateway decrypts phone results and sends them to ChatGPT over HTTPS. Cloudflare handles that HTTPS traffic.