ADE App Control

SkillMonitoring & ops

Use this skill when you need to run or drive a local Electron/desktop app and capture what it does — launch it or attach to a running renderer, read its logs or answer its terminal prompts, click and type in it, or pull screenshot-backed DOM/source context into the chat — through `ade app-control`.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the ADE App Control skill

What this skill tells your AI

The instructions your AI receives, as published by arul28/ade in apps/desktop/resources/agent-skills/ade-app-control/SKILL.md and read by ahel’s review.

Use socket mode

App Control is a live desktop drawer service, so every command below uses --socket (the general rule is in the ade-cli-control-plane skill):

ade help app-control
ade --socket app-control status --text
ade --socket app-control claim --lane <lane-id> --text
ade --socket app-control launch --command "npm run dev" --text
ade --socket app-control connect --cdp-port <port> --text

ADE sets ADE_APP_CONTROL_CDP_PORT and ADE_APP_CONTROL_DEBUG_FLAGS for launches. Custom Electron launchers should forward one of those values to --remote-debugging-port. launch, connect, and claim all carry lane/session ownership; see "Owning a drawer surface" in the ade-cli-control-plane skill for when claim is required.

Inspect

ade --socket app-control snapshot --text
ade --socket app-control elements --text
ade --socket app-control select --x <x> --y <y> --text

Use Inspect mode or select to return screenshot-backed DOM, selector, and source context. When the session is owned by a chat or tracked CLI session, ADE can attach the selection to that active Work surface.

Act

ade --socket app-control click --x <x> --y <y> --text
ade --socket app-control type --value "text" --text

Use Control mode for input. Re-snapshot after meaningful UI changes.

Logs and terminal

Start with App Control status, then prefer App Control terminal/log commands:

ade --socket app-control logs --text --max-bytes 8388608
ade --socket app-control terminal write --data "y\n"
ade --socket app-control terminal signal --signal SIGINT

Only fall back to ade --socket terminal list --text and ade --socket terminal read ... when no App Control terminal is active.

Launching ADE itself from inside ADE

If you are an agent running inside one ADE instance (e.g. ADE Beta or stable) and you need to launch the ADE dev desktop app under App Control, the dev launcher is already isolated and safe to run:

ade --socket app-control launch --command "npm run dev" --text

npm run dev uses its own runtime socket (/tmp/ade-runtime-dev.sock) and a separate Electron profile (ade-desktop-dev), so it will not collide with the runtime/socket that is hosting you. Confirm with ade runtime status --text before launching — that tells you which socket the CLI is currently attached to.

Survive Electron restarts

npm run dev watches apps/desktop/src/main/** and restarts Electron whenever the main bundle rebuilds. After a restart, the App Control drawer UI in the parent ADE window can show stale Waiting for CDP on 127.0.0.1:<port> even though the new renderer is already exposed on the same port. From the CLI you can confirm and re-bind:

ade --socket app-control targets --text          # find the new page target id
ade --socket app-control attach-target --target <id> --text
ade --socket app-control snapshot --text         # forces the drawer to repaint

If targets shows a /devtools/page/<id> entry with the dev URL (http://localhost:5173/...), CDP is healthy — the drawer banner is just lagging until the next snapshot.

Signals

GitHub stars
104
Forks
12
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
ade-app-control
Source
github.com/arul28/ade