Agent Browser CLI
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking…
Drives desktop Electron apps already installed on your machine, such as Slack, Discord or VS Code, by relaunching them with a debugging port and using the Libretto CLI.
$ npx skills add cashew-labs/libretto --skill external-electron-apps -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install cashew-labs/libretto external-electron-apps --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/cashew-labs/libretto.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/external-electron-apps .claude/skills/external-electron-apps && 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 "external-electron-apps" agent skill from https://github.com/cashew-labs/libretto/tree/main/.agents/skills/external-electron-apps into .claude/skills/external-electron-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "external-electron-apps", 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/cashew-labs/libretto/tree/main/.agents/skills/external-electron-appsType 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 cashew-labs/libretto --skill external-electron-apps -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install cashew-labs/libretto external-electron-apps --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cashew-labs/libretto.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/external-electron-apps .agents/skills/external-electron-apps && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "external-electron-apps" agent skill from https://github.com/cashew-labs/libretto/tree/main/.agents/skills/external-electron-apps into .agents/skills/external-electron-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "external-electron-apps", 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 cashew-labs/libretto --skill external-electron-apps -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install cashew-labs/libretto external-electron-apps --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cashew-labs/libretto.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/external-electron-apps .cursor/skills/external-electron-apps && 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 "external-electron-apps" agent skill from https://github.com/cashew-labs/libretto/tree/main/.agents/skills/external-electron-apps into .cursor/skills/external-electron-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "external-electron-apps", 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/cashew-labs/libretto.git --path .agents/skills/external-electron-apps--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 cashew-labs/libretto --skill external-electron-apps -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install cashew-labs/libretto external-electron-apps --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cashew-labs/libretto.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/external-electron-apps .gemini/skills/external-electron-apps && 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 "external-electron-apps" agent skill from https://github.com/cashew-labs/libretto/tree/main/.agents/skills/external-electron-apps into .gemini/skills/external-electron-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "external-electron-apps", 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 cashew-labs/libretto external-electron-appsInstalls 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 cashew-labs/libretto --skill external-electron-apps -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/cashew-labs/libretto.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/external-electron-apps .github/skills/external-electron-apps && 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 "external-electron-apps" agent skill from https://github.com/cashew-labs/libretto/tree/main/.agents/skills/external-electron-apps into .github/skills/external-electron-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "external-electron-apps", 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 cashew-labs/libretto --skill external-electron-apps -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install cashew-labs/libretto external-electron-apps --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cashew-labs/libretto.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/external-electron-apps .opencode/skills/external-electron-apps && 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 "external-electron-apps" agent skill from https://github.com/cashew-labs/libretto/tree/main/.agents/skills/external-electron-apps into .opencode/skills/external-electron-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "external-electron-apps", 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.
external-electron-appsDrives desktop Electron apps already installed on your machine, such as Slack, Discord or VS Code, by relaunching them with a debugging port and using the Libretto CLI.
This skill is for controlling third-party Electron desktop apps through the Chrome DevTools Protocol, and it tells the agent not to use it for the repository's own Electron app unless asked. The workflow is: quit the app, relaunch it with the remote debugging port flag, connect with npx libretto connect under a named session, list targets with pages, run code with exec, capture evidence with snapshot, and later run a saved workflow file with libretto run and a CDP address.
Launch commands are given for macOS, Linux and Windows, using Slack, VS Code and Discord on separate ports. It recommends one session per app, notes that Electron apps often have several windows and shows how to pick one with the page option, and suggests taking a snapshot or reading the page content when selectors are unstable. The excerpt is cut off before the scripted workflows section.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 41ab782. 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:
npxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx, 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.
External Electron App Automation loads about 967 tokens when it runs. Until then it costs about 102 tokens; SKILL.md has 272 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 cashew-labs/libretto at commit 41ab782, republished under its MIT licence (© cashew-labs). 272 words, ~967 tokens.
.claude/skills/external-electron-apps/SKILL.md (or your agent's skills folder).Use this skill for external Electron desktop apps running on the user's machine. Do not default to this for this repository's own Electron app unless the user explicitly asks.
--remote-debugging-port=<port>.npx libretto connect http://127.0.0.1:<port> --session <session>.npx libretto pages --session <session>.npx libretto exec "<code>" --session <session>.npx libretto snapshot --session <session>.npx libretto run ./workflow.ts --cdp http://127.0.0.1:<port> (optional --page page-N).open -a "Slack" --args --remote-debugging-port=9222
open -a "Visual Studio Code" --args --remote-debugging-port=9223
open -a "Discord" --args --remote-debugging-port=9224slack --remote-debugging-port=9222
code --remote-debugging-port=9223
discord --remote-debugging-port=9224"C:\Users\%USERNAME%\AppData\Local\slack\slack.exe" --remote-debugging-port=9222
"C:\Users\%USERNAME%\AppData\Local\Programs\Microsoft VS Code\Code.exe" --remote-debugging-port=9223Use one session per app:
npx libretto connect http://127.0.0.1:9222 --session slack-desktop
npx libretto pages --session slack-desktop
npx libretto exec "return await page.title()" --session slack-desktop
npx libretto snapshot --session slack-desktopnpx libretto exec "await page.locator('button:has-text(\"Search\")').click()" --session slack-desktop
npx libretto exec "await page.keyboard.type('incident-123')" --session slack-desktop
npx libretto exec "await page.keyboard.press('Enter')" --session slack-desktopWhen selectors are unstable, inspect first:
npx libretto snapshot --session slack-desktop
npx libretto exec "return await page.content()" --session slack-desktopElectron apps often have multiple windows/pages. Use pages to list them and --page to target a specific one:
npx libretto pages --session slack-desktop
npx libretto exec --session slack-desktop --page <page-id> "return await page.url()"
npx libretto snapshot --session slack-desktop --page <page-id>After interactive discovery, run a default-exported workflow() against the same CDP endpoint. Libretto attaches to the selected page without navigating to workflow startUrl, so leave the app on the target screen first (or navigate in the handler). Closing the Libretto session does not quit the Electron app.
npx libretto run ./slack-workflow.ts --cdp http://127.0.0.1:9222
npx libretto run ./slack-workflow.ts --cdp http://127.0.0.1:9222 --page page-1--remote-debugging-port and relaunch it.127.0.0.1 over localhost in CDP URLs.pages.connect again with the same --session.Use npx libretto close --session <session> to clear the session. This does not terminate the external app — it only removes the session state so Libretto stops tracking it.
© cashew-labs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/external-electron-apps of cashew-labs/libretto.
Open the folder on GitHubat commit 41ab782
External Electron App Automation 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 |
|---|---|---|---|---|---|---|
| External Electron App Automation this skillcashew-labs/libretto | 904 | — | ~967 | Automated safety check: Pass | MIT | |
| Agent Browser CLIvercel-labs/agent-browser | 44k | 24 repos | ~864 | Automated safety check: Pass | Apache-2.0 | |
| Electron App Automationvercel-labs/agent-browser | 44k | 5 repos | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| ComposioComposioHQ/composio | 30k | 1 repos | ~1.7k | Automated safety check: Pass | MIT | |
| Connect Apps with ComposioComposioHQ/awesome-claude-skills | 77k | 3 repos | ~557 | Automated safety check: Pass | None | |
| Openloomi Connectorsmelandlabs/openloomi | 1k | — | ~3.3k | Automated safety check: Pass | Apache-2.0 |
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking…
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.
ComposioHQ/composio
Route and complete Composio work across Composio For You and Composio Platform.
ComposioHQ/awesome-claude-skills
Connects an agent to 1000+ external apps through the Composio Tool Router plugin, so it can actually send emails, create issues and post messages instead of only drafting them.
melandlabs/openloomi
openloomi Connectors tools - manage the native 7 messaging integrations and pair with the composio skill for the 1000+ apps OAuth layer (Slack, Discord, X, Gmail, Outlook, Google…
olo-dot-io/Uni-CLI
Comprehensive guide to Uni-CLI — the open Agent-Computer Interface runtime for real software.
cashew-labs/libretto
Lays out a minimal, iteration-first approach to writing system prompts for LLM agents, with model-specific notes for Claude, GPT, Gemini, and Codex.
cashew-labs/libretto
Works through the review comments on a pull request one by one: fetches the threads, makes the fixes, runs type-check, build and lint, pushes, and resolves the threads.
cashew-labs/libretto
Design rules for command-line tools: subcommand-scoped help, actionable success output, debuggable failures, stable output, meaningful exit codes and a --json mode.
cashew-labs/libretto
Resolves Git merge, rebase and cherry-pick conflicts by reading the PRs behind each side, keeping both intents and asking you when they truly clash.
cashew-labs/libretto
Researches the codebase and relevant docs, asks clarifying questions, then writes a spec sheet in specs/ for a significant feature or complex fix.
cashew-labs/libretto
Turns the current session's code changes into a Markdown walkthrough shown in a native Glimpse window, with highlighted code, rendered diffs and review feedback.
Categories
Drives desktop Electron apps already installed on your machine, such as Slack, Discord or VS Code, by relaunching them with a debugging port and using the Libretto CLI. This skill is for controlling third-party Electron desktop apps through the Chrome DevTools Protocol, and it tells the agent not to use it for the repository's own Electron app unless asked. The workflow is: quit the app, relaunch it with the remote debugging port flag, connect with npx libretto connect under a named session, list targets with pages, run code with exec, capture evidence with snapshot, and later run a saved workflow file with libretto run and a CDP address.
External Electron App Automation fits situations like: automating a local desktop app such as Slack or VS Code; connecting to an Electron app through its remote debugging port; inspecting a desktop app's page content when selectors are unreliable; turning a manual desktop app task into a reusable Libretto workflow.
Run `npx skills add cashew-labs/libretto --skill external-electron-apps -a claude-code`. Or copy the skill folder (.agents/skills/external-electron-apps in cashew-labs/libretto) into .claude/skills/external-electron-apps in your project. Claude Code loads it when a task matches its description.
Run `npx skills add cashew-labs/libretto --skill external-electron-apps -a codex`. Or copy the skill folder (.agents/skills/external-electron-apps in cashew-labs/libretto) into .agents/skills/external-electron-apps 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 cashew-labs/libretto --skill external-electron-apps -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/external-electron-apps, .gemini/skills/external-electron-apps, .github/skills/external-electron-apps and .opencode/skills/external-electron-apps in your project.
Going by SKILL.md and its folder, External Electron App Automation needs the command-line tools its instructions call (npx). Our summary lists: Node.js with `npx` to run the Libretto CLI; The target Electron app installed locally.
SKILL.md contains no URLs. Its commands use npx, 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.
External Electron App Automation is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 967 tokens (SKILL.md is roughly 3.9k 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 External Electron App Automation: Agent Browser CLI (vercel-labs/agent-browser, 44k stars), Electron App Automation (vercel-labs/agent-browser, 44k stars), Composio (ComposioHQ/composio, 30k stars) and Connect Apps with Composio (ComposioHQ/awesome-claude-skills, 77k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
cashew-labs (a GitHub organization) maintains it in cashew-labs/libretto, which has 904 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on August 21, 2026.
Source: cashew-labs/libretto on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.