Агент запускается, но непонятно, где проверять его действия, как поймать ошибку и кто должен подтверждать запись в проект.

Быстрое решение: для ежедневной работы выбирайте Web, для повторяемых скриптов и CI — Headless, а ACP подключайте только тогда, когда сессиями должен управлять редактор или внешняя агентная система.

Кому подходит этот разбор

Материал предназначен для независимых разработчиков, которым нужен наименее затратный в сопровождении вход в DeepSeek Harness, для инженеров автоматизации, переводящих задачи в повторяемые команды, и для платформенных команд, оценивающих ACP и управление несколькими точками доступа.

Последняя проверка выполнена 18 августа 2026 года. Команды и поведение сверены с текущими официальным репозиторием DeepSeek Harness, руководством пользователя, справочником CLI и руководством разработки. Проект находится в режиме developer preview, поэтому команды, параметры и совместимость могут измениться.

Ответственность пользователя и системы

Главная ошибка при выборе DeepSeek Harness — сравнивать Web, Headless и ACP как три варианта одного интерфейса. На практике они передают разные обязанности оператору:

  • Web оставляет человеку наблюдение за планом, инструментами, изменениями и запросами разрешений.
  • Headless переносит ответственность за входные параметры, проверку результата, сохранение лога и повторный запуск в скрипт или CI.
  • ACP передаёт управление сессией внешнему клиенту, поэтому дополнительно требуются согласование протокола, жизненного цикла и прав.

Модель при этом не становится автоматически сильнее из-за Web или ACP. Разница заключается в том, сколько контекста о ходе работы получает человек и какая часть контроля уходит в окружающую систему.

Для ежедневного написания кода разумно начать с Web. Если задача уже имеет чёткие границы — например, проверить проект, сформировать отчёт или выполнить тестовый набор, — переходите к Headless. Если же сессию должен создавать редактор, оркестратор или другой агент, появляется основание для ACP.

Web для видимой ежедневной работы

Web подходит независимому разработчику или небольшому техническому составу, когда важен не только финальный файл, но и путь к нему. В интерфейсе проще заметить, что агент выбрал не ту рабочую область, собирается выполнить лишнюю команду или интерпретировал задачу шире, чем предполагалось.

Для запуска через опубликованный пакет используется команда:

npx @deepseek-ai/dsh web

При работе из исходного дерева применяется следующий вариант:

pnpm install
pnpm run build
pnpm dsh web

В официальной документации локальный Web UI запускается на http://127.0.0.1:3080. Этот адрес не следует воспринимать как готовую удалённую публикацию: при доступе через сеть потребуется отдельно настроить безопасный туннель, сетевую политику и контроль учётных данных. (официальный репозиторий DeepSeek Harness)

Что Web показывает лучше CLI

Web особенно полезен, когда:

  1. Требуется просмотреть план до начала изменений.
  2. В проекте много неоднозначных файлов или незнакомая структура.
  3. Нужно вручную подтверждать потенциально опасные операции.
  4. Важно видеть различия между состоянием до и после работы.
  5. Задача выполняется нерегулярно, поэтому поддержка отдельного скрипта не окупается.

Поэтому на вопрос о том, чем Web отличается от Headless, нельзя отвечать только словами «есть интерфейс» или «нет интерфейса». Web сохраняет контроль в поле зрения человека, тогда как Headless делает результат пригодным для обработки другой программой.

У Web есть и скрытые издержки. Человек должен находиться рядом с сессией, следить за продолжением после ошибки и самостоятельно сохранять нужные артефакты. Если браузерная вкладка закрыта или удалённая машина перезапущена, восстановление зависит от того, какие данные сохраняет конкретная версия профиля.

Рабочую область также необходимо определить заранее. В чистом Web UI сессия не готова к работе, пока не выбрана директория проекта. При удалённом запуске следует установить, какая папка считается рабочей, какие файлы туда монтируются и кто имеет право их изменять.

Headless для повторяемых задач

Headless отвечает на другой вопрос: можно ли запустить задачу без оператора и определить результат по выводу, журналу и коду завершения. В CLI официально предусмотрен запуск через профиль:

dsh --profile headless "summarize this workspace"

Из исходного дерева команда выглядит так:

pnpm dsh --profile headless "summarize this workspace"

Справочник CLI описывает Headless как запуск новой сохранённой сессии с выводом финального ответа и завершением процесса. Профиль headless автоматически инициализируется при первом использовании из поставляемого шаблона. (справочник CLI DeepSeek Harness)

Что должен принять на себя скрипт

Headless нельзя считать «Web без окна». В автоматическом режиме необходимо заранее определить:

  • откуда берётся задача: аргумент командной строки, файл, переменная окружения или запись из очереди;
  • какая директория является рабочей;
  • какие переменные окружения разрешены;
  • где сохраняются стандартный вывод и поток ошибок;
  • какой результат считается успешным;
  • сколько раз разрешён повторный запуск;
  • как отличить ошибку агента от ошибки инфраструктуры.

Базовая оболочка может выглядеть так:

#!/usr/bin/env bash
set -Eeuo pipefail

workspace="${1:?Укажите рабочую директорию}"
log_file="${2:-dsh-run.log}"

cd "$workspace"

if dsh --profile headless "Проверьте тесты и подготовьте краткий отчёт" \
    >"$log_file" 2>&1; then
  printf '%s\n' "Задача завершена"
else
  code=$?
  printf 'Задача завершилась с кодом %s\n' "$code" >&2
  exit "$code"
fi

Этот пример не решает вопрос качества результата. Он только делает ошибку видимой для вызывающей системы. Для реального CI следует дополнительно проверять наличие ожидаемого файла, формат отчёта, состояние рабочей копии и отсутствие незапланированных изменений.

Вопрос о том, можно ли вызывать DeepSeek Harness из скрипта, имеет практический ответ: да, если профиль, команда и окружение зафиксированы, а вызывающая система умеет обработать код возврата и журнал. Сам факт запуска из shell ещё не превращает задачу в надёжную автоматизацию.

Границы автоматического запуска

Headless плохо подходит для задач, где результат нельзя проверить автоматически. Если агент должен изменить схему базы данных, удалить файлы, обновить платёжную конфигурацию или отправить код в общий репозиторий, одного успешного завершения процесса недостаточно.

В таких сценариях внешняя система должна добавить хотя бы один механизм контроля:

  • тестовую рабочую область;
  • ручное подтверждение перед записью;
  • ограничение разрешённых команд;
  • проверку diff;
  • блокировку запуска при изменении критичных файлов;
  • отдельный этап публикации после проверки.

Параметры CLI следует проверять именно в текущем справочнике, а не переносить из старого скрипта вслепую. Например, документация отдельно поясняет, что dsh --profile web --port 8080 передаёт --port Web-приложению, а не самому загрузчику. Такая граница важна при переносе интерактивного запуска в автоматизированную среду.

ACP для внешнего управления сессиями

ACP нужен не потому, что он «современнее» Web или Headless, а потому, что другой клиент должен программно создать сессию, отправить задачу и получить структурированный поток событий. Это сценарий редактора, внутренней платформы разработки или верхнего агентного слоя.

В руководстве разработки ACP-демо запускается из исходного дерева:

pnpm run demo:acp

Официальное описание указывает, что ACP automation server предоставляет новые агентские сессии через JSON-RPC по stdio и требует DEEPSEEK_API_KEY. Web и ACP в таком сценарии выполняют разные роли: первый ориентирован на человека, второй — на внешнего клиента, которому необходимо управлять сессией программно.

Проверки перед интеграцией

Вопрос о том, когда нужен ACP, лучше решать по архитектуре вызывающей системы, а не по желанию получить «более гибкий интерфейс». Перед подключением проверьте четыре границы.

Совместимость клиента. Клиент должен поддерживать именно тот вариант ACP, который реализует текущая версия DeepSeek Harness. Нельзя считать совместимость доказанной только потому, что обе системы используют JSON-RPC. Следует проверить инициализацию, создание сессии, передачу запроса, потоковые обновления и корректное завершение.

Жизненный цикл. В Web сессией управляет интерфейс, а в Headless — один процесс. В ACP жизненный цикл становится распределённым: внешний клиент создаёт сессию, сервер выполняет действия, клиент может отключиться, повторить запрос или отменить операцию. Заранее определите владельца тайм-аута, повтора и очистки зависших процессов.

Передачу ошибок. Интеграция должна отличать ошибку протокола, отказ авторизации, ошибку рабочей области, запрет операции и сбой модели. Если всё превращается в одну строку «agent failed», оператор не поймёт, нужно ли повторить запрос, обновить права или остановить конвейер.

Отображение разрешений. Права Web нельзя автоматически считать правами ACP. Внешний клиент может не отображать тот же запрос подтверждения или иначе обрабатывать опасные операции. Для ACP требуется явная карта: какие инструменты доступны, какие действия требуют согласия и где хранится доказательство этого согласия.

Единые правила для небольшой команды

Небольшой команде не обязательно заставлять всех работать через один вход. Разработчику может быть удобен Web, инженеру сборки — Headless, а внутреннему редактору — ACP. Проблема начинается тогда, когда разные входы используют разные правила.

Централизованно следует закрепить:

  • модель и маршрут API;
  • рабочие директории;
  • набор разрешённых инструментов;
  • переменные окружения и способ хранения ключей;
  • версии плагинов и профилей;
  • формат логов;
  • критерии успешного завершения;
  • правила сохранения diff и артефактов;
  • процедуру отката после обновления.

Личными можно оставить размер окна, способ отображения плана, сочетания клавиш и удобный интерфейс запуска — пока эти настройки не меняют права и результат проверки.

Конфигурация модели также требует дисциплины. Руководство пользователя описывает хранение ключа через ссылку на учётные данные, а не в виде открытого значения после сохранения. Изменение модели применяется к следующему запросу без обязательного перезапуска Web-сервера. Для командной эксплуатации это означает, что необходимо отдельно контролировать хранилище секретов и понимать, какие уже созданные сессии сохраняют собственную модель. (руководство по провайдерам и моделям)

Эксплуатация и восстановление

У каждой схемы есть собственные скрытые затраты.

Web требует постоянно доступного процесса, удалённого доступа к интерфейсу и ручного контроля. Если Web запускается на удалённой машине, понадобятся политика сетевого доступа, защита сессии и понятный способ восстановления после перезапуска.

Headless проще встроить в CI, но сложность переезжает в обвязку. Инженер должен писать обработку кодов завершения, логику повторов, фиксацию артефактов и проверки результата. Ошибка в shell-скрипте может быть не менее критичной, чем ошибка агента.

ACP добавляет ещё один протокол и ещё один объект диагностики. Неполадка может находиться в редакторе, JSON-RPC-транспорте, сервере сессий, разрешениях, рабочем пространстве или API. Для постоянной эксплуатации потребуются проверка состояния, ограничение числа параллельных сессий и политика завершения зависших процессов.

Среда сборки также не должна оставаться неявной. В руководстве разработки указаны Node.js 22.19+ и 24+, Corepack с закреплённым pnpm@11.7.0, Git 2.26 или новее; для Python SDK отдельно указаны Python 3.10 или новее и macOS 14 или новее на arm64 среди поддерживаемых вариантов. Эти параметры не являются обещанием производительности, но задают границу воспроизводимой установки. (требования среды разработки)

Проверка на одной базовой задаче

Выбор режима лучше делать не по списку функций, а по одной безопасной задаче, которая отражает будущую нагрузку. Подойдёт проверка тестов, составление отчёта или анализ структуры проекта без публикации изменений.

Порядок проверки:

  1. Зафиксируйте версию исходного дерева и окружения.
  2. Подготовьте отдельную рабочую директорию без секретов и критичных данных.
  3. Сформулируйте одинаковое задание для Web, Headless и ACP.
  4. Запишите начальные файлы, переменные окружения и разрешения.
  5. Запустите Web и отметьте, где появляется план, запрос разрешения и итоговый diff.
  6. Запустите Headless с сохранением stdout и stderr в отдельные файлы.
  7. Запустите ACP через текущую официальную демонстрационную команду и проверьте создание, выполнение и завершение сессии.
  8. Искусственно вызовите безопасную ошибку — например, укажите отсутствующий файл — и зафиксируйте, как каждый режим её сообщает.
  9. Перезапустите процесс после остановки и проверьте, можно ли восстановить состояние без ручного редактирования базы или журнала.
  10. Запишите итог как «основной вход», «резервный вход» и «запрещённые сценарии».

Чек-лист принятия решения:

  • [ ] Для Web выбран конкретный рабочий каталог и проверен запрос разрешений.
  • [ ] Для Headless определён код успешного завершения и обязательный артефакт.
  • [ ] stdout и stderr сохраняются независимо друг от друга.
  • [ ] Повторный запуск не создаёт неконтролируемые дублирующие изменения.
  • [ ] Для опасных операций есть тестовая среда или внешний gate.
  • [ ] Для ACP проверены инициализация, новая сессия, ответ и отмена.
  • [ ] Ошибки авторизации, протокола и рабочего пространства различаются.
  • [ ] Модель, права, плагины и формат логов одинаковы во всех входах.
  • [ ] После обновления можно вернуться на предыдущую версию.
  • [ ] В документации указано, какой режим запрещён для каждого критичного сценария.

Матрица выбора режима

Задача или ответственность Основной режим Резервный режим Что нельзя оставлять без проверки
Ежедневная разработка с наблюдением за действиями Web Headless для простых проверок Рабочая область, разрешения, удалённый доступ
Одноразовый отчёт или повторяемая команда Headless Web для диагностики Входные параметры, stdout, stderr, код завершения
CI и регламентная автоматизация Headless Web для воспроизведения сбоя Повторы, артефакты, тестовый gate
Управление из редактора или платформы ACP Headless для резервного запуска Совместимость протокола, жизненный цикл, ошибки
Небольшая команда с разными ролями Web + Headless ACP по необходимости Единые модель, права, плагины и аудит
Постоянный сервис с параллельными сессиями ACP после пилота Headless для фоновых задач Проверка состояния, лимиты ресурсов, восстановление

Практическое правило можно сформулировать так: если оператор должен принимать решения по ходу работы, выбирайте Web; если решение уже принято и осталось выполнить проверяемую процедуру, выбирайте Headless; если решение принимает другая программа, оценивайте ACP.

Удалённая среда после выбора режима

После выбора режима становится заметно, где запускается сам DeepSeek Harness. Локальный ноутбук удобен для Web, но его сон, смена сети и занятость рабочей директории мешают непрерывным задачам. Обычный удалённый сервер удобен для Headless, но часто хуже подходит для интерактивного Web-сценария: приходится отдельно решать вопросы графического доступа, хранения проектов, прав и восстановления сессии.

В таких случаях удалённая Mac-среда может быть практичнее, если требуется постоянный рабочий стол, доступ к инструментам macOS и возможность подключаться к одному окружению с разных устройств. При этом аренда не заменяет проверку прав, логов и отката: она только снимает часть нагрузки по содержанию физического компьютера, сетевой доступности и смене локального оборудования. Для оценки вариантов можно начать с обзора RUVCLOUD, а перед запуском проверить условия заказа удалённой Mac-среды.

Если задача состоит в длительном непрерывном CI с предсказуемой нагрузкой, собственный Mac может оказаться выгоднее аренды. Если же требуется временная площадка для Web-сессий, ACP-пилота, проверки удалённого доступа или сравнения нескольких вариантов без покупки оборудования, аренда Mac через RUVCLOUD обычно оставляет меньше операционных обязательств: не нужно заранее приобретать отдельный компьютер, самостоятельно поддерживать его доступность и переносить рабочую среду после аппаратного сбоя. Начинать стоит с изолированного тестового проекта, а не с подключения production-репозитория.