> For the complete documentation index, see [llms.txt](https://fleet.hackmap.win/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://fleet.hackmap.win/getting-started/installation.md).

# Installation

Fleet ships as one wheel, `fleet-framework`, fully set up — master, worker, reconcile, store, streams, the Chromium browser pool, anti-bot helpers, and OpenTelemetry are all installed. There are no optional extras to pick; a plain install gives you everything.

## Prerequisites

Python 3.11 or newer. Redis 7 or newer reachable from the master. Nothing else.

## From PyPI

```bash
pip install fleet-framework   # everything: browser pool, mitmproxy, curl_cffi, otel
```

The wheel pulls `cloakbrowser` (Playwright + a patched Chromium 146, \~440 MB downloaded on first launch), `mitmproxy`, `curl_cffi`, `pyvirtualdisplay`, and the OpenTelemetry SDK.

## From source (editable)

```bash
git clone https://github.com/sarperavci/fleet
cd fleet
python3 -m venv .venv
source .venv/bin/activate
pip install -e .                  # everything
```

Verify the CLI is on PATH:

```bash
fleet --help
```

If the `fleet` command is missing, the entry-point didn't register. Usually it means you installed under a different Python than the one on PATH. Activate the venv and try again.

## Redis

The master needs Redis. For development, run one in Docker:

```bash
docker run -d --name fleet-redis -p 6379:6379 redis:7-alpine \
  redis-server --appendonly yes --save 60 1
```

`--appendonly yes` matters. Without it, a Redis restart wipes every worker config, every output stream, every queued task. Been there. It's not fun to recover from.

For production, use whatever managed Redis you already trust. The framework uses Redis 7 features (ZSETs, pubsub, BLPOP) but nothing exotic.

## Installing a plugin

A plugin is a pip-installable Python package that declares a `fleet.automations` entry-point. For example, the `hello-world` example in this repo:

```bash
pip install -e examples/hello-world
fleet info
# hello-world    hello_world.HelloWorld  (ContinuousAutomation)
```

`fleet info` walks `importlib.metadata.entry_points(group="fleet.automations")` and prints everything it finds. If your plugin isn't listed, the entry-point is missing or misspelled.

## Environment variables

The master and worker both read configuration from environment variables. The minimum useful set:

| Variable             | Used by               | Default                    |
| -------------------- | --------------------- | -------------------------- |
| `REDIS_URL`          | master, worker        | `redis://localhost:6379/0` |
| `MASTER_URL`         | worker                | required                   |
| `FLEET_ADMIN_TOKEN`  | master, admin clients | generated at startup       |
| `FLEET_WORKER_TOKEN` | master, worker        | generated at startup       |
| `LOG_LEVEL`          | master, worker        | `INFO`                     |

If you don't set the tokens, the master generates random ones at startup and prints them to stdout. Fine for a smoke test, not fine for anything else. Set them explicitly in any deployment you care about.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://fleet.hackmap.win/getting-started/installation.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
