56 results available
Sign in
Skills directory

agent-browser

qu-skills

·

Last changed
Hardened

This skill has been hardened by Chainguard

Last changed

This version passed the hardening gate. Hardening updated the skill content and independently checked the resulting changes. Classified findings before hardening: 11. Classified findings closed: 4. Classified findings remaining: 7. Unclassified scanner findings remaining: 0. Review findings closed: 6. Review findings remaining: 14.


Open before hardening

1

High

2

Medium

8

Low
Open after hardening

7

Low

Expand
File
Group
Subtype
Severity
Status
SKILL.md

Excessive Agency & Rogue Autonomy

—

High
Closed
templates/authenticated-session.sh

Sensitive Data & Secret Exposure

Hardcoded secret

Medium
Closed
SKILL.md

Supply Chain & Install-Time Trust

—

Medium
Closed
references/authentication.md

Tool & MCP Manipulation

MCP configuration abuse

Low
Open
SKILL.md

Tool & MCP Manipulation

MCP configuration abuse

Low
Closed
SKILL.md

Prompt Injection

Third-party content as instructions

Low
Open
references/proxy-support.md

Tool & MCP Manipulation

MCP configuration abuse

Low
Open
SKILL.md

Malicious Code & Command Execution

Command injection

Low
Open

11 findings


SKILL.md

Agentic Browser

Browser automation for AI agents via inference.sh. Uses Playwright under the hood with a simple @e ref system for element interaction.

Quick Start

belt login

# Open a page and get interactive elements
belt app run agent-browser --function open --input '{"url": "https://example.com"}' --session new

Core Workflow

Every browser automation follows this pattern:

  1. Open - Navigate to URL, get @e refs for elements
  2. Interact - Use refs to click, fill, drag, etc.
  3. Re-snapshot - After navigation/changes, get fresh refs
  4. Close - End session (returns video if recording)
# 1. Start session
RESULT=$(belt app run agent-browser --function open --session new --input '{
  "url": "https://example.com/login"
}')
SESSION_ID=$(echo $RESULT | jq -r '.session_id')
# Elements: @e1 [input] "Email", @e2 [input] "Password", @e3 [button] "Sign In"

# 2. Fill and submit
belt app run agent-browser --function interact --session $SESSION_ID --input '{
  "action": "fill", "ref": "@e1", "text": "user@example.com"
}'
belt app run agent-browser --function interact --session $SESSION_ID --input '{
  "action": "click", "ref": "@e3"
}'

# 3. Re-snapshot after navigation
belt app run agent-browser --function snapshot --session $SESSION_ID --input '{}'

# 4. Close when done
belt app run agent-browser --function close --session $SESSION_ID --input '{}'

Functions

FunctionDescription

open

Navigate to URL, configure browser (viewport, proxy, video recording)

snapshot

Re-fetch page state with @e refs after DOM changes

interact

Perform actions using @e refs (click, fill, drag, upload, etc.)

screenshot

Take page screenshot (viewport or full page)

execute

Run JavaScript code on the page

close

Close session, returns video if recording was enabled

Interact Actions

ActionDescriptionRequired Fields

click

Click element

ref

dblclick

Double-click element

ref

fill

Clear and type text

ref, text

type

Type text (no clear)

text

press

Press key (Enter, Tab, etc.)

text

select

Select dropdown option

ref, text

hover

Hover over element

ref

check

Check checkbox

ref

uncheck

Uncheck checkbox

ref

drag

Drag and drop

ref, target_ref

upload

Upload file(s)

ref, file_paths

scroll

Scroll page

direction (up/down/left/right), scroll_amount

back

Go back in history

-

wait

Wait milliseconds

wait_ms

goto

Navigate to URL

url

Element Refs

Elements are returned with @e refs:

@e1 [a] "Home" href="/"
@e2 [input type="text"] placeholder="Search"
@e3 [button] "Submit"
@e4 [select] "Choose option"
@e5 [input type="checkbox"] name="agree"

Important: Refs are invalidated after navigation. Always re-snapshot after:

  • Clicking links/buttons that navigate
  • Form submissions
  • Dynamic content loading

Features

Video Recording

Record browser sessions for debugging or documentation:

# Start with recording enabled (optionally show cursor indicator)
SESSION=$(belt app run agent-browser --function open --session new --input '{
  "url": "https://example.com",
  "record_video": true,
  "show_cursor": true
}' | jq -r '.session_id')

# ... perform actions ...

# Close to get the video file
belt app run agent-browser --function close --session $SESSION --input '{}'
# Returns: {"success": true, "video": <File>}

Cursor Indicator

Show a visible cursor in screenshots and video (useful for demos):

belt app run agent-browser --function open --session new --input '{
  "url": "https://example.com",
  "show_cursor": true,
  "record_video": true
}'

The cursor appears as a red dot that follows mouse movements and shows click feedback.

Proxy Support

Route traffic through a proxy server:

belt app run agent-browser --function open --session new --input '{
  "url": "https://example.com",
  "proxy_url": "http://proxy.example.com:8080"
}'

File Upload

Upload files to file inputs:

belt app run agent-browser --function interact --session $SESSION --input '{
  "action": "upload",
  "ref": "@e5",
  "file_paths": ["/path/to/file.pdf"]
}'

Drag and Drop

Drag elements to targets:

belt app run agent-browser --function interact --session $SESSION --input '{
  "action": "drag",
  "ref": "@e1",
  "target_ref": "@e2"
}'

JavaScript Execution

Run custom JavaScript:

belt app run agent-browser --function execute --session $SESSION --input '{
  "code": "document.querySelectorAll(\"h2\").length"
}'
# Returns: {"result": "5", "screenshot": <File>}

Deep-Dive Documentation

ReferenceDescription

references/commands.md

Full function reference with all options

references/snapshot-refs.md

Ref lifecycle, invalidation rules, troubleshooting

references/session-management.md

Session persistence, parallel sessions

references/authentication.md

Login flows, OAuth, 2FA handling

references/video-recording.md

Recording workflows for debugging

references/proxy-support.md

Proxy configuration, geo-testing

Ready-to-Use Templates

TemplateDescription

templates/form-automation.sh

Form filling with validation

templates/authenticated-session.sh

Login once, reuse session

templates/capture-workflow.sh

Content extraction with screenshots

Examples

Form Submission

SESSION=$(belt app run agent-browser --function open --session new --input '{
  "url": "https://example.com/contact"
}' | jq -r '.session_id')

# Get elements: @e1 [input] "Name", @e2 [input] "Email", @e3 [textarea], @e4 [button] "Send"

belt app run agent-browser --function interact --session $SESSION --input '{"action": "fill", "ref": "@e1", "text": "John Doe"}'
belt app run agent-browser --function interact --session $SESSION --input '{"action": "fill", "ref": "@e2", "text": "john@example.com"}'
belt app run agent-browser --function interact --session $SESSION --input '{"action": "fill", "ref": "@e3", "text": "Hello!"}'
belt app run agent-browser --function interact --session $SESSION --input '{"action": "click", "ref": "@e4"}'

belt app run agent-browser --function snapshot --session $SESSION --input '{}'
belt app run agent-browser --function close --session $SESSION --input '{}'

Screenshot with Video

SESSION=$(belt app run agent-browser --function open --session new --input '{
  "url": "https://example.com",
  "record_video": true
}' | jq -r '.session_id')

# Take full page screenshot
belt app run agent-browser --function screenshot --session $SESSION --input '{
  "full_page": true
}'

# Close and get video
RESULT=$(belt app run agent-browser --function close --session $SESSION --input '{}')
echo $RESULT | jq '.video'

Sessions

Browser state persists within a session. Always:

  1. Start with --session new on first call
  2. Use returned session_id for subsequent calls
  3. Close session when done

Documentation

Install

Install with chainctl
chainctl skill install public/qu-skills/agent-browser:latest
Get started with chainctl
View source

Harden your own skills

Bring Chainguard's hardening pipeline to your first-party skills — custom rulesets, automated remediation, full audit trail.

Provenance

Upstream sourcehttps://github.com/qu-skills/skills
Upstream commitb576e8ec6a8761c776dd86b8dc3a2221e5ad2351
OCI reference

skills.cgr.dev/public/github.com/qu-skills/tools/utilities/agent-browser:latest

License

MIT

Files

HARDENING.md

SKILL.md

references/authentication.md

references/commands.md

references/proxy-support.md

references/session-management.md

references/snapshot-refs.md

references/video-recording.md

templates/authenticated-session.sh

templates/capture-workflow.sh

templates/form-automation.sh


The trusted source for open source

Talk to an expert
PrivacyTerms

Product

Chainguard ContainersChainguard LibrariesChainguard VMsChainguard OS PackagesChainguard ActionsChainguard Agent SkillsIntegrationsPricing
© 2026 Chainguard, Inc. All Rights Reserved.
Chainguard® and the Chainguard logo are registered trademarks of Chainguard, Inc. in the United States and/or other countries.
The other respective trademarks mentioned on this page are owned by the respective companies and use of them does not imply any affiliation or endorsement.