launch
Skill17 starsChanged 8 months agoMITView on GitHub
Launch and automate VS Code (Code OSS) using agent-browser via Chrome DevTools Protocol. Use when you need to interact with the VS Code UI, automate the chat panel, test UI features, or take screenshots of VS Code. Triggers include 'automate VS Code', 'interact with chat', 'test the UI', 'take a screenshot', 'launch Code OSS with debugging'.
- Installs packages
66 other projects use a version of this, 2 of them edited.
Adopted by
Most recently taken up by
- BermanRoman/promt-seo-geotheir own version, first seen Nov 8, 2026
- ADWilkinson/astacktheir own version, first seen Nov 8, 2026
- noah-thing/open-cursortheir own version, first seen Nov 8, 2026
- Yeachan-Heo/oh-my-claudecodetheir own version, first seen Nov 8, 2026
- lalulali/vespyrtheir own version, first seen Nov 6, 2026
- pixelswithbliss/claude-skillstheir own version, first seen Nov 1, 2026
Used with
Projects with it also use competitors, paywalls and 8 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
CesarjoquinSkillcompetitors
When the user wants to create competitor comparison or alternative pages for SEO and sales enablement. Also use when the user mentions 'alternative page,' 'vs page,' 'competitor comparison,' 'comparison page,' '[Product] vs [Product],' '[Product] alternative,' 'competitive landing pages,' 'how do we compare to X,' 'battle card,' or 'competitor teardown.' Use this for any content that positions your product against competitors. Covers four formats: singular alternative, plural alternatives, you vs competitor, and competitor vs competitor. For sales-specific competitor docs, see sales-enablement.
Also in 12 projects that use this
CesarjoquinSkillpaywalls
When the user wants to create or optimize in-app paywalls, upgrade screens, upsell modals, or feature gates. Also use when the user mentions "paywall," "upgrade screen," "upgrade modal," "upsell," "feature gate," "convert free to paid," "freemium conversion," "trial expiration screen," "limit reached screen," "plan upgrade prompt," "in-app pricing," "free users won't upgrade," "trial to paid conversion," or "how do I get users to pay." Use this for any in-product moment where you're asking users to upgrade. Distinct from public pricing pages (see cro) — this focuses on in-product upgrade moments where the user has already experienced value. For pricing decisions, see pricing.
Also in 9 projects that use this
riggyzSkillattribution
Attribution rules for issues, pull requests, work items, reviews, and comments created or edited by the agent in GitHub, Linear, Azure DevOps, or similar collaboration systems. Use when creating, commenting on, reviewing, or modifying external tracker content.
Also in 6 projects that use this
coreyhaines31Skillconversion-tracking
Set up, audit, verify, or fix website conversion tracking. Use when the conversion is a form submission, booked meeting, chat, phone call, signup, or purchase; when conversions must reach Google Ads, Meta, GA4, LinkedIn, TikTok, or Microsoft Ads; when the work involves GTM tags and dataLayer events, pixels, the Conversions API (CAPI), Enhanced Conversions, server-side tagging, or gclid and fbclid capture; or when the user reports conversion problems like "conversions stopped", "double counting", "spend but no conversions", "GA4 and Google Ads don't match", or an Unverified or Inactive status. Covers lead gen and ecommerce. Always fire on confirmed success, never the submit click; verify a test conversion arrives; diagnose before changing anything; offer free and native paths alongside paid ones and disclose partner tools. For tracking plans and UTMs, see analytics. For attribution models, see attribution. For campaigns and bidding, see ads. For CRM lead-stage design, see revops.
Also in 3 projects that use this
coreyhaines31Skillmarketing-loops
When the user wants to set up a recurring, self-running marketing workflow — a repeatable loop an AI agent runs on a cadence (weekly, daily, on a trigger) rather than a one-off task. Also use when the user mentions 'marketing loop,' 'recurring marketing workflow,' 'automate my marketing,' 'marketing on autopilot,' 'weekly marketing review,' 'ad fatigue check,' 'weekly ads check,' 'content refresh loop,' 'churn watch,' 'ranking drop alert,' 'run my SEO,' 'SEO operator,' 'daily SEO agent,' 'run my outbound,' 'AI SDR,' 'reply triage,' 'always-on marketing,' 'marketing automation workflow,' or 'run this every week.' Use this to pick, adapt, and schedule an ongoing marketing loop that orchestrates the other marketing skills. For one-off marketing ideas, see marketing-ideas. For the experimentation loop specifically, see ab-testing.
Also in 6 projects that use this
timruebenachSkilldirectory-submissions
When the user wants to submit their product to startup, SaaS, AI, agent, MCP, no-code, or review directories for backlinks, domain rating, and discovery. Also use when the user mentions "directory submissions," "submit to directories," "backlinks from directories," "list my product," "submit to Product Hunt," "BetaList," "TAAFT," "Futurepedia," "G2 listing," "Capterra listing," "AlternativeTo," "SaaSHub," "AI directories," "MCP registry," "agent directory," "dofollow backlinks," "launch directories," or "directory tracker." Use this whenever someone is planning the directory layer of a product launch or an ongoing backlink campaign. For the broader launch moment, see launch-strategy. For programmatic SEO pages that should live behind these backlinks, see programmatic-seo. For AI citation optimization, see ai-seo.
Also in 9 projects that use this
- +4 more from Cesarjoquin
Other versions66 projects use a version of this.
Word for word · 1
- OpenCortexIDE/cortexide★ 175100% same
Edited · 2
- microsoft/vscode★ 195k31% same
- xAmirHamza77/OmniCode★ 1260% same
Wrote their own version · 63
- coreyhaines31/marketingskills★ 59ksame name
- Yeachan-Heo/oh-my-claude-sisyphus★ 41ksame name
- Yeachan-Heo/oh-my-claudecode★ 41ksame name
- posit-dev/positron★ 4.3ksame name
- Nexus-JPF/note-companion★ 874same name
- whitecircle/halo★ 851same name
- menkesu/awesome-pm-skills★ 441same name
- NeuralInverse/neuralinverse★ 221same name
- Cesarjoquin/Marketing-Skills★ 190same name
- simota/agent-skills★ 96same name
53 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository21 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .github/copilot-instructions.mdCopilot instructions
- accessibilitySkill
- add-policySkill
- agent-sessions-layoutSkill
- author-contributionsSkill
- auto-perf-optimizeSkill
- azure-pipelinesSkill
- chat-customizations-editorSkill
- component-fixturesSkill
- cpu-profile-analysisSkill
- fix-ci-failuresSkill
- fix-errorsSkill
- heap-snapshot-analysisSkill
- hygieneSkill
- integration-testsSkill
- memory-leak-auditSkill
- sessionsSkill
- tool-rename-deprecationSkill
- unit-testsSkill
- update-screenshotsSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. 0 are common, 6 are distinctive, and 8 are very specific to this project.
0
Common
Most of the 59 edited versions we read keep these.
6
Distinctive
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
- Distinctive: line 24
Re-snapshot: after navigation or state changes
- Very specific: line 71
After connect, all subsequent commands target the connected app without needing --cdp.
- Distinctive: line 97
Wait for the window to fully initialize, then connect:
- Very specific: line 112
If you see "Sent env to running instance.
- Distinctive: line 277
If the keyboard shortcut doesn't work (e.g., chat panel isn't configured), you can focus the editor via JavaScript:
- Very specific: line 322
Use agent-browser screenshot --full to capture the entire window
- Very specific: line 323
Use element screenshots: agent-browser screenshot ".part.auxiliarybar" sidebar.png
- Very specific: line 324
Use agent-browser screenshot --annotate to see labeled element positions
- Very specific: line 333
Make sure Code OSS was launched with --remote-debugging-port=NNNN
- Distinctive: line 334
If Code OSS was already running, quit and relaunch with the flag
- Distinctive: line 335
Check that the port isn't in use by another process:
- Very specific: line 342
Use agent-browser snapshot -i -C to include cursor-interactive elements (divs with onclick handlers)
- Very specific: line 346
Use agent-browser press for individual keystrokes after focusing the input.
- Distinctive: line 370
Verify it's gone:
“Common” is measured: kept by at least 6 in 10 of the 59 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
VS Code Automation
Automate VS Code (Code OSS) using agent-browser. VS Code is built on Electron/Chromium and exposes a Chrome DevTools Protocol (CDP) port that agent-browser can connect to, enabling the same snapshot-interact workflow used for web pages.
Prerequisites
agent-browsermust be installed. It's listed in devDependencies — runnpm installin the repo root. Usenpx agent-browserif it's not on your PATH, or install globally withnpm install -g agent-browser.- For Code OSS (VS Code dev build): The repo must be built before launching.
./scripts/code.shruns the build automatically if needed, or setVSCODE_SKIP_PRELAUNCH=1to skip the compile step if you've already built. - CSS selectors are internal implementation details. Selectors like
.interactive-input-part,.interactive-input-editor, and.part.auxiliarybarused inevalcommands are VS Code internals that may change across versions. If they stop working, useagent-browser snapshot -ito re-discover the current DOM structure.
Core Workflow
- Launch Code OSS with remote debugging enabled
- Connect agent-browser to the CDP port
- Snapshot to discover interactive elements
- Interact using element refs
- Re-snapshot after navigation or state changes
📸 Take screenshots for a paper trail. Use
agent-browser screenshot <path>at key moments — after launch, before/after interactions, and when something goes wrong. Screenshots provide visual proof of what the UI looked like and are invaluable for debugging failures or documenting what was accomplished.Save screenshots inside a timestamped subfolder so each run is isolated and nothing gets overwritten:
# Create a timestamped folder for this run's screenshots SCREENSHOT_DIR="/tmp/code-oss-screenshots/$(date +%Y-%m-%dT%H-%M-%S)" mkdir -p "$SCREENSHOT_DIR" # Save a screenshot (path is a positional argument — use ./ or absolute paths) # Bare filenames without ./ may be misinterpreted as CSS selectors agent-browser screenshot "$SCREENSHOT_DIR/after-launch.png"
# Launch Code OSS with remote debugging
./scripts/code.sh --remote-debugging-port=9224
# Wait for Code OSS to start, retry until connected
for i in 1 2 3 4 5; do agent-browser connect 9224 2>/dev/null && break || sleep 3; done
# Verify you're connected to the right target (not about:blank)
# If `tab` shows the wrong target, run `agent-browser close` and reconnect
agent-browser tab
# Discover UI elements
agent-browser snapshot -i
# Focus the chat input (macOS)
agent-browser press Control+Meta+iConnecting
# Connect to a specific port
agent-browser connect 9222
# Or use --cdp on each command
agent-browser --cdp 9222 snapshot -i
# Auto-discover a running Chromium-based app
agent-browser --auto-connect snapshot -iAfter connect, all subsequent commands target the connected app without needing --cdp.
Tab Management
Electron apps often have multiple windows or webviews. Use tab commands to list and switch between them:
# List all available targets (windows, webviews, etc.)
agent-browser tab
# Switch to a specific tab by index
agent-browser tab 2
# Switch by URL pattern
agent-browser tab --url "*settings*"Launching Code OSS (VS Code Dev Build)
The VS Code repository includes scripts/code.sh which launches Code OSS from source. It passes all arguments through to the Electron binary, so --remote-debugging-port works directly:
cd <repo-root> # the root of your VS Code checkout
./scripts/code.sh --remote-debugging-port=9224Wait for the window to fully initialize, then connect:
# Wait for Code OSS to start, retry until connected
for i in 1 2 3 4 5; do agent-browser connect 9224 2>/dev/null && break || sleep 3; done
# Verify you're connected to the right target (not about:blank)
# If `tab` shows the wrong target, run `agent-browser close` and reconnect
agent-browser tab
agent-browser snapshot -iTips:
- Set
VSCODE_SKIP_PRELAUNCH=1to skip the compile step if you've already built:VSCODE_SKIP_PRELAUNCH=1 ./scripts/code.sh --remote-debugging-port=9224(from the repo root) - Code OSS uses the default user data directory. Unlike VS Code Insiders, you don't typically need
--user-data-dirsince there's usually only one Code OSS instance running. - If you see "Sent env to running instance. Terminating..." it means Code OSS is already running and forwarded your args to the existing instance. Quit Code OSS and relaunch with the flag, or use
--user-data-dir=/tmp/code-oss-debugto force a new instance.
Launching the Agents App (Agents Window)
The Agents app is a separate workbench mode launched with the --agents flag. It uses a dedicated user data directory to avoid conflicts with the main Code OSS instance.
cd <repo-root> # the root of your VS Code checkout
./scripts/code.sh --agents --remote-debugging-port=9224Wait for the window to fully initialize, then connect:
# Wait for Agents app to start, retry until connected
for i in 1 2 3 4 5; do agent-browser connect 9224 2>/dev/null && break || sleep 3; done
# Verify you're connected to the right target (not about:blank)
agent-browser tab
agent-browser snapshot -iTips:
- The
--agentsflag launches the Agents workbench instead of the standard VS Code workbench. - Set
VSCODE_SKIP_PRELAUNCH=1to skip the compile step if you've already built.
Launching VS Code Extensions for Debugging
To debug a VS Code extension via agent-browser, launch VS Code Insiders with --extensionDevelopmentPath and --remote-debugging-port. Use --user-data-dir to avoid conflicting with an already-running instance.
# Build the extension first
cd <extension-repo-root> # e.g., the root of your extension checkout
npm run compile
# Launch VS Code Insiders with the extension and CDP
code-insiders \
--extensionDevelopmentPath="<extension-repo-root>" \
--remote-debugging-port=9223 \
--user-data-dir=/tmp/vscode-ext-debug
# Wait for VS Code to start, retry until connected
for i in 1 2 3 4 5; do agent-browser connect 9223 2>/dev/null && break || sleep 3; done
# Verify you're connected to the right target (not about:blank)
# If `tab` shows the wrong target, run `agent-browser close` and reconnect
agent-browser tab
agent-browser snapshot -iKey flags:
--extensionDevelopmentPath=<path>— loads your extension from source (must be compiled first)--remote-debugging-port=9223— enables CDP (use 9223 to avoid conflicts with other apps on 9222)--user-data-dir=<path>— uses a separate profile so it starts a new process instead of sending to an existing VS Code instance
Without --user-data-dir, VS Code detects the running instance, forwards the args to it, and exits immediately — you'll see "Sent env to running instance. Terminating..." and CDP never starts.
Restarting After Code Changes
After making changes to Code OSS source code, you must restart to pick up the new build. The workbench loads the compiled JavaScript at startup — changes are not hot-reloaded.
Restart Workflow
- Rebuild the changed code
- Kill the running Code OSS instance
- Relaunch with the same flags
# 1. Ensure your build is up to date.
# Normally you can skip a manual step here and let ./scripts/code.sh in step 3
# trigger the build when needed (or run `npm run watch` in another terminal).
# 2. Kill the Code OSS instance listening on the debug port (if running)
pids=$(lsof -t -i :9224)
if [ -n "$pids" ]; then
kill $pids
fi
# 3. Relaunch
./scripts/code.sh --remote-debugging-port=9224
# 4. Reconnect agent-browser
for i in 1 2 3 4 5; do agent-browser connect 9224 2>/dev/null && break || sleep 3; done
agent-browser tab
agent-browser snapshot -iTip: If you're iterating frequently, run
npm run watchin a separate terminal so compilation happens automatically. You still need to kill and relaunch Code OSS to load the new build.
Interacting with Monaco Editor (Chat Input, Code Editors)
VS Code uses Monaco Editor for all text inputs including the Copilot Chat input. Monaco editors require specific agent-browser techniques — standard click, fill, and keyboard type commands may not work depending on the VS Code build.
The Universal Pattern: Focus via Keyboard Shortcut + press
This works on all VS Code builds (Code OSS, Insiders, stable):
# 1. Open and focus the chat input with the keyboard shortcut
# macOS:
agent-browser press Control+Meta+i
# Linux / Windows:
agent-browser press Control+Alt+i
# 2. Type using individual press commands
agent-browser press H
agent-browser press e
agent-browser press l
agent-browser press l
agent-browser press o
agent-browser press Space # Use "Space" for spaces
agent-browser press w
agent-browser press o
agent-browser press r
agent-browser press l
agent-browser press d
# Verify text appeared (optional)
agent-browser eval '
(() => {
const sidebar = document.querySelector(".part.auxiliarybar");
const viewLines = sidebar.querySelectorAll(".interactive-input-editor .view-line");
return Array.from(viewLines).map(vl => vl.textContent).join("|");
})()'
# 3. Send the message (same on all platforms)
agent-browser press EnterChat focus shortcut by platform:
- macOS:
Ctrl+Cmd+I→agent-browser press Control+Meta+i - Linux:
Ctrl+Alt+I→agent-browser press Control+Alt+i - Windows:
Ctrl+Alt+I→agent-browser press Control+Alt+i
This shortcut focuses the chat input and sets document.activeElement to a DIV with class native-edit-context — VS Code's native text editing surface that correctly processes key events from agent-browser press.
type @ref — Works on Some Builds
On VS Code Insiders (extension debug mode), type @ref handles focus and input in one step:
agent-browser snapshot -i
# Look for: textbox "The editor is not accessible..." [ref=e62]
agent-browser type @e62 "Hello from George!"Tip: If
type @refsilently drops text (the editor stays empty), the ref may be stale or the editor not yet ready. Re-snapshot to get a fresh ref and try again. You can verify text was entered using the snippet in "Verifying Text and Clearing" below.
However, type @ref silently fails on Code OSS — the command completes without error but no text appears. This also applies to keyboard type and keyboard inserttext. Always verify text appeared after typing, and fall back to the keyboard shortcut + press pattern if it didn't. The press-per-key approach works universally across all builds.
⚠️ Warning:
keyboard typecan hang indefinitely in some focus states (e.g., after JS mouse events). If it doesn't return within a few seconds, interrupt it and fall back topressfor individual keystrokes.
Compatibility Matrix
| Method | VS Code Insiders | Code OSS |
press per key (after focus shortcut) | ✅ Works | ✅ Works |
type @ref | ✅ Works | ❌ Silent fail |
keyboard type (after focus) | ✅ Works | ❌ Silent fail |
keyboard inserttext (after focus) | ✅ Works | ❌ Silent fail |
click @ref | ❌ Blocked by overlay | ❌ Blocked by overlay |
fill @ref | ❌ Element not visible | ❌ Element not visible |
Fallback: Focus via JavaScript Mouse Events
If the keyboard shortcut doesn't work (e.g., chat panel isn't configured), you can focus the editor via JavaScript:
agent-browser eval '
(() => {
const inputPart = document.querySelector(".interactive-input-part");
const editor = inputPart.querySelector(".monaco-editor");
const rect = editor.getBoundingClientRect();
const x = rect.x + rect.width / 2;
const y = rect.y + rect.height / 2;
editor.dispatchEvent(new MouseEvent("mousedown", { bubbles: true, clientX: x, clientY: y }));
editor.dispatchEvent(new MouseEvent("mouseup", { bubbles: true, clientX: x, clientY: y }));
editor.dispatchEvent(new MouseEvent("click", { bubbles: true, clientX: x, clientY: y }));
return "activeElement: " + document.activeElement?.className;
})()'
# Then use press for each character
agent-browser press H
agent-browser press e
# ...Verifying Text and Clearing
# Verify text in the chat input
agent-browser eval '
(() => {
const sidebar = document.querySelector(".part.auxiliarybar");
const viewLines = sidebar.querySelectorAll(".interactive-input-editor .view-line");
return Array.from(viewLines).map(vl => vl.textContent).join("|");
})()'
# Clear the input (Select All + Backspace)
# macOS:
agent-browser press Meta+a
# Linux / Windows:
agent-browser press Control+a
# Then delete:
agent-browser press BackspaceScreenshot Tips for VS Code
On ultrawide monitors, the chat sidebar may be in the far-right corner of the CDP screenshot. Options:
- Use
agent-browser screenshot --fullto capture the entire window - Use element screenshots:
agent-browser screenshot ".part.auxiliarybar" sidebar.png - Use
agent-browser screenshot --annotateto see labeled element positions - Maximize the sidebar first: click the "Maximize Secondary Side Bar" button
macOS: If
agent-browser screenshotreturns "Permission denied", your terminal needs Screen Recording permission. Grant it in System Settings → Privacy & Security → Screen Recording. As a fallback, use theevalverification snippet to confirm text was entered — this doesn't require screen permissions.
Troubleshooting
"Connection refused" or "Cannot connect"
- Make sure Code OSS was launched with
--remote-debugging-port=NNNN - If Code OSS was already running, quit and relaunch with the flag
- Check that the port isn't in use by another process:
- macOS / Linux:
lsof -i :9224 - Windows:
netstat -ano | findstr 9224
- macOS / Linux:
Elements not appearing in snapshot
- VS Code uses multiple webviews. Use
agent-browser tabto list targets and switch to the right one - Use
agent-browser snapshot -i -Cto include cursor-interactive elements (divs with onclick handlers)
Cannot type in Monaco Editor inputs
- Use
agent-browser pressfor individual keystrokes after focusing the input. Focus the chat input with the keyboard shortcut (macOS:Ctrl+Cmd+I, Linux/Windows:Ctrl+Alt+I). type @ref,keyboard type, andkeyboard inserttextwork on VS Code Insiders but silently fail on Code OSS — they complete without error but no text appears. Thepress-per-key approach works universally.- See the "Interacting with Monaco Editor" section above for the full compatibility matrix.
Cleanup
Always kill the Code OSS instance when you're done. Code OSS is a full Electron app that consumes significant memory (often 1–4 GB+). Leaving it running wastes resources and holds the CDP port.
# Disconnect agent-browser
agent-browser close
# Kill the Code OSS instance listening on the debug port (if running)
# macOS / Linux:
pids=$(lsof -t -i :9224)
if [ -n "$pids" ]; then
kill $pids
fi
# Windows:
# taskkill /F /PID <PID>
# Or use Task Manager to end "Code - OSS"Verify it's gone:
# Confirm no process is listening on the debug port
lsof -i :9224 # should return nothingDoes it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
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.

