Skip to content
Back to skills

External Electron Apps

ASecurity

Automate user-installed Electron desktop apps (Slack, Discord, VS Code, Notion, Figma, Spotify, etc.) via CDP using this repo's Libretto CLI. Use when the task is to control a local desktop app on the user's machine, not this repo's own Electron app. Triggers: "desktop Slack app", "connect to Electron app", "remote-debugging-port", "CDP desktop app", "automate VS Code desktop app".

  • 883 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 27, 2026
toolsbashdebugging

Works with

  • cli

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add saffron-health/libretto --skill external-electron-apps --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of External Electron Apps?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for External Electron Apps
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/saffron-health-external-electron-apps/badge)](https://www.skillsdirectory.com/skills/saffron-health-external-electron-apps)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: external-electron-apps
description: |
  Automate user-installed Electron desktop apps (Slack, Discord, VS Code, Notion, Figma, Spotify, etc.) via CDP using this repo's Libretto CLI. Use when the task is to control a local desktop app on the user's machine, not this repo's own Electron app. Triggers: "desktop Slack app", "connect to Electron app", "remote-debugging-port", "CDP desktop app", "automate VS Code desktop app".
---

# External Electron App Automation

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.

## Core workflow

1. Quit the app if it is already running.
2. Relaunch the app with `--remote-debugging-port=<port>`.
3. Connect with `npx libretto connect http://127.0.0.1:<port> --session <session>`.
4. Verify targets with `npx libretto pages --session <session>`.
5. Run interactions with `npx libretto exec "<code>" --session <session>`.
6. Capture evidence with `npx libretto snapshot --session <session>`.

## Launch examples

### macOS

```bash
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=9224
```

### Linux

```bash
slack --remote-debugging-port=9222
code --remote-debugging-port=9223
discord --remote-debugging-port=9224
```

### Windows

```bash
"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=9223
```

## Session pattern

Use one session per app:

```bash
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-desktop
```

## Interaction examples

```bash
npx 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-desktop
```

When selectors are unstable, inspect first:

```bash
npx libretto snapshot --session slack-desktop
npx libretto exec "return await page.content()" --session slack-desktop
```

## Multiple pages

Electron apps often have multiple windows/pages. Use `pages` to list them and `--page` to target a specific one:

```bash
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>
```

## Troubleshooting

- If connection fails, make sure the app was launched with `--remote-debugging-port` and relaunch it.
- Prefer `127.0.0.1` over `localhost` in CDP URLs.
- If no pages are listed right after launch, wait 2-5 seconds and retry `pages`.
- If a session is stale, run `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.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.