# AIHawk

> Browser agent on a stealth Firefox that takes plain-language web tasks

- Category: Agents & Automation / Computer & Browser Use
- Language: Python
- Licence: MIT
- Repository: https://github.com/feder-cr/AIHawk
- Canonical page: https://ai-tldr.dev/tools/aihawk/

## In short

AIHawk is an open-source web browsing agent. It sits in the Computer & Browser Use category of the Agents & Automation tools and is open-source, written in Python and licensed MIT. To get started: install uv and fetch the engine.

## Overview

AIHawk is an open-source web browsing agent. You describe what you want in ordinary language and it drives a real browser to do it — moving the pointer, pressing keys, reading what is actually on the page — rather than calling an API or parsing a static fetch. It is built for the tasks that need a browser and a person's judgement about what is rendered: calendar widgets, multi-step forms, results that only exist after a click.

Its distinguishing piece is the engine. AIHawk runs on a stealth Firefox build fetched through `invisible-playwright`, so anti-bot systems treat the session as a normal visitor and the agent is not stopped by captchas or blocks partway through a task. Sessions are configurable: `--proxy` routes egress and pulls timezone and locale along with it, `--seed` pins a reproducible browser identity, and `--profile-dir` keeps logins and cookies across restarts.

There are two ways to use it. As an MCP server it attaches to an assistant you already run — Claude Code, Codex or Gemini CLI — and becomes a browsing tool there. Standalone, `aihawk ui` serves a local interface at 127.0.0.1:8765 with chat on the left and the live browser on the right, backed by an OpenRouter key; the default model is `z-ai/glm-5.3-flash`. Point it only at sites you are permitted to automate.

## What it does

- Plain-language task instructions executed against real pages — navigate, click, type, read
- Stealth Firefox engine so sessions are not flagged, blocked or served captchas
- MCP server mode for Claude Code, Codex and Gemini CLI; standalone web UI mode with a live browser pane
- Any OpenRouter model via `--model`, defaulting to z-ai/glm-5.3-flash
- Proxy support that carries timezone, locale and egress together (`--proxy`)
- Reproducible identity with `--seed`, and persistent logins with `--profile-dir`
- Reads a local .env at startup, which never overrides values already set

## Getting started

Both modes start by installing uv and fetching the stealth engine binary; after that you either register the MCP server with your assistant or run the standalone UI.

1. Install uv and fetch the engine

   On Linux. (Windows uses the PowerShell installer from astral.sh.)

```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
uvx invisible-playwright fetch
```

2. Register it with your assistant over MCP

   One line per host; the server runs through uvx, so there is nothing else to install.

```bash
claude mcp add --scope user stealth -- uvx aihawk
codex mcp add stealth -- uvx aihawk
gemini mcp add --scope user stealth uvx aihawk
```

3. Or run the standalone web UI

   Bring an OpenRouter key, then open http://127.0.0.1:8765 and type the task.

```bash
uvx aihawk ui --openrouter-key sk-or-...
```

4. Keep credentials in a .env

   Placed beside the command, it is read at startup. Precedence is flag > environment > .env > default.

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

5. Tune the session

   Host and port default to 127.0.0.1:8765 — changing the host exposes an interface with no authentication.

```bash
uvx aihawk ui \
  --model z-ai/glm-5.3-flash \
  --proxy socks5://proxy.example.com:1080 \
  --seed 42 \
  --profile-dir ./profile \
  --headed
```

## When to use it

- Give a coding assistant a browsing tool that can finish tasks on sites which block ordinary automation
- Read values that only appear after interaction — calendar-widget prices, filtered results, paginated tables
- Automate a repetitive logged-in workflow using a persistent profile instead of re-authenticating each run
- Run the same scripted browsing identity repeatedly for reproducible checks via `--seed`
