by TencentCloud
Agent-first lightweight browser automation — direct CDP, no Playwright, more accurate and more reliable.
# Add to your Claude Code skills
git clone https://github.com/TencentCloud/octop-browserGuides for using ai agents skills like octop-browser.
See how octop-browser compares with popular alternatives.
octop-browser is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by TencentCloud. Agent-first lightweight browser automation — direct CDP, no Playwright, more accurate and more reliable. It has 50 GitHub stars.
octop-browser's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/TencentCloud/octop-browser" and add it to your Claude Code skills directory (see the Installation section above).
octop-browser is primarily written in Python. It is open-source under TencentCloud on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh octop-browser against similar tools.
No comments yet. Be the first to share your thoughts!
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
Octop Browser is a lightweight browser-use style tool that makes an agent's browser usage more accurate and reliable. Unlike typical stacks that route every action through Playwright, it launches a real Chromium and talks to the Chrome DevTools Protocol (CDP) directly — removing the intermediate layer so element targeting is driven by stable, live DOM refs and rarely misses.
Under the hood it starts a Chromium process with a --remote-debugging-port and speaks CDP itself. Because element references come straight from the live page, the agent acts on the real nodes, and those refs stay valid through reflows and re-renders — the result is higher action accuracy and lower token usage, with a persistent profile so logins don't expire mid-task.
Octop Browser's design goal: give an agent a browser it can act on with confidence — accurate clicks, low token cost, and persistent logins — through a small, well-shaped set of tools and a matching CLI.
Note: the install-browser command may bootstrap Playwright once purely to download a Chromium binary. Playwright is not a runtime dependency — the agent always drives the browser over CDP.
| Feature | Description | |
|---|---|---|
| ⚡ | Direct CDP | Connects straight to Chrome via CDP — no Playwright / intermediate layer |
| 🎯 | Ref-based targeting | Stable element refs survive layout reflows, so clicks land where intended |
| 🪶 | Lightweight DOM | Token-efficient multi-level DOM keeps prompts small |
| 🔐 | Auth persistence | Profile-based logins persist across sessions — no repeated sign-in |
| 🛠️ | Agent tools | One stateless browser_tool with ~20 actions |
| 💻 | CLI | Every action available as a first-class command |
| 🎬 | Record & replay | Capture a workflow, then replay it as skill-guided agentic execution |
| 🤖 | MCP server | Expose the browser to any MCP-capable agent |
| Layer | Technology |
|---|---|
| Language | Python 3.11+ |
| Transport | CDP over websockets (hand-rolled async client) |
| Launcher | subprocess Chromium with --remote-debugging-port |
| DOM | Multi-level builder + stable ref system |
| Tools | Stateless browser_tool action set |
| Recording | Injected JS recorder + semantic collapse + skill generator |
| Interfaces | CLI + MCP server |
| Build / quality | hatchling · ruff · mypy · pytest |
browser_tool(action=...) exposes the following actions:
| Action | Description | Action | Description |
|---|---|---|---|
navigate |
Navigate the active tab | select |
Pick a <select> option |
dom_tree |
Dump the multi-level DOM | scroll |
Scroll the viewport |
screenshot |
Capture a screenshot | hover |
Hover an element |
click |
Click by ref | eval_js |
Run JavaScript |
type |
Type text by ref | go_back / go_forward |
History nav |
fill |
Fill a field by ref | reload |
Reload the page |
press |
Press a key | new_tab / close_tab |
Tab control |
wait |
Wait for a condition | switch_tab / list_tabs |
Tab management |
close_session |
Close the CDP connection (pass kill=True to also stop Chrome) |
BrowserSession.create(profile=...) opens a persistent Chromium session.browser_tool(action="navigate", url=..., profile="work").BROWSER_USE_IDLE_TIMEOUT_MINUTES to stop a local Chrome profile after
that many minutes without real CDP activity (0, the default, disables it).await session.close(kill=True) or
browser_tool(action="close_session", profile="work", kill=True) stops the
local Chrome process immediately. Profile data and login state stay on disk.Every tool is also a CLI command:
octop-browser install-browser # fetch a Chromium binary (one-time)
octop-browser navigate "https://example.com" --profile work
octop-browser dom-tree --profile work
octop-browser click --ref inp_1 --profile work
octop-browser type "octop" --ref inp_1 --profile work
octop-browser screenshot --profile work
octop-browser close-session --kill --profile work # also stop Chrome
# session: open / close-session / new-tab / switch-tab / close-tab / list-tabs
Octop Browser can record a real browsing session and replay it:
octop-browser record daemon-start — launch the long-lived recording daemon.octop-browser record start — begin capturing the active tab.octop-browser record stop — stop capturing.octop-browser record generate-steps <id> — inspect the semantic steps; record generate-skill <id> emits a draft Skill (draft.skill.md).octop-browser replay run <id> — re-execute as skill-guided agentic execution (the model replays intent, not brittle coordinates/refs).Use record list / record show <id> / record status / record doctor to manage recordings.
octop-browser ships an MCP server, so any MCP-capable agent can drive the browser through the same tool set.
python -m octop_browser.mcp_server # or: make mcp
It speaks MCP over stdio, which is the transport most agent clients expect.
Over MCP each action is exposed as its own tool named after it — browser_navigate,
browser_click, browser_dom_tree, browser_close_session, browser_record_start,
install_browser, … — rather than as a single dispatching tool. Arguments match the
Python API, so browser_close_session also takes kill to terminate Chrome.
The skills/ directory ships ready-made Skill files for agents that support
skill loading — skills/octop-browser/SKILL.md (English) and
skills/octop-browser-zh/SKILL.md (Chinese). They encode the safe usage
pattern: run dom-tree before every click, pass refs instead of
coordinates, and reuse named profiles for login state. record generate-skill
emits a draft Skill in the same format.
install-browser)pip install octop-browser
octop-browser install-browser # fetch a Chromium binary once
from octop_browser import BrowserSession
async with await BrowserSession.create(profile="default") as session:
await session.navigate("https://example.com")
dom = await session.dom_tree()
await session.click(ref="btn_1")
Or statelessly:
from octop_browser import browser_tool
await browser_tool(action="navigate", url="https://example.com", profile="work")
octop-browser --help
octop-browser --version
octop-browser navigate "https://example.com" --profile work
octop-browser dom-tree --profile work
octop-browser dom-tree --help
The top-level help lists every command and common examples. Every command also
has its own help page, including nested commands such as
octop-browser record start --help.
octop-browser record daemon-start
octop-browser record start
# ... interact with the page ...
octop-browser record stop
octop-browser record generate-skill <recording_id> # emit a draft Skill
octop-browser replay run <recording_id> # replay it
Use octop-browser --help for the complete command list and
octop-browser <command> --help for command-specific options. The
--version flag prints the installed package version.
| Command | Description |
|---|---|
install-browser |
Download a Chromium binary (one-time bootstrap) |
navigate |
Navigate the active tab to a URL |
open |
Start a session and open one or more URLs |