Краткий ответ
DeepSeek Harness (dsh) — это не только Web UI по адресу http://127.0.0.1:3080. Он поддерживает и headless-агента для кода: без браузера, только DEEPSEEK_API_KEY в переменных окружения или в .env — и агент в фоне сам читает файлы, выполняет команды и правит код.
Это подходит для автоисправлений в CI, задач по расписанию и скриптовых массовых рефакторингов — для всего, где за процессом никто не следит, а агент должен довести работу до конца.
Что нужно для headless-режима
Headless-режиму нужен только работающий бэкенд с моделью. Минимальная конфигурация:
export DEEPSEEK_API_KEY="sk-teamo-your-key"
export DEEPSEEK_BASE_URL="https://api.teamorouter.com/v1"
Либо в файле .env в корне репозитория (добавьте его в .gitignore):
DEEPSEEK_API_KEY=sk-teamo-your-key
DEEPSEEK_BASE_URL=https://api.teamorouter.com/v1
DEEPSEEK_DEFAULT_MODEL=deepseek-v4-pro-free
После настройки headless-агент вызывает инструменты точно так же, как агент в Web UI, — только без визуального интерфейса, а результат возвращает через stdout или файл отчёта.
Разовый запуск: задача, которая выполняется и завершается
Самый распространённый вариант headless-режима — разовый запуск: вы даёте задачу, агент отрабатывает её до конца (или до лимита бюджета) и завершается:
# пример: передаём задачу headless-агенту
dsh run "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-агента на бесплатном тарифе
Headless-агенты хорошо сочетаются с бесплатным тарифом, потому что у задач с выполнением до конца предсказуемое число запросов:
export DEEPSEEK_DEFAULT_MODEL="deepseek-v4-pro-free" # 200/day
Одна задача «исправить баг + прогнать тесты» сжигает примерно 10–20 запросов (чтение файлов, правки, запуск тестов, итерации исправлений). При 200 запросах в день это 5–10 таких задач — достаточно для личной автоматизации. Для больших объёмов переключитесь на платную deepseek-v4-pro (без лимита на аккаунт, фиксированная цена $1.74/$3.48).
Типичные проблемы
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.