Open Gui Remote Control logo

Open Gui Remote Control

OrganizationPopular
Core-Mate
open-gui-remote-control

Control an Android phone through OpenGUI from an AI coding agent such as Claude Code, Codex, or OpenCode. Use when an agent should list online devices, run a natural-language mobile task, check execution status, pause, resume, or cancel through the local OpenGUI backend and CLI.

Overview

PublisherCore-Mate
RepositoryOpenGUI
Skill nameopen-gui-remote-control
Stars
1.8K
Forks
111
Bundled files
1
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by Core-Mate on GitHub. Read the source before you install it.

Installation

Install the Open Gui Remote Control AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/Core-Mate/OpenGUI.git /tmp/OpenGUI
mkdir -p .claude/skills
cp -r /tmp/OpenGUI/skills/open-gui-remote-control .claude/skills/open-gui-remote-control
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Open Gui Remote Control in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Open Gui Remote Control on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Open Gui Remote Control is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

OpenGUI Remote Control

Use this skill when an AI coding agent such as Claude Code, Codex, or OpenCode needs to operate an Android phone through OpenGUI.

The agent should not drive the phone with raw adb shell input commands. The supported path is:

text
Claude Code / Codex / OpenCode
  -> server CLI or REST API
  -> OpenGUI backend task/execution services
  -> standby dispatch
  -> Android client
  -> execution socket action loop

Trigger Guidance

Start this skill when the user asks for any of these:

  • "Use OpenGUI to control my phone"
  • "让 Codex 操控手机"
  • "Use OpenCode to control my phone through OpenGUI"
  • "Run this task on the Android device"
  • "Use the OpenGUI CLI"
  • "List OpenGUI devices"
  • "Check / pause / resume / cancel an OpenGUI execution"
  • "让 Claude Code 通过 OpenGUI 跑手机任务"

If the user asks to install or bootstrap OpenGUI from scratch, use open-gui-bootstrap first. After backend and Android client are running, return to this skill for task execution.

Core Rules

  • First obtain or locate a runnable OpenGUI checkout. The CLI cannot work without the repository.
  • Use the repository CLI first: cd server && pnpm opengui -- ....
  • Use --json whenever the result will be parsed by the coding agent.
  • Do not ask the user to run terminal commands that the agent can run.
  • Ask the user only for physical phone actions, Android permissions, or missing secrets.
  • Do not change Android socket event names or payloads.
  • Do not use IM commands for this workflow.
  • Do not bypass OpenGUI with coordinate-only adb shell input scripts.
  • Treat devices as standby presence only; execution can still fail because of model config, Android permissions, app state, or device lifecycle.

Repository Source

OpenGUI's runnable source checkout is:

text
https://github.com/Core-Mate/OpenGUI

The checkout must contain both:

  • server/package.json
  • client/start.sh

If those paths are missing, the current directory is not the runnable OpenGUI checkout.

Local Or Remote Workspace

Before using this skill, decide where OpenGUI should run.

Use a local workspace when:

  • the Android phone is connected to the same machine by USB
  • adb reverse tcp:7777 tcp:7777 should be used
  • the agent has terminal access to the developer machine

Use a remote workspace only when:

  • the user explicitly asks to run OpenGUI on a remote host
  • the remote host can reach the Android device or a device bridge
  • the backend URL used by the Android client is reachable from the phone

Do not silently choose a remote host for phone control. USB debugging, adb reverse, Android build/install, and phone-side permissions are usually local-machine operations.

Checkout Acquisition

If the current directory already contains the runnable checkout, use it.

If the current directory is a wrapper directory, search one level down for the runnable checkout before cloning:

bash
find . -maxdepth 3 -type f -path '*/server/package.json' -print
find . -maxdepth 3 -type f -path '*/client/start.sh' -print

If no runnable checkout exists and the user wants the agent to set it up locally, clone the public repository:

bash
git clone https://github.com/Core-Mate/OpenGUI.git
cd OpenGUI

If the destination already exists, do not overwrite it. Enter the existing directory, inspect git status, and pull only when the user asked for the latest code or when the checkout is clean enough to update safely.

If the user wants a remote setup, SSH to the remote host first, then perform the same checkout detection or clone on that host. Keep the backend URL and Android connectivity explicit; a backend running on a remote host will not be reachable through local adb reverse unless the user has provided a bridge.

Preconditions

Before sending a task, verify these conditions:

  • backend is reachable at http://localhost:7777 unless the user gave another base URL
  • Android client is installed and open
  • adb reverse tcp:7777 tcp:7777 has been applied for a USB-connected phone
  • phone-side USB debugging is approved
  • Accessibility Service is enabled
  • overlay permission is enabled when needed
  • at least one standby device is online

If the backend or client is not running, use the repository scripts:

bash
cd server
./start.sh
bash
cd client
./start.sh

CLI Reference

Run commands from the server/ directory.

List online standby devices:

bash
pnpm opengui -- devices --json

Create and run a new task:

bash
pnpm opengui -- do "观察当前手机屏幕,简要描述你看到了什么,然后结束" --json

Run a task on a specific device:

bash
pnpm opengui -- do "打开设置,检查当前网络状态" --device <deviceId> --json

Run an existing task:

bash
pnpm opengui -- run <taskId> --json

Check execution status:

bash
pnpm opengui -- status <executionId> --json

Pause, resume, or cancel:

bash
pnpm opengui -- pause <executionId> --json
pnpm opengui -- resume <executionId> "继续执行,但不要打开新的 App" --json
pnpm opengui -- cancel <executionId> --json

Use a non-default backend:

bash
pnpm opengui -- devices --base-url http://localhost:7777 --json

Base URL priority:

text
--base-url > OPENGUI_BASE_URL > http://localhost:7777

Standard Workflow

1. Obtain the runnable checkout

Find or clone https://github.com/Core-Mate/OpenGUI.

Then work from the repository root that contains both:

  • server/package.json
  • client/start.sh

If the current directory is a wrapper repo, find the nested runnable checkout before running commands. If no runnable checkout exists, clone it or ask for the intended repository location.

2. Verify backend

Check the backend before task dispatch:

bash
curl -fsS http://localhost:7777/docs >/dev/null

If this fails, start the backend:

bash
cd server
./start.sh

If start.sh creates .env and exits, ask only for the missing model keys required for execution, then run it again.

3. Verify Android client

Prefer the repo script:

bash
cd client
./start.sh

If a device is already installed and connected, still make sure reverse proxy is set:

bash
adb reverse tcp:7777 tcp:7777

Only interrupt the user for phone-side prompts:

  • approve USB debugging
  • enable Accessibility Service
  • enable overlay permission
  • keep the OpenGUI app open

4. List devices

Use JSON output:

bash
cd server
pnpm opengui -- devices --json

If no devices are returned, do not dispatch a task. Ask the user to open the Android app and complete the required permissions, then retry.

If multiple devices are returned, choose the intended one by deviceId. If the user did not specify a device and the task is low-risk, use the first online device.

5. Dispatch the task

For a new natural-language task:

bash
pnpm opengui -- do "<task description>" --device <deviceId> --json

For an existing task:

bash
pnpm opengui -- run <taskId> --device <deviceId> --json

Capture executionId from the response.

Before continuing, make sure the user knows that the active execution can be stopped with:

bash
pnpm opengui -- cancel <executionId> --json

6. Poll status

Poll until the execution reaches a terminal state:

bash
pnpm opengui -- status <executionId> --json

Terminal outcomes usually include success, cancellation, or failure states in the backend execution result. If the status stays running for a long time, inspect backend logs before assuming the phone is stuck.

7. Control the execution when needed

Cancel when the user asks to stop or the task is clearly wrong:

bash
pnpm opengui -- cancel <executionId> --json

Pause when human feedback is needed:

bash
pnpm opengui -- pause <executionId> --json

Resume with concise feedback:

bash
pnpm opengui -- resume <executionId> "<feedback>" --json

Feedback should be specific to the current phone state, for example:

  • "继续搜索,但不要点击广告结果"
  • "回到上一页,然后重新打开搜索框"
  • "任务已经完成,可以结束"

Failure Handling

Backend is unreachable

Symptom:

text
fetch failed

Action:

  • check whether backend is running
  • start it with cd server && ./start.sh
  • if another port is used, pass --base-url

No online device

Symptom:

text
No online device. Start the Android app on the work phone first.

Action:

  • ask the user to open the OpenGUI Android app
  • verify USB debugging approval
  • run adb reverse tcp:7777 tcp:7777
  • verify Accessibility Service and overlay permission
  • retry pnpm opengui -- devices --json

Device ID is not online

Symptom:

text
Device "<deviceId>" is not online

Action:

  • list devices again
  • use a currently online deviceId
  • if the expected phone disappeared, ask the user to reopen the app

Execution starts but does not progress

Action:

  • check backend logs
  • confirm model keys and base URLs are configured
  • confirm the phone screen is unlocked
  • confirm Accessibility Service is still enabled
  • cancel only when the task is clearly unrecoverable or the user asks to stop

Execution succeeds but summary is weak

Action:

  • check execution logs before rerunning the task
  • if logs show that the VLM observed the screen, treat this as a summarization or persistence issue, not a transport failure

REST API Reference

The CLI wraps these local backend endpoints:

text
GET  /api/remote-control/devices
POST /api/remote-control/tasks/do
POST /api/remote-control/tasks/run
GET  /api/remote-control/executions/:id
PUT  /api/remote-control/executions/:id/cancel
PUT  /api/remote-control/executions/:id/pause
PUT  /api/remote-control/executions/:id/resume

Prefer the CLI unless the user explicitly asks for direct REST usage.

Completion Criteria

Before saying the phone was controlled successfully, provide evidence:

  • selected deviceId
  • created or reused taskId
  • executionId
  • final execution status/result
  • any important backend or device-side limitation observed

If the task could not be run, state the concrete blocker and the next required phone-side or config action.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Open Gui Remote Control AI skill do?

Control an Android phone through OpenGUI from an AI coding agent such as Claude Code, Codex, or OpenCode. Use when an agent should list online devices, run a natural-language mobile task, check execution status, pause, resume, or cancel through the local OpenGUI backend and CLI.

Why use Open Gui Remote Control on TypingMind?

Because you install it once and use it with any model. Open Gui Remote Control is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Open Gui Remote Control in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Core-Mate/OpenGUI/tree/main/skills/open-gui-remote-control. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Open Gui Remote Control?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Open Gui Remote Control?

As many as you like. As long as a model supports skills, you can use Open Gui Remote Control with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Open Gui Remote Control AI skill free?

It is published on GitHub by Core-Mate. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇