agentleFS
saffron-healthsaffron-health/libretto/.agents/skills/external-electron-apps/SKILL.md

external-electron-apps

Skill883 starsChanged 3 months agoMITView on GitHub

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".

We split this skill into the rules it gives an agent

12 rules. About 0 are common, 4 are distinctive, and 8 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈4

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 8

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use this skill for external Electron desktop apps running on the user's machine.

    line 9
  2. Distinctive:

    Do not default to this for this repository's own Electron app unless the user explicitly asks.

    line 10
  3. Very specific:

    Verify targets with npx libretto pages --session <session>.

    line 17
  4. Very specific:

    Run interactions with npx libretto exec "<code>" --session <session>.

    line 18
  5. Very specific:

    When a reusable workflow file is ready, execute it with npx libretto run ./workflow.ts --cdp http://127.0.0.1:<port> (optional --page …

    line 20
  6. Distinctive:

    Use one session per app:

    line 49
  7. Distinctive:

    When selectors are unstable, inspect first:

    line 66
  8. Very specific:

    If connection fails, make sure the app was launched with --remote-debugging-port and relaunch it.

    line 94
  9. Very specific:

    Prefer 127.0.0.1 over localhost in CDP URLs.

    line 95
  10. Very specific:

    If no pages are listed right after launch, wait 2-5 seconds and retry pages.

    line 96
  11. Very specific:

    If a session is stale, run connect again with the same --session.

    line 97
  12. Very specific:

    Use npx libretto close --session <session> to clear the session.

    line 99

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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>.
  7. When a reusable workflow file is ready, execute it with npx libretto run ./workflow.ts --cdp http://127.0.0.1:<port> (optional --page page-N).

Launch examples

macOS

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

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

Windows

"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:

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

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:

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:

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>

Scripted workflows

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

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.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.