Electron App Automation
vercel-labs/agent-browser
Automates Electron desktop apps such as VS Code, Slack or Discord by connecting agent-browser to their Chrome DevTools Protocol port.
Drive any UI surface like a real user - a web app, a Chromium-backed desktop app (Electron / WebView2, reached over CDP), or a genuinely native app (macOS AppKit/SwiftUI, or a non-CDP webview)…
$ npx skills add gmickel/flow-next --skill flow-next-drive -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install gmickel/flow-next flow-next-drive --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/gmickel/flow-next.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/flow-next/skills/flow-next-drive .claude/skills/flow-next-drive && rm -rf skills-srcUse ~/.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/
Install the "flow-next-drive" agent skill from https://github.com/gmickel/flow-next/tree/main/plugins/flow-next/skills/flow-next-drive into .claude/skills/flow-next-drive/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "flow-next-drive", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/gmickel/flow-next/tree/main/plugins/flow-next/skills/flow-next-driveType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add gmickel/flow-next --skill flow-next-drive -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install gmickel/flow-next flow-next-drive --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gmickel/flow-next.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/flow-next/skills/flow-next-drive .agents/skills/flow-next-drive && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "flow-next-drive" agent skill from https://github.com/gmickel/flow-next/tree/main/plugins/flow-next/skills/flow-next-drive into .agents/skills/flow-next-drive/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "flow-next-drive", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add gmickel/flow-next --skill flow-next-drive -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install gmickel/flow-next flow-next-drive --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gmickel/flow-next.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/flow-next/skills/flow-next-drive .cursor/skills/flow-next-drive && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "flow-next-drive" agent skill from https://github.com/gmickel/flow-next/tree/main/plugins/flow-next/skills/flow-next-drive into .cursor/skills/flow-next-drive/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "flow-next-drive", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/gmickel/flow-next.git --path plugins/flow-next/skills/flow-next-drive--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add gmickel/flow-next --skill flow-next-drive -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install gmickel/flow-next flow-next-drive --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gmickel/flow-next.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/flow-next/skills/flow-next-drive .gemini/skills/flow-next-drive && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "flow-next-drive" agent skill from https://github.com/gmickel/flow-next/tree/main/plugins/flow-next/skills/flow-next-drive into .gemini/skills/flow-next-drive/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "flow-next-drive", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install gmickel/flow-next flow-next-driveInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add gmickel/flow-next --skill flow-next-drive -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/gmickel/flow-next.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/flow-next/skills/flow-next-drive .github/skills/flow-next-drive && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "flow-next-drive" agent skill from https://github.com/gmickel/flow-next/tree/main/plugins/flow-next/skills/flow-next-drive into .github/skills/flow-next-drive/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "flow-next-drive", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add gmickel/flow-next --skill flow-next-drive -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install gmickel/flow-next flow-next-drive --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gmickel/flow-next.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/flow-next/skills/flow-next-drive .opencode/skills/flow-next-drive && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "flow-next-drive" agent skill from https://github.com/gmickel/flow-next/tree/main/plugins/flow-next/skills/flow-next-drive into .opencode/skills/flow-next-drive/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "flow-next-drive", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
flow-next-driveDrive any UI surface like a real user - a web app, a Chromium-backed desktop app (Electron / WebView2, reached over CDP), or a genuinely native app (macOS AppKit/SwiftUI, or a non-CDP webview)…
Flow Next Drive is an agent skill from gmickel/flow-next. Drive any UI surface like a real user - a web app, a Chromium-backed desktop app (Electron / WebView2, reached over CDP), or a genuinely native app (macOS AppKit/SwiftUI, or a non-CDP webview) reached via the Cua Driver / Computer Use. Detects the surface, picks the best available driver, degrades gracefully. Use to navigate sites, verify deployed UI, test web or desktop apps, capture baseline screenshots, drive a sign-in flow, scrape data, fill forms, run an e2e check, or inspect current page state. Triggers on…
Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 14 other files, including reference files (for example `references/advanced.md`, `references/agent-browser.md` and `references/auth.md`).
It sits in Productivity & Automation, covering Desktop control, Authentication and Web scraping. It works with macOS, SwiftUI and Electron. The repository describes itself as: Faster than your agent alone. And better. A workflow plugin that takes a bug, idea or ticket to a verified pull request: specs, cross-model review by risk, live QA, receipts in… The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 09e291e. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Flow Next Drive loads about 3.6k tokens when it runs, and up to ~31k if it reads all its reference files. Until then it costs about 214 tokens; SKILL.md has 1,850 words of instructions outside code blocks.
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.
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.
The full file from gmickel/flow-next at commit 09e291e, republished under its MIT licence (© gmickel). 1,850 words, ~3,626 tokens.
.claude/skills/flow-next-drive/SKILL.md (or your agent's skills folder). This skill also uses 13 other files; get the full folder from GitHub.Drive any UI surface the way a real user would. Whatever driver the environment has, the work is the same shape: observe / navigate → snapshot → act on fresh refs → capture evidence → release. This skill is a router: it detects the surface, picks the highest available driver on a ladder, degrades gracefully when a richer driver is absent, and hands off to a per-rung reference for the command detail.
It orchestrates drivers — it does not reimplement them. The default rung (Vercel's agent-browser CLI) is the only driver assumed present; every other rung is detected and optional. A pass must succeed with whatever the environment actually has — most cloud VMs, Linux, and CI have no Computer Use, so it is never a hard dependency and never on a headless/no-display path.
Driver ladder + universal-flow structure adapted from Ray Fernando's
running-bug-review-boardskill (Apache-2.0).
Classify the target into one of three buckets and take the matching path. The universal flow (Step 2) is shared; only the actuation and the per-surface reference differ.
| # | Surface | What it is | Path |
|---|---|---|---|
| A | Web app | A URL in a browser (localhost dev server, staging, production) | Web ladder (Step 3) |
| B | Chromium-backed desktop app | Electron / Windows WebView2 — Chromium under the hood, exposes a CDP debug port | Web ladder (Step 3), attaching over CDP to the app's remote-debugging port |
| C | True-native / non-CDP surface | macOS AppKit/SwiftUI, Catalyst, or a webview exposing no CDP (macOS WKWebView, which Tauri uses on macOS) | Native rung (Step 4) — Cua Driver → Computer Use (attended); Cua Sandbox (headless/CI) |
How to decide:
--remote-debugging-port=<n> (or one already exposing one) → B. Electron and Windows WebView2 are Chromium; the web ladder drives them by CDP-attach. Do not route these to Computer Use.When unsure whether a desktop app exposes CDP, probe for B first (try to launch/attach with a debug port). If no port is reachable, fall to C.
When .flow/features/ exists and the caller did not pass unmapped, Read .flow/features/README.md and the feature file the caller names, else the one matching feature file, first; never the whole map. They pre-resolve the route, preconditions, and gotchas. Select by **Surface:** plus sub-feature IDs (feature-entry-contract.md, "Live-app stages"). Live detection above remains the fallback when the map is absent or does not cover this target. A mapped route that no longer matches the live app gets a drift note per the contract's "Writers and drift notes" section, then live detection continues; never edit the map mid-run.
.flow/features/ existed, the index and the named or one matching feature file were read before driving (none after a caller's unmapped); live detection was the fallback otherwise, and a stale mapped route was filed as a drift note.observe / list what's open
navigate to the target (URL, or focus the app window)
snapshot → fresh element refs (after a DOM change; for ONE known target prefer semantic find)
act → click / fill / type / press / scroll toward the next step
verify → expected text/state appeared AND console clean + no failed API/network requests
capture → screenshot + console/errors at the moment of interest (and on failure)
release → close the tab / end the session when fully doneverify is not DOM-only — every verify checks the console is clean and no API/network request failed, alongside the expected text or state. A pass declared on a green-looking DOM while a request returned 500 or the console threw an uncaught exception has broken this: that is exactly the silent breakage a real user hits, and the /flow-next:qa qa_verdict rests on this evidence. The tooling is already on the default rung (agent-browser console, agent-browser network requests --filter api; the DevTools-MCP rung has richer inspection). A failed request or console error under a green DOM is a finding, not noise.
Snapshot cost: a full interactive snapshot -i before every act is the dominant token cost of a long flow. Re-snapshot after a DOM change, but for a single known target prefer a semantic locator (find role|text|label … <action> — no snapshot needed), and use snapshot -c / -d <depth> when you only need to verify one region.
Refs (@e1, @e2, …) go stale after any navigation, click, or form submit. Element refs are refreshed by re-snapshotting after any navigation, click, or submit. A "ref not found" or pointer-events: none result reported as a bug before a re-snapshot has broken this — it is a stale snapshot until a fresh one says otherwise.
/flow-next:qa verdict rests on artifacts rather than narration.Probe availability top-down and use the highest rung that passes; fail soft to the next; the terminal rung is manual. Never hard-depend on any rung above the default.
| Rung | Driver | Use when | Reference |
|---|---|---|---|
| 1 (default) | agent-browser CLI | Always assumed present. CDP-based, headless-safe, no extra install. Drives web apps; drives Electron / WebView2 over CDP (--cdp <port> / --auto-connect). | references/agent-browser.md |
| 2 | chrome-devtools-mcp | You want built-in auto-wait (fewer stale-ref failures), DevTools-grade network/console inspection, Lighthouse, or to attach to your real signed-in Chrome (--browser-url / --autoConnect) so bot defenses don't challenge an automated profile. | references/chrome-devtools-mcp.md |
| 3 | Playwright (CLI or MCP) | The repo already has Playwright configured, or you need a headless CI-style run / large cross-browser regression suite. | references/playwright.md |
| 4 | cursor-ide-browser MCP | On a Cursor host: no install, no command -v. Probe the server by id cursor-ide-browser (a catalog omission is not absence). If that probe fails in an attended session, ask once for @Browser (no space) or the Browser pane showing connected, then re-probe once — skip the ask when unattended. Real snapshot YAML + browser_cdp. Cannot satisfy verify (console + network) unaided — a /flow-next:qa pass here must set QA_OUTCOME=BLOCKED with blocked_reason naming the missing channels (do not invent console_path / network path values). When higher rungs are missing, prefer this over instructing an install. | references/cursor-ide-browser.md |
| 5 (terminal) | Manual + screenshot relay | No browser driver available — drive yourself, paste console errors and screenshots into chat (attended only; unattended reports no driver and QA records BLOCKED). | — |
Surface B note: an Electron / WebView2 app is driven through this same web ladder, over its CDP debug port. Routing a Chromium-backed desktop app to the native rung has broken this. Attach to the app's remote-debugging port (agent-browser --cdp <port> / --auto-connect; chrome-devtools-mcp --browser-url=http://127.0.0.1:<port>). Launch the app with a dedicated debug port and a dedicated user-data-dir; treat the open debug port as a security exposure (any local app can drive that session).
agent-browser command detail lives in the rung reference, not here. The default-rung reference
references/agent-browser.mdis the entry point — setup/version check, the universal flow in agent-browser commands, the Chromium-desktop (Electron / WebView2) CDP driver, the--headeddaemon-reuse gotcha, and an index into the per-topic references it folds:commands.md,advanced.md(CDP attach),auth.md,snapshot-refs.md,session-management.md,proxy.md,debugging.md.
Only for surface C (a genuinely native app or a non-CDP webview): read references/cua.md § Native rung (surface C) first; it holds the driver probe order and routes to Computer Use.
command -v, MCP list, uname -s for the macOS-only paths). Treat anything above the default rung — incl. Cua Driver and Computer Use — as probably absent. On a Cursor host, probe cursor-ide-browser by exact server id at least once before concluding it is absent — catalog omission alone is not a negative, and there is no install step. If that probe fails in an attended session, ask once via AskUserQuestion: type @Browser in chat (no space), or open the Browser pane until it shows connected, and confirm Settings → Tools & MCP → Browser Automation is Browser Tab. On portable hosts without that tool, use a numbered prompt with a final Other — type your own answer option. After they confirm, re-probe once. Skip the ask when unattended / autonomous / $CI / FLOW_AUTONOMOUS=1 and degrade. A mid-run MCP server does not exist after this pass already drove the pane is the lease-drop flake, not a first-use miss — do not ask @Browser for that; see references/cursor-ide-browser.md.references/cua.md.)$CI ⇒ headless, else the empirical cua-driver call get_screen_size display probe; NOT $DISPLAY on macOS. See references/cua.md § "Determining headless / CI".)references/cua.md.references/cua.md).agent-browser that the plan relies on was probed first (command -v, MCP list, uname -s; for cursor-ide-browser, an id-probe — and on an attended Cursor miss, one @Browser ask plus one re-probe). A pass that planned around an unprobed rung has broken this./flow-next:qa concern.© gmickel, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 13 other files (references) in plugins/flow-next/skills/flow-next-drive of gmickel/flow-next.
Open the folder on GitHubat commit 09e291e
Flow Next Drive 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Flow Next Drive this skillgmickel/flow-next | 709 | — | ~3.6k | Automated safety check: Pass | MIT | |
| Electron App Automationvercel-labs/agent-browser | 44k | 5 repos | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| Interceptor iOSHacker-Valley-Media/Interceptor | 519 | — | ~1.9k | Automated safety check: Pass | Custom licence | |
| Interceptor BrowserHacker-Valley-Media/Interceptor | 519 | — | ~4.8k | Automated safety check: Pass | Custom licence | |
| Unicliolo-dot-io/Uni-CLI | 274 | — | ~3.8k | Automated safety check: Notes | Apache-2.0 | |
| Verify BuildShiinaLabs/wifi-lens | 119 | — | ~827 | Automated safety check: Pass | Apache-2.0 |
vercel-labs/agent-browser
Automates Electron desktop apps such as VS Code, Slack or Discord by connecting agent-browser to their Chrome DevTools Protocol port.
Hacker-Valley-Media/Interceptor
Drive any installed app on an owned, unlocked, Developer-Mode iPhone via interceptor ios : ref-tagged element trees, deterministic coordinate taps (click), reliable text entry (type/keys), scroll…
Hacker-Valley-Media/Interceptor
Drive a signed-in Chrome / Brave / Safari session via the interceptor CLI: open/read pages, click, type, inspect DOM/text/network, automate rich browser editors and scene graphs, capture…
olo-dot-io/Uni-CLI
Comprehensive guide to Uni-CLI — the open Agent-Computer Interface runtime for real software.
ShiinaLabs/wifi-lens
A skill your agent uses when a change touches the WiFi Lens product itself (Swift app source, unit tests) before claiming that work is complete, before committing such a change, or when asked to…
omarshahine/HomeClaw
A skill your agent uses when writing, reviewing, or refactoring SwiftUI code for iOS or macOS, including state management, view composition, performance, Liquid Glass adoption, or Instruments .trace…
gmickel/flow-next
Resolve PR review feedback. An agent skill from gmickel/flow-next.
gmickel/flow-next
Resolve PR review feedback — fetch unresolved threads, triage, dispatch per-thread resolver agents, validate, commit, reply + resolve via GraphQL.
gmickel/flow-next
Manage .flow/ tasks and specs. An agent skill from gmickel/flow-next.
gmickel/flow-next
Audit .flow/memory/ entries against the current codebase and decide Keep / Update / Consolidate / Replace / Delete / Harden per entry.
gmickel/flow-next
Save the current conversation as a source-tagged flow-next spec, then offer review or editing.
gmickel/flow-next
Decision-map discovery for one oversized unclear idea before capture.
Drive any UI surface like a real user - a web app, a Chromium-backed desktop app (Electron / WebView2, reached over CDP), or a genuinely native app (macOS AppKit/SwiftUI, or a non-CDP webview)…. Flow Next Drive is an agent skill from gmickel/flow-next. Drive any UI surface like a real user - a web app, a Chromium-backed desktop app (Electron / WebView2, reached over CDP), or a genuinely native app (macOS AppKit/SwiftUI, or a non-CDP webview) reached via the Cua Driver / Computer Use.
Flow Next Drive fits situations like: verify deployed UI; capture baseline screenshots; drive a sign-in flow; run an e2e check.
Run `npx skills add gmickel/flow-next --skill flow-next-drive -a claude-code`. Or copy the skill folder (plugins/flow-next/skills/flow-next-drive in gmickel/flow-next) into .claude/skills/flow-next-drive in your project. Claude Code loads it when a task matches its description.
Run `npx skills add gmickel/flow-next --skill flow-next-drive -a codex`. Or copy the skill folder (plugins/flow-next/skills/flow-next-drive in gmickel/flow-next) into .agents/skills/flow-next-drive in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add gmickel/flow-next --skill flow-next-drive -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/flow-next-drive, .gemini/skills/flow-next-drive, .github/skills/flow-next-drive and .opencode/skills/flow-next-drive in your project.
SKILL.md names no scripts, command-line tools or credentials: Flow Next Drive is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
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.
Flow Next Drive is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 28k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Flow Next Drive: Electron App Automation (vercel-labs/agent-browser, 44k stars), Interceptor iOS (Hacker-Valley-Media/Interceptor, 519 stars), Interceptor Browser (Hacker-Valley-Media/Interceptor, 519 stars) and Unicli (olo-dot-io/Uni-CLI, 274 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
gmickel (a GitHub user) maintains it in gmickel/flow-next, which has 709 GitHub stars. The repository holds 43 skills in this directory. The repository was last updated on October 7, 2026.
Source: gmickel/flow-next on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.