browserforce

Browse the web using the user's real Chrome browser — already logged in, with real cookies and extensions. No headless browser. Uses BrowserForce relay + Playwright API via CLI.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "browserforce" with this command: npx skills add ivalsaraj/browserforce/ivalsaraj-browserforce-browserforce

BrowserForce — Your Real Chrome Browser

BrowserForce gives you the user's actual Chrome browser — all their logins, cookies, and extensions already active. No headless browser, no fresh profiles.

Prerequisites

The user must have:

  1. BrowserForce Chrome extension installed and connected (green icon)
  2. The relay auto-starts on first command — no manual step needed

Check with: browserforce status

Quick Reference

browserforce status              # Check relay + extension status
browserforce tabs                # List open tabs
browserforce snapshot [n]        # Accessibility tree of tab n
browserforce screenshot [n]      # Screenshot tab n (PNG to stdout)
browserforce navigate <url>      # Open URL in new tab
browserforce -e "<code>"         # Run Playwright JavaScript (one-shot)

Important: One-Shot Execution

Each browserforce -e call is independent — state does NOT persist between calls. Do everything you need (navigate, act, observe) within a single -e call.

Core Workflow: Observe → Act → Observe

Quick observation (no code needed)

browserforce snapshot 0          # See what's on tab 0
browserforce tabs                # List all tabs

Navigate and read a page

browserforce -e "
  state.page = await context.newPage();
  await state.page.goto('https://example.com');
  await waitForPageLoad();
  return await snapshot();
"

Note: snapshot() reads from state.page (if set) or page (default tab 0). Always assign state.page when creating a new page so snapshot() reads the right tab.

Click and verify

browserforce -e "
  state.page = context.pages()[context.pages().length - 1];
  await state.page.locator('role=button[name=\"Next\"]').click();
  await waitForPageLoad();
  return await snapshot();
"

Fill a form

browserforce -e "
  state.page = context.pages()[context.pages().length - 1];
  await state.page.locator('role=textbox[name=\"Email\"]').fill('user@example.com');
  return await snapshot();
"

Extract data

browserforce -e "
  const p = context.pages()[context.pages().length - 1];
  return await p.evaluate(() => document.querySelector('.price').textContent);
"

Screenshot

browserforce screenshot 0 > page.png
# or via -e:
browserforce -e "
  state.page = context.pages()[0];
  return await state.page.screenshot();
" > page.png

Rules

  1. snapshot() over screenshot() — snapshot returns text (fast, cheap). Use screenshot only for visual layout verification.
  2. One-shot execution — each -e call is independent. Do all steps in one call.
  3. Don't navigate existing tabs — create your own via context.newPage() or browserforce navigate <url>.
  4. Use convenience commands for simple operations: browserforce tabs, browserforce snapshot, browserforce screenshot.
  5. waitForPageLoad() — call after navigation or clicks that trigger page loads.

Error Recovery

  • Connection lost: User must check browserforce status
  • No tabs: browserforce navigate https://example.com
  • Element not found: browserforce -e "return await snapshot({ search: 'button' })"

Important

This is the user's REAL browser. Be respectful:

  • Don't close tabs you didn't open
  • Don't navigate tabs you didn't create
  • Don't modify browser settings or stored data

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

Markdown Lint

Use this skill immediately when the user needs to: set up markdownlint-cli2 and pre-commit hooks in a repository, fix or batch-repair markdownlint errors lik...

Registry SourceRecently Updated
Coding

Code Sync

Use this skill to batch-sync all git repos across machines — pushing uncommitted changes at end of day or pulling latest at start of day. Invoke when the use...

Registry SourceRecently Updated
Coding

Workspace Init

Use this skill to initialize or update a multi-repo workspace created from dev-config-template. Invoke whenever the user wants to: set up a fresh workspace c...

Registry SourceRecently Updated
Coding

GitHub Issue Auto Triage

自动分类 GitHub Issue,AI 打标签、分配负责人、检测重复、回复 FAQ

Registry SourceRecently Updated