Инструкция: Использовать Steel Browser
Trigger: пользователь просит открыть сайт, сделать скриншот, заполнить форму, собрать данные со страницы
Зачем
Steel.dev — облачный браузер. Агент создаёт удалённую сессию, подключается по CDP через Playwright и управляет браузером программно. Не нужен локальный Chrome. Можно наблюдать за сессией в реальном времени.
MCP-инструменты (приоритет)
Если доступен MCP-сервер steel_browser — используй его инструменты в первую очередь:
steel_browser: navigate { url: "https://example.com" }
steel_browser: screenshot {}
steel_browser: click { selector: "button#submit" }
steel_browser: type { selector: "input[name=q]", text: "запрос" }
steel_browser: scroll_down {}
steel_browser: go_back {}
MCP сам управляет сессией. Bash-шаги ниже не нужны когда MCP доступен.
Наблюдение за браузером
Пока сессия активна пользователь может наблюдать в реальном времени:
- Локальный Steel:
$STEEL_VIEWER_URL(если задан) или$STEEL_BROWSER_URL/ui- Логин и пароль — спроси у администратора
- Облако:
https://app.steel.dev/sessions/{SESSION_ID}
Отправь ссылку пользователю если задача долгая.
Bash-шаги (если MCP недоступен)
- Создай сессию и сохрани SESSION_ID:
SESSION_JSON=$(curl -fsSL -X POST "https://api.steel.dev/v1/sessions" \
-H "Steel-Api-Key: $STEEL_API_KEY" \
-H "Content-Type: application/json" -d '{}')
SESSION_ID=$(echo "$SESSION_JSON" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Session: $SESSION_ID"
echo "Viewer: https://app.steel.dev/sessions/$SESSION_ID"
- Выполни задачу через Node.js + Playwright:
node - <<JS
const { chromium } = require('playwright-core');
(async () => {
const browser = await chromium.connectOverCDP(
"wss://connect.steel.dev?apiKey=" + process.env.STEEL_API_KEY + "&sessionId=" + process.env.SESSION_ID
);
const page = await browser.newPage();
await page.goto('URL_ЗДЕСЬ', {timeout: 15000});
console.log('title:', await page.title());
// await page.screenshot({ path: '/opt/data/screenshot.png', fullPage: true });
await browser.close();
})().catch(e => { console.error(e.message); process.exit(1); });
JS
- Освободи сессию после работы:
curl -fsSL -X POST "https://api.steel.dev/v1/sessions/$SESSION_ID/release" \
-H "Steel-Api-Key: $STEEL_API_KEY" > /dev/null && echo "Session released"
- Залогируй в daily что был использован Steel browser
Публичный vs локальный Steel
Посмотри на STEEL_BROWSER_URL в env:
-
Нет переменной или URL ведёт на api.steel.dev → облачный публичный инстанс.
- Используй как обычно, но не оставляй сессии открытыми после работы.
- Не вводи там свои пароли, токены, личные данные — инфраструктура чужая.
- Всегда освобождай сессию сразу после задачи.
-
URL содержит
.2pub.meили локальный IP → это твой персональный Steel.- Безопасно держать сессии дольше (например, остаться залогиненным между задачами).
- CDP-адрес:
$STEEL_BROWSER_URLвместоwss://connect.steel.dev. - API-эндпоинты:
$STEEL_BROWSER_URL/v1/sessionsвместоhttps://api.steel.dev/v1/sessions.
Пример подключения к локальному Steel через CDP:
node - <<JS
const { chromium } = require('playwright-core');
(async () => {
const baseUrl = process.env.STEEL_BROWSER_URL; // e.g. http://157.x.x.x:14003
const res = await fetch(baseUrl + '/v1/sessions', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'steel-api-key': process.env.STEEL_API_KEY },
body: '{}'
});
const { id: sessionId } = await res.json();
const wsUrl = baseUrl.replace('http', 'ws') + '?sessionId=' + sessionId;
const browser = await chromium.connectOverCDP(wsUrl);
const page = await browser.newPage();
await page.goto('URL_ЗДЕСЬ', { timeout: 15000 });
console.log('title:', await page.title());
await browser.close();
// освободи сессию если не нужна дальше
})().catch(e => { console.error(e.message); process.exit(1); });
JS
Важно
STEEL_API_KEYдолжен быть в env агента- Сессия живёт 5 минут без активности — освобождай после работы (кроме случаев когда нужен persistent login на своём инстансе)
- Для простого парсинга текста — лучше использовать обычный HTTP запрос, Steel нужен для динамических сайтов, кликов, форм, скриншотов