Долгое время «пользоваться программой» для модели означало обвязку из инструментов: функция поиска здесь, запрос в базу там, а при достаточной смелости ещё и скрипт на Playwright. Computer use меняет схему. Вы отдаёте Claude скриншот настоящего экрана и небольшой набор действий (клик, ввод текста, скролл, нажатие клавиши), а модель управляет интерфейсом так, как это делал бы человек. В 2026 году, на текущем поколении Sonnet и Opus 4.8, это работает достаточно стабильно для узких продакшен-сценариев. Дальше разберём механику, границы применимости, безопасное развёртывание и реальную цену.
Механика: как работает цикл computer use
Принцип простой. На каждом ходу происходит одно и то же:
- Ваш харнесс (код-обвязка) снимает скриншот виртуального дисплея.
- Скриншот уходит в Claude как изображение, вместе с целью пользователя и историей уже выполненных действий.
- Claude отвечает вызовом инструмента:
computerс действием вроде{ action: "left_click", coordinate: [834, 412] }, а такжеkey,type,screenshot,scrollи другими. - Харнесс выполняет действие в ОС, снимает новый скриншот, и цикл начинается заново.
Сама модель на вашей машине не работает. Она рассуждает над пикселями и возвращает низкоуровневые намерения. Поэтому подход годится для старого софта без API, для сайтов, которые борются со скрейперами, и для внутренних инструментов, которые никто не станет оборачивать в REST.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: process.env.CODEXKEY_API_KEY!,
baseURL: "https://api.codexkey.ru/v1",
});
const response = await client.beta.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
tools: [
{
type: "computer_20250124",
name: "computer",
display_width_px: 1280,
display_height_px: 800,
display_number: 1,
},
],
betas: ["computer-use-2025-01-24"],
messages: [
{ role: "user", content: "Открой дашборд заказов и выгрузи CSV за сегодня." },
],
});
Когда computer use оправдан, а когда нет
Это инструмент с острым краем. Окупается он в таких случаях:
- Легаси без API. Внутренние ERP, терминалы мейнфреймов, портал поставщика образца 2009 года. Любой случай, где настоящая интеграция обойдётся дороже самой работы.
- Сайты за логином, которые блокируют скрейперы. Селектор Playwright там ломается раз в неделю, а модель, читающая готовую страницу, держится заметно устойчивее.
- Сквозные тесты на визуальные регрессии. Речь не о юнит-уровне, а о вопросе «работает ли чекаут после редизайна корзины».
- Замена RPA. Большинство ботов на UiPath и Automation Anywhere остаётся хрупкими скриптами с кликами по координатам. Computer use подменяет их системой, которая подстраивается, когда кнопка переезжает.
Уйти стоит в таких случаях:
- Есть нормальный API. Computer use дороже прямого вызова в 100-1000 раз.
- Путь нагруженный и чувствительный к задержке. Каждый шаг это round-trip с токенизацией изображения.
- Ошибочный клик по «не той» кнопке обходится катастрофически: движение денег в проде, изменения инфраструктуры, удаление данных. Здесь нужен API с явными allow-листами.
Песочница: Docker + xvfb + Playwright
Запускать computer use против настоящего рабочего стола нельзя. В проде работает одноразовый Docker-контейнер с виртуальным фреймбуфером и браузером, которым управляет модель:
FROM mcr.microsoft.com/playwright:v1.50.0-jammy
RUN apt-get update && apt-get install -y \
xvfb x11vnc fluxbox imagemagick && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
ENV DISPLAY=:99
CMD ["bash", "-c", "Xvfb :99 -screen 0 1280x800x24 & fluxbox & node harness.js"]
Внутри контейнера цикл ведёт ваш харнесс. Он запускает Chromium через Playwright, снимает скриншоты страницы (или командой import из ImageMagick), отправляет их Claude, разбирает вызов инструмента и выполняет действие через page.mouse, page.keyboard и навигационные примитивы. Контейнер должен жить недолго: одна задача, один контейнер, жёсткий таймаут, затем уничтожение. Так задаётся ваш blast radius: всё, что модель способна испортить, остаётся внутри контейнера.
Минимальный харнесс: паттерн цикла
Рабочий каркас короткий:
async function runTask(goal: string, maxSteps = 30) {
const messages: Anthropic.MessageParam[] = [
{ role: "user", content: goal },
];
for (let step = 0; step < maxSteps; step++) {
const screenshot = await takeScreenshot();
messages.push({
role: "user",
content: [
{ type: "image", source: { type: "base64", media_type: "image/png", data: screenshot } },
{ type: "text", text: `Шаг ${step}. Что дальше?` },
],
});
const res = await client.beta.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
tools: computerTools,
betas: ["computer-use-2025-01-24"],
messages,
});
if (res.stop_reason === "end_turn") return "done";
const toolUse = res.content.find((c) => c.type === "tool_use");
if (!toolUse) return "stuck";
await executeAction(toolUse.input);
messages.push({ role: "assistant", content: res.content });
}
throw new Error("превышен max_steps");
}
Три детали неочевидны. Прошлые ходы ассистента нужно переносить вперёд: без истории действий Claude начнёт повторяться. Лимит max_steps обязателен, потому что убежавший цикл дороже любого другого сбоя. И каждый скриншот вместе с действием стоит писать на диск: когда что-то сломалось, трассировка остаётся единственным отладчиком.
Приёмы надёжности, которые дают эффект
Месяцы работы таких циклов в проде приводят к одним и тем же практикам:
- Дробите задачу без жалости. Запрос «обработай таблицу из 50 строк» проваливается. Цепочка «открой строку 1, скопируй email, вставь в форму, отправь, вернись к таблице» срабатывает, и её запускают 50 раз.
- Повторяйте цель на каждом ходу. Фраза «твоя цель: выгрузить CSV» в user-сообщении на каждом шаге удерживает фокус модели, пока страница меняется.
- Снимайте скриншот на каждом шаге, даже если модель его не просила. Иногда модель действует по устаревшей памяти. Свежая картинка на каждый ход убирает этот класс ошибок.
- Ставьте жёсткий потолок по шагам и по времени. Лимит в 30 шагов и 5 минут на задачу дёшево ловит бесконечные циклы.
- Проверяйте результат вторым вызовом модели. Когда цикл закончился, снимите последний скриншот и спросите Sonnet: «задача выполнена? Ответь да или нет одной строкой». Выйдет недорогой сигнал вроде CI.
Сколько это стоит на самом деле
Здесь интуиция чаще всего подводит. Основная доля расходов приходится на vision-токены, а не на output. PNG 1280×800 занимает примерно 1500-2000 input-токенов, в зависимости от уровня детализации. Задача из 30 шагов с одним скриншотом на шаг даёт 45 000-60 000 input-токенов ещё до того, как модель сказала хоть слово. Output на этом фоне невелик: пара вызовов инструмента за шаг.
На практике аккуратно поставленная задача обходится в несколько центов, редко больше пары десятков центов за весь прогон. Точные ставки зависят от модели, актуальные цифры смотрите в заметках о ценах. Длинные исследовательские прогоны на топовых моделях при небрежности уходят за $1+. Помогают два рычага: агрессивный prompt caching для системного промпта и схем инструментов, а также понижение разрешения скриншотов до минимума, который задача терпит. Часто хватает 1024×640.
Типичные сбои и что с ними делать
Чаще всего встречаются галлюцинированные координаты: Claude кликает в (420, 380), а кнопка стоит в (430, 395). Надёжное решение: повтор с сеткой координат. После неудачного действия нарисуйте на скриншоте бледную сетку и задайте вопрос ещё раз. Модель использует сетку как визуальный якорь, и вторая попытка почти всегда попадает.
Другие повторяющиеся проблемы:
- Устаревший скриншот после навигации. Перед следующим снимком дождитесь
networkidleили короткогоsetTimeout. - Модальные окна, которые модель не замечает. Добавьте в системный промпт строку: «если видишь попап, закрой его, прежде чем продолжать».
- Капчи. Остановитесь. Автоматизировать их не нужно. Аккуратно завершите задачу и передайте её в очередь для человека.
Сравнение с OpenAI Operator
Operator от OpenAI и computer use от Anthropic к 2026 году пришли к похожей схеме: цикл «скриншот на входе, действие на выходе» в браузерной песочнице. На практике различий два:
- Осторожность. Claude заметно консервативнее с разрушительными действиями: перед удалением, оплатой или отправкой он остановится и спросит. В проде это плюс, в исследовательских задачах временами раздражает.
- Глубина рассуждения в многошаговых планах. Sonnet 5 с extended thinking выигрывает там, где нужно держать в голове план из 10+ шагов через переходы между страницами.
Выбирайте тот, чей харнесс лучше встраивается в ваш стек. Разрыв в возможностях небольшой, а разница в стоимости интеграции ощутимая.
Итог
К 2026 году computer use стал рабочим инструментом, которому наконец можно доверять в узких, чётко очерченных задачах. Заменой нормальным API он не служит и для нагруженных горячих путей не подходит. Зато для длинного хвоста случаев вида «у системы нет API и не будет» он тихо превратился в самый практичный вариант. Изолируйте его жёстко, ограничивайте шаги, логируйте всё и обращайтесь с ним как со стажёром без присмотра. За пару центов на задачу вы получите много пользы.