# 🌐 HelmsmanBrowseTool
A [Helmsman](https://github.com/pepicrft/helmsman) tool that gives AI agents the ability to browse the web using [Browse](https://github.com/pepicrft/browse). 🤖🧭
## 📦 Installation
Add `helmsman_browse_tool` to your list of dependencies in `mix.exs`, along with a browser backend:
```elixir
def deps do
[
{:helmsman_browse_tool, "~> 0.2.0"},
# Pick a browser backend:
{:browse_chrome, "~> 0.2"}, # Headless Chrome via CDP
# or
{:browse_servo, "~> 0.1"}, # Servo-powered browser
]
end
```
## 🚀 Usage
Add the browse tool to your Helmsman agent:
```elixir
defmodule MyAgent do
use Helmsman
@impl true
def tools do
[
{HelmsmanBrowseTool, pool: MyApp.BrowserPool}
]
end
end
```
The tool exposes a `browse` tool to the LLM with the following actions:
- 🧭 **navigate** — Navigate to a URL
- 📄 **content** — Get the page content as HTML
- 📸 **screenshot** — Capture a screenshot of the current page
- 👆 **click** — Click an element on the page
- ✏️ **fill** — Fill a form field
- ⚡ **evaluate** — Execute JavaScript on the page
## ⚙️ Configuration
The tool requires a [Browse](https://github.com/pepicrft/browse) pool backed by a browser engine. You can choose between:
- **[BrowseChrome](https://github.com/pepicrft/browse_chrome)** — Headless Chrome via the Chrome DevTools Protocol
- **[BrowseServo](https://github.com/pepicrft/browse_servo)** — Servo-powered browser via Rustler NIFs
### Example with BrowseChrome
```elixir
# config/config.exs
config :browse_chrome,
default_pool: MyApp.BrowserPool,
pools: [
{MyApp.BrowserPool, pool_size: 4}
]
```
```elixir
# application.ex
def start(_type, _args) do
children = BrowseChrome.children() ++ [
# ... your other children
]
Supervisor.start_link(children, strategy: :one_for_one)
end
```
### Example with BrowseServo
```elixir
# config/config.exs
config :browse_servo,
default_pool: MyApp.BrowserPool,
pools: [
{MyApp.BrowserPool, pool_size: 4}
]
```
```elixir
# application.ex
def start(_type, _args) do
children = BrowseServo.children() ++ [
# ... your other children
]
Supervisor.start_link(children, strategy: :one_for_one)
end
```
## 📝 License
MIT