一键导入
tabbit-browser-devtools-skill
Connect AI agents to a running Tabbit browser instance via Chrome DevTools Protocol (CDP) and control it through agent-browser
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Connect AI agents to a running Tabbit browser instance via Chrome DevTools Protocol (CDP) and control it through agent-browser
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Orchestrate psychology clinic workflows with AI-powered scheduling, WhatsApp automation, AFIP billing, and video consultations for Argentine practitioners
SaaS platform for psychology clinics with intelligent scheduling, WhatsApp automation, AFIP billing, videollamadas, and Claude AI integration
Build and customize the Sesión mental health practice management platform with appointment scheduling, WhatsApp automation, AFIP billing, and Claude AI integration
Orchestrate psychology clinic operations with AI-powered scheduling, WhatsApp automation, AFIP billing, and secure video consultations for Argentine mental health practitioners
AI-powered mental health practice management platform for Argentina with WhatsApp automation, AFIP-compliant invoicing, and video consultations
High-performance file copying and transfer utility with parallel streams, integrity verification, and automation capabilities
| name | tabbit-browser-devtools-skill |
| description | Connect AI agents to a running Tabbit browser instance via Chrome DevTools Protocol (CDP) and control it through agent-browser |
| triggers | ["connect to tabbit browser","use tabbit devtools endpoint","control tabbit browser with CDP","find tabbit websocket endpoint","automate tabbit browser","attach to running tabbit instance","launch agent-browser with tabbit","connect devtools to tabbit"] |
Skill by ara.so — Devtools Skills collection.
Tabbit Browser DevTools Skill enables AI agents to discover and connect to a running Tabbit browser instance through its Chrome DevTools Protocol (CDP) endpoint. Tabbit is a Chromium-based browser, and this skill acts as a bridge that:
DevToolsActivePort file on the filesystemagent-browser for actual automationThis skill does not implement browser automation itself—it delegates to agent-browser while providing the Tabbit-specific connection details.
Before using this skill, ensure:
agent-browser is installed globallytabbit://inspect/#remote-debugging and enable itnpx skills add Tabbit-Browser/Tabbit-Devtools-Skill
Install only the tabbit-devtools skill:
npx skills add Tabbit-Browser/Tabbit-Devtools-Skill --skill tabbit-devtools
In a Codex conversation:
$skill-installer install https://github.com/Tabbit-Browser/Tabbit-Devtools-Skill/tree/main/skills/tabbit-devtools
Or from terminal:
mkdir -p ~/.agents/skills
python3 ~/.codex/skills/.system/skill-installer/scripts/install-skill-from-github.py \
--url https://github.com/Tabbit-Browser/Tabbit-Devtools-Skill/tree/main/skills/tabbit-devtools \
--dest ~/.agents/skills
mkdir -p ~/.agents/skills
ln -sfn /path/to/Tabbit-Devtools-Skill/skills/tabbit-devtools ~/.agents/skills/tabbit-devtools
Always restart your agent after installation.
This skill depends on agent-browser for actual browser operations. Install it:
npx skills add vercel-labs/agent-browser
Or ensure agent-browser is available via npm:
npm install -g agent-browser
The skill will attempt to run agent-browser or npx agent-browser by default.
The skill searches for DevToolsActivePort in these locations (in order):
macOS:
~/Library/Application Support/Tabbit/DevToolsActivePort~/Library/Application Support/Tabbit Browser/DevToolsActivePortWindows:
%LOCALAPPDATA%\Tabbit Browser\User Data\DevToolsActivePort%APPDATA%\Tabbit\User Data\DevToolsActivePortThe DevToolsActivePort file contains two lines:
<port>
<browser-target-id>
import os
import json
import urllib.request
# Example: reading DevToolsActivePort
port_file = os.path.expanduser("~/Library/Application Support/Tabbit/DevToolsActivePort")
with open(port_file, 'r') as f:
port = f.readline().strip()
# Query the DevTools JSON endpoint
url = f"http://127.0.0.1:{port}/json/version"
response = urllib.request.urlopen(url)
data = json.loads(response.read())
ws_endpoint = data['webSocketDebuggerUrl']
print(f"WebSocket endpoint: {ws_endpoint}")
Once the WebSocket endpoint is discovered, the skill invokes:
agent-browser --cdp ws://127.0.0.1:9222/devtools/browser/<id>
From that point, all browser operations go through agent-browser.
If your environment uses a different command to launch agent-browser, set:
export AGENT_BROWSER_BIN="npx --yes agent-browser"
Or for a custom path:
export AGENT_BROWSER_BIN="/usr/local/bin/my-agent-browser"
The skill will use this variable when spawning agent-browser.
#!/usr/bin/env python3
import os
import json
import urllib.request
import subprocess
# Search for DevToolsActivePort
possible_paths = [
os.path.expanduser("~/Library/Application Support/Tabbit/DevToolsActivePort"),
os.path.expanduser("~/Library/Application Support/Tabbit Browser/DevToolsActivePort"),
]
port_file = None
for path in possible_paths:
if os.path.exists(path):
port_file = path
break
if not port_file:
print("Tabbit is not running or remote debugging is not enabled")
exit(1)
with open(port_file, 'r') as f:
port = f.readline().strip()
# Get WebSocket endpoint
url = f"http://127.0.0.1:{port}/json/version"
response = urllib.request.urlopen(url)
version_data = json.loads(response.read())
ws_endpoint = version_data['webSocketDebuggerUrl']
print(f"Found Tabbit at {ws_endpoint}")
# Launch agent-browser with CDP endpoint
agent_browser_bin = os.getenv("AGENT_BROWSER_BIN", "agent-browser")
subprocess.run([agent_browser_bin, "--cdp", ws_endpoint])
Once connected via agent-browser, the agent can issue commands like:
agent-browser --cdp <ws_endpoint> open https://example.com
Or in Python using subprocess:
import subprocess
ws_endpoint = "ws://127.0.0.1:9222/devtools/browser/abc123"
agent_browser = os.getenv("AGENT_BROWSER_BIN", "agent-browser")
subprocess.run([
agent_browser,
"--cdp", ws_endpoint,
"open", "https://example.com"
])
# Click a button
agent-browser --cdp <ws_endpoint> click "button[type='submit']"
# Extract text
agent-browser --cdp <ws_endpoint> extract "h1"
agent-browser --cdp <ws_endpoint> execute "document.title"
In Python:
result = subprocess.run([
agent_browser,
"--cdp", ws_endpoint,
"execute", "document.querySelector('h1').innerText"
], capture_output=True, text=True)
print(result.stdout)
Cause: Tabbit is not running, or remote debugging is disabled.
Solution:
tabbit://inspect/#remote-debuggingCause: The port in DevToolsActivePort may be stale, or a firewall is blocking localhost connections.
Solution:
PORT=$(head -n1 ~/Library/Application\ Support/Tabbit/DevToolsActivePort)
curl http://127.0.0.1:$PORT/json/version
Cause: agent-browser is not installed or not in PATH.
Solution:
npm install -g agent-browser
Or use npx:
export AGENT_BROWSER_BIN="npx --yes agent-browser"
Cause: Multiple Tabbit profiles or instances may create conflicting DevToolsActivePort files.
Solution:
Cause: The WebSocket endpoint might be expired or the browser closed the debugging session.
Solution:
#!/usr/bin/env python3
"""
Workflow: Connect to Tabbit, navigate to a page, extract data
"""
import os
import json
import urllib.request
import subprocess
import sys
def find_devtools_port():
"""Locate Tabbit's DevToolsActivePort file."""
paths = [
os.path.expanduser("~/Library/Application Support/Tabbit/DevToolsActivePort"),
os.path.expanduser("~/Library/Application Support/Tabbit Browser/DevToolsActivePort"),
]
for path in paths:
if os.path.exists(path):
with open(path, 'r') as f:
return f.readline().strip()
return None
def get_ws_endpoint(port):
"""Query DevTools JSON endpoint for WebSocket URL."""
url = f"http://127.0.0.1:{port}/json/version"
try:
response = urllib.request.urlopen(url)
data = json.loads(response.read())
return data['webSocketDebuggerUrl']
except Exception as e:
print(f"Failed to get WebSocket endpoint: {e}")
return None
def run_agent_browser(ws_endpoint, *args):
"""Execute agent-browser command with CDP endpoint."""
agent_browser = os.getenv("AGENT_BROWSER_BIN", "agent-browser")
cmd = [agent_browser, "--cdp", ws_endpoint] + list(args)
result = subprocess.run(cmd, capture_output=True, text=True)
return result.stdout
def main():
# Step 1: Find Tabbit
port = find_devtools_port()
if not port:
print("Error: Tabbit is not running or debugging is disabled")
sys.exit(1)
print(f"Found Tabbit on port {port}")
# Step 2: Get WebSocket endpoint
ws_endpoint = get_ws_endpoint(port)
if not ws_endpoint:
sys.exit(1)
print(f"WebSocket endpoint: {ws_endpoint}")
# Step 3: Navigate to a page
print("Opening example.com...")
run_agent_browser(ws_endpoint, "open", "https://example.com")
# Step 4: Extract page title
print("Extracting page title...")
title = run_agent_browser(ws_endpoint, "execute", "document.title")
print(f"Page title: {title.strip()}")
# Step 5: Extract all links
print("Extracting links...")
links = run_agent_browser(ws_endpoint, "extract", "a")
print(f"Links found:\n{links}")
if __name__ == "__main__":
main()
Once connected via --cdp, you have access to all agent-browser commands:
| Command | Description | Example |
|---|---|---|
open <url> | Navigate to URL | open https://example.com |
click <selector> | Click element | click button.submit |
type <selector> <text> | Type into input | type input[name=q] "search term" |
extract <selector> | Extract text/HTML | extract h1 |
execute <js> | Run JavaScript | execute document.title |
screenshot | Capture screenshot | screenshot |
wait <selector> | Wait for element | wait div.loaded |
For full documentation, see: https://github.com/vercel-labs/agent-browser
This skill provides the glue between Tabbit's CDP endpoint and agent-browser. As an agent, when a user asks to "connect to Tabbit" or "automate Tabbit browser":
DevToolsActivePortagent-browser --cdp <ws_endpoint> with appropriate commandsagent-browserThe skill itself is a connector, not a full browser automation framework. It solves the problem of finding and connecting to a running Tabbit instance, then delegates the heavy lifting to the official agent-browser tool.