Agent 配套工具

Steel Browser|开源浏览器 API,为 AI 代理与应用提供网页自动化沙箱

Steel Browser

Steel Browser 是一个基于 Chrome、Puppeteer 与 CDP 的开源浏览器 API,帮助 AI 代理和自动化应用管理会话、抓取网页并执行页面命令。

获取与使用

需要部署

按官方资料自行安装或部署

使用难度待核验
国内可用性待核验

2026-11-09 更新 · 本站尚未实测

项目介绍

Agent 配套工具 · 2026-11-09 更新 · 本站尚未实测

Steel Browser 是 steel-dev 在 GitHub 上公开的浏览器 API 与浏览器沙箱项目,README 将其定位为“The open-source browser API for AI agents & apps”。它并不是一个独立封装好的 Agent 产品,而是一套可自托管或通过 Steel Cloud 接入的浏览器基础设施:在底层管理浏览器进程、会话、页面和 CDP 连接,让开发者把网页交互能力接入自己的 AI 应用或自动化脚本。README 同时说明项目处于 public beta,功能仍在持续演进。

核心能力

点击能力名称查看输入、输出和原文依据。

  • 全浏览器控制:基于 Puppeteer 与 CDP,可用 Puppeteer、Playwright 或 Selenium 连接 Chrome 实例;Selenium 会话为兼容方式,README 注明不支持 CDP 会话 API 的全部特性。
  • 会话与状态管理:README 称可在多次请求间保持浏览器状态、Cookies 与本地存储。
  • 代理与扩展:内置代理链管理用于 IP 轮换,并支持加载自定义 Chrome 扩展。
  • 调试:提供请求日志与查看会话的 UI。
  • 防检测:README 提到包含 stealth 插件与指纹管理。
  • 资源管理:自动清理与浏览器生命周期管理。
  • 便捷端点:/scrape、/screenshot、/pdf 等快速动作;/sessions/{sessionId}/commands 命令接口面向 AI 代理,通过快照中的 ref 操作元素,README 标注该接口为实验性且默认关闭。

实际应用场景

适用场景

适合需要把“真实浏览器”接入 AI 代理、网页自动化工具、数据抓取或页面截图/PDF 生成流程的开发者。若只是希望使用现成在线服务,可参考官方 Steel Cloud 入口;若需自行控制运行环境,则可用 Docker 或 Node.js 本地运行。普通终端用户如无编程与部署需求,本项目的直接价值有限。

安装与接入

README 给出的主要方式如下:

  • 使用预构建 Docker 镜像:
docker run -p 3000:3000 -p 9223:9223 ghcr.io/steel-dev/steel-browser

README 警告:3000 与 9223 端口没有身份认证,不要暴露到公网或不受信任网络,并指向 SECURITY.md。

  • 使用 Docker Compose 分别运行 API 与 UI:
docker compose up

Mac Silicon 用户需按 README 使用:

DOCKER_DEFAULT_PLATFORM=linux/arm64 docker compose up
  • 贡献者开发模式:
docker compose -f docker-compose.dev.yml up

或加 --build 在改动后重新构建。自定义 host 时,README 要求复制 .env.example 为 .env 并设置 DOMAIN 与 CDP_DOMAIN。

  • Node.js 方式(需本机安装 Chrome):
npm install
npm run dev

README 列出 Linux、macOS、Windows 的 Chrome 可执行文件默认路径,并说明可通过 CHROME_EXECUTABLE_PATH 指定自定义路径。

  • SDK:README 提到 Node 与 Python 的 steel-sdk 包,SDK 基于 REST API,可通过 baseURL(Node)或 base_url(Python)切换 Steel Cloud 与自托管实例。具体安装命令未在本次 README 文本中给出,需查阅对应 SDK 文档。

服务启动后,API 默认在 http://localhost:3000,UI 在 http://localhost:3000/ui,Swagger 文档在 http://localhost:3000/documentation。

使用条件与限制

是否需要部署
需自行准备运行环境,具体要求见正文
是否需要注册
账号和认证要求见正文;未明确说明的项目仍待核验
是否需要 API Key
待核验
费用与额度
费用边界见正文,项目许可不代表模型或托管服务免费
所需权限
待核验
许可证与服务条款
待核验

权限费用与限制

  • 自托管 Docker 实例的 3000 与 9223 端口按 README 说明没有认证,必须限制网络暴露;生产部署前的身份认证与加固方案需另行核验。
  • Steel Cloud 为官方托管入口,其账户、计费、配额与数据区域需以官方页面为准,README 未给出价格。
  • 项目代码以 Apache 2.0 许可公开,但公开仓库不等于模型、代理、云服务或全部功能免费。
  • Commands API 为实验性且默认关闭,启用与否及稳定性需参考原文。
  • README 未说明内置或依赖哪些大模型,也未给出国内模型接入说明;此项待核验。

国内使用情况

网友核验 用户经验分享

与站长实测独立,不代表官方认证或本站已实测。

我要核验
0 位参与者0 份有效分项记录

最近核验:暂无有效核验。参与人数按当前项目有效身份去重;不同核验项分别统计,不合并成用户总结果。仅统计审核通过且未过期的记录。

分项统计、有效期与样本量
核验项目有效人数成功 / 部分 / 失败 / 无法判断成功率最近核验 / 有效期
官方网站访问00 / 0 / 0 / 0样本不足暂无 / 7 天
GitHub 仓库访问00 / 0 / 0 / 0样本不足暂无 / 7 天
安装与运行00 / 0 / 0 / 0样本不足暂无 / 30 天
官方服务国内连接 / MCP 连接00 / 0 / 0 / 0样本不足暂无 / 30 天
国内网络情况00 / 0 / 0 / 0样本不足暂无 / 7 天
国内模型兼容性00 / 0 / 0 / 0样本不足暂无 / 30 天
自定义 API00 / 0 / 0 / 0样本不足暂无 / 30 天
海外服务依赖
00 / 0 / 0 / 0样本不足暂无 / 30 天
海外账号要求
00 / 0 / 0 / 0样本不足暂无 / 30 天
中文界面
00 / 0 / 0 / 0样本不足暂无 / 30 天
客户端兼容性00 / 0 / 0 / 0样本不足暂无 / 30 天
账号及费用信息
00 / 0 / 0 / 0样本不足暂无 / 30 天

成功率 = 成功 ÷(成功 + 部分成功 + 失败);无法判断不计入分母。至少 5 份可判断结果才显示成功率。账号、费用、海外依赖与语言等事实项,成功表示核查结论与资料吻合,具体观察另行统计;不表示免费或没有海外依赖。不同网络、客户端和版本的结果不能直接等同。

最近有效核验

暂无审核通过且未过期的网友核验。欢迎提交真实使用记录。

查看全部有效核验 →

国内实测状态:国内可用性待核验。协议兼容和官方资料说明不等于国内网络可用。

官方网站访问
尚未实测 待核验
GitHub 仓库访问
尚未实测 待核验
官方服务国内连接
尚未实测 待核验
国内网络情况
尚未实测 待核验
国内模型兼容性
尚未实测 待核验
自定义 API
尚未实测 待核验
海外服务依赖
尚未实测 待核验
海外账号要求
尚未实测 待核验
中文界面
尚未实测 待核验
国内最后核验时间
尚未实测

许可与国内使用

仓库 LICENSE 为 Apache License 2.0。该许可只覆盖本仓库代码;Steel Cloud 托管服务、代理网络、第三方 Chrome 组件及可能涉及的外部服务应分别核验其条款。README 未声明服务部署地域或国内访问可用性,国内网络环境下的连接、延迟与合规使用需自行待核验。

项目资料与来源

官方网站 ↗

GitHub 仓库 ↗

官方文档 ↗

字段依据与待核验事项

access:来源确认 · docker run -p 3000:3000 -p 9223:9223 ghcr.io/steel-dev/steel-browser

project_type:来源确认 · The open-source browser API for AI agents & apps.

原始 README(折叠技术参考)
<br />
<p align="center">
<a href="https://steel.dev">
  <img src=".github/assets/steel-logo.svg" alt="Steel Logo" width="72">
</a>
</p>

<h3 align="center"><b>Steel</b></h3>
<p align="center">
    <b>The open-source browser API for AI agents & apps.</b> <br />
    The best way to build live web agents and browser automation tools.
</p>

<div align="center">

[![Commit Activity](https://img.shields.io/github/commit-activity/m/steel-dev/steel-browser?color=yellow)](https://github.com/steel-dev/steel-browser/commits/main)
[![License](https://img.shields.io/github/license/steel-dev/steel-browser?color=yellow)](https://github.com/steel-dev/steel-browser/blob/main/LICENSE)
[![Discord](https://img.shields.io/discord/1285696350117167226?label=discord)](https://discord.gg/steel-dev)
[![Twitter Follow](https://img.shields.io/twitter/follow/steeldotdev)](https://twitter.com/steeldotdev)
[![GitHub stars](https://img.shields.io/github/stars/steel-dev/steel-browser)](https://github.com/steel-dev/steel-browser)

</div>

<h4 align="center">
    <a href="https://app.steel.dev/sign-up" target="_blank">
      Get Started
  </a>  ·
    <a href="https://docs.steel.dev/" target="_blank">
      Documentation
  </a>  ·
  <a href="https://steel.dev/" target="_blank">
      Website
  </a> ·
  <a href="https://github.com/steel-dev/steel-cookbook" target="_blank">
      Cookbook
  </a>
</h4>

<p align="center">
  <img src=".github/assets/demo.gif" alt="Steel Demo" width="800">
</p>

## ✨ Highlights

[Steel.dev](https://steel.dev) is an open-source browser API that makes it easy to build AI apps and agents that interact with the web. Instead of building automation infrastructure from scratch, you can focus on your AI application while Steel handles the complexity.

Under the hood, it manages sessions, pages, and browser processes, allowing you to perform complex browsing tasks programmatically without any of the headaches:

- **Full Browser Control**: Uses Puppeteer and CDP for complete control over Chrome instances -- allowing you to connect using Puppeteer, Playwright, or Selenium.
- **Session Management**: Maintains browser state, cookies, and local storage across requests
- **Proxy Support**: Built-in proxy chain management for IP rotation
- **Extension Support**: Load custom Chrome extensions for enhanced functionality
- **Debugging Tools**: Built-in request logging and a UI to view/debug sessions with
- **Anti-Detection**: Includes stealth plugins and fingerprint management
- **Resource Management**: Automatic cleanup and browser lifecycle management
- **Browser Tools**: Exposes APIs to quick convert pages to markdown, readability, screenshots, or PDFs.

For detailed API documentation and examples, check out our [API reference](https://docs.steel.dev/api-reference) or explore the Swagger UI directly at `http://0.0.0.0:3000/documentation`.

> Steel is in public beta and evolving every day. Your suggestions, ideas, and reported bugs help us immensely. Do not hesitate to join in the conversation on [Discord](https://discord.gg/steel-dev) or raise a GitHub issue. We read everything, respond to most, and love you.

If you love open-source, AI, and dev tools, [we're hiring across the stack](https://jobs.ashbyhq.com/steel)!

### Make sure to give us a star ⭐

<img width="200" alt="Start us on Github!" src=".github/assets/star_img.png">

## 🛠️ Getting Started

The easiest way to get started with Steel is by creating a [Steel Cloud](https://app.steel.dev) account. Otherwise, you can deploy this Steel browser instance to a cloud provider or run it locally.

## ⚡ Quick Deploy

If you're looking to deploy to a cloud provider, we've got you covered.

| Deployment methods                         | Link                                                                                                                                                                                                                            |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Pre-built Docker Image (combined API + UI) | [![Deploy with Github Container Registry](https://img.shields.io/badge/GHCR-478CFF?style=for-the-badge&labelColor=478CFF&logo=github&logoColor=white)](https://github.com/steel-dev/steel-browser/pkgs/container/steel-browser) |
| 1-click deploy to Railway                  | [![Deploy on Railway](https://img.shields.io/badge/Railway-B039CB?style=for-the-badge&labelColor=B039CB&logo=railway&logoColor=white)](https://railway.app/deploy/steelbrowser)                                                 |
| 1-click deploy to Render                   | [![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy)                                                                                                                         |

## 💻 Running Locally

### Docker

The simplest way to deploy/run a Steel browser instance locally is to run the pre-built Docker image:

```bash
# Pull and run the Docker image
docker run -p 3000:3000 -p 9223:9223 ghcr.io/steel-dev/steel-browser
```

> [!WARNING]
> Ports 3000 and 9223 have no authentication. Don't expose them to the public internet or other untrusted networks. See [SECURITY.md](SECURITY.md).

This will start the Steel browser server on port 3000 (http://localhost:3000) and the UI at http://localhost:3000/ui. The 9223 port is used for the console debugger.

You can now create sessions, scrape pages, take screenshots, and more. Jump to the [Usage](#usage) section for some quick examples on how you can do that.

Alternatively, you can run the API and UI separately with docker compose:

```bash
docker compose up
```

For Mac Silicon users, you will need to pass this env flag to the Docker compose command to run the images on the correct platform:

```bash
DOCKER_DEFAULT_PLATFORM=linux/arm64 docker compose up
```

## Quickstart for Contributors

When developing locally, you will need to run the [`docker-compose.dev.yml`](./docker-compose.dev.yml) file instead of the default [`docker-compose.yml`](./docker-compose.yml) file so that your local changes are reflected. Doing this will build the Docker images from the [`api`](./api) and [`ui`](./ui) directories and run the server and UI on port 3000 and 5173 respectively.

```bash
docker compose -f docker-compose.dev.yml up
```

You will also need to run it with `--build` to ensure the Docker images are re-built every time you make changes:

```bash
docker compose -f docker-compose.dev.yml up --build
```

If you run on a custom host, copy [`.env.example`](./.env.example) to `.env` and set `DOMAIN` and `CDP_DOMAIN` to your host. Docker Compose reads the `.env` file automatically.

### Node.js

Alternatively, if you have Node.js and Chrome installed, you can run both the server and the UI directly:

```bash
npm install
npm run dev
```

This will also start the Steel server on port 3000 and the UI on port 5173.

Make sure you have the Chrome executable installed and in one of these paths:

- **Linux**:
  `/usr/bin/google-chrome`

- **MacOS**:
  `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`

- **Windows**:
  - `C:\Program Files\Google\Chrome\Application\chrome.exe` OR
  - `C:\Program Files (x86)\Google\Chrome\Application\chrome.exe`

#### Custom Chrome Executable

If you have a custom Chrome executable or a different path, you can set the `CHROME_EXECUTABLE_PATH` environment variable to the path of your Chrome executable:

```bash
export CHROME_EXECUTABLE_PATH=/path/to/your/chrome
npm run dev
```

For more details on where this is checked look at [`api/src/utils/browser.ts`](./api/src/utils/browser.ts).

## 🏄🏽‍♂️ Usage

> If you're looking for quick examples on how to use Steel, check out the [Cookbook](https://github.com/steel-dev/steel-cookbook).
>
> Alternatively you can play with the [REPL package](./repl/README.md) too `cd repl` and `npm run start`

There are three main ways to interact with the Steel browser API:

1. [Using Sessions](#sessions)
2. [Using the Quick Actions Endpoints](#quick-actions-api)
3. [Using the Commands API](#commands-api)

In these examples, we assume your custom Steel API endpoint is `http://localhost:3000`.

The full REST OpenAPI documentation can be found [on our site](https://docs.steel.dev/api-reference) and on your local Steel instance at `http://localhost:3000/documentation`.

#### Using the SDKs

If you prefer to use the our Python and Node SDKs, you can install the `steel-sdk` package for Node or Python.

These SDKs are built on top of the REST API and provide a more convenient way to interact with the Steel browser API. They are fully typed, and are compatible with both Steel Cloud and self-hosted Steel instances (changeable using the `baseURL` option on Node and `base_url` on Python).

For more details on installing and using the SDKs, please see the [Node SDK Reference](https://github.com/steel-dev/steel-node/blob/main/api.md) and the [Python SDK Reference](https://github.com/steel-dev/steel-python/blob/main/api.md).

### Sessions

The `/sessions` endpoint lets you relaunch the browser with custom options or extensions (e.g. with a custom proxy) and also reset the browser state. Perfect for complex, stateful workflows that need fine-grained control.

Once you have a session, you can use the session ID or the root URL to interact with the browser. To do this, you will need to use Puppeteer or Playwright. You can find some examples of how to use Puppeteer and Playwright with Steel in the docs below:

- [Puppeteer Integration](https://docs.steel.dev/overview/guides/puppeteer)
- [Playwright with Node](https://docs.steel.dev/overview/guides/playwright-node)
- [Playwright with Python](https://docs.steel.dev/overview/guides/playwright-python)

<details open>
<summary><b>Creating a Session using the Node SDK</b></summary>
<br>

```typescript
import Steel from "steel-sdk";

const client = new Steel({
  baseURL: "http://localhost:3000", // Custom API Base URL override
});

(async () => {
  try {
    // Create a new browser session with current API fields
    const session = await client.sessions.create({
      blockAds: true,
      proxyUrl: "user:pass@host:port", // optional
      dimensions: { width: 1280, height: 800 }, // optional
    });
    console.log("Created session with ID:", session.id);
  } catch (error) {
    console.error("Error creating session:", error);
  }
})();
```

</details>

<details>
<summary><b>Creating a Session using the Python SDK</b></summary>
<br>

```python
import os
from steel import Steel

client = Steel(
    base_url="http://localhost:3000",  # Custom API Base URL override
)

try:
    # Create a new browser session with custom options
    session = client.sessions.create(
        block_ads=True,
        proxy_url="user:pass@host:port",  # optional
        dimensions={"width": 1280, "height": 800},  # optional
    )
    print("Created session with ID:", session.id)
except Exception as e:
    print("Error creating session:", e)
```

</details>

<details>
<summary><b>Creating a Session using Curl</b></summary>
<br>

```bash
# Launch a new browser session
curl -X POST http://localhost:3000/v1/sessions \
  -H "Content-Type: application/json" \
  -d '{
    "proxyUrl": "user:pass@host:port",
    "blockAds": true,
    "dimensions": { "width": 1280, "height": 800 }
  }'
```

</details>

#### Selenium Sessions

> **Note:** This integration does not support all the features of the CDP-based browser sessions API.

For teams with existing Selenium workflows, the Steel browser provides a drop-in replacement that adds enhanced features while maintaining compatibility. You can simply use the `isSelenium` option to create a Selenium session:

```typescript
// Using the Node SDK
const session = await client.sessions.create({ isSelenium: true });
```

```python
# Using the Python SDK
session = client.sessions.create(is_selenium=True)
```

<details>
<summary><b>Using Curl</b></summary>
<br>

```bash
# Launch a Selenium session
curl -X POST http://localhost:3000/v1/sessions \
  -H "Content-Type: application/json" \
  -d '{
    "isSelenium": true
  }'
```

</details>
<br>

The Selenium API is fully compatible with Selenium's WebDriver protocol, so you can use any existing Selenium clients to connect to the Steel browser. **For more details on using Selenium with Steel, refer to the [Selenium Docs](https://docs.steel.dev/overview/guides/selenium).**

### Quick Actions API

The `/scrape`, `/screenshot`, and `/pdf` endpoints let you quickly extract clean, well-formatted data from any webpage using the running Steel server. Ideal for simple, read-only, on-demand jobs:

<details open>
<summary><b>Scrape a Web Page</b></summary>
<br>

Extract the HTML content of a web page.

```bash
# Example using the Actions API
curl -X POST http://0.0.0.0:3000/v1/scrape \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "delay": 1000
  }'
```

</details>

<details>
<summary><b>Take a Screenshot</b></summary>
<br>

Take a screenshot of a web page.

```bash
# Example using the Actions API
curl -X POST http://0.0.0.0:3000/v1/screenshot \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "fullPage": true
  }' --output screenshot.png
```

</details>

<details>
<summary><b>Download a PDF</b></summary>
<br>

Download a PDF of a web page.

```bash
# Example using the Actions API
curl -X POST http://0.0.0.0:3000/v1/pdf \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com"
  }' --output output.pdf
```

</details>

### Commands API

The `/sessions/{sessionId}/commands` endpoint drives the session's browser with high-level commands. It is built for AI agents: take a snapshot of the page, then act on elements by the refs in the snapshot. One request can run several commands and return the new page state.

The commands API is experimental and off by default. Start the server with `ENABLE_COMMANDS_API=true` to turn it on.

```bash
curl -X POST http://localhost:3000/v1/sessions/$SESSION_ID/commands \
  -H "Content-Type: application/json" \
  -d '{
    "commands": [
      { "command": "navigate", "url": "https://example.com" },
      { "command": "snapshot", "interactive": true }
    ]
  }'
```

The response holds the snapshot, for example `- link "Learn more" [ref=e1]`. Send `{ "command": "click", "target": "e1" }` to click the link. See the [Commands API docs](./docs/COMMANDS.md) for every command, the response format, and error codes.

## Get involved

Steel browser is an open-source project, and we welcome contributions!

- Questions/ideas/feedback? Come hangout on [Discord](https://discord.gg/steel-dev)
- Found a bug? Open an issue on [GitHub](https://github.com/steel-dev/steel-browser/issues)

## License

[Apache 2.0](./LICENSE)

---

Made with ❤️ by the Steel team.
历史前置条件说明(补充参考)

需要 Docker 或 Node.js 环境;Node.js 方式需本机安装 Chrome 并位于 README 所列路径或设置 CHROME_EXECUTABLE_PATH。自托管 Docker 默认 3000/9223 端口无认证,不应暴露公网。Steel Cloud 账户与费用需向官方核验。README 未说明所需大模型或 API Key,内置模型与国内模型支持情况待核验。

项目来源与清单版权许可

https://github.com/steel-dev/steel-browser

整理来源:https://github.com/slavakurilyak/awesome-ai-agents

清单版权与许可:

MIT License

Copyright (c) 2024 Slava Kurilyak

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.