🏔️ 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!
Metadata
Release files for yeti-agent 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| yeti_agent-1.0.1.tar.gz | 577.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| yeti_agent-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.3 MB
Release files / yeti_agent-1.0.1.tar.gz
| Download URL | yeti_agent-1.0.1.tar.gz |
|---|---|
| Size | 577.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8026a84c15c425399c0c1bbfd2f470865e3c8aa9ec43035889e51f8613a13bf0
|
|
BLAKE2b-256 checksum How to use checksums |
01e042ff14a71fe51db44f09feed8b5f73cb66aa333987605d4f21ed57c5d511
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / yeti_agent-1.0.1-py3-none-any.whl
| Download URL | yeti_agent-1.0.1-py3-none-any.whl |
|---|---|
| Size | 685.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
aa14909ad93ffb66c78e21b1838e8eff503c7dc73bdc6f8b43cda0bcd66d02b5
|
|
BLAKE2b-256 checksum How to use checksums |
e942613628c6e1e334aa62a9a77a35b2618b260005cc0588711b97edcca26f72
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|