AI-powered autonomous browser agent for production website monitoring and automation
Project description
🏔️ Yeti Agent
Autonomous AI Browser Agent for Production
AI-powered browser automation that monitors, tests, and automates production websites. Built in Nepal 🇳🇵 — Used worldwide.
Landing Page · PyPI · GitHub · Issues
Install
# One-line install (Linux / macOS / Windows via Git Bash)
curl -fsSL https://nikegunn.github.io/yeti-agent/install.sh | bash
# Or via pip / uv
pip install yeti-agent
uv add yeti-agent
Quick Start
from browser_use import Agent, ChatOpenAI
agent = Agent(
task="Go to HackerNews and find the top 3 AI stories",
llm=ChatOpenAI(model="gpt-4o"),
)
result = agent.run_sync()
print(result.final_result())
That's it. Three lines to a running agent.
LLM Providers
Yeti Agent works with 8+ LLM providers out of the box:
from browser_use import ChatOpenAI # OpenAI (gpt-4o, o3, gpt-5)
from browser_use import ChatAnthropic # Anthropic (claude-sonnet-4, claude-opus-4)
from browser_use import ChatGoogle # Google (gemini-2.0-flash, gemini-2.5-pro)
from browser_use import ChatGroq # Groq (llama-3-70b)
from browser_use import ChatOllama # Ollama (local models)
from browser_use import ChatAzureOpenAI # Azure OpenAI
from browser_use import ChatMistral # Mistral
from browser_use import ChatLiteLLM # LiteLLM (100+ models)
Production Monitoring
Monitor critical user flows 24/7:
from browser_use import Agent, Browser, BrowserProfile, ChatAnthropic
profile = BrowserProfile(
headless=True,
allowed_domains=["your-app.com", "*.your-app.com"],
)
agent = Agent(
task="""
1. Go to https://your-app.com/login
2. Login with test credentials
3. Navigate to checkout, add an item
4. Verify payment form loads correctly
5. Report any errors or broken elements
""",
llm=ChatAnthropic(model="claude-sonnet-4-20250514"),
browser=Browser(browser_profile=profile),
)
result = await agent.run(max_steps=50)
Structured Data Extraction
Extract typed data from any website:
from pydantic import BaseModel
from browser_use import Agent, ChatOpenAI
class Product(BaseModel):
name: str
price: float
rating: float
in_stock: bool
agent = Agent(
task="Extract all products from the first page",
llm=ChatOpenAI(model="gpt-4o"),
output_model_schema=Product,
)
products = await agent.run()
Custom Tools
Extend the agent with your own functions:
from browser_use import Agent, Tools, ChatGoogle
tools = Tools()
@tools.action(description="Send Slack alert when issue found")
def send_alert(message: str, severity: str) -> str:
slack.post(channel="#alerts", text=f"[{severity}] {message}")
return "Alert sent"
agent = Agent(
task="Monitor checkout flow and alert on any failures",
llm=ChatGoogle(model="gemini-2.0-flash"),
tools=tools,
)
CLI
yeti-agent open https://example.com # Navigate to URL
yeti-agent state # See clickable elements
yeti-agent click 5 # Click element by index
yeti-agent type "Hello" # Type text
yeti-agent screenshot page.png # Take screenshot
yeti-agent close # Close browser
yeti-agent init # Generate starter template
yeti-agent doctor # Check your setup
Template Quickstart
yeti-agent init --template default
Creates a ready-to-run Python script. Available templates:
- default — Minimal setup to get started
- advanced — All configuration options with comments
- tools — Custom tools and extending the agent
Architecture
Your Task (plain English)
→ LLM (GPT / Claude / Gemini / Ollama)
→ Agent (plans & executes)
→ Browser (CDP protocol)
→ Results (typed data)
Event-driven with watchdog services for security, popups, downloads, DOM changes, and crash recovery — all running independently through an event bus.
Key Features
| Feature | Description |
|---|---|
| 20+ Browser Actions | Click, type, scroll, navigate, extract, multi-tab, file upload, PDF export |
| Security Watchdogs | Domain allowlists/blocklists, data masking, proxy support, permission handling |
| Multi-Tab | Agent manages multiple tabs autonomously — opens, switches, aggregates |
| MCP Integration | Works as MCP server for Claude Desktop, connects to external MCP servers |
| Headless Mode | Full headless support for CI/CD, serverless, and production |
| Cloud Browsers | Connect to cloud CDP endpoints for scalable automation |
| GIF Generation | Auto-generate visual recordings of agent runs |
| Structured Output | Pydantic v2 models with type validation |
| Loop Detection | Catches repetitive agent behavior automatically |
| Fallback LLM | Secondary LLM for recovery after failures |
Configuration
from browser_use import Agent, Browser, BrowserProfile
profile = BrowserProfile(
headless=True, # No visible browser
allowed_domains=["*.your-app.com"], # Security
proxy={"server": "http://proxy:8080"}, # Proxy
user_data_dir="./chrome-profile", # Persist cookies
)
agent = Agent(
task="...",
llm=llm,
browser=Browser(browser_profile=profile),
use_vision=True, # Screenshots in prompts
max_actions_per_step=5, # Actions per LLM call
generate_gif=True, # Record run
)
Use Cases
- Production Monitoring — Test checkout, login, payments 24/7
- E2E QA Automation — Replace brittle Selenium with AI that adapts to UI changes
- Data Extraction — Scrape into typed Pydantic models
- Workflow Automation — Multi-step form filling, report generation
- Regression Detection — Post-release verification smarter than screenshot diffs
- SLA Compliance — Verify vendor portals meet requirements
Python Support
- Python 3.11, 3.12, 3.13
- Fully async (
asyncio) - Sync wrapper available (
agent.run_sync())
Development
git clone https://github.com/NikeGunn/yeti-agent.git
cd yeti-agent
uv venv --python 3.11 && source .venv/bin/activate
uv sync --dev
uv run pytest -vxs tests/ci # Run tests
uv run pyright # Type check
uv run ruff check --fix && uv run ruff format # Lint
Credits
Yeti Agent is built on top of the browser-use open-source framework. We extend it with production monitoring capabilities, enterprise features, and the Yeti Agent platform.
License
MIT License — see LICENSE for details.
Made with ❤️ in Nepal 🇳🇵 by Nikhil Bhagat
⭐ Star this repo if you find it useful!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yeti_agent-1.0.1.tar.gz.
File metadata
- Download URL: yeti_agent-1.0.1.tar.gz
- Upload date:
- Size: 577.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8026a84c15c425399c0c1bbfd2f470865e3c8aa9ec43035889e51f8613a13bf0
|
|
| MD5 |
0cd033e7651c00d08c9cb68da449f079
|
|
| BLAKE2b-256 |
01e042ff14a71fe51db44f09feed8b5f73cb66aa333987605d4f21ed57c5d511
|
File details
Details for the file yeti_agent-1.0.1-py3-none-any.whl.
File metadata
- Download URL: yeti_agent-1.0.1-py3-none-any.whl
- Upload date:
- Size: 685.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa14909ad93ffb66c78e21b1838e8eff503c7dc73bdc6f8b43cda0bcd66d02b5
|
|
| MD5 |
d0496986c6e52e0e3d93016fe6561148
|
|
| BLAKE2b-256 |
e942613628c6e1e334aa62a9a77a35b2618b260005cc0588711b97edcca26f72
|