Skip to main content
AIHawk

AIHawk is an open-source AI browser agent: a web browsing agent with a real browser. You say what you want in plain language, and it browses, clicks, types and reads the actual web to get it done.

FEATURED IN
Business Insider · TechCrunch · Semafor · Wired · The Verge · Vanity Fair · 404 Media


Two ways to use this browser agent

The only question is where the model comes from. If you already use Claude Code, Codex or Gemini CLI, take the first: your assistant has the model already and you need no new account. If you do not, take the second.

Either way the only thing you need beforehand is Python 3.11 or newer, which is where pip comes from.

1. From your assistant, over MCP

Your assistant brings the model. You add this browser to it, and nothing changes about how you work. Install the browser server:

pip install invisible-playwright-mcp

Then tell your assistant it exists.

Claude Code:

claude mcp add --scope user stealth -- invisible-playwright-mcp

Codex:

codex mcp add stealth -- invisible-playwright-mcp

Gemini CLI:

gemini mcp add --scope user stealth invisible-playwright-mcp

Then ask your assistant, in the window you already have open:

Go to news.ycombinator.com and give me the top five titles.

Claude Desktop, Cursor, VS Code, Windsurf, Zed and Cline take a config file instead, and the file is not the same shape for all of them. Each one is written out in the server's README.

2. Standalone: the web UI

We bring the interface, you bring an OpenRouter key. Chat on the left, the live browser on the right.

pip install aihawk
aihawk ui --openrouter-key sk-or-...

Then open http://127.0.0.1:8765 and type the same thing.

Same patched Firefox behind both. AIHawk reaches it through that MCP server, over MCP, exactly as your assistant would.


Setup details

What you need: Python 3.11 or newer, on Windows (x86_64) or Linux (x86_64 or arm64). macOS is not supported: the last engine build for it was firefox-20.

The browser is a separate download of about 250 MB that happens by itself the first time either way starts: the server fetches it as soon as your assistant launches it, and aihawk ui shows it coming down before it opens the port. Nothing to run.

If your assistant reports that it cannot find invisible-playwright-mcp, pip put the script somewhere your PATH does not reach; register python -m invisible_playwright_mcp instead.


What to ask a web browsing agent

Anything that needs real web automation: a browser rather than an API, and a person's judgement about what is on the page.

Go to <paste the URL>. One way, Milan to Lisbon, economy, one checked bag, one adult. Check every date from the 12th to the 16th of next month, one at a time, and read the cheapest fare for each day. The date field is a calendar widget, so click the days rather than typing them. If a date has no availability, say so. Do not guess a number.

It drives the page the way a person would: the pointer moves, keys are pressed, and it refuses to set a form field from JavaScript even when that would be quicker, because a page can tell the difference.

Options: proxy, profile, seed

  • --openrouter-key Your key, or the OPENROUTER_API_KEY variable.
  • --model An OpenRouter model id, or AIHAWK_MODEL. Defaults to z-ai/glm-4.6.
  • --proxy Optional. http://user:pass@proxy.example.com:8080 or socks5://proxy.example.com:1080. Host and port are both required. The timezone, locale and egress follow it.
  • --binary An engine binary you already have. It must be the build the seal pins, or startup refuses: this skips the download, not the version check.
  • --seed An integer. Same seed, same browser identity, every run.
  • --profile-dir A directory to keep the profile in, so logins and cookies survive restarts.
  • --headed Show the browser window. The interface shows you the page anyway.
  • --host, --port 127.0.0.1 and 8765. Changing the host exposes an interface that has no authentication.

A .env beside the command

Rather than retyping the key and the binary path, put them in a .env in the directory you run from:

OPENROUTER_API_KEY=sk-or-...
STEALTHFOX_BINARY=/path/to/firefox

It is read at startup, and on the way in it never overrides something already set, so the order is --flag > the environment > .env > the default. Only the directory you are in is read - there is no search upwards, so running from a subfolder cannot silently pick up a different key. The startup line names the variables it applied and never prints their values.

Passing --openrouter-key puts the key in your shell history, and on Linux in the process list. OPENROUTER_API_KEY in the environment or in a .env avoids both.

Either way it does not reach the browser process: it is removed from the environment the engine starts with, by name and by value, so a copy under a second name goes too. tests/test_key_isolation.py fails if that stops being true.

The wiki: AI browser-agent guides

The reading room around the agent lives in the wiki: the AI browser-agent landscape: browser-use, Operator-style and computer-use agents compared, what to check when an agent gets blocked, and what happened to OpenAI Operator, among others. Worked examples, transcripts and their outputs live in articles/.

The rest of the family: browser MCP server, engine, core

Contributing

Issues and pull requests welcome on whichever of those the problem lives in. If you are not sure, open it here. See CONTRIBUTING.

When something fails on a page, say which step, what the page did, what the tool returned and which exit country you were on. "It got blocked" is not something anyone can act on.

Using it responsibly

This automates a browser under your control. Read the terms of the sites you point it at, respect their rate limits, and do not submit anything a human has not read.

License

MIT. Everything distributed before 2 September 2026 was released under AGPL-3.0 and stays under it.

Download files

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

Source Distribution

aihawk-0.7.0.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.

aihawk-0.7.0-py3-none-any.whl (34.3 kB view details)

Uploaded Python 3

File details

Details for the file aihawk-0.7.0.tar.gz.

File metadata

  • Download URL: aihawk-0.7.0.tar.gz
  • Upload date:
  • Size: 2.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for aihawk-0.7.0.tar.gz
Algorithm Hash digest
SHA256 3ad2409840ae92c507f6bc0b4bcf75af0414e31715e54a6c1c47ca3adf589d1b
MD5 b797256978273bc43c593b893e2aea4c
BLAKE2b-256 09db55534ec7746d49c66f145b939ae54b9fef48f58534c76524fb8bbd1b606f

See more details on using hashes here.

Provenance

The following attestation bundles were made for aihawk-0.7.0.tar.gz:

Publisher: publish.yml on feder-cr/AIHawk

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

File details

Details for the file aihawk-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: aihawk-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 34.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for aihawk-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d85a850f42d0d3172db3c98741426c4461b0958a9e58b59bcb58bd67eb6b68d1
MD5 70912345b757568bc5043f5712620a93
BLAKE2b-256 175d6872fe5626ebe9e21cf6a2ee154cac2f92ae23f80e211346f9faa5c650c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for aihawk-0.7.0-py3-none-any.whl:

Publisher: publish.yml on feder-cr/AIHawk

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

Release history Release notifications | RSS feed

0.11.1

2 files

0.11.0

2 files

0.10.0

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.1

2 files

0.8.0

2 files

This release

0.7.0 This release

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page