DeepSeek Harness: агент, который целиком собран из плагинов
DeepSeek Harness (dsh) — открытый агентский харнесс от DeepSeek AI, распространяемый по лицензии MIT и находящийся в стадии developer preview. Внешне это ещё одна утилита для запуска моделей, внутри — конструктор, в котором плагином является буквально всё: хранение сеансов, песочница, сжатие контекста и сама модель.
Плагин как единица всего
Харнесс работает на Cordis, а его архитектура описана в материале про пространственно-временную композируемость. Принцип простой: приложение не пишется как монолитный код, а собирается из слоёв-патчей. Профиль представляет собой список бандлов плюс ваш cordis.patch.yml, и каждый следующий слой способен отменить или дополнить предыдущий. Для контроля за сборкой есть dsh --dump-config: команда печатает всё дерево целиком, и по выводу видно, какой бандл что именно добавил.
Профили вместо флагов
Одна команда умеет работать по-разному, и разница задаётся профилем, а не набором ключей:
- dsh web — локальный веб-интерфейс на http://127.0.0.1:3080;
- dsh --profile headless "задача" — один свежий сеанс, ответ в вывод и завершение: подходит для CI;
- dsh --profile sdk — JSON-RPC для внешних клиентов;
- dsh --profile acp — тот же агент внутри редактора.
Профиль лежит в отдельной папке, патчи перезагружаются на лету: поправили плагин — изменение подхватилось без перезапуска. Свой набор ставится командой dsh plugin --profile web add.
Агенты внутри агента
Ключевая возможность — харнесс запускает других агентов, и это не одна кнопка, а четыре разных механизма:
- субагенты работают в фоне, у каждого свой контекст: родительский агент продолжает работу и получает результат, когда тот готов;
- наследник контекста — субагент, который видит уже состоявшийся разговор, для задач вида «продолжи и проверь»;
- workflow — JavaScript-сценарий, который сам распределяет десятки субагентов по фазам, конвейером или с барьером: оркестрация описана кодом, а не диалогом;
- ralph — цикл свежих агентов по одному неизменному заданию, где рабочая папка служит долговременной памятью.
Инструменты под конкретную задачу
Базовый набор тоже собран из плагинов, каждый можно выключить: чтение и правка файлов, поиск по репозиторию, фоновые задания, веб-поиск и загрузка страниц, подключение внешних серверов по MCP, «скиллы» — папки с инструкциями, которые агент подгружает по мере надобности.
Песочница и переживающие перезапуск сеансы
Файловые операции ограничены песочницей: workspace-write пускает только в рабочую папку. Отказ выглядит не как падение, а как честная пометка «доступ запрещён» — её можно показать человеку и попросить прав побольше. Границу при этом называют заранее: где-то агент спрашивает на каждое опасное действие, а где-то действует самостоятельно.
История сеанса пишется в файл и переживает перезапуск: сеанс можно возобновить, сжать, посмотреть, сколько он потратил токенов. Долгосрочная цель живёт в состоянии сеанса, а не в голове модели.
Что это даёт командам
Для небольшой команды DSH снимает вопрос «свой агент или готовый сервис»: готовые сервисы предлагают фиксированный набор функций, а харнесс — конструктор. Можно начать с одного профиля, а затем добавлять плагины по мере появления задач: сегодня — публикация статей, завтра — разбор конкурентов, послезавтра — автоматическая выгрузка метрик.
Отдельно стоит отметить прозрачность. Каждый вызов инструмента, каждое изменение файла и каждый переход состояния попадают в журнал. Это не «логи для отладки», а рабочий инструмент: когда агент ошибается, видно, на каком шаге и почему. Это же делает возможной честную цену: если шаг не понадобился, его видно в журнале, а не в счёте.
Наконец, DSH не заставляет переезжать целиком. Профиль можно собрать под одну задачу и держать рядом с привычными инструментами: агент по ключу ходит в ваш сервис, забирает результат и возвращает его туда, где вы работаете.
Четыре плагина на практике
Мы собрали цепочку из четырёх плагинов:
- FrameFactory формирует бриф: темы, заголовки, план статьи и чек-лист.
- Prompt-Polish переписывает черновой запрос, убирая повторы и делая формулировки короче.
- Improve-Prompt показывает diff до отправки — важные термины и ссылки остаются нетронутыми.
- Detector-Remover добавляет разговорные обороты и лёгкую стилистическую неровность, чтобы текст реже срабатывал на AI-детекторах.
С чего начинать
Если хочется попробовать DSH на одной задаче, порядок такой. Сначала ставится сам харнесс и запускается dsh web — этого достаточно, чтобы увидеть базовый набор плагинов. Потом добавляется один-два плагина под задачу: например, для работы с текстом — генерация брифа и полировка запроса. И только после этого имеет смысл думать про субагентов и workflow: они раскрываются там, где задач уже много и они повторяются.
Не стоит пытаться собрать «идеальный профиль» заранее. Профиль — это не конфигурация на годы, а рабочий набор: сегодня он один, завтра вы добавили плагин, послезавтра убрали лишнее. Патчи перезагружаются на лету, поэтому цена ошибки низкая: неудачный слой можно откатить, а не переписывать всё заново.
И ещё: DSH не прячет модель. Если вам нужен конкретный провайдер или конкретная модель, это тоже плагин. Значит, можно сравнить два варианта на одной и той же задаче, не переписывая агента.
Зачем это нужно
DSH — не «CLI для LLM», а среда, где агент собирается под задачу: свои инструменты, свои политики, свои профили. Самое ценное здесь — не набор готовых функций, а то, что любую из них можно заменить своей: харнесс не диктует, как устроен агент, а даёт его собрать. Ломающие изменения обещаны прямо в README.
Код и документация: github.com/deepseek-ai/DeepSeek-Harness.