Discover / AI Agents

Skyvern Vision Browser Agent

by Skyvern-AIPython

Automates browser workflows using computer vision and LLMs without fragile DOM selectors.

Agentstable

Maturity: stable because 2y old, v1.0.47 released 18d ago. Derived from release and commit history, not a rating.

Stars
23k
Forks
2.1k
Downloads / mo
14k
Last commit
2026-08-03
License
AGPL-3.0
Open issues
214

Market and trust evidence

Edition not yet matched

No exact skills.sh identity match is available for this repository. Repository adoption and freshness remain visible above; install momentum is not inferred.

Trust analysis is a screening signal, not a security warranty. Read the ranking and trust methodology.

In practice

Written by AI from this repository’s README · high confidence

Scripted browser automation built on DOM parsing and XPath breaks whenever a site layout changes.

Use it when

When a workflow must run across sites you have not scripted before, or across sites that change layout often.

Not the right pick when

Local runs need Python 3.11 to 3.13 or Docker, and anti bot handling, proxies and CAPTCHA solving come with the cloud version.

Capabilities

  • Vision LLM interaction instead of predetermined XPaths
  • Playwright compatible SDK on top of playwright
  • No code workflow builder for non technical users
  • Swarm of agents that comprehend, plan and execute
  • Local run with SQLite by default or Postgres
  • Docker Compose setup bundling Postgres, API and UI

Requirements

  • Python 3.11, 3.12, or 3.13
  • On Windows, Rust and VS Code with C++ dev tools and Windows SDK
  • An LLM API key in .env for the Docker Compose option

Cost: Open source with a paid cloud option

Install

Derived from the published package name in the repository, not from a model.

Video walkthroughs

Third-party YouTube uploads matched to this tool by title, channel and repository name on 2026-08-03. Not made, reviewed or endorsed by SkillPilot. View counts and publish months are as of the match date and the month is approximate. Nothing loads from YouTube until you press play.

What the repository ships

Ships CLAUDE.mdHas testsHas docsDocker imageSecurity policyCI configured

Detected from the actual files in the repository root.

Latest release v1.0.47

Published 2026-07-16

What's Changed

Version bumped from 1.0.46 to 1.0.47

Recent Changes

  • Gate artifact URL re-minting to Skyvern signed content URLs (#7499) (8ed3be1b3)
  • Refuse Copilot drafts whose entire output contract is a null blocker (SKY-12539) (#7497) (3fcac5d83)
  • chore(deps): bump mcp to 1.28.1 to fix 3 high-severity Dependabot alerts (#7496) (14439528f)
  • Bump version to 1.0.47 (#7481) (9fc0b2aee)
  • feat(SKY-12446): search run timeline blocks by label and jump to match (#7495) (0c767adbd)
  • feat: workflows-list reliability badge (self-heal UX Phase 1b) (#7494) (77ad799ef)
  • Surface workflow self-heal reliability (panel + run-page uplink) (#7493) (409b2577a)
  • SKY-12544: mint post-run gradeable criteria for page-produced confirmation tokens (#7492) (c6ecf3364)
  • fix: harden SSRF validation for resolved hosts (#7491) (4c4d68360)
  • Log a structured outcome event for every custom-select opportunity (observation-only) (#7490) (63411e2ad)
  • Batch endpoint for workflow self-heal reliability (#7489) (78b620b72)
  • feat(SKY-12098): tell coding agents when a workflow carries skill instructions (#7487) (850a99e50)
  • Exclude orgs under 90 days old from Gemini flex LLM routing (#7486) (78616952b)
  • Stop copying the chrome profile template on CDP-connect paths and sweep stale temp artifacts (#7485) (ae23a3601)
  • Refresh static artifact URLs on demand: screenshots, viewers, download links (#7484) (a551a5236)
  • Verify checkbox toggles instead of navigating in chain_click label/coordinate fallbacks (SKY-12543) (#7483) (119843855)
  • Fix LLM router fallback-succeeded log firing on every flex-tier request (#7482) (a45e51726)
  • fix(SKY-12383): commit invalid combobox selection after typing surfaces its options (#7480) (ac8d6583c)
  • fix(SKY-12384): gate copilot action cards during history load + keep queued prompt visible (#7477) (4c27597dc)
  • feat(SKY-12397): tell coding agents when a workflow already has reusable code (#7479) (ec61e687b)
  • Add PII-safe lineage telemetry for download filename naming (SKY-12516) (#7478) (c55be07dc)
  • [SKY-12007] S2: structural page-vs-frame predicate + browser-object identity AST guard (#7476) (230b1e6a7)
  • [SKY-12007] Scope CDP http(s) redaction to CDP context-creation errors (#7475) (9a69fd9d6)
  • refactor(SKY-12367): boot the screenshot streaming worker with a minimal app runtime (#7378) (9baa00514)
  • Recover phone numbers rewritten by country-aware fields (#7474) (d6c3f6caa)
  • Show all block prompts under Agent inputs in the Workflow Studio run view (#7473) (dcf09499e)
  • Searchable credential picker in the workflow builder (uncap the 100-credential dropdown) (#7472) (8dbb2e500)
  • fix(downloads): recover missing file extension by sniffing content (#7470) (ee411c98c)
  • [SKY-12007] Add engine-neutral browser error taxonomy (#7468) (6b0b4fdc7)
  • security: resolve all open Dependabot alerts across JS/TS lockfiles (SKY-12556) (#7467) (2dfe579ac)
  • fix(SKY-12342): recognize commit-only copilot reach (#7466) (eb7c2ff41)
  • Stop deterministic normal-select from falling back to the LLM on false negatives (#7464) (eb6f4aa47)
  • feat(SKY-12054): harness engine swap — copilot scout-loop recovery behind enable_self_healing (#7462) (b96e444a4)
  • fix: keep MCP-generated Playwright snippets valid when instruction text has quotes (#7460) (20abee573)
  • Mint short-lived artifact URLs on demand for recording playback (#7459) (8c81c758a)
  • fix(SKY-12218): drop the pinned revision hash from the self-heal ancestors assertion (#7458) (cb8ac5762)
  • fix(SKY-12474): open Copilot pane on Discover → Studio handoff (#7457) (0ef393a2b)
  • Self-discard artifact upload tasks and stop resurrecting the execution-channel driver (#7456) (457eb4f34)
  • SKY-12163: Preserve Copilot completion checks when workflows are saved (#7455) (88fa07c13)
  • feat(SKY-11944): skyvern_select_option works on custom dropdowns and autocomplete, not just native <select> (#7454) (7021e7792)
  • SKY-12163: Don’t guess exact output requirements (#7451) (40cf6c989)
  • feat: add acti

Tags

README

<!-- DOCTOC SKIP -->

<h1 align="center">

<a href="https://www.skyvern.com">

<picture>

<source media="(prefers-color-scheme: dark)" srcset="fern/images/skyvern_logo.png"/>

<img height="120" src="fern/images/skyvern_logo_blackbg.png"/>

</picture>

</a>

<br />

</h1>

<p align="center">

🐉 Automate Browser-based workflows using LLMs and Computer Vision 🐉

</p>

<p align="center">

<a href="https://www.skyvern.com/"><img src="https://img.shields.io/badge/Website-blue?logo=googlechrome&logoColor=black"/></a>

<a href="https://www.skyvern.com/docs/"><img src="https://img.shields.io/badge/Docs-yellow?logo=gitbook&logoColor=black"/></a>

<a href="https://discord.gg/fG2XXEuQX3"><img src="https://img.shields.io/discord/1212486326352617534?logo=discord&label=discord"/></a>

<!-- <a href="https://pepy.tech/project/skyvern" target="_blank"><img src="https://static.pepy.tech/badge/skyvern" alt="Total Downloads"/></a> -->

<a href="https://github.com/skyvern-ai/skyvern"><img src="https://img.shields.io/github/stars/skyvern-ai/skyvern" /></a>

<a href="https://github.com/Skyvern-AI/skyvern/blob/main/LICENSE"><img src="https://img.shields.io/github/license/skyvern-ai/skyvern"/></a>

<a href="https://twitter.com/skyvernai"><img src="https://img.shields.io/twitter/follow/skyvernai?style=social"/></a>

<a href="https://www.linkedin.com/company/95726232"><img src="https://img.shields.io/badge/Follow%20 on%20LinkedIn-8A2BE2?logo=linkedin"/></a>

</p>

Skyvern automates browser-based workflows using LLMs and computer vision. It provides a Playwright-compatible SDK that adds AI functionality on top of playwright, as well as a no-code workflow builder to help both technical and non-technical users automate manual workflows on any website, replacing brittle or unreliable automation solutions.

<p align="center">

<img src="fern/images/geico_shu_recording_cropped.gif"/>

</p>

Traditional approaches to browser automations required writing custom scripts for websites, often relying on DOM parsing and XPath-based interactions which would break whenever the website layouts changed.

Instead of only relying on code-defined XPath interactions, Skyvern relies on Vision LLMs to learn and interact with the websites.

How it works

Skyvern was inspired by the Task-Driven autonomous agent design popularized by BabyAGI and AutoGPT -- with one major bonus: we give Skyvern the ability to interact with websites using browser automation libraries like Playwright.

Skyvern uses a swarm of agents to comprehend a website, and plan and execute its actions:

<picture>

<source media="(prefers-color-scheme: dark)" srcset="fern/images/skyvern_2_0_system_diagram.png" />

<img src="fern/images/skyvern_2_0_system_diagram.png" />

</picture>

This approach has a few advantages:

  1. Skyvern can operate on websites it's never seen before, as it's able to map visual elements to actions necessary to complete a workflow, without any customized code
  2. Skyvern is resistant to website layout changes, as there are no pre-determined XPaths or other selectors our system is looking for while trying to navigate
  3. Skyvern is able to take a single workflow and apply it to a large number of websites, as it's able to reason through the interactions necessary to complete the workflow

A detailed technical report can be found here.

Demo

<!-- Redo demo -->

https://github.com/user-attachments/assets/5cab4668-e8e2-4982-8551-aab05ff73a7f

Quickstart

Skyvern Cloud

Skyvern Cloud is a managed cloud version of Skyvern that allows you to run Skyvern without worrying about the infrastructure. It allows you to run multiple Skyvern instances in parallel and comes bundled with anti-bot detection mechanisms, proxy network, and CAPTCHA solvers.

If you'd like to try it out, navigate to app.skyvern.com and create an account.

Run Locally (UI + Server)

Choose your preferred setup method:

Database default: skyvern quickstart and skyvern run server default to a SQLite database at ~/.skyvern/data.db so the pip path works without Postgres or Docker. To use Postgres instead, pass --postgres for a local container or --database-string for an existing database. Docker Compose always uses the bundled Postgres service.

Option A: pip install (Recommended for Python-managed local setup)

Dependencies needed:

Additionally, for Windows:

  • Rust
  • VS Code with C++ dev tools and Windows SDK
1. Install Skyvern

pip install "skyvern[all]"
2. Run Skyvern

skyvern quickstart

The pip quickstart uses SQLite by default. For a local Postgres container, run skyvern quickstart --postgres.

Option B: Docker Compose

Use this option if you want everything containerized (Postgres, API, UI) and don't want to install Python/Node locally.

  1. Install Docker Desktop
  2. Clone the repository:

   git clone https://github.com/skyvern-ai/skyvern.git && cd skyvern
  1. Configure your LLM provider in .env (the quickstart --docker-compose command below will create it from .env.example if missing):

   cp .env.example .env  # if not already created
   # edit .env to add your LLM API key
  1. Start everything:

   docker compose up -d
  1. Open http://localhost:8080

Troubleshooting

(sqlite3.OperationalError) table organizations already exists — You hit a known bug in pip install skyvern==1.0.31. Fix:


rm ~/.skyvern/data.db   # remove the leftover SQLite file
pip install --upgrade skyvern   # 1.0.32+ contains the fix
skyvern quickstart

If you are still on 1.0.31 and cannot upgrade, install via uv instead:


uv pip install skyvern

pip install skyvern fails with ResolutionImpossible (litellm / fastmcp) — You hit a dependency-resolution conflict in 1.0.31. Either upgrade to 1.0.32+ or use uv: uv pip install skyvern.

SDK

Skyvern is a Playwright extension that adds AI-powered browser automation. It gives you the full power of Playwright with additional AI capabilities—use natural language prompts to interact with elements, extract data, and automate complex multi-step workflows.

Installation:

  • Python SDK / cloud API: pip install skyvern
  • Local server + packaged UI: pip install "skyvern[all]" then run skyvern quickstart
  • Local server + packaged UI with Postgres: pip install "skyvern[all]" then run skyvern quickstart --postgres
  • Packaged UI for an existing API: pip install "skyvern[ui]" then run

skyvern run ui --api-url <api-url> --api-key <api-key>

  • TypeScript: npm install @skyvern/client

AI-Powered Page Commands

Skyvern adds four core AI commands directly on the page object:

| Command | Description |

|---------|-------------|

| page.act(prompt) | Perform actions using natural language (e.g., "Click the login button") |

| page.extract(prompt, schema) | Extract structured data from the page with optional JSON schema |

| page.validate(prompt) | Validate page state, returns bool (e.g., "Check if user is logged in") |

| page.prompt(prompt, schema) | Send arbitrary prompts to the LLM with optional response schema |

Additionally, page.agent provides higher-level workflow commands:

| Command | Description |

|---------|-------------|

| page.agent.run_task(prompt) | Execute complex multi-step tasks |

| page.agent.login(credential_type, credential_id) | Authenticate with stored credentials (Skyvern, Bitwarden, 1Password) |

| page.agent.download_files(prompt) | Navigate and download files |

| page.agent.run_workflow(workflow_id) | Execute pre-built workflows |

AI-Augmented Playwright Actions

All standard Playwright actions support an optional prompt parameter for AI-powered element location:

| Action | Playwright | AI-Augmented |

|--------|------------|--------------|

| Click | page.click("#btn") | page.click(prompt="Click login button") |

| Fill | page.fill("#email", "a@b.com") | page.fill(prompt="Email field", value="a@b.com") |

| Select | page.select_option("#country", "US") | page.select_option(prompt="Country dropdown", value="US") |

| Upload | page.upload_file("#file", "doc.pdf") | page.upload_file(prompt="Upload area", files="doc.pdf") |

Three interaction modes:


# 1. Traditional Playwright - CSS/XPath selectors
await page.click("#submit-button")

# 2. AI-powered - natural language
await page.click(prompt="Click the green Submit button")

# 3. AI fallback - tries selector first, falls back to AI if it fails
await page.click("#submit-btn", prompt="Click the Submit button")

Core AI Commands - Examples


# act - Perform actions using natural language
await page.act("Click the login button and wait for the dashboard to load")

# extract - Extract structured data with optional JSON schema
result = await page.extract("Get the product name and price")
result = await page.extract(
    prompt="Extract order details",
    schema={"order_id": "string", "total": "number", "items": "array"}
)

# validate - Check page state (returns bool)
is_logged_in = await page.validate("Check if the user is logged in")

# prompt - Send arbitrary prompts to the LLM
summary = await page.prompt("Summarize what's on this page")

Quick Start Examples

Run via UI:


skyvern run all

Navigate to http://localhost:8080 to run tasks through the web interface. If the packaged UI is missing, skyvern run ui will offer to install the matching UI package. For non-interactive setup, use skyvern run ui --install-ui or skyvern run all --install-ui.

To run only the packaged UI against an existing Skyvern API, install skyvern[ui] and pass

--api-url; the CLI infers --wss-url from the API URL unless you override it. You can also set

VITE_API_BASE_URL, VITE_WSS_BASE_URL, VITE_ARTIFACT_API_BASE_URL, VITE_SKYVERN_API_KEY,

and VITE_BROWSER_STREAMING_MODE before running skyvern run ui.

Python SDK:


from skyvern import Skyvern

# Local mode
skyvern = Skyvern.local()

# Or connect to Skyvern Cloud
skyvern = Skyvern(api_key="your-api-key")

# Launch browser and get page
browser = await skyvern.launch_cloud_browser()
page = await browser.get_working_page()

# Mix Playwright with AI-powered actions
await page.goto("https://example.com")
await page.click("#login-button")  # Traditional Playwright
await page.agent.login(credential_type="skyvern", credential_id="cred_123")  # AI login
await page.click(prompt="Add first item to cart")  # AI-augmented click
await page.agent.run_task("Complete checkout with: John Snow, 12345")  # AI task

TypeScript SDK:


import { Skyvern } from "@skyvern/client";

const skyvern = new Skyvern({ apiKey: "your-api-key" });
const browser = await skyvern.launchCloudBrowser();
const page = await browser.getWorkingPage();

// Mix Playwright with AI-powered actions
await page.goto("https://example.com");
await page.click("#login-button");  // Traditional Playwright
await page.agent.login("skyvern", { credentialId: "cred_123" });  // AI login
await page.click({ prompt: "Add first item to cart" });  // AI-augmented click
await page.agent.runTask("Complete checkout with: John Snow, 12345");  // AI task

await browser.close();

Simple task execution:


from skyvern import Skyvern

skyvern = Skyvern()
task = await skyvern.run_task(prompt="Find the top post on hackernews today")
print(task)

Advanced Usage

Control your own browser (Chrome)

Let Skyvern control your existing Chrome browser — with all your cookies, logins, and extensions.

Step 1: Enable remote debugging in Chrome
  1. Open Chrome and navigate to chrome://inspect/#remote-debugging
  2. Click Enable to start the debugging server
  3. You should see: Server running at: 127.0.0.1:9222

[!TIP]

The skyvern init browser command can do this automatically — it opens chrome://inspect/#remote-debugging, waits for you to enable it, and saves the config.

Step 2: Connect Skyvern

Option A — Python Code:


from skyvern import Skyvern

skyvern = Skyvern(
    base_url="http://localhost:8000",
    api_key="YOUR_API_KEY",
    browser_address="http://127.0.0.1:9222",
)
task = await skyvern.run_task(
    prompt="Find the top post on hackernews today",
)

Option B — Skyvern Service:

Add two variables to your .env file:


BROWSER_TYPE=cdp-connect
BROWSER_REMOTE_DEBUGGING_URL=http://127.0.0.1:9222

Restart Skyvern service skyvern run all and run the task through UI or code

Connect Skyvern Cloud to your local browser

Let Skyvern Cloud control a Chrome browser running on your machine — with all your existing cookies, logins, and extensions. Useful for automating sites where you're already logged in or behind a VPN.


# One command to start Chrome + create a tunnel to Skyvern Cloud
skyvern browser serve --tunnel

Then use the tunnel URL in your task:


from skyvern import Skyvern

skyvern = Skyvern(api_key="your-api-key")
task = await skyvern.run_task(
    prompt="Download the latest invoice from my account",
    browser_address="https://abc123.ngrok-free.dev",
)

[!WARNING]

Always use --api-key when exposing your browser via a tunnel. Without it, anyone with the URL has full control of your browser. See the security docs.

See the full documentation for all options, manual tunnel setup, a

Truncated. Read the full README on GitHub ↗

Related tools