🚀 AGI SDK
📄 Paper • 📝 Blog • 🏢 AGI Inc • 🏆 Leaderboard
Build, evaluate, and level up your AI agents for the real web.
✨ What is AGI SDK?
AGI SDK is a toolkit for building and evaluating AI browser agents in real-world environments.
It powers REAL Bench: the first high-fidelity benchmark for AI agents navigating modern websites like Amazon, DoorDash, Airbnb, and more.
🔹 Train agents to browse and interact with real apps 🔹 Benchmark agents with robust, standardized tasks 🔹 Submit to the leaderboard and see how your agents stack up!
TL;DR: Go from “idea” to “benchmarked agent” in <60 seconds
🛠️ Installation (30 s)
# Install the SDK
pip install agisdk
# Install Playwright browser dependencies
playwright install --force
# Set your LLM API key (for evaluation)
export OPENAI_API_KEY="your-api-key" # any supported provider key works
✅ Supports OpenAI, Anthropic, OpenRouter, and custom models!
On Apple Silicon run brew install --cask playwright first.
⏱️ 60-second Quick-Start
Here's a minimal example to get you started for benchmarking an AI agent on the REAL Bench environment:
from agisdk import REAL
harness = REAL.harness(
model="gpt-4o", # any LLM tag
task_type="omnizon", # Amazon-like store
headless=False # watch it click in real-time!
)
print(harness.run()) # 🎉
Need more control? See full examples ›
🔥 Features
- Full-stack web replicas of top real-world apps (Amazon, Uber, Gmail, Airbnb, etc.)
- Robust agent API: Observations, Actions, Memory, Errors
- Leaderboard integration (REAL Bench)
- Customizable harness: plug your own agents
- Multi-model support: OpenAI, Anthropic, OpenRouter, or your own model
- Parallel evaluation for faster experiments
Running Custom Agents
Checkout the README.md in the example folder. There are three examples of custom agents in the example directory:
example/starter.py: A simple example to get you startedexample/custom.py: A more complex example with a custom agentexample/nova.py: For running custom agents which already have browsers running (in this case, Amazon NovaAct)
Additionally, there is a hackable example in example/hackable.py which is a can be configured for better performance and starting of.
Local Development
Only if you want to develop locally, you can install from source:
# Clone the repository
git clone https://github.com/agi-inc/agisdk.git
cd agisdk
# Install in development mode
pip install -e .
🌐 Available Tasks
Versioning: The SDK ships both
v1andv2task sets; if you omit the version when selecting tasks or running experiments the harness defaults tov1. Specifytask_version="v2"(or usev2.*task ids) to target the newer scenarios.
The AGI SDK includes high-fidelity, fully-deterministic websites for agents to explore. These are modern web stack sites (React + Next.js) with rich functionality for core user flows, realistic mock data, and consistent behavior for testing and evaluation.
The benchmark includes these environments:
| App Clone | Task Prefix | Example Use Case |
|---|---|---|
| 🛒 Amazon → Omnizon | v2.omnizon-* |
Buy a laptop, find a gift |
| 🍔 DoorDash → DashDish | v2.dashdish-* |
Order dinner |
| ✈️ United → FlyUnified | v2.flyunified-* |
Book a flight |
| 🏡 Airbnb → Staynb | v2.staynb-* |
Reserve accommodation |
| 📅 Google Calendar → GoCalendar | v2.gocalendar-* |
Schedule a meeting |
| 📬 Gmail → GoMail | v2.gomail-* |
Compose an email |
| 🍽️ OpenTable → OpenDining | v2.opendining-* |
Book a restaurant |
| 👔 LinkedIn → NetworkIn | v2.networkin-* |
Accept a connection |
| 🚗 Uber → Udriver | v2.udriver-* |
Book a ride |
| 💼 UpWork → TopWork | v2.topwork-* |
Find a freelance gig |
| 🏠 Zillow → Zilloft | v2.zilloft-* |
Browse houses |
Each task comes with human-written goals designed to stress-test agent capabilities.
🔑 API Keys
To use models from other providers, set their respective API keys:
# For Anthropic models (like sonnet-3.7)
export ANTHROPIC_API_KEY="your-anthropic-api-key"
👁️ Observation Structure
Your agent gets access to the following observation structure:
{
'chat_messages': [...], # History of chat messages
'goal': "...", # Text description of the goal
'goal_object': [...], # Structured goal object with text and images
'open_pages_urls': [...], # List of open page URLs
'active_page_index': 0, # Index of the active page
'url': "...", # Current URL
'screenshot': np.array(...), # Screenshot as numpy array
'dom_object': {...}, # DOM structure
'axtree_object': {...}, # Accessibility tree
'extra_element_properties': {...}, # Additional element properties
'focused_element_bid': "...", # ID of the focused element
'last_action': "...", # Last action performed
'last_action_error': "...", # Error from last action (if any)
'elapsed_time': 0.0, # Time elapsed in the episode
'browser': {...} # Playwright browser object (for direct control)
}
🎯 Actions
Actions are specified as strings in the format of function calls. Here are some commonly used actions:
# Navigation
"goto('https://www.google.com')"
"go_back()"
"go_forward()"
# Interaction
"click('element_id')"
"fill('input_id', 'text to enter')"
"press('Enter')"
# Communication
"send_msg_to_user('I found the answer: $42.99')"
# Reporting infeasible tasks
"report_infeasible('The requested item is out of stock')"
⚙️ Harness Configuration
The harness function accepts the following parameters:
REAL.harness(
# Agent configuration (provide one of these)
model="gpt-4o", # OpenAI models
model="sonnet-3.7", # Anthropic models
model="openrouter/deepseek/deepseek-chat-v3-0324", # OpenRouter models (with openrouter/ prefix)
agentargs=MyAgentArgs(), # Or provide your own agent arguments
# Task selection (provide one of these or don't provide any to run all tasks)
task_name="v2.omnizon-1", # Specific task to run
task_type="omnizon", # Run all tasks of this type
task_id=1, # Run specific task ID within a type
# Browser configuration
headless=False, # Whether to show the browser
max_steps=25, # Maximum number of steps
browser_dimensions=(1280, 720), # Browser window dimensions
# Observation options
use_html=False, # Include HTML in observations
use_axtree=True, # Include accessibility tree
use_screenshot=True, # Include screenshots
# Leaderboard submission
leaderboard=False, # Whether to submit to leaderboard
run_id="my_unique_id", # Unique ID for the submission
# Execution options
num_workers=4, # Number of parallel workers
use_cache=True, # Use cached results when available
cache_only=False, # Only use cached results
force_refresh=False, # Force re-running tasks
# Output options
results_dir="./results" # Where to store results
)
🏆 Submitting to the REAL Leaderboard
- Create an API key – use the leaderboard portal (Account → API Keys) to generate a key tied to your Supabase user.
- Mint a run ID
- From the portal UI: open the Profile page, click Create Run, pick your model, and copy the
run_idthat appears in the runs table. - From the API (same endpoint the SDK uses):
curl "https://www.realevals.ai/api/runKey?api_key=<API_KEY>&model_name=<MODEL_NAME>&run_name=<RUN_NAME>"
The JSON response returnsnewRunId. If want to use a different domain, setREAL_API_BASE=https://…before running the SDK to override the default domain. - From the portal UI: open the Profile page, click Create Run, pick your model, and copy the
- Run the harness in leaderboard mode:
harness = REAL.harness( model="gpt-4o", task_type="omnizon", leaderboard=True, api_key="<API_KEY>", run_name="<RUN_NAME>", model_id_name="<MODEL_NAME>", run_id="<newRunId>", ) harness.run()
The harness setsRUNIDso each clone posts results to the REAL API. Useforce_refresh=Trueor delete cached runs inexample/results/when you need a fresh submission. - Inspect the submission – either open the leaderboard UI or call
to fetch stored results (use bare task IDs such ashttps://web-eval-leaderboard.vercel.app/api/getRunTask?api_key=<API_KEY>&display_name=<RUN_NAME>&task_id=<TASK_ID>omnizon-1; inside the SDK you reference tasks with thev2.prefix).
🤝 Contributing
We welcome contributions of all kinds:
- 📢 Feature requests? Open an Issue
- 🐛 Bug reports? Create a ticket
- 📈 Improve REAL tasks? Join our Project Board
- 🛠️ Submit code? Fork + PR - we love clean commits!
Let's build the future of agents together. 🔥
💬 Community
- Join our Discord (coming soon!)
- Follow AGI Inc. on LinkedIn
⭐️ Why AGI SDK?
Because your agents deserve better than toy environments.
Because the real web is messy and that's where the magic happens.
Because the future is agentic and it starts here.
Metadata
Release files for agisdk 0.3.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| agisdk-0.3.5.tar.gz | 365.8 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agisdk-0.3.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 932.2 kB
Release files / agisdk-0.3.5.tar.gz
| Download URL | agisdk-0.3.5.tar.gz |
|---|---|
| Size | 365.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d501969dde7c1b060bd19fe83fc67d206f5c194741f953905cccfbdc48794d48
|
|
BLAKE2b-256 checksum How to use checksums |
c7ffdd2feb64ab6d0a1a15b1ea1a08a40c5a3c08ba2878fb8b9dba000201ef88
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2025.
Transparency logRelease files / agisdk-0.3.5-py3-none-any.whl
| Download URL | agisdk-0.3.5-py3-none-any.whl |
|---|---|
| Size | 566.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
168596cf1fd3c8d8bef1336d19838eb5beb95905857450fa37bce24e1b7e0ccb
|
|
BLAKE2b-256 checksum How to use checksums |
5b053974e5586c733ada18c926267b08aad5efe12d78a17468866bb8f1237fec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2025.
Transparency logSecurity for agisdk 0.3.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for agisdk-0.3.5.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2025.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.