Блог

Headless-режим DeepSeek Harness: фоновый агент для кода через переменные окружения

Краткий ответ

DeepSeek Harness (dsh) — это не только Web UI по адресу http://127.0.0.1:3080. Он поддерживает и headless-агента для кода: без браузера, только DEEPSEEK_API_KEY в переменных окружения или в .env — и агент в фоне сам читает файлы, выполняет команды и правит код.

Это подходит для автоисправлений в CI, задач по расписанию и скриптовых массовых рефакторингов — для всего, где за процессом никто не следит, а агент должен довести работу до конца.

Что нужно для headless-режима

Headless-режиму нужен только работающий бэкенд с моделью. Минимальная конфигурация:

bash
export DEEPSEEK_API_KEY="sk-teamo-your-key"
export DEEPSEEK_BASE_URL="https://api.teamorouter.com/v1"

Ключ можно положить и в файл .env в корне репозитория (добавьте его в .gitignore):

bash
DEEPSEEK_API_KEY=sk-teamo-your-key

DEEPSEEK_BASE_URL в .env писать нельзя: dsh 0.2.x тогда отказывается запускаться — эту переменную может задать только окружение, из которого запускается dsh, поэтому её нужно экспортировать (export). Мы проверили это на dsh 0.2.1-rc.3 2 ноября 2026 года: с ключом в .env в корне репозитория и экспортированной DEEPSEEK_BASE_URL запросы дошли до шлюза TeamoRouter.

После настройки headless-агент вызывает инструменты точно так же, как агент в Web UI, — только без визуального интерфейса, а результат возвращает через stdout или файл отчёта.

С этими двумя переменными dsh 0.2.x работает через встроенного провайдера DeepSeek: модель по умолчанию — deepseek-flash, а DEEPSEEK_DEFAULT_MODEL не действует. Чтобы headless-агент по умолчанию работал на deepseek-v4-pro или на других моделях TeamoRouter (в том числе на бесплатной V4 Flash — deepseek-v4-flash-free), добавьте TeamoRouter как провайдера — см. статью «Подключаем DeepSeek Harness к TeamoRouter».

Разовый запуск: задача, которая выполняется и завершается

Самый распространённый вариант headless-режима — разовый запуск: вы даёте задачу, агент отрабатывает её до конца (или до лимита бюджета) и завершается:

bash
dsh headless "Fix the N+1 query in src/services/reporting.py and make the related tests pass"

Агент читает файлы → разбирается → правит → запускает тесты → исправляет по результатам — и так до готовности. Такая модель «выполнить до конца» идеально ложится на шаги CI: поручите ему детерминированные задачи вроде «исправить ошибки линтера» или «добавить тесты» — и это будет быстрее, чем делать их вручную.

Сервер автоматизации ACP: постоянные headless-сессии

Более продвинутый путь — сервер автоматизации ACP: он отдаёт новые агентные сессии по JSON-RPC через stdio и тоже требует DEEPSEEK_API_KEY. Это подходит для повторяющихся, скриптовых вызовов агента, когда не хочется каждый раз порождать новый процесс.

Как выбрать между двумя вариантами:

Форма Для чего подходит Особенность
Разовый запуск CI, задачи по расписанию Выполнение до конца, простота
Сервер ACP Долгоживущая интеграция, скриптовые вызовы Постоянная работа, переиспользование сессий

Типичные проблемы

Headless-агент не запускается или сообщает, что нет API-ключа?

Убедитесь, что DEEPSEEK_API_KEY экспортирован в той же оболочке, либо что .env лежит в корне репозитория и загружается. Сначала проверьте командой echo $DEEPSEEK_API_KEY.

Как понять, что headless-задача завершилась?

Следите за кодом возврата и stdout. Разовые запуски завершаются по окончании работы; сессии ACP выдают явное событие завершения сессии.

Может ли фоновый запуск выйти из-под контроля?

Да — если границы задачи размыты. В headless-режиме нет интерфейса, чтобы прервать агента на лету, поэтому: задавайте чёткие границы задачи, ограничивайте рабочий каталог и по возможности ставьте лимит бюджета. Не позволяйте агенту свободно бродить по большому репозиторию.

Использует ли headless-режим те же инструменты, что и Web UI?

Да. Инструменты берутся из тех же плагинов и пресетов; разница только в визуальном интерфейсе. Результат в headless-режиме возвращается через stdout или отчёт.

Можно ли запускать его по расписанию?

Да. Оберните headless-команду в cron / launchd / CI с настроенным .env — и получите постоянную автоматизацию вроде «автоисправление линтера каждую ночь» или «еженедельный рефакторинг».

Чтобы развернуть фонового агента для кода, получите ключ в TeamoRouter, настройте переменные окружения и встройте headless-команду dsh в свои скрипты или CI.

Готовы подключиться?Войдите в консоль, пополните баланс и создайте API-ключ.