Magnus Müller 45f3dc5593 Remove litellm from dependencies (supply chain attack) (#4515)
## Summary

Remove `litellm` from `pyproject.toml` dependencies entirely.
`ChatLiteLLM` wrapper is kept but requires manual installation:

```
pip install litellm
```

## What changed

- **pyproject.toml**: `litellm==1.82.2` removed from core dependencies
- **browser_use/llm/litellm/chat.py**: Added docstring noting manual
install requirement, added `# type: ignore` for pyright since litellm is
no longer in the environment
- **ChatLiteLLM stays in the public API** — it already lazy-imports
litellm inside methods, so users who don't use it are never affected

## Context

litellm versions 1.82.7 and 1.82.8 were backdoored on March 24, 2026 by
TeamPCP via a compromised Trivy CI/CD pipeline. `browser-use==0.12.3`
shipped `litellm>=1.82.2` (unpinned) as a core dependency, and BigQuery
analysis shows ~6,900 installs pulled the backdoored litellm during the
4-hour attack window.

By removing it from dependencies entirely, `pip install browser-use` no
longer pulls litellm, and browser-use will not appear in litellm's
dependency graph.

## References

- [TeamPCP Backdoors LiteLLM — The Hacker
News](https://thehackernews.com/2026/03/teampcp-backdoors-litellm-versions.html)
- [LiteLLM infected via Trivy — The
Register](https://www.theregister.com/2026/03/24/trivy_compromise_litellm/)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Medium risk because removing `litellm` from required dependencies can
break existing installs that relied on `ChatLiteLLM` working
out-of-the-box; runtime imports now require manual installation.
> 
> **Overview**
> Stops installing `litellm` as a core dependency (and bumps the package
version to `0.12.5`), requiring users to install it explicitly when
using the LiteLLM integration.
> 
> Keeps `ChatLiteLLM` but adds a module docstring documenting the manual
install and updates `litellm` imports with `# type: ignore` to avoid
type-check failures when `litellm` is absent.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
d4b9e30188. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2026-03-24 20:36:50 -07:00
2026-03-21 02:05:42 -04:00
2025-11-26 13:06:03 -08:00
2026-02-23 15:24:40 -08:00
2025-06-03 16:03:08 -07:00
2025-08-31 12:01:39 -07:00
2025-06-27 05:36:23 -07:00
2024-11-05 19:07:17 +01:00

Shows a black Browser Use Logo in light color mode and a white one in dark color mode.
The AI browser agent.
Browser-Use Package Download Statistics

Demos Docs Blog Merch Github Stars Twitter Discord Browser-Use Cloud

🌤️ Want to skip the setup? Use our cloud for faster, scalable, stealth-enabled browser automation!

🤖 LLM Quickstart

  1. Direct your favorite coding agent (Cursor, Claude Code, etc) to Agents.md
  2. Prompt away!

👋 Human Quickstart

1. Create environment and install Browser-Use with uv (Python>=3.11):

uv init && uv add browser-use && uv sync
# uvx browser-use install  # Run if you don't have Chromium installed

2. [Optional] Get your API key from Browser Use Cloud:

# .env
BROWSER_USE_API_KEY=your-key
# GOOGLE_API_KEY=your-key
# ANTHROPIC_API_KEY=your-key

3. Run your first agent:

from browser_use import Agent, Browser, ChatBrowserUse
# from browser_use import ChatGoogle  # ChatGoogle(model='gemini-3-flash-preview')
# from browser_use import ChatAnthropic  # ChatAnthropic(model='claude-sonnet-4-6')
import asyncio

async def main():
    browser = Browser(
        # use_cloud=True,  # Use a stealth browser on Browser Use Cloud
    )

    agent = Agent(
        task="Find the number of stars of the browser-use repo",
        llm=ChatBrowserUse(),
        # llm=ChatGoogle(model='gemini-3-flash-preview'),
        # llm=ChatAnthropic(model='claude-sonnet-4-6'),
        browser=browser,
    )
    await agent.run()

if __name__ == "__main__":
    asyncio.run(main())

Check out the library docs and the cloud docs for more!


Open Source vs Cloud

BU Bench V1 - LLM Success Rates

We benchmark Browser Use across 100 real-world browser tasks. Full benchmark is open source: browser-use/benchmark.

Use Open Source

  • You need custom tools or deep code-level integration
  • You want to self-host and deploy browser agents on your own machines

Use Cloud (recommended)

  • Much better agent for complex tasks (see plot above)
  • Easiest way to start and scale
  • Best stealth with proxy rotation and captcha solving
  • 1000+ integrations (Gmail, Slack, Notion, and more)
  • Persistent filesystem and memory

Use Both


Demos

📋 Form-Filling

Task = "Fill in this job application with my resume and information."

Job Application Demo Example code ↗

🍎 Grocery-Shopping

Task = "Put this list of items into my instacart."

https://github.com/user-attachments/assets/a6813fa7-4a7c-40a6-b4aa-382bf88b1850

Example code ↗

💻 Personal-Assistant.

Task = "Help me find parts for a custom PC."

https://github.com/user-attachments/assets/ac34f75c-057a-43ef-ad06-5b2c9d42bf06

Example code ↗

💡See more examples here ↗ and give us a star!


🚀 Template Quickstart

Want to get started even faster? Generate a ready-to-run template:

uvx browser-use init --template default

This creates a browser_use_default.py file with a working example. Available templates:

  • default - Minimal setup to get started quickly
  • advanced - All configuration options with detailed comments
  • tools - Examples of custom tools and extending the agent

You can also specify a custom output path:

uvx browser-use init --template default --output my_agent.py

💻 CLI

Fast, persistent browser automation from the command line:

browser-use open https://example.com    # Navigate to URL
browser-use state                       # See clickable elements
browser-use click 5                     # Click element by index
browser-use type "Hello"                # Type text
browser-use screenshot page.png         # Take screenshot
browser-use close                       # Close browser

The CLI keeps the browser running between commands for fast iteration. See CLI docs for all commands.

Claude Code Skill

For Claude Code, install the skill to enable AI-assisted browser automation:

mkdir -p ~/.claude/skills/browser-use
curl -o ~/.claude/skills/browser-use/SKILL.md \
  https://raw.githubusercontent.com/browser-use/browser-use/main/skills/browser-use/SKILL.md

Integrations, hosting, custom tools, MCP, and more on our Docs ↗


FAQ

What's the best model to use?

We optimized ChatBrowserUse() specifically for browser automation tasks. On avg it completes tasks 3-5x faster than other models with SOTA accuracy.

Pricing (per 1M tokens):

  • Input tokens: $0.20
  • Cached input tokens: $0.02
  • Output tokens: $2.00

For other LLM providers, see our supported models documentation.

Should I use the Browser Use system prompt with the open-source preview model?

Yes. If you use ChatBrowserUse(model='browser-use/bu-30b-a3b-preview') with a normal Agent(...), Browser Use still sends its default agent system prompt for you.

You do not need to add a separate custom "Browser Use system message" just because you switched to the open-source preview model. Only use extend_system_message or override_system_message when you intentionally want to customize the default behavior for your task.

If you want the best default speed/accuracy, we still recommend the newer hosted bu-* models. If you want the open-source preview model, the setup stays the same apart from the model= value.

Can I use custom tools with the agent?

Yes! You can add custom tools to extend the agent's capabilities:

from browser_use import Tools

tools = Tools()

@tools.action(description='Description of what this tool does.')
def custom_tool(param: str) -> str:
    return f"Result: {param}"

agent = Agent(
    task="Your task",
    llm=llm,
    browser=browser,
    tools=tools,
)
Can I use this for free?

Yes! Browser-Use is open source and free to use. You only need to choose an LLM provider (like OpenAI, Google, ChatBrowserUse, or run local models with Ollama).

Terms of Service

This open-source library is licensed under the MIT License. For Browser Use services & data policy, see our Terms of Service and Privacy Policy.

How do I handle authentication?

Check out our authentication examples:

  • Using real browser profiles - Reuse your existing Chrome profile with saved logins
  • If you want to use temporary accounts with inbox, choose AgentMail
  • To sync your auth profile with the remote browser, run curl -fsSL https://browser-use.com/profile.sh | BROWSER_USE_API_KEY=XXXX sh (replace XXXX with your API key)

These examples show how to maintain sessions and handle authentication seamlessly.

How do I solve CAPTCHAs?

For CAPTCHA handling, you need better browser fingerprinting and proxies. Use Browser Use Cloud which provides stealth browsers designed to avoid detection and CAPTCHA challenges.

How do I go into production?

Chrome can consume a lot of memory, and running many agents in parallel can be tricky to manage.

For production use cases, use our Browser Use Cloud API which handles:

  • Scalable browser infrastructure
  • Memory management
  • Proxy rotation
  • Stealth browser fingerprinting
  • High-performance parallel execution

Tell your computer what to do, and it gets it done.

Twitter Follow     Twitter Follow

Made with ❤️ in Zurich and San Francisco
S
Description
browser-use: Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work.; remote-browser: Controls an isolated Browser Use Cloud browser from a sandboxed machine with the current Browser Use CLI.; open-source: Documentation reference for writing Python code using the browser-use open-source library. Use this skill whenever the user needs help with Agent, Browser, or…; cloud: Documentation reference for using Browser Use Cloud — the hosted A…
Readme MIT 120 MiB
Languages
Python 99.2%
Shell 0.3%
Dockerfile 0.3%
HTML 0.2%