AndaLabX
Open SourcePythonMIT

ember

A web browser built for AI agents. Not for engineers.

Chromium ships at 281 MB. ember runs at 17 MB idle. Six tools in one pip install. No Docker. No API key.

pip install ember-browser

17 MB

idle RAM

12 MB

browser binary

~89%

pages need no browser

Interactive CLI

Open a session. Run anything.

Type ember and you get a persistent session. Or run one-shot commands directly from your terminal.

bash
$ ember

  ███████╗███╗   ███╗██████╗ ███████╗██████╗
  ██╔════╝████╗ ████║██╔══██╗██╔════╝██╔══██╗
  █████╗  ██╔████╔██║██████╔╝█████╗  ██████╔╝
  ██╔══╝  ██║╚██╔╝██║██╔══██╗██╔══╝  ██╔══██╗
  ███████╗██║ ╚═╝ ██║██████╔╝███████╗██║  ██║
  ╚══════╝╚═╝     ╚═╝╚═════╝ ╚══════╝╚═╝  ╚═╝

  v0.1.0  lightweight headless browser for AI agents

  url      <url>       scrape a page to markdown
  search   <query>     web search
  crawl    <url>       crawl a whole website
  interact <url>       control with natural language
  extract  <url>       pull structured data with an LLM

emberurl https://news.ycombinator.com
  fetching... tier 1 (trafilatura)
  ✓ scraped 47 items in 340ms

embersearch "open source AI agents" -n 5
  searching...
  ✓ 5 results

embersave results.md
  ✓ saved to results.md
How it works

ember decides. You don't have to.

Most pages don't need a browser. ember checks the content and only launches Lightpanda when the page requires JavaScript.

1

trafilatura

handles ~89% of the web

Blogs, docs, news, GitHub. Pure HTTP, no browser process, no RAM overhead. Near-instant.

2

Lightpanda

SPAs + JS-heavy sites

A real browser engine written in Zig. 12 MB binary, auto-downloaded on first use. Only runs when a page needs JavaScript.

Memory footprint
Idle
~17 MB
Scraping static page
~20 MB
Running the browser
~140 MB

Crawl4AI imports at 171 MB before you scrape anything. Firecrawl needs 4-8 GB in Docker.

Capabilities

Six commands. One install.

All commands work standalone or inside the interactive session. Pass -o to any command to save the output.

url

Scrape any page

Returns clean markdown. Static pages use trafilatura. JS-heavy SPAs fall back to Lightpanda automatically.

ember url https://example.com
search

Web search, no API key

DuckDuckGo search built in. No account, no credits. Returns titles, URLs, and descriptions.

ember search "AI agents python" -n 10
crawl

Crawl entire sites

Depth-first crawler with sitemap support. Fetches every page once, respects robots.txt, follows internal links.

ember crawl https://docs.example.com --max-pages 50
map

Discover all URLs

Reads sitemaps, follows robots.txt, and extracts links to build a full URL map of any domain.

ember map https://example.com
interact

Natural language control

Describe what to do. ember opens the page in Lightpanda and executes the task using your LLM.

ember interact https://amazon.com --prompt "find a keyboard under $100"
extract

Structured extraction

Scrapes the page, passes it to an LLM with your prompt, returns structured JSON. Works with any provider.

ember extract https://example.com/pricing --prompt "list all plans as JSON"
Comparison

How it stacks up.

emberCrawl4AIFirecrawl OSSPlaywright
Setuppip installpip installDocker + Redis + Nodepip + browser install
Idle RAM~17 MB~171 MB4-8 GB (Docker)~47 MB
Browser binaryLightpanda 12 MBChromium 281 MBChromium 281 MBChromium 281 MB
Docker requiredNoNoYesNo
API key requiredNoNoNoNo
MCP serverYesNoYesYes
Search built-inYesNoYesNo
Three surfaces

CLI. Python. MCP.

One-shot from the terminal. Import into Python. Connect to any MCP host.

CLIember, ember url, ember search, ember serve
ember                          # interactive session
ember url https://example.com  # one-shot scrape
ember search "AI agents" -n 5  # web search
ember crawl https://docs.example.com --max-pages 20
ember serve                    # REST API on port 51251
Pythonfrom emb.scrape import scrape_url
from emb.scrape import scrape_url
from emb.search import search

result = scrape_url("https://example.com")
print(result.markdown)   # full page as markdown
print(result.title)

results = search("python asyncio", limit=5)
for r in results:
    print(r.title, r.url)
MCP ServerHermes, OpenClaw, Mercury, any MCP-compatible host
pip install "ember-browser[mcp]"

# mcp config:
{
  "mcpServers": {
    "ember": {
      "command": "ember",
      "args": ["mcp"]
    }
  }
}

# tools: scrape, search_web, crawl_site,
#        map_site, batch_scrape, interact_page, extract_data

Open source. MIT licensed.

Built for agents that run on VPS, laptops, and Raspberry Pis. Not just machines with 8 GB to spare.