Skip to content
Back to skills

Airbrow

ASecurity

Ultra-fast browser CLI for LLM agents. Use for web navigation, form filling, screenshots, data extraction, and web testing. 50x less memory than Playwright, 10x smaller context output. Rust/CDP based, zero dependencies.

  • 57 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 17, 2026
toolsjavascriptrustgojavabashnodetestingapiperformance

Works with

  • cli
  • api

Security analysis

A100/100

Scanned October 17, 2026

npx -y skills add diegosouzapw/awesome-omni-skill --skill airbrow --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Airbrow?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Airbrow
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/diegosouzapw-airbrow/badge)](https://www.skillsdirectory.com/skills/diegosouzapw-airbrow)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: airbrow
description: Ultra-fast browser CLI for LLM agents. Use for web navigation, form filling, screenshots, data extraction, and web testing. 50x less memory than Playwright, 10x smaller context output. Rust/CDP based, zero dependencies.
---

# Browser Automation with airbrow

## Quick start

```bash
open                          # Start browser
goto https://example.com      # Navigate to page
observe                       # Get interactive elements with refs
click r1                      # Click element by ref
fill r2 "text"                # Fill input by ref
quit                          # Close browser
```

## Core workflow

1. Start: `open` (or `open -v` for visible browser)
2. Navigate: `goto <url>`
3. Observe: `observe` (returns elements with refs like `r1`, `r2`)
4. Interact using refs from observe output
5. Re-observe after navigation or significant DOM changes

## Commands

### Session

```bash
open                   # Start headless browser
open -v                # Start visible browser (headed)
reconnect              # Reconnect to browser if disconnected
quit                   # Close browser and exit
```

### Navigation

```bash
goto <url>             # Navigate to URL
back                   # Go back
forward                # Go forward
reload                 # Reload page
```

### Observation (page analysis)

```bash
observe                # Interactive elements in viewport (recommended)
snap                   # URL and title only
snapshot               # Full page with text content
content                # Main HTML content (5KB max)
content full           # Full HTML
```

### Interactions (use refs from observe)

```bash
click r1               # Click element
dblclick r1            # Double-click
fill r2 "text"         # Clear and fill input
type r2 "text"         # Type char-by-char (for autocomplete)
press Enter            # Press key
press Tab              # Tab key
press Escape           # Escape key
hover r1               # Hover element
focus r1               # Focus element
blur                   # Remove focus
check r1               # Check checkbox
uncheck r1             # Uncheck checkbox
select r1 "value"      # Select dropdown option
drag r1 r2             # Drag from r1 to r2
```

### Scroll

```bash
scroll down            # Scroll down 500px
scroll up              # Scroll up 500px
scroll 1000            # Scroll down 1000px
scroll -500            # Scroll up 500px
scrollto r1            # Scroll element into view
top                    # Scroll to top
bottom                 # Scroll to bottom
pageup                 # Scroll up by viewport
pagedown               # Scroll down by viewport
```

### Get information

```bash
get text r1            # Get element text
get value r1           # Get input value
get html r1            # Get element HTML
get title              # Get page title
get url                # Get current URL
get count "selector"   # Count matching elements
```

### Screenshots & PDF

```bash
screenshot             # Save to shot.png
screenshot path.png    # Save to specific path
pdf                    # Save to page.pdf
pdf output.pdf         # Save to specific path
```

### Wait

```bash
wait 2000              # Wait milliseconds
wait r1                # Wait for element
wait r1 5000           # Wait for element with timeout
waitvisible r1         # Wait for element to be visible
waitresponse api/data  # Wait for network response matching pattern
isvisible r1           # Check if element is visible
ischecked r1           # Check if checkbox is checked
```

### Multi-tab

```bash
newtab                 # Open new blank tab
newtab https://...     # Open new tab with URL
tabs                   # List all tabs
tab 0                  # Switch to tab 0
tab 1                  # Switch to tab 1
closetab               # Close current tab
closetab 2             # Close tab 2
```

### Iframe

```bash
frames                 # List all frames
frame 0                # Switch to frame by index
frame "name"           # Switch to frame by name
mainframe              # Return to main frame
```

### Network control

```bash
block "*.jpg"          # Block URLs matching pattern
block "ads.com/*"      # Block ad domain
blockimages            # Block all images
blockmedia             # Block video/audio
blockfonts             # Block fonts
unblock                # Remove all blocks
```

### Cookies

```bash
cookies                # Get all cookies
cookies .example.com   # Get cookies for domain
setcookie name val .example.com  # Set cookie
delcookie name .example.com      # Delete cookie
clearcookies           # Clear all cookies
```

### Storage

```bash
storage get key        # Get localStorage value
storage set key value  # Set localStorage value
storage del key        # Delete key
storage clear          # Clear localStorage
```

### Files

```bash
upload r1 /path/file.pdf           # Upload file to input
upload r1 file1.pdf file2.pdf      # Upload multiple files
downloadpath /path/to/downloads    # Set download directory
```

### Device emulation

```bash
viewport 1920 1080     # Set viewport size
mobile                 # Mobile emulation (375x667)
dark                   # Enable dark mode
light                  # Enable light mode
print                  # Print media type
```

### JavaScript

```bash
eval "document.title"              # Execute JavaScript
eval "window.scrollY"              # Get scroll position
eval "localStorage.clear()"        # Clear storage via JS
```

### Semantic locators (alternative to refs)

```bash
click text:Submit                  # Click by text content
click role:button                  # Click by ARIA role
fill label:Email "user@test.com"   # Fill by label
fill placeholder:Search "query"   # Fill by placeholder
click //button[@type='submit']    # Click by XPath
```

## Example: Google search

```bash
open
goto https://google.com
observe
# Output: [["r1","in","Search"],["r2","btn","Google Search"]]

fill r1 "claude ai"
press Enter
wait 1000
observe
```

## Example: Form submission

```bash
open
goto https://example.com/login
observe
# Output: [["r1","in","Email"],["r2","in","Password"],["r3","btn","Sign In"]]

fill r1 "user@example.com"
fill r2 "password123"
click r3
wait 2000
observe
```

## Example: Multi-tab research

```bash
open
goto https://google.com
observe

newtab https://bing.com
observe

tabs
# Output: {"tabs":[{"i":0,"u":"google.com"},{"i":1,"u":"bing.com"}]}

tab 0
observe
```

## Example: Scraping with network optimization

```bash
open
blockimages
blockmedia
goto https://news.ycombinator.com
observe
content
```

## Example: Dark mode screenshot

```bash
open
goto https://example.com
dark
wait 500
screenshot dark_mode.png
```

## Example: File upload

```bash
open
goto https://example.com/upload
observe
# Find file input: [["r3","in","Choose File"]]

upload r3 /path/to/document.pdf
click text:Submit
waitresponse upload 30000
observe
```

## Output format

### observe output
```json
{"e":[["r1","btn","Submit"],["r2","in","Email"]],"n":2,"t":"Page Title","u":"https://example.com"}
```

- `e`: Elements array `[ref, role, label]`
- `n`: Element count
- `t`: Page title
- `u`: Current URL

### Element roles
| Role | Meaning |
|------|---------|
| `a` | Link |
| `btn` | Button |
| `in` | Input |
| `sel` | Select |
| `txt` | Textarea |
| `combobox` | Combobox |

## Performance

| Metric | airbrow | Playwright |
|--------|---------|------------|
| Memory | 3.5 MB | 150+ MB |
| Context | ~2 KB | ~20 KB |
| Startup | ~200ms | ~1500ms |
| Binary | 2 MB | Node runtime |

## Tips

- Always `observe` before interacting to get current refs
- Use `blockimages` for faster page loads
- Use `type` instead of `fill` for search boxes (triggers autocomplete)
- Refs (`r1`, `r2`) are more reliable than CSS selectors
- `observe` only returns elements visible in viewport - use `pagedown` to see more
- Re-observe after any navigation or DOM change

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.