AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Cheliped Browser

skill-tykimos-cheliped-skills-browser · by tykimos

Agent Browser Runtime for browsing, observing, and interacting with web pages via Chrome DevTools Protocol (CDP). Use this skill when Claude needs to: (1) navigate to and browse websites, (2) extract page content, text, or links from any URL, (3) fill forms or type into input fields, (4) click buttons or links on a page, (5) take screenshots of web pages, (6) execute JavaScript in a page context,…

No reviews yet
0 installs
18 views
0.0% view→install

Install

$ agentstack add skill-tykimos-cheliped-skills-browser

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-tykimos-cheliped-skills-browser)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Cheliped Browser? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Agent Browser Runtime

Control Chrome via CDP. Extract Agent DOM — a compressed DOM where every interactive element gets a numeric agentId.

Setup

Run once before first use:

cd scripts && npm install && npm run build

Core Workflow: Observe-Act Loop

# 1. Navigate and observe
node scripts/cheliped-cli.mjs '[{"cmd":"goto","args":["https://example.com"]},{"cmd":"observe"}]'

# 2. Use agentId from observe output to interact
node scripts/cheliped-cli.mjs '[{"cmd":"fill","args":["3","search term"]},{"cmd":"click","args":["4"]},{"cmd":"observe"}]'

First call auto-launches Chrome and saves session. Subsequent calls reconnect (the reconnect is identity-checked against the browser's DevTools token, so a crashed-and-reused PID/port can't be mistaken for the original Chrome). Call close when done.

Output Envelope

Output is always a JSON array, one envelope per command, compact by default:

[{ "cmd": "goto",  "ok": true,  "result": { "url": "...", "title": "..." } },
 { "cmd": "click", "ok": false, "error": { "code": "E_STALE_ID", "message": "..." } }]

By default each command runs even if a prior one fails (per-command isolation). Error code is one of E_BAD_ARG, E_STALE_ID, E_TIMEOUT, E_BROWSER, E_UNKNOWN.

CLI flags (before the JSON argument)

| Flag | Effect | |------|--------| | --session | named session (concurrent browsers) | | --no-headless / --headed | run Chrome with a visible window | | --pretty | indent JSON output (default is compact, fewer tokens) | | --stop-on-error | fail-fast: halt the batch on the first error | | --chrome-path | explicit Chrome/Chromium binary (or CHROME_PATH env) | | --timeout | launch/connect timeout | | --max-links / --max-texts / --max-text-length | tune observe compression (recall vs tokens) |

Commands

| Command | Args | Returns | |---------|------|---------| | goto | ["url"] | { success, url, title } | | observe | none | { nodes, texts, links }nodes[].id = agentId | | click | ["agentId"] | { success, action, agentId } | | fill | ["agentId", "text"] | { success, action, agentId } | | screenshot | ["path"] (optional) | { success, path, size } | | run-js | ["expression"] | { success, result } | | extract | ["text"\|"links"\|"all"] | { type, data } | | actions | none | [{ id, type, label, params }] | | perform | ["actionId"] + "params":{...} | { success, actionId } | | observe-graph | none | { nodes, edges, forms } | | back | none | { success } — navigate back in history | | forward | none | { success } — navigate forward in history | | hover | ["agentId"] | { success } — hover over element | | scroll | ["direction", "pixels"] | { success } — direction: up/down/left/right | | wait-for | ["selector", "timeout"] | { found } — wait for CSS selector | | close | none | { success } | | Shadow DOM Commands | | | | observe-shadow | none | { shadowHosts: [{ hostSelector, elements, iframes }] } | | click-deep | ["selector"] | { success } — shadow-piercing click | | fill-deep | ["selector", "text"] | { success } — shadow-piercing fill | | Iframe Commands | | | | list-frames | none | { frames: [{ index, url, name }] } | | observe-frame | ["target"] | { url, elements: [{ index, tag, text, selector }] } | | click-frame | ["target", "selector"] | { success } — click inside iframe | | fill-frame | ["target", "selector", "text"] | { success } — type into iframe input | | run-js-frame | ["target", "expression"] | { success, result } — JS in iframe |

target = frame index (0-based number from list-frames) or URL substring to match.

Examples

Browse and extract content

node scripts/cheliped-cli.mjs '[{"cmd":"goto","args":["https://news.ycombinator.com"]},{"cmd":"observe"}]'

Fill a form and submit

node scripts/cheliped-cli.mjs '[{"cmd":"observe"},{"cmd":"fill","args":["7","hello"]},{"cmd":"click","args":["8"]}]'

Semantic action (login, search)

node scripts/cheliped-cli.mjs '[{"cmd":"goto","args":["https://example.com/login"]},{"cmd":"actions"}]'
node scripts/cheliped-cli.mjs '[{"cmd":"perform","args":["login-form"],"params":{"email":"user@example.com","password":"pass"}}]'

Concurrent sessions

node scripts/cheliped-cli.mjs --session agent1 '[{"cmd":"goto","args":["https://site-a.com"]}]'
node scripts/cheliped-cli.mjs --session agent2 '[{"cmd":"goto","args":["https://site-b.com"]}]'

Interact with shadow DOM content (e.g. Cloudflare Turnstile, web components)

# 1. Discover shadow DOM hosts and their contents
node scripts/cheliped-cli.mjs '[{"cmd":"observe-shadow"}]'

# 2. Click element inside shadow DOM (pierces shadow boundaries recursively)
node scripts/cheliped-cli.mjs '[{"cmd":"click-deep","args":["input[type=checkbox]"]}]'

# 3. Use ">>>" to explicitly cross shadow DOM boundaries
node scripts/cheliped-cli.mjs '[{"cmd":"click-deep","args":["#turnstile-widget >>> input[type=checkbox]"]}]'

# 4. Fill input inside shadow DOM
node scripts/cheliped-cli.mjs '[{"cmd":"fill-deep","args":["#shadow-host >>> input[name=email]","user@example.com"]}]'

click-deep and fill-deep use absolute coordinate dispatch for real mouse events. Plain selectors auto-search all shadow roots recursively. Use >>> to target specific shadow host → inner element paths.

Interact with iframe content (e.g. Cloudflare Turnstile, CAPTCHA, embedded widgets)

# 1. List all iframes on the page
node scripts/cheliped-cli.mjs '[{"cmd":"list-frames"}]'

# 2. Observe elements inside iframe at index 0
node scripts/cheliped-cli.mjs '[{"cmd":"observe-frame","args":["0"]}]'

# 3. Click a checkbox inside the iframe (use CSS selector from observe-frame output)
node scripts/cheliped-cli.mjs '[{"cmd":"click-frame","args":["0","input[type=checkbox]"]}]'

# Or match iframe by URL substring instead of index
node scripts/cheliped-cli.mjs '[{"cmd":"click-frame","args":["turnstile","input[type=checkbox]"]}]'

The iframe commands use absolute coordinate dispatch (iframe position + element position) to produce real mouse events that pass bot detection.

Key Notes

  • Call observe before click/fill — agentIds are only valid after observation.
  • fill works with React/SPA apps (uses native input value setters).
  • Agent DOM is token-compressed — far fewer tokens than raw HTML.
  • Chrome persists between calls until close. No restart needed.
  • Output is always a JSON array of { cmd, ok, result|error } envelopes (see Output Envelope above); compact by default, --pretty to indent.
  • click scrolls the target into view and validates its box before dispatching, so off-screen / zero-area elements don't produce a silent no-op.
  • For shadow DOM content (Cloudflare Turnstile, web components): use observe-shadowclick-deep/fill-deep. Supports >>> syntax to pierce shadow boundaries.
  • For iframe content (embedded widgets): use list-framesobserve-frameclick-frame/fill-frame. Regular observe/click cannot interact with iframe elements.
  • list-frames also discovers iframes hidden inside shadow DOM.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.