Skip to main content

Index - SOTA browser AI agent for autonomous task execution on the web

Project description

GitHub stars Static Badge X (formerly Twitter) Follow Static Badge

Laminar logo

Index

Index is a state-of-the-art open-source browser agent that autonomously executes complex web tasks. It turns any website into an accessible API and can be seamlessly integrated with just a few lines of code.

  • Powered by reasoning LLMs with vision capabilities.
    • Gemini 2.5 Pro (really fast and accurate)
    • Claude 3.7 Sonnet with extended thinking (reliable and accurate)
    • OpenAI o4-mini (depending on the reasoning effort, provides good balance between speed, cost and accuracy)
    • Gemini 2.5 Flash (really fast, cheap, and good for less complex tasks)
  • pip install lmnr-index and use it in your project
  • index run to run the agent in the interactive CLI
  • Supports structured output via Pydantic schemas for reliable data extraction.
  • Index is also available as a serverless API.
  • You can also try out Index via Chat UI.
  • Supports advanced browser agent observability powered by open-source platform Laminar.

prompt: go to ycombinator.com. summarize first 3 companies in the W25 batch and make new spreadsheet in google sheets.

https://github.com/user-attachments/assets/2b46ee20-81b6-4188-92fb-4d97fe0b3d6a

Documentation

Check out full documentation here

Quickstart

Install dependencies

pip install lmnr-index 'lmnr[all]'

# Install playwright
playwright install chromium

Setup model API keys

Setup your model API keys in .env file in your project root:

GEMINI_API_KEY=
ANTHROPIC_API_KEY=
OPENAI_API_KEY=
# Optional, to trace the agent's actions and record browser session
LMNR_PROJECT_API_KEY=

Run Index with code

import asyncio
from index import Agent, GeminiProvider
from pydantic import BaseModel
from lmnr import Laminar
import os

# to trace the agent's actions and record browser session
Laminar.initialize()

# Define Pydantic schema for structured output
class NewsSummary(BaseModel):
    title: str
    summary: str

async def main():

    llm = GeminiProvider(model="gemini-2.5-pro-preview-05-06")
    agent = Agent(llm=llm)

    # Example of getting structured output
    output = await agent.run(
        prompt="Navigate to news.ycombinator.com, find a post about AI, extract its title and provide a concise summary.",
        output_model=NewsSummary
    )
    
    summary = NewsSummary.model_validate(output.result.content)
    print(f"Title: {summary.title}")
    print(f"Summary: {summary.summary}")
    
if __name__ == "__main__":
    asyncio.run(main())

Run Index with CLI

Index CLI features:

  • Browser state persistence between sessions
  • Follow-up messages with support for "give human control" action
  • Real-time streaming updates
  • Beautiful terminal UI using Textual

You can run Index CLI with the following command.

index run

Output will look like this:

Loaded existing browser state
╭───────────────────── Interactive Mode ─────────────────────╮
│ Index Browser Agent Interactive Mode                       │
│ Type your message and press Enter. The agent will respond. │
│ Press Ctrl+C to exit.                                      │
╰────────────────────────────────────────────────────────────╯

Choose an LLM model:
1. Gemini 2.5 Flash
2. Claude 3.7 Sonnet
3. OpenAI o4-mini
Select model [1/2] (1): 3
Using OpenAI model: o4-mini
Loaded existing browser state

Your message: go to lmnr.ai, summarize pricing page

Agent is working...
Step 1: Opening lmnr.ai
Step 2: Opening Pricing page
Step 3: Scrolling for more pricing details
Step 4: Scrolling back up to view pricing tiers
Step 5: Provided concise summary of the three pricing tiers

Running CLI with a personal Chrome instance

You can use Index with personal Chrome browser instance instead of launching a new browser. Main advantage is that all your existing logged-in sessions will be available.

# Basic usage with default Chrome path
index run --local-chrome

Use Index via API

The easiest way to use Index in production is with serverless API. Index API manages remote browser sessions, agent infrastructure and browser observability. To get started, create a project API key in Laminar.

Install Laminar

pip install lmnr

Use Index via API

from lmnr import Laminar, LaminarClient
# you can also set LMNR_PROJECT_API_KEY environment variable

# Initialize tracing
Laminar.initialize(project_api_key="your_api_key")

# Initialize the client
client = LaminarClient(project_api_key="your_api_key")

for chunk in client.agent.run(
    stream=True,
    model_provider="gemini",
    model="gemini-2.5-pro-preview-05-06",
    prompt="Navigate to news.ycombinator.com, find a post about AI, and summarize it"
):
    print(chunk)
    

Browser agent observability

Both code run and API run provide advanced browser observability. To trace Index agent's actions and record browser session you simply need to initialize Laminar tracing before running the agent.

from lmnr import Laminar

Laminar.initialize(project_api_key="your_api_key")

Then you will get full observability on the agent's actions synced with the browser session in the Laminar platform. Learn more about browser agent observability in the documentation.

Index observability

Made with ❤️ by the Laminar team

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lmnr_index-0.1.12.tar.gz (2.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lmnr_index-0.1.12-py3-none-any.whl (959.8 kB view details)

Uploaded Python 3

File details

Details for the file lmnr_index-0.1.12.tar.gz.

File metadata

  • Download URL: lmnr_index-0.1.12.tar.gz
  • Upload date:
  • Size: 2.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for lmnr_index-0.1.12.tar.gz
Algorithm Hash digest
SHA256 5fd7c37a61d07e714314731943822a6a0ca6fd4bfade36c6f43633a86ee17a79
MD5 a2714980fbbc7f7d1bfe3fb009aa6b73
BLAKE2b-256 3b176799ed808dcb40e2065545cff00566c4e1be5b615734711afcebec7844d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for lmnr_index-0.1.12.tar.gz:

Publisher: publish.yml on lmnr-ai/index

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lmnr_index-0.1.12-py3-none-any.whl.

File metadata

  • Download URL: lmnr_index-0.1.12-py3-none-any.whl
  • Upload date:
  • Size: 959.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for lmnr_index-0.1.12-py3-none-any.whl
Algorithm Hash digest
SHA256 ca722aff267ffa06d18d27d726d68a4154c7be61a099208d75c925e015b2bca4
MD5 6ab16e07ccc62d4cc319ca29af5a28b1
BLAKE2b-256 e2ba2f7327a90af8716d585baea0e5115c5935565d4b0958dbd7d16ccc85d236

See more details on using hashes here.

Provenance

The following attestation bundles were made for lmnr_index-0.1.12-py3-none-any.whl:

Publisher: publish.yml on lmnr-ai/index

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page