
agent-browser-cli-control
Control and interact with Chrome browser via agent-browser-cli for tab management, page automation, CDP operations, and content extraction.
- Installs
- 232
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/reason-machines/devtools-skills --skill agent-browser-cli-control- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads agent-browser-cli-control automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
agent-browser-cli Control
Skill by ara.so — Devtools Skills collection.
agent-browser-cli is a browser control CLI built in Rust that connects to a real Chrome session via a Chrome extension. It enables AI agents to scan tabs, execute JavaScript, manage cookies, capture screenshots, and perform CDP operations while preserving the user's login state and session.
Key difference from Selenium/Playwright: This tool works with an existing Chrome session (not headless), preserving all user login states and cookies. Perfect for AI agents that need to work with authenticated web sessions.
Installation
Via npm (recommended)
npm install -g @sleepinsummer/agent-browser-cli
Via source
git clone https://github.com/sleepinginsummer/agent-browser-cli.git
cd agent-browser-cli
cargo build --release
# Binary will be at ./target/release/agent-browser-cli
Chrome Extension Setup
Critical: The Chrome extension must be loaded for the CLI to work.
- Download
chrome-extensions.zipfrom the latest release - Extract the zip file
- Open Chrome and navigate to
chrome://extensions - Enable "Developer mode"
- Click "Load unpacked extension"
- Select the extracted
tmwd_cdp_bridgedirectory - Ensure at least one normal web page tab is open (not
about:blankorchrome://)
The extension will show a small indicator on the right side of the page when connected.
Architecture
agent-browser-cli runs as a daemon service that:
- Listens on port
18765for Chrome extension WebSocket connections - Listens on port
18767for CLI HTTP API calls - Maintains persistent browser connection to avoid re-initialization overhead
Performance reference (with daemon running):
- Simple page read / JS execution: 40-120ms
- DOM query operations: 270-360ms
- Page monitoring with change summary: 720-880ms
Core Commands
Daemon Management
# Start daemon (auto-starts if not running)
agent-browser-cli start
# Stop daemon
agent-browser-cli stop
# Restart daemon
agent-browser-cli restart
# Check daemon status
agent-browser-cli status
Tab Management
# List all tabs
agent-browser-cli tabs
# Switch to tab by index
agent-browser-cli switch 0
# Open new URL
agent-browser-cli open https://example.com
# Close current tab
agent-browser-cli close
# Get active tab info
agent-browser-cli active
Page Content Extraction
# Scan current page (simplified HTML)
agent-browser-cli scan
# Get text-only content (faster)
agent-browser-cli scan --text-only
# Get full page DOM
agent-browser-cli scan --full
# Scan specific tab
agent-browser-cli scan --tab 0
# Get page with screenshots of visible elements
agent-browser-cli scan --screenshot
JavaScript Execution
# Execute JavaScript and return result
agent-browser-cli exec 'return document.title'
# Execute with page monitoring (detects changes)
agent-browser-cli exec --monitor 'document.querySelector("#search").value = "test"'
# Multi-line JS execution
agent-browser-cli exec 'const btn = document.querySelector("button");
btn.click();
return "clicked";'
# Execute in specific tab
agent-browser-cli exec --tab 0 'return window.location.href'
Screenshots
# Capture full page screenshot
agent-browser-cli screenshot
# Screenshot specific tab
agent-browser-cli screenshot --tab 0
# Output to specific file
agent-browser-cli screenshot --output /path/to/screenshot.png
Cookie Management
# Get all cookies for current page
agent-browser-cli cookies
# Get cookies for specific domain
agent-browser-cli cookies --domain example.com
# Set cookie
agent-browser-cli cookies --set 'name=value; domain=.example.com; path=/'
Configuration
# Change extension WebSocket port (default: 18765)
agent-browser-cli set-extension-port 18766
# View current config
cat ~/.agent-browser-cli/config.json
Real-World Examples
Example 1: Search Automation
# Open search engine
agent-browser-cli open "https://www.google.com"
# Wait a moment for page load, then input search query
sleep 1
agent-browser-cli exec 'document.querySelector("textarea[name=q]").value = "rust programming"'
# Submit search
agent-browser-cli exec --monitor 'document.querySelector("textarea[name=q]").form.submit()'
# Extract search results
agent-browser-cli scan --text-only
Example 2: Form Filling
# Navigate to form page
agent-browser-cli open "https://example.com/contact"
# Fill form fields
agent-browser-cli exec '
const form = {
name: document.querySelector("#name"),
email: document.querySelector("#email"),
message: document.querySelector("#message")
};
form.name.value = "AI Agent";
form.email.value = "agent@example.com";
form.message.value = "Hello from agent-browser-cli";
return "Form filled";
'
# Submit and monitor changes
agent-browser-cli exec --monitor 'document.querySelector("form").submit()'
Example 3: Multi-Tab Workflow
# Get list of all tabs
TABS=$(agent-browser-cli tabs)
echo "$TABS"
# Switch to first tab
agent-browser-cli switch 0
# Get current page title
agent-browser-cli exec 'return document.title'
# Open new tab
agent-browser-cli open "https://example.com"
# Work with new tab
agent-browser-cli scan --text-only
Example 4: Data Extraction with Cookies
# Navigate to authenticated page
agent-browser-cli open "https://example.com/dashboard"
# Extract cookies (user is already logged in)
COOKIES=$(agent-browser-cli cookies --domain example.com)
echo "$COOKIES"
# Extract protected content
agent-browser-cli scan --text-only
# Take screenshot of dashboard
agent-browser-cli screenshot --output dashboard.png
Example 5: Page Monitoring
# Execute action and monitor DOM changes
RESULT=$(agent-browser-cli exec --monitor '
document.querySelector("#load-more").click();
return "Clicked load more";
')
# The result includes a change summary
echo "$RESULT"
# Re-scan to get updated content
agent-browser-cli scan --text-only
Response Format
All commands return JSON:
{
"ok": true,
"result": {
"status": "success",
"data": "...",
"metadata": {}
}
}
Error format:
{
"ok": false,
"error": "Error message"
}
Common Patterns
Wait for Element
agent-browser-cli exec '
return new Promise((resolve) => {
const check = () => {
const el = document.querySelector("#target");
if (el) resolve("Found");
else setTimeout(check, 100);
};
check();
});
'
Extract Structured Data
agent-browser-cli exec '
return Array.from(document.querySelectorAll(".item")).map(item => ({
title: item.querySelector(".title")?.textContent,
link: item.querySelector("a")?.href,
price: item.querySelector(".price")?.textContent
}));
'
File Upload
agent-browser-cli exec '
const input = document.querySelector("input[type=file]");
const dt = new DataTransfer();
dt.items.add(new File(["content"], "test.txt"));
input.files = dt.files;
input.dispatchEvent(new Event("change", { bubbles: true }));
return "File set";
'
Dropdown Selection
agent-browser-cli exec '
const select = document.querySelector("select#country");
select.value = "US";
select.dispatchEvent(new Event("change", { bubbles: true }));
return select.value;
'
Troubleshooting
Extension not connecting
- Verify extension is loaded in
chrome://extensions - Check extension port matches config:
cat ~/.agent-browser-cli/config.json - Ensure at least one normal web page is open (not
chrome://orabout:) - Restart daemon:
agent-browser-cli restart
Command timeout
- Check daemon status:
agent-browser-cli status - Verify Chrome is running and extension is active
- Try simpler command first:
agent-browser-cli tabs - Check logs:
tail -f ~/.agent-browser-cli.log
Port conflicts
# Change extension port
agent-browser-cli set-extension-port 18766
# Update extension popup to match new port
# Restart daemon
agent-browser-cli restart
WSL 2 connectivity issues
For WSL 2 users on Windows 11 22H2+:
- Enable
networkingMode=mirroredin.wslconfig - Restart WSL
- Ensure Chrome extension can connect to
localhost:18765
Slow performance
- Use
--text-onlyflag for faster content extraction - Avoid
--screenshotunless needed - Use
--monitoronly when detecting page changes is necessary - Consider increasing system resources if Chrome is sluggish
Advanced: CDP Operations
The underlying Chrome extension uses Chrome DevTools Protocol (CDP). While most operations are abstracted by the CLI, you can execute raw CDP commands via JavaScript:
agent-browser-cli exec '
return await chrome.debugger.sendCommand({tabId: chrome.tabs.getCurrent().id}, "Network.getCookies", {});
'
Environment Variables
The CLI uses a config file instead of environment variables:
Config location: ~/.agent-browser-cli/config.json
{
"extension_port": 18765
}
Logs
Daemon logs are written to:
~/.agent-browser-cli.log
Monitor in real-time:
tail -f ~/.agent-browser-cli.log
Integration with AI Agents
When called by AI coding agents, typical workflows:
- Check tab state:
agent-browser-cli tabs - Navigate or switch:
agent-browser-cli open <url>oragent-browser-cli switch <index> - Extract content:
agent-browser-cli scan --text-only - Perform action:
agent-browser-cli exec --monitor '<js code>' - Verify result:
agent-browser-cli scanoragent-browser-cli screenshot
The tool is designed for high-frequency calls with minimal overhead (~40-120ms for simple operations).
FAQ
What does the agent-browser-cli-control skill do?
Control and interact with Chrome browser via agent-browser-cli for tab management, page automation, CDP operations, and content extraction.
How do I install agent-browser-cli-control?
Run npx skills add https://github.com/reason-machines/devtools-skills --skill agent-browser-cli-control in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/agent-browser-cli-control/ (personal) or .claude/skills/agent-browser-cli-control/ (project).
Which AI agents can use agent-browser-cli-control?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is agent-browser-cli-control safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains agent-browser-cli-control?
It is published by reason-machines in reason-machines/devtools-skills. It has 232 recorded installs.
More from reason-machines/devtools-skills
cc-switch-cli
reason-machines/devtools-skills
Open the skill to read its SKILL.md instructions.
wx-cli-wechat-local-data
reason-machines/devtools-skills
Open the skill to read its SKILL.md instructions.
chrome-devtools-mcp-automation
reason-machines/devtools-skills
Open the skill to read its SKILL.md instructions.
officecli-office-automation
reason-machines/devtools-skills
Open the skill to read its SKILL.md instructions.
autocli-web-scraping
reason-machines/devtools-skills
Open the skill to read its SKILL.md instructions.
cli-anything-agent-native-software
reason-machines/devtools-skills
Open the skill to read its SKILL.md instructions.
Popular productivity & automation skills
agent-browser
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
lark-doc
open.feishu.cn
飞书云文档(Docx / Wiki)内容操作:读取、创建、编辑文档,插入或下载图片附件,以及操作思维笔记。用户提供文档 URL/token(包括 doubao.com 的 /docx/、/wiki/)时使用;按 URL 路径/token 而非域名路由;/page/ 是妙搭应用,非飞书云文档。文档内嵌资源按读取参考中的统一规则分流。独立评论操作走 lark-drive;随正文读取评论使用 docs +fetch。表格或 Base 内部数据操作不在本 skill。
lark-base
open.feishu.cn
飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。
lark-drive
open.feishu.cn
飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、查询权限设置、评论/权限/订阅、标题、版本、飞书文档密级标签(secure labels)和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token、判断链接类型/真实 token/标题,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。
lark-shared
open.feishu.cn
Use for lark-cli setup/auth tasks: auth login/status/logout, user vs bot identity, business-domain permissions (--domain, including all/docs/drive), missing scopes, revoking authorization, or handling notice JSON.
lark-im
open.feishu.cn
飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片(Interactive Card)、监听卡片按钮回调(card.action.trigger)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索群、创建群聊或话题群、管理标记数据、管理 Feed 置顶(添加/移除/查询置顶会话)、管理标签数据、处理卡片回调时使用。