Javascript SDK
aiskillstore/marketplace
JavaScript/TypeScript SDK for inference.sh - run AI apps, build agents, integrate with all models.
Visual feedback browser automation with multi-session, multi-tab, iframe support, and enterprise primitives.
$ npx skills add SeifBenayed/cloclo --skill browse -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install SeifBenayed/cloclo browse --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/SeifBenayed/cloclo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/browse .claude/skills/browse && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "browse" agent skill from https://github.com/SeifBenayed/cloclo/tree/main/.claude/skills/browse into .claude/skills/browse/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browse", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/SeifBenayed/cloclo/tree/main/.claude/skills/browseType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add SeifBenayed/cloclo --skill browse -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install SeifBenayed/cloclo browse --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SeifBenayed/cloclo.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/browse .agents/skills/browse && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "browse" agent skill from https://github.com/SeifBenayed/cloclo/tree/main/.claude/skills/browse into .agents/skills/browse/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browse", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add SeifBenayed/cloclo --skill browse -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install SeifBenayed/cloclo browse --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SeifBenayed/cloclo.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/browse .cursor/skills/browse && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "browse" agent skill from https://github.com/SeifBenayed/cloclo/tree/main/.claude/skills/browse into .cursor/skills/browse/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browse", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/SeifBenayed/cloclo.git --path .claude/skills/browse--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add SeifBenayed/cloclo --skill browse -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install SeifBenayed/cloclo browse --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SeifBenayed/cloclo.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/browse .gemini/skills/browse && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "browse" agent skill from https://github.com/SeifBenayed/cloclo/tree/main/.claude/skills/browse into .gemini/skills/browse/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browse", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install SeifBenayed/cloclo browseInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add SeifBenayed/cloclo --skill browse -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/SeifBenayed/cloclo.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/browse .github/skills/browse && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "browse" agent skill from https://github.com/SeifBenayed/cloclo/tree/main/.claude/skills/browse into .github/skills/browse/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browse", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add SeifBenayed/cloclo --skill browse -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install SeifBenayed/cloclo browse --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SeifBenayed/cloclo.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/browse .opencode/skills/browse && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "browse" agent skill from https://github.com/SeifBenayed/cloclo/tree/main/.claude/skills/browse into .opencode/skills/browse/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browse", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
browseVisual feedback browser automation with multi-session, multi-tab, iframe support, and enterprise primitives.
Browse is an agent skill from SeifBenayed/cloclo. Visual feedback browser automation with multi-session, multi-tab, iframe support, and enterprise primitives. Navigate sites, interact with elements, manage tabs/sessions, handle file uploads, dropdowns, iframes, and verify results using the screenshot-analyze-act-verify loop. Use when asked to "open a site", "test a page", "fill a form", "check a deployment", "browse to", "click on", "verify the UI", "compare pages side by side", or any task involving web interaction. Also use proactively when a task would…
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Productivity & Automation, covering File uploads and storage and Browser automation. The repository describes itself as: Open-source Claude Code SDK — single-file CLIs in Node.js, Python, Go, Rust that use directly. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 00f5195. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BrowserReadGrepGlobFrom allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
site-a.comsite-b.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Browse loads about 2.7k tokens when it runs. Until then it costs about 138 tokens; SKILL.md has 822 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from SeifBenayed/cloclo at commit 00f5195, republished under its MIT licence (© SeifBenayed). 822 words, ~2,734 tokens.
.claude/skills/browse/SKILL.md (or your agent's skills folder).You have a Browser tool with an action-based interface. This skill teaches you how to use it
effectively with a screenshot → analyze → act → verify loop that prevents blind clicking.
Never act without seeing. Never assume an action worked. Always verify.
OBSERVE → DECIDE → ACT → VERIFY
(get_state (analyze (click/ (get_state
+ screenshot elements) type) + screenshot
+ compare)Every browser session starts the same way:
get_state — this returns the DOM with indexed interactive elements AND the page textBrowser { action: "navigate", url: "https://example.com" }
Browser { action: "get_state" }
Browser { action: "screenshot" }Read the screenshot to understand the visual layout. The get_state output gives you:
[0] <button> "Submit", [1] <input:text> name="email"For structured processing, use format: "json":
Browser { action: "get_state", format: "json" }Returns: { url, title, scroll, stats, elements: [{index, tag, text, ...}], text, session_id, active_tab_id }
Always prefer element indices over CSS selectors. The indices come from get_state and are
reliable. CSS selectors can break if the page structure changes.
Browser { action: "click_element", index: 5 }
Browser { action: "type_element", index: 3, value: "hello@example.com" }Fall back to CSS selectors only when:
input[name="csrf_token"])Browser { action: "click", selector: "#submit-btn" }
Browser { action: "fill", selector: "input[name='email']", value: "test@example.com" }For named keys and key combinations:
Browser { action: "send_keys", keys: "Enter" }
Browser { action: "send_keys", keys: "Tab Tab Enter" }
Browser { action: "send_keys", keys: "Ctrl+a" }
Browser { action: "send_keys", keys: "Shift+Tab" }Supported named keys: Enter, Tab, Escape, Backspace, Delete, Space, ArrowUp/Down/Left/Right, Home, End, PageUp, PageDown, F1-F12. Modifiers: Ctrl, Alt, Shift, Meta/Cmd. Sequences: space-separated.
Browser { action: "upload_file", selector: "input[type='file']", file_path: "/path/to/file.pdf" }Browser { action: "dropdown_options", selector: "#my-select" }
Browser { action: "select_dropdown", selector: "#my-select", value: "option_value" }Extract structured data from the page using CSS selectors:
Browser { action: "extract", schema: {"title": "h1", "price": ".price", "description": ".desc"} }Returns JSON: {"title": "Product Name", "price": "$29.99", "description": "..."}
Open, switch between, and close tabs for side-by-side comparison:
Browser { action: "navigate", url: "https://site-a.com" }
Browser { action: "new_tab", url: "https://site-b.com" }
Browser { action: "list_tabs" }
Browser { action: "switch_tab", tab_id: "PREVIOUS_TAB_ID" }
Browser { action: "close_tab", tab_id: "TAB_TO_CLOSE" }Tab IDs are strings (CDP target IDs). Get them from list_tabs.
Use separate sessions for isolated browser instances (different profiles, auth states):
Browser { action: "new_session", session_id: "admin", profile_name: "admin-profile" }
Browser { action: "navigate", url: "https://app.com/admin", session_id: "admin" }
Browser { action: "new_session", session_id: "user", profile_name: "user-profile" }
Browser { action: "navigate", url: "https://app.com/dashboard", session_id: "user" }
Browser { action: "list_sessions" }
Browser { action: "close_session", session_id: "admin" }Profiles persist cookies and state across sessions:
profile_name: "my-profile" → stored in ~/.claude/browser-profiles/my-profile/user_data_dir: "/custom/path" → raw Chrome user data directoryprofile_dir: "Profile 1" → Chrome's --profile-directory flagConnect to an already-running Chrome instance:
Browser { action: "new_session", session_id: "remote", cdp_url: "http://localhost:9222" }Or set BROWSER_CDP_URL=http://localhost:9222 env var for the default session.
In attach mode, close disconnects without killing Chrome.
Browser { action: "list_frames" }
Browser { action: "click_element", index: 0, frame_id: "FRAME_ID" }
Browser { action: "fill", selector: "input", value: "text", frame_id: "FRAME_ID" }Frame IDs come from list_frames. Use frame_id on any DOM action to target elements inside iframes.
The browser captures events (dialogs, navigations, crashes, downloads):
Browser { action: "get_events" }
Browser { action: "set_dialog_auto_dismiss", enabled: true }Dialogs (alert/confirm/prompt) are auto-dismissed by default. Disable with enabled: false to handle manually.
After every action that changes the page, you must verify:
1. Take action (click, type, navigate, submit)
2. Wait briefly if needed: Browser { action: "wait_for", selector: ".result", timeout: 3000 }
3. Observe again: Browser { action: "get_state" }
4. Screenshot again: Browser { action: "screenshot" }
5. Compare: did the page change as expected?
- YES → continue to next step
- NO → try a different approach (different element, different selector, scroll first)You have a maximum of 10 iterations (observe-act-verify cycles) per task. This prevents infinite loops. If you haven't achieved the goal in 10 iterations:
Count your iterations. Mention the count when reporting.
When something doesn't work:
get_state again to refresh the element indices.scroll_to first, then click again.wait_for with a key selector, or reload.Fallback chain for clicking:
click_element by index → click by CSS selector → evaluate with JS click → scroll + retryPages are often longer than the viewport. The get_state output shows scroll position.
If you need elements below the fold:
Browser { action: "scroll_to", value: "500" } // scroll down 500px
Browser { action: "scroll_to", selector: "#footer" } // scroll to element
Browser { action: "get_state" } // refresh elements after scrollAlways get_state after scrolling — the element indices change.
When completing a task, provide evidence:
Format your report:
## Browser Task: [description]
**URL:** https://example.com/page
**Session:** default
**Iterations:** 4/10
### Actions
1. Navigated to https://example.com
2. Clicked [3] <button> "Login"
3. Typed email into [5] <input:email>
4. Typed password into [7] <input:password>
5. Sent keys: Enter
### Verification
- Page title changed to "Dashboard"
- User avatar visible in header
- No error messages present
### Screenshots
- Before: [screenshot 1]
- After: [screenshot 2]For complex checks or actions not covered by built-in actions:
Browser { action: "evaluate", value: "document.querySelectorAll('.error').length" }
Browser { action: "evaluate", value: "window.localStorage.getItem('token')" }This is powerful but use it sparingly — prefer the built-in actions.
For authenticated sessions:
Browser { action: "cookies_get" }
Browser { action: "cookies_set", cookie: { name: "session", value: "abc123", domain: ".example.com" } }
Browser { action: "cookies_clear" }Always close the browser when done:
Browser { action: "close" }This frees system resources. The browser will auto-launch again if needed.
| Goal | Action | Notes |
|---|---|---|
| See the page | get_state + screenshot | Always first |
| See page (structured) | get_state with format: "json" | For parsing |
| Click a button | click_element with index | From get_state |
| Type text | type_element with index and value | |
| Press keys | send_keys with keys | "Enter", "Tab", "Ctrl+a" |
| Navigate | navigate with url | |
| Upload a file | upload_file with selector, file_path | |
| Read dropdown | dropdown_options with selector | Returns [{value,text,selected}] |
| Select dropdown | select_dropdown with selector, value | |
| Extract data | extract with schema | Returns structured JSON |
| Wait for content | wait_for with selector | |
| Scroll down | scroll_to with value or selector | |
| Open new tab | new_tab with optional url | |
| Switch tab | switch_tab with tab_id | |
| List tabs | list_tabs | |
| Close tab | close_tab with tab_id | |
| New session | new_session with session_id | Optional: profile_name, cdp_url |
| List sessions | list_sessions | |
| List frames | list_frames | For iframe inspection |
| Get events | get_events | Dialog, crash, download, navigation |
| Run JS | evaluate with value | |
| Go back | back | |
| Save page as PDF | pdf | |
| Check cookies | cookies_get | |
| Done | close |
© SeifBenayed, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/browse of SeifBenayed/cloclo.
Open the folder on GitHubat commit 00f5195
Browse next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Browse this skillSeifBenayed/cloclo | 114 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Javascript SDKaiskillstore/marketplace | 430 | 1 repos | ~3.3k | Automated safety check: Pass | None | |
| Autofillinsundial-org/awesome-openclaw-skills | 663 | — | ~1.8k | Automated safety check: Pass | None | |
| Agent Browserquran/quran.com-frontend-next | 1.9k | 41 repos | ~3.3k | Automated safety check: Pass | None | |
| Dev-Browser CLI AutomationSawyerHood/dev-browser | 6.7k | 1 repos | ~455 | Automated safety check: Pass | MIT | |
| Camoufox CLIBin-Huang/camoufox-cli | 350 | 1 repos | ~4.5k | Automated safety check: Pass | MIT |
aiskillstore/marketplace
JavaScript/TypeScript SDK for inference.sh - run AI apps, build agents, integrate with all models.
sundial-org/awesome-openclaw-skills
Automated web form filling and file uploading skill with Playwright browser automation.
quran/quran.com-frontend-next
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
SawyerHood/dev-browser
Browser automation with persistent named pages via the dev-browser CLI. Use when users ask to navigate websites, fill forms, take screenshots, extract web…
Bin-Huang/camoufox-cli
Anti-detect browser automation CLI & Skills for AI agents. An agent skill from Bin-Huang/camoufox-cli.
VibiumDev/vibium
Automate browsers with the Vibium CLI. An agent skill from VibiumDev/vibium.
SeifBenayed/cloclo
Search ChatGPT and extract the full response + hydration JSON that powers the UI.
SeifBenayed/cloclo
Review code for unnecessary complexity and simplify it. An agent skill from SeifBenayed/cloclo.
SeifBenayed/cloclo
Create a git commit with a good message. An agent skill from SeifBenayed/cloclo.
SeifBenayed/cloclo
Troubleshoot and debug issues. An agent skill from SeifBenayed/cloclo.
SeifBenayed/cloclo
Review a pull request for bugs, security issues, and improvements.
Categories
Visual feedback browser automation with multi-session, multi-tab, iframe support, and enterprise primitives. Browse is an agent skill from SeifBenayed/cloclo. Visual feedback browser automation with multi-session, multi-tab, iframe support, and enterprise primitives.
Browse fits situations like: asked to open a site; check a deployment; compare pages side by side; any task involving web interaction.
Run `npx skills add SeifBenayed/cloclo --skill browse -a claude-code`. Or copy the skill folder (.claude/skills/browse in SeifBenayed/cloclo) into .claude/skills/browse in your project. Claude Code loads it when a task matches its description.
Run `npx skills add SeifBenayed/cloclo --skill browse -a codex`. Or copy the skill folder (.claude/skills/browse in SeifBenayed/cloclo) into .agents/skills/browse in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add SeifBenayed/cloclo --skill browse -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/browse, .gemini/skills/browse, .github/skills/browse and .opencode/skills/browse in your project.
SKILL.md names no scripts, command-line tools or credentials: Browse is instructions for the agent only. Its frontmatter pre-approves these tools: Browser, Read, Grep, Glob.
SKILL.md names 2 domains. In commands or code: site-a.com and site-b.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Browse is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Browse: Javascript SDK (aiskillstore/marketplace, 430 stars), Autofillin (sundial-org/awesome-openclaw-skills, 663 stars), Agent Browser (quran/quran.com-frontend-next, 1.9k stars) and Dev-Browser CLI Automation (SawyerHood/dev-browser, 6.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
SeifBenayed (a GitHub user) maintains it in SeifBenayed/cloclo, which has 114 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on April 5, 2026.
Source: SeifBenayed/cloclo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.