Browse
SkillWeb & browsingWeb browsing and page extraction. Attaches to Chrome over CDP when it is running, otherwise one-shot headless Chrome. Use for /browse, "open URL", public competitor pages, interactive search UIs, or a session where you are already logged in.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the Browse skill
What this skill tells your AI
The instructions your AI receives, as published by scino/fstack in skills/browse/SKILL.md and read by ahel’s review.
Drive a real browser. Prefer this over naive Playwright scripts. Extracted text is sanitized before it hits the model.
How to invoke
From any harness:
npx @scino/fstack browse <command>
From this skill folder (works when the skill is a junction into the fstack package):
node run.mjs <command>
From a clone:
node bin/fstack.js browse <command>
Commands
fstack browse goto https://example.com
fstack browse text
fstack browse text https://example.com
fstack browse screenshot
fstack browse screenshot https://example.com out.png
fstack browse eval "document.title"
fstack browse eval https://example.com "document.title"
fstack browse check-cdp
fstack browse sanitize ./raw.txt
goto / text / screenshot / eval without a URL need Chrome CDP (your session). With a URL they can run headless in one shot.
text waits for visible body text, then fails if the body is still empty. That is usually a search shell, a challenge page, or JS that never painted. Do not retry the same URL. Search or click, then text again.
Strategy 1: One-shot headless
Public pages where the URL already has the content. Pass the URL on the command.
fstack browse text https://example.com
Uses installed Chrome when possible. Text is injection-sanitized.
Strategy 2: Real Chrome (interaction and login-walled sites)
Use CDP when you need to type, click, or wait on a page, or when headless is blocked.
Empty extract is not a login problem by itself. Many public UIs start as a search shell. Attach CDP, complete the query or click in that window (or goto a URL that already encodes the query), wait until results exist, then fstack browse text with no URL.
Login-walled sites (LinkedIn, X, and similar) still need you to log in by hand in that Chrome. Only use sessions you own.
Start Chrome once:
Windows (throwaway profile; does not fight an already-open Chrome):
& "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 --user-data-dir="$env:TEMP\chrome-fstack-cdp"
To reuse your real cookies, quit Chrome first, then point --user-data-dir at $env:LOCALAPPDATA\Google\Chrome\User Data.
macOS:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
Confirm with fstack browse check-cdp.
Strategy 3: Harness native browser
If the host agent already has a working browser tool (Cursor, Antigravity), use it for ordinary pages. Use this skill when you need CDP attach, sanitization, or a harness that has no browser.
Needs
playwright-core (ships with @scino/fstack). Headless one-shot wants Chrome installed, or npx playwright install chromium.
Signals
- GitHub stars
- 21
- Last commit
- Sep 2026
ahel review
K6low
bundled executables the agent is told to run
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Item type
- skill
- Key
browse-scino- Source
- github.com/scino/fstack