Electron Devtools Testing
ankitvgupta/exo
Test the Electron app interactively using Chrome DevTools Protocol.
A skill your agent uses when Codex needs to inspect, debug, or automate an Electron app through agent-browser and Chrome DevTools Protocol, especially when the app has multiple BrowserWindow…
$ npx skills add moeru-ai/airi --skill agent-browser-electron -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install moeru-ai/airi agent-browser-electron --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/moeru-ai/airi.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/agent-browser-electron .claude/skills/agent-browser-electron && 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 "agent-browser-electron" agent skill from https://github.com/moeru-ai/airi/tree/main/.agents/skills/agent-browser-electron into .claude/skills/agent-browser-electron/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-browser-electron", 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/moeru-ai/airi/tree/main/.agents/skills/agent-browser-electronType 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 moeru-ai/airi --skill agent-browser-electron -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install moeru-ai/airi agent-browser-electron --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/moeru-ai/airi.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/agent-browser-electron .agents/skills/agent-browser-electron && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "agent-browser-electron" agent skill from https://github.com/moeru-ai/airi/tree/main/.agents/skills/agent-browser-electron into .agents/skills/agent-browser-electron/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-browser-electron", 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 moeru-ai/airi --skill agent-browser-electron -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install moeru-ai/airi agent-browser-electron --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/moeru-ai/airi.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/agent-browser-electron .cursor/skills/agent-browser-electron && 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 "agent-browser-electron" agent skill from https://github.com/moeru-ai/airi/tree/main/.agents/skills/agent-browser-electron into .cursor/skills/agent-browser-electron/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-browser-electron", 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/moeru-ai/airi.git --path .agents/skills/agent-browser-electron--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 moeru-ai/airi --skill agent-browser-electron -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install moeru-ai/airi agent-browser-electron --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/moeru-ai/airi.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/agent-browser-electron .gemini/skills/agent-browser-electron && 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 "agent-browser-electron" agent skill from https://github.com/moeru-ai/airi/tree/main/.agents/skills/agent-browser-electron into .gemini/skills/agent-browser-electron/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-browser-electron", 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 moeru-ai/airi agent-browser-electronInstalls 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 moeru-ai/airi --skill agent-browser-electron -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/moeru-ai/airi.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/agent-browser-electron .github/skills/agent-browser-electron && 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 "agent-browser-electron" agent skill from https://github.com/moeru-ai/airi/tree/main/.agents/skills/agent-browser-electron into .github/skills/agent-browser-electron/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-browser-electron", 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 moeru-ai/airi --skill agent-browser-electron -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install moeru-ai/airi agent-browser-electron --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/moeru-ai/airi.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/agent-browser-electron .opencode/skills/agent-browser-electron && 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 "agent-browser-electron" agent skill from https://github.com/moeru-ai/airi/tree/main/.agents/skills/agent-browser-electron into .opencode/skills/agent-browser-electron/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-browser-electron", 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.
agent-browser-electronA skill your agent uses when Codex needs to inspect, debug, or automate an Electron app through agent-browser and Chrome DevTools Protocol, especially when the app has multiple BrowserWindow…
Agent Browser Electron is an agent skill from moeru-ai/airi. Use when Codex needs to inspect, debug, or automate an Electron app through agent-browser and Chrome DevTools Protocol, especially when the app has multiple BrowserWindow instances, lazy-created windows, duplicate URLs, or misleading agent-browser tab list output. Covers mapping Electron windows to raw CDP targets, identifying routes like //chat, and attaching agent-browser to the correct target by webSocketDebuggerUrl.
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).
It sits in Productivity & Automation, covering Browser automation and Browser testing. It works with Chrome DevTools and Electron. The repository describes itself as: 💖🧸 Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-sama's altitude. Capable of… The licence is MIT.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0327dc8. 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.
Shell commands in SKILL.md call:
curlpnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use curl and pnpm, which can reach the network depending on how they are called.
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.
Agent Browser Electron loads about 3.1k tokens when it runs. Until then it costs about 115 tokens; SKILL.md has 1,376 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 moeru-ai/airi at commit 0327dc8, republished under its MIT licence (© moeru-ai). 1,376 words, ~3,053 tokens.
.claude/skills/agent-browser-electron/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Inspect Electron renderer windows reliably when agent-browser alone is not enough to tell which CDP target maps to which visible app window.
Prefer raw CDP target discovery over guessing from tab list, then use agent-browser --cdp <port> tab stable tab IDs to interact with the renderer target you want.
Before navigation, identify each relevant window's business role and the action that opens it. Inspect the app's window factories and open handlers when the role is unclear. Correlate those roles with CDP targets before interaction.
A renderer route does not define the complete window. Window creation also establishes mouse handling, focus, transparency, IPC handlers, and lifecycle behavior. Loading another route does not transfer those responsibilities.
open, goto, location.hash, router calls, or loadURL.Use raw CDP target discovery because agent-browser is operating as a convenience layer on top of Chrome DevTools Protocol, and that layer can hide or flatten details that matter in Electron.
Raw /json/list is the source of truth for CDP target discovery because it exposes Chromium's target inventory without extra interpretation. It is not the same thing as Electron's BrowserWindow.getAllWindows().
In Electron, that distinction matters because:
BrowserWindow instances can share the same URLagent-browser tab list may show only a subset of targets or present them with reduced metadataagent-browser can keep you attached to a previous renderer unless you reset and verifyIn practice, the higher-level tab list view is useful for quick browsing, but not reliable enough for window-to-target mapping when:
http://localhost:5173/#/Use curl http://127.0.0.1:<port>/json/list first whenever correct target selection matters. Treat agent-browser as the interaction client after target discovery, not as the only discovery source.
If /json/list does not contain a window that the user says exists, do not assume agent-browser hid it. First consider that the window may not have been created yet, may not have loaded a renderer route yet, or may not currently be exposed as a CDP target. Trigger the window from the app UI or Electron main-process action, then enumerate /json/list again.
The CDP port is project- and run-command-specific. Do not assume 9222, 9250, or any other value is universal. If an Electron process is running but no CDP port responds, tell the user to relaunch the app with the project's remote-debug environment variables or launch flags.
For AIRI stage-tamagotchi on POSIX shells:
APP_REMOTE_DEBUG=true APP_REMOTE_DEBUG_PORT=9250 pnpm dev:tamagotchiFor Windows PowerShell:
$env:APP_REMOTE_DEBUG = "true"
$env:APP_REMOTE_DEBUG_PORT = "9250"
pnpm dev:tamagotchiFor Windows Git Bash:
APP_REMOTE_DEBUG=true APP_REMOTE_DEBUG_PORT=9250 pnpm dev:tamagotchiAdjust the port to match what the user actually started. If the project uses a different mechanism, inspect its Electron launch code before giving command advice.
If the app uses lazy window creation, agent-browser cannot inspect a window that has not been created yet. Open it from the app UI or trigger its Electron-side open handler first.
agent-browser --cdp <port> tab.curl -sS http://127.0.0.1:<port>/json/listRead these fields:
titleurltypewebSocketDebuggerUrlUse /json/version if you need to confirm the port is a Chromium/Electron CDP endpoint or need the browser-level debugger URL:
curl -sS http://127.0.0.1:<port>/json/versionCommon patterns:
http://localhost:5173/#/chat while the main window is http://localhost:5173/#/.http://localhost:5173/#/; in that case use screenshots, snapshots, and Electron app knowledge to disambiguate.agent-browser and switch with stable tab IDs.agent-browser --cdp <port> tab
agent-browser --cdp <port> tab t2Do not use positional integers. If agent-browser tab prints [t2], switch with tab t2.
agent-browser --cdp <port> get url
agent-browser --cdp <port> get title
agent-browser --cdp <port> snapshot -iagent-browser close --all
agent-browser connect <webSocketDebuggerUrl>
agent-browser get urlIf needed:
agent-browser --cdp <port> screenshot /tmp/electron-target.png --annotate
agent-browser --cdp <port> console
agent-browser --cdp <port> errorsUse this order when the Electron app has multiple windows:
curl /json/listworker targets unless the task is specifically about workersDevTools page targets unless debugging DevTools itselfagent-browser --cdp <port> tabagent-browser --cdp <port> tab t3agent-browser --cdp <port> get urlagent-browser --cdp <port> snapshot -iIn apps/stage-tamagotchi, some windows are lazy-created. The main window loads /#/; settings loads /#/settings; chat loads /#/chat; BeatSync loads /beat-sync.html.
The main window hosts the stage and its controls. Settings and chat have separate window owners. For a hearing test, open the settings window first, then navigate that window to /settings/modules/hearing. Do not set the main window's hash to this route. Stage mouse handling can leave the substituted page unable to accept clicks.
The 9250 examples below assume the app was started by the person running it with:
APP_REMOTE_DEBUG=true APP_REMOTE_DEBUG_PORT=9250 pnpm dev:tamagotchiThat port is not intrinsic to AIRI or Electron. It depends on the current command and environment. Most stage-tamagotchi code lives under apps/stage-tamagotchi; inspect that app's Electron startup and window code when the port, routes, or remote-debug behavior differ.
Relevant files:
apps/stage-tamagotchi/src/main/windows/chat/index.tsapps/stage-tamagotchi/src/main/windows/main/index.tsapps/stage-tamagotchi/src/main/windows/main/rpc/index.electron.tsapps/stage-tamagotchi/src/main/windows/settings/index.tsapps/stage-tamagotchi/src/main/libs/electron/window-manager/reusable.tsapps/stage-tamagotchi/src/renderer/components/stage-islands/controls-island/index.vueThat means:
chatWindow()http://localhost:5173/#/settings and http://localhost:5173/#/chatagent-browser stable tab IDs, switch, and verify with get urlExample:
curl -sS http://127.0.0.1:9250/json/list
agent-browser --cdp 9250 tab
agent-browser --cdp 9250 tab t4
agent-browser --cdp 9250 get url
agent-browser --cdp 9250 snapshot -iIf settings or chat is missing, start from the main window:
agent-browser --cdp 9250 tab t2
agent-browser --cdp 9250 snapshot -i
# Click the main window control that opens the panel or launcher.
# In AIRI this is the arrow-up control in the bottom-right controls island.
# Re-snapshot after every click because refs are stale after UI changes.
agent-browser --cdp 9250 click '[i-solar\:alt-arrow-up-line-duotone]'
agent-browser --cdp 9250 snapshot -iThen open the desired entry from the expanded controls and enumerate again:
agent-browser --cdp 9250 click '[i-solar\:settings-minimalistic-outline]'
agent-browser --cdp 9250 click '[i-solar\:chat-line-line-duotone]'
curl -sS http://127.0.0.1:9250/json/list
agent-browser --cdp 9250 tabIf the controls island is visible but the accessibility refs or CSS icon click do not expand it, inspect the Vue component as a diagnostic fallback. AIRI currently nests tooltip trigger buttons around icon buttons, so a CDP click can report success while landing on the wrapper instead of the Vue ControlButton listener. This fallback is for automation/debugging only; do not use it as evidence that end-user clicking works.
agent-browser --cdp 9250 eval '(() => {
const icon = document.querySelector("[i-solar\\:alt-arrow-up-line-duotone]")
let controls = icon.__vueParentComponent
for (let i = 0; i < 10; i++) controls = controls.parent
controls.devtoolsRawSetupState.expanded.value = true
controls.proxy.$nextTick()
return controls.devtoolsRawSetupState.expanded.value
})()'Expected verification for chat:
agent-browser --cdp 9250 get url returns http://localhost:5173/#/chatExpected verification for settings:
agent-browser --cdp 9250 get url returns http://localhost:5173/#/settingsagent-browser tab omits or flattens the target you need: use raw /json/list./json/list and browser-level target discovery both omit the window: the renderer target is not currently exposed. Trigger the window creation/loading path, then enumerate again.connect <webSocketDebuggerUrl> appears to succeed but later commands still point at another renderer: switch with agent-browser --cdp <port> tab tN, or run agent-browser close --all, reconnect, and verify with get url.eval returns {} for object values: prefer get url, get title, snapshot -i, or primitive-only eval return values.© moeru-ai, 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 1 other file in .agents/skills/agent-browser-electron of moeru-ai/airi.
Open the folder on GitHubat commit 0327dc8
Agent Browser Electron 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 |
|---|---|---|---|---|---|---|
| Agent Browser Electron this skillmoeru-ai/airi | 50k | — | ~3.1k | Automated safety check: Pass | MIT | |
| Electron Devtools Testingankitvgupta/exo | 496 | — | ~2.4k | Automated safety check: Pass | Custom licence | |
| Electron App Automationvercel-labs/agent-browser | 44k | 5 repos | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| AI Search Hubminsight-ai-info/AI-Search-Hub | 1.3k | — | ~1.3k | Automated safety check: Pass | None | |
| Superset Browser Controlsuperset-sh/superset | 15k | — | ~2.9k | Automated safety check: Pass | Custom licence | |
| Agent Browseroxylabs/agent-skills | 875 | — | ~3k | Automated safety check: Pass | MIT |
ankitvgupta/exo
Test the Electron app interactively using Chrome DevTools Protocol.
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.
minsight-ai-info/AI-Search-Hub
Run the AI Search Hub browser automation scripts for Yuanbao, LongCat, Doubao, Qwen, Gemini, Grok, and MiniMax.
superset-sh/superset
Opens pages, takes screenshots, reads the console, clicks and types in the browser panes of a Superset workspace, with Browser Use as a fallback for other browsers.
oxylabs/agent-skills
Connects to Oxylabs remote agent browsers over the Chrome DevTools Protocol (CDP) with Playwright or Puppeteer.
981377660LMT/algorithm-study
Interactive browser automation via Chrome DevTools Protocol.
moeru-ai/airi
Write or rewrite technical text with the rules of ASD-STE100 Simplified Technical English so it is clear, unambiguous, and free of AI slop.
moeru-ai/airi
Review pending AIRI translations on Crowdin in a batch, then sync them into the repository.
moeru-ai/airi
Upload a local image or file to GitHub's user-attachments storage and return a URL suitable for issue, pull request, discussion, or comment Markdown.
moeru-ai/airi
Prepare and create an AIRI pull request with verifiable change context, architecture evidence, and required visual evidence.
moeru-ai/airi
Test AIRI display-model imports with agent-browser across stage-tamagotchi Electron, stage-web, and stage-pocket mobile web layouts.
moeru-ai/airi
Read and analyze AIRI IO traces that Tamagotchi saved to local files.
Works with
Categories
A skill your agent uses when Codex needs to inspect, debug, or automate an Electron app through agent-browser and Chrome DevTools Protocol, especially when the app has multiple BrowserWindow…. Agent Browser Electron is an agent skill from moeru-ai/airi. Use when Codex needs to inspect, debug, or automate an Electron app through agent-browser and Chrome DevTools Protocol, especially when the app has multiple BrowserWindow instances, lazy-created windows, duplicate URLs, or misleading agent-browser tab list output.
Agent Browser Electron fits situations like: Codex needs to inspect; automate an Electron app through agent-browser and Chrome DevTools Protocol; especially when the app has multiple BrowserWindow instances; lazy-created windows.
Run `npx skills add moeru-ai/airi --skill agent-browser-electron -a claude-code`. Or copy the skill folder (.agents/skills/agent-browser-electron in moeru-ai/airi) into .claude/skills/agent-browser-electron in your project. Claude Code loads it when a task matches its description.
Run `npx skills add moeru-ai/airi --skill agent-browser-electron -a codex`. Or copy the skill folder (.agents/skills/agent-browser-electron in moeru-ai/airi) into .agents/skills/agent-browser-electron 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 moeru-ai/airi --skill agent-browser-electron -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/agent-browser-electron, .gemini/skills/agent-browser-electron, .github/skills/agent-browser-electron and .opencode/skills/agent-browser-electron in your project.
Going by SKILL.md and its folder, Agent Browser Electron needs the command-line tools its instructions call (curl and pnpm).
SKILL.md contains no URLs. Its commands use curl, which can reach the network depending on how they are called. 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.
Agent Browser Electron 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.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Agent Browser Electron: Electron Devtools Testing (ankitvgupta/exo, 496 stars), Electron App Automation (vercel-labs/agent-browser, 44k stars), AI Search Hub (minsight-ai-info/AI-Search-Hub, 1.3k stars) and Superset Browser Control (superset-sh/superset, 15k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
moeru-ai (a GitHub organization) maintains it in moeru-ai/airi, which has 50,204 GitHub stars. The repository holds 24 skills in this directory. The repository was last updated on October 9, 2026.
Source: moeru-ai/airi on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.