Agent skill

Ade App Control

by arul28 in arul28/ADE

A skill your agent uses 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…

AGPL-3.0Auto-check passed

Install Ade App Control

skills CLI
$ npx skills add arul28/ADE --skill ade-app-control -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install arul28/ADE ade-app-control --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/arul28/ADE.git skills-src && mkdir -p .claude/skills && cp -r skills-src/apps/desktop/resources/agent-skills/ade-app-control .claude/skills/ade-app-control && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
ade-app-control
GitHub stars
114
Token cost
~3.4k tokens
SKILL.md length
1,580 words
Files
1
Skills in repo
28
Repo updated
First seen
Licence
AGPL-3.0

At a glance

A skill your agent uses 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…

  • Works in 6 steps: Launch or attach → Observe before you act → Act, then read the answer → …
  • You need to run
  • SKILL.md covers Rules before your first command, Common tasks, The loop and Optional: keep the app off the…, plus 5 more sections
  • Calls npm

What it does

Ade App Control is an agent skill from arul28/ADE. 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, record a video or file proof of it, show it to the user, or pull screenshot-backed DOM/source context into the chat — through ade app-control.

Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

The licence is AGPL-3.0.

When your agent uses it

  • You need to run
  • Drive a local Electron/desktop app and capture what it does — launch it
  • Attach to a running renderer
  • Answer its terminal prompts

Example prompts

  • “/ade-app-control”

Requirements

  • Node.js

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Launch or attach
  2. Observe before you act
  3. Act, then read the answer
  4. Record and file proof
  5. Show the user
  6. Stop

What it can do on your machine

Read from SKILL.md and the folder at commit fbbd974. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Ade App Control loads about 3.4k tokens when it runs. Until then it costs about 93 tokens; SKILL.md has 1,580 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~93
When it runs · the whole SKILL.md, loaded when a task matches
~3.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from arul28/ADE at commit fbbd974, republished under its AGPL-3.0 licence (© arul28). 1,580 words, ~3,425 tokens.

Download SKILL.mdSave it as .claude/skills/ade-app-control/SKILL.md (or your agent's skills folder).
name
ade-app-control
description
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, record a video or file proof of it, show it to the user, or pull screenshot-backed DOM/source context into the chat — through `ade app-control`.

ADE App Control

App Control drives a desktop app you are building. Today that means an Electron app. ADE launches it (or attaches to one that is running) through a Chrome DevTools Protocol (CDP) port. Then you observe it, act on it, record it and file proof from it. It works in the background: no cursor, no focus stealing, and it captures the app's own window, not the user's screen.

Not sure App Control is the right surface? The ade-computer-use skill picks between ade apple, ade mac-desktop, ade app-control and ade browser.

Rules before your first command

  • One session per lane. --lane defaults to ADE_LANE_ID and the chat to ADE_CHAT_SESSION_ID, so an agent never passes them. Every command acts on your lane's session. Another lane's session is not yours to drive.
  • launch refuses when your lane already has a live session. Check status first. Use the running app, or stop it, or pass --force to replace it. --force only replaces a session in your own lane.
  • Check each step before you report it. An act that returns ok only means ADE sent the input. Read the hit: and effect: lines and the new observation. Report only what you confirmed.
  • ade: Unknown command 'app-control' means your shell found an older ade. Run the same command as "$ADE_CLI_PATH" app-control ... (PowerShell: & $env:ADE_CLI_PATH app-control ...) and keep using it for the rest of the task.
  • App Control needs the running ADE brain. A session lives in the brain, so --headless is refused. If a command says no brain answered, you are running the wrong ade: use $ADE_CLI_PATH. Never start, stop or install a brain or service, and never npm install in the user's repo to fix ADE. Report the error instead.

Common tasks

Use these directly; you do not need --help for them.

TaskCommand
What is running in this laneade app-control status --text
Launch the appade app-control launch --command "npm run dev" --text
Attach to a running appade app-control connect --cdp-port 9222 --text
What is on screenade app-control observe --map --text
Click a control by its labelade app-control click --text-match "Save" --text
Right-click a controlade app-control right-click --text-match "Row" --text
Fill a fieldade app-control fill --selector "#name" --value "Ada" --text
Wait for text to appearade app-control wait --text-match "Saved" --timeout-ms 8000 --text
Record a videoade app-control record start --caption "<what>" --text, then record stop --text
File a still as proofade app-control proof --caption "<what>" --text
Show the app to the userade app-control show --floating --text
Read the app's terminalade app-control logs --text
Stopade app-control stop --text

The loop

1. Launch or attach
bash
ade app-control status --text
ade app-control launch --command "npm run dev" --text
ade app-control launch pnpm dev --text                     # the words after launch are the command
ade app-control launch --command "pnpm dev" --cwd apps/desktop --text
ade app-control connect --cdp-port 9222 --text             # an app that is already running

launch runs the command in a visible terminal that belongs to your chat. ADE sets ADE_APP_CONTROL_CDP_PORT and ADE_APP_CONTROL_DEBUG_FLAGS in its environment. It forwards the debug flags on its own for npm, pnpm, yarn and bun scripts and for a direct electron command. --cwd resolves a relative path from the directory you run ade in.

An installed Electron app (Slack, a packaged build of the app you work on) is launched the same way: name its binary and add $ADE_APP_CONTROL_DEBUG_FLAGS, which ADE fills in itself, so it works in zsh too. The app must not already be running; quit the user's copy only if they say so.

bash
ade app-control launch --command '/Applications/Slack.app/Contents/MacOS/Slack $ADE_APP_CONTROL_DEBUG_FLAGS' --text

connect attaches to an app you did not launch. The app must already expose a CDP port (--remote-debugging-port). When you attach to something that is already running, ade app-control claim --lane <lane-id> --text attributes it to your lane.

2. Observe before you act
bash
ade app-control observe --map --text        # screenshot + numbered element map + handles
ade app-control observe --no-dom --text     # screenshot only

An observation gives you a screenshot and numbered elements with handles (obs-…:e:7). A handle is valid only for recent observations. ADE keeps the newest 3 per session, so observe again when a handle is refused as expired. Act by handle or by label, not by coordinates. A point is a guess that the layout did not move.

Observations also carry console output, failed network requests and the in-flight request count. That is usually the fastest way to see why a click did nothing.

3. Act, then read the answer
bash
ade app-control click --handle obs-...:e:7 --text
ade app-control click --text-match "Save" --text
ade app-control click --button right --text-match "Row" --text
ade app-control right-click --text-match "Row" --text   # same as click --button right
ade app-control hover --test-id row-3 --text
ade app-control fill --selector "#name" --value "Ada" --text
ade app-control clear --selector "#name" --text
ade app-control type "hello" --text          # into the focused element
ade app-control press --key Enter --text     # alias: key; Enter submits a focused form
ade app-control press --key "Meta+n" --text  # modifiers: Alt, Control/Ctrl, Meta/Cmd, Shift
ade app-control scroll --x 120 --y 420 --delta-y 600 --text
ade app-control wait --text-match "Saved" --timeout-ms 8000 --text
ade app-control wait --load-state network-idle --text
ade app-control trace --limit 20 --text      # recent actions for this session

Targets are --handle, --selector, --text-match, --test-id, --element <n>, or --x/--y. A disabled target is refused, not clicked.

Every act answers with two lines and a fresh observation:

  • hit: — the element the command actually hit.
  • effect: — observed (ADE saw the app change), unconfirmed (ADE looked and saw no change), or not_checked (ADE did not look).

When the effect is unconfirmed, observe again before you act again or report the step. Do not repeat the action blindly. If the change takes time, use wait instead of acting again. --fast skips the settle delay; --no-observe skips the observation (then you must check the step yourself). --session <id> makes a command fail if the session has changed under you.

4. Record and file proof
bash
ade app-control record start --caption "Settings save the API key" --text
# ... drive the app ...
ade app-control record status --text
ade app-control record stop --text
ade app-control proof --caption "Settings shows the saved key" --text

Use a video when the claim is about behavior over time: a flow, an animation, a retry. Use a still (proof) when one screen proves the claim.

  • record start captures the app's own window. When it stops, it becomes a demo: still time cut, waits sped up, zoom to each action, a pointer and click rings, under 10 MB. --plain keeps it as recorded; use it only when the user asks.
  • Mark each step while recording with ade proof step "<what happens next>". Each step is a caption in the video and a chapter in ADE's player.
  • A recording stops itself after 5 minutes of real time, or after 2 minutes with no action. --max-seconds <n> sets a shorter limit. Record the flow that shows the claim, not the whole task.
  • Always pass --caption. record stop files a captioned video as proof under your lane, your chat and the lane's PR. A video with no caption stays a scratch file (unless the cap or the app closing ended it).
  • record stop prints duration (the demo), real time with the time cut, the file, and a proof line with the proof id. If it prints an error line, the recording failed: report that. Never attach an older file in its place. On macOS the first recording can need the Screen Recording grant; the answer says so.
  • A recording also stops when the app closes (stopped: the app closed).
  • Confirm the final state before record stop, so the video ends on it.
  • proof observes the app and files that screenshot with your caption. Write a caption that says what the capture shows, then check that the screenshot really shows it. screenshot captures without filing anything.

The ade-proof-artifacts skill covers ade proof attach, allowed roots and how to confirm a filing.

Show full SKILL.md (498 more words)Show less
5. Show the user

When the user asks to see the app, or you want them to watch:

bash
ade app-control show --text              # App Control in the tools pane
ade app-control show --floating --text   # the floating card over the chat

ade ui show app-control and ade ui show floating-app-control do the same. The answer says what really happened: shown, held (the user is not on your chat yet; it opens when they go there), or no_desktop (exit 1; nothing was shown, so tell the user). The user can also watch the session live from ADE on the web or the phone.

6. Stop
bash
ade app-control stop --text

stop quits an app ADE launched, with its whole process tree. It only detaches from an app you attached with connect; that app keeps running. Save anything that matters first. ADE also releases the session when your chat ends and when the lane is archived or deleted.

Optional: keep the app off the user's screen

App Control never needs the user's screen. On a Mac host you may still move the app's window onto the lane's private Mac Desktop:

bash
ade mac-desktop start --text
ade mac-desktop windows --text
ade mac-desktop claim --window <id> --text

This is optional. Keep driving it with ade app-control.

Context for the chat

bash
ade app-control snapshot --text              # screenshot + DOM element refs
ade app-control inspect --x 120 --y 420      # hit-test a point, add nothing to the chat
ade app-control select --x 120 --y 420       # add that element to the chat as context

select returns screenshot-backed DOM, selector and source context, and attaches it to the chat that owns the session.

Windows, targets and drivers

bash
ade app-control windows --text                     # debuggable windows
ade app-control switch-window --target <id> --text # drive another window
ade app-control targets --text                     # raw CDP targets
ade app-control attach-target --target <id> --text
ade app-control drivers --text                     # cdp | computer_use availability

Switching windows clears the action trace, and handles from the old window stop resolving. Observe again after a switch. computer_use is listed but not implemented; it reports unavailable.

Logs and terminal

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

Use ade terminal list --text and ade terminal read ... only when no App Control terminal is active.

Troubleshooting

  • Waiting for CDP on 127.0.0.1:<port> never clears. The app did not open the debug port. A custom launcher (a shell script, a wrapper, concurrently, a dev script that starts Electron itself) must pass ADE_APP_CONTROL_DEBUG_FLAGS through to Electron, or read ADE_APP_CONTROL_CDP_PORT and pass --remote-debugging-port. You can also put the placeholder in the command, and ADE substitutes it: ade app-control launch --command "/path/script.sh {ADE_APP_CONTROL_DEBUG_FLAGS}" --text. Read ade app-control logs --text to see what the app printed.

  • The port is taken. Another app (or an old run) holds it. stop the old session, or pass --cdp-port <free port>.

  • The app restarted and the session looks stale. Dev servers that rebuild the main process restart Electron. Find the new page and re-attach:

    bash
    ade app-control targets --text
    ade app-control attach-target --target <id> --text
    ade app-control observe --text
  • launch refused: the lane already has a session. Run status. Reuse it, stop it, or pass --force to replace it.

Launching ADE itself from inside ADE

If you run inside one ADE (Beta or stable) and need the ADE dev app under App Control, the dev launcher is isolated and safe:

bash
ade app-control launch --command "npm run dev" --text
ade app-control launch --command "npm run dev:desktop -- --socket /tmp/ade-runtime-app.sock {ADE_APP_CONTROL_DEBUG_FLAGS}" --text

npm run dev uses its own runtime socket (/tmp/ade-runtime-dev.sock) and its own Electron profile (ade-desktop-dev), so it does not collide with the ADE that hosts you. ade runtime status --text tells you which socket the CLI uses. The dev-desktop launcher accepts App Control's {ADE_APP_CONTROL_DEBUG_FLAGS} placeholder (and the ADE_APP_CONTROL_CDP_PORT it exports) and passes the CDP port and render flags through to Electron, so launch connects on the port App Control expects.

© arul28, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in apps/desktop/resources/agent-skills/ade-app-control of arul28/ADE.

Open the folder on GitHubat commit fbbd974

Compare with similar skills

Ade App Control next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Ade App Control compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Ade App Control this skillarul28/ADE114—~3.4kAutomated safety check: PassAGPL-3.0
Adelanding-ai/ade-cli2.4k—~2.4kAutomated safety check: PassApache-2.0
Feishu Driveopenclaw/openclaw392k—~375Automated safety check: PassMIT
Electron Drive Skillsickn33/agentic-awesome-skills47k1 repos~2.5kAutomated safety check: PassMIT
Gws Drive Uploadgoogleworkspace/cli31k1 repos~322Automated safety check: PassApache-2.0
Google Drivecursor/plugins10k—~1.1kAutomated safety check: PassNone

Similar skills

  • Ade

    landing-ai/ade-cli

    Parse documents and extract schema-shaped data with the ADE (Agentic Document Extraction) v2 APIs through the ade CLI.

    2.4k GitHub stars~2.4k tokensUpdated 1 mo ago
    Documents & OfficeAuto-check passed
  • Feishu Drive

    openclaw/openclaw

    Feishu cloud-storage and comment workflows. An agent skill from openclaw/openclaw.

    392k GitHub stars~375 tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Electron Drive Skill

    sickn33/agentic-awesome-skills

    Launch the project's Electron app on a scratch profile and drive it: click, type, screenshot, run renderer or main-process code, read logs.

    47k GitHub starsUsed in 1 repo~2.5k tokens
    Testing & QAAuto-check passed
  • Gws Drive Upload

    googleworkspace/cli

    Google Drive: Upload a file with automatic metadata. An agent skill from googleworkspace/cli.

    31k GitHub starsUsed in 1 repo~322 tokens
    Documents & OfficeAuto-check passed
  • Google Drive

    cursor/plugins

    Official

    Work with Google Drive through its MCP tools - search, read, create, organize, share, comment, and export files.

    10k GitHub stars~1.1k tokensUpdated today
    Documents & OfficeAuto-check passed
  • Drive MiMo Code

    XiaomiMiMo/MiMo-Code

    Lets one MiMoCode process drive another, headless with JSON events or interactively through tmux, to test behavior and visual regressions with parseable evidence.

    14k GitHub stars~3.9k tokensUpdated 5 days ago
    Testing & QAAuto-check passed

More from arul28/ADE

All 28 skills in this repo
  • Iteratively optimize an ADE tab's CPU/memory/IPC/render performance.

    114 GitHub stars~4.2k tokensUpdated today
    Auto-check passed
  • Ade Browser

    arul28/ADE

    A skill your agent uses for any browser behavior at all — opening a URL, checking a localhost page, clicking or filling a form, logging in, screenshotting, inspecting the DOM, or verifying a page…

    114 GitHub stars~3.3k tokensUpdated today
    Auto-check passed
  • Ade Deeplinks

    arul28/ADE

    A skill your agent uses when an agent needs to mint, share, or open ADE deeplinks (lane, work session, file, commit, artifact, branch, PR, Linear issue) so users — or the agent itself — can jump…

    114 GitHub stars~3.2k tokensUpdated today
    Auto-check passed
  • Ade Harnesses

    arul28/ADE

    A skill your agent uses when you need to run a chat, a CLI session, or a subagent on a specific setup — any model you pay for inside any harness (e.g.

    114 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Ade Lanes Git

    arul28/ADE

    A skill your agent uses when creating, inspecting, syncing, committing, pushing, archiving, or rebasing ADE lanes and lane worktrees through ade lanes and ade git.

    114 GitHub stars~594 tokensUpdated today
    Auto-check passed
  • Ade Linear

    arul28/ADE

    A skill your agent uses whenever your task is a Linear issue (or an ADE chat/lane launched with a Linear issue attached) and you need to read or update that issue — change its workflow state…

    114 GitHub stars~2k tokensUpdated today
    Auto-check passed

Questions about Ade App Control

What does Ade App Control do?

A skill your agent uses 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…. Ade App Control is an agent skill from arul28/ADE. 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, record a video or file proof of it, show it to the user, or pull screenshot-backed DOM/source context into the chat — through ade app-control.

When should I use Ade App Control?

Ade App Control fits situations like: you need to run; drive a local Electron/desktop app and capture what it does — launch it; attach to a running renderer; answer its terminal prompts.

How do I install Ade App Control in Claude Code?

Run `npx skills add arul28/ADE --skill ade-app-control -a claude-code`. Or copy the skill folder (apps/desktop/resources/agent-skills/ade-app-control in arul28/ADE) into .claude/skills/ade-app-control in your project. Claude Code loads it when a task matches its description.

How do I install Ade App Control in Codex?

Run `npx skills add arul28/ADE --skill ade-app-control -a codex`. Or copy the skill folder (apps/desktop/resources/agent-skills/ade-app-control in arul28/ADE) into .agents/skills/ade-app-control in your project. Codex loads it when a task matches its description.

Can I use Ade App Control in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add arul28/ADE --skill ade-app-control -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ade-app-control, .gemini/skills/ade-app-control, .github/skills/ade-app-control and .opencode/skills/ade-app-control in your project.

What does Ade App Control need to run?

Going by SKILL.md and its folder, Ade App Control needs the command-line tools its instructions call (npm). Our summary lists: Node.js.

Does Ade App Control access the network?

SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Ade App Control safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Ade App Control use?

Ade App Control is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Ade App Control use?

About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Ade App Control?

Skills that share tags, products or a category with Ade App Control: Ade (landing-ai/ade-cli, 2.4k stars), Feishu Drive (openclaw/openclaw, 392k stars), Electron Drive Skill (sickn33/agentic-awesome-skills, 47k stars) and Gws Drive Upload (googleworkspace/cli, 31k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Ade App Control?

arul28 (a GitHub user) maintains it in arul28/ADE, which has 114 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on October 8, 2026.

Source: arul28/ADE on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.