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

Под капотом — Cordis, плагиновый фреймворк, где каждая часть продукта регистрирует сервисы, события и обратимые эффекты в общем контексте. Это позволяет собрать собственную конфигурацию агента: лёгкий headless-режим для скриптов, полноценный Web-интерфейс для разработчика или собственную поверхность на основе SDK.

Важно: DeepSeek Harness сейчас находится в стадии раннего предварительного доступа для разработчиков. API и форматы могут меняться без сохранения совместимости.

Что это

DeepSeek Harness — открытая платформа для сборки и запуска ИИ-агентов. Вместо готового приложения она предлагает набор взаимозаменяемых частей: сеанс агента, журнал событий, реестр инструментов, адаптеры моделей, песочницу, систему разрешений и сам цикл принятия решений. Каждая часть оформлена как плагин Cordis и может быть добавлена, удалена или переопределена.

Платформа поставляется в виде npm-пакета `@deepseek-ai/dsh`, который запускает выбранный профиль. Профиль — это упорядоченный набор слоёв плагинов, который собирает конкретную конфигурацию: Web-интерфейс, headless-скрипт, собственный CLI или автоматический сервер по протоколу ACP.

СоставляющаяРоль в HarnessКлючевой сервис
Сеанс и журналХранит всё, что видит модель: сообщения, вызовы инструментов, результатыctx.sessions
Сборка промптаСобирает системный промпт и схемы инструментов из вкладок плагиновctx.systemPrompt
Реестр инструментовРегистрирует инструменты и управляет их выполнениемctx.tools
Агент и циклПубличный интерфейс агента и драйвер, который им управляетctx.agents, ctx.agentLoop
МоделиАбстрактный сервис вызова моделей и провайдерные адаптерыctx.llm
ПесочницаОграничивает файловые и процессные операции агентаctx.fs, ctx.sandbox
РазрешенияУправляет одобрением опасных действий и политиками доступаctx.interaction
СубагентыПозволяет агенту делегировать задачи другим агентамctx.subagent
Интерфейс DeepSeek Harness с просмотром траектории запуска агента

Ключевая идея — нет привилегированного ядра, которое нельзя заменить. Хотите другой цикл мышления — подменяете плагин `agent-loop`. Хотите свой источник моделей — регистрируете адаптер на `ctx.llm`. Хотите другой интерфейс — не трогаете движок, а добавляете собственный пакет клиента.

Инсайт: в Harness всё, что доходит до модели, обязано попасть в журнал сеанса. Это позволяет восстановить историю, повторить диалог, ответвить его или проанализировать позже.

Зачем нужно

Harness решает задачи, которые обычно приходится решать заново в каждом агентном проекте:

  • Сборка агента из блоков — не нужно писать цикл мышления, систему инструментов и хранение с нуля.
  • Замена компонентов без переписывания — плагины регистрируются через единый контекст, поэтому новый адаптер или цикл встраиваются, а не ломают код.
  • Единый журнал событий — всё общение агента с моделью и инструментами записывается последовательно, а история строится из журнала.
  • Разные режимы запуска — один и тот же набор плагинов может работать через Web UI, одноразовый headless-скрипт или внешний API.
  • Изоляция и разрешения — файловые операции и запуск процессов могут ограничиваться политиками, а опасные действия требуют одобрения.

Как устроено

Архитектура Harness построена на трёх понятиях: сервисы, события и профили.

Настройки DeepSeek Harness со списком установленных плагинов и их статусами

Сервисы и контекст

Каждый плагин предоставляет сервис под своим ключом в общем контексте `ctx`. Другие плагины обращаются к возможностям по ключу, а не импортируют конкретную реализацию. Плагин может объявить зависимости через `inject`: фреймворк дождётся нужных сервисов и только потом загрузит его.

export const name = "my-tool-plugin"
export const inject = ["tools"]

export function apply(ctx) {
  // ctx.tools уже готов
  ctx.tools.register(/* ... */)
}

События и режимы рассылки

События — точки расширения. Сервисы могут слушать или перехватывать их. В Cordis четыре режима рассылки: emit, waterfall, parallel и serial. Waterfall особенно важен: слушатель получает управление, может изменить запрос и передать дальше через `next()`.

РежимОжидание слушателейПорядокВозвращаемое значение
emitНетПо порядку регистрацииНет
waterfallНетПо порядку регистрацииДа
parallelДаПараллельноНет
serialДаПо порядку регистрацииДа

Профили и bundle

Профиль — это именованная конфигурация, хранящаяся в домашнем каталоге Harness. Он содержит список bundle — слоёв плагинов, — собственные плагины и файл `cordis.patch.yml`. При запуске слои накладываются друг на друга: сначала bundle профиля, потом профильный патч, затем пользовательский патч из домашнего каталога, наконец патч из командной строки.

Готовые профили: `web` — браузерный интерфейс, `headless` — одноразовый запуск без сервера. Можно создавать собственные профили и устанавливать в них плагины через `dsh plugin`.

Цикл агента

Работа агента разбита на turns и steps. Turn — это один пользовательский запрос и вся работа, которую агент выполняет, чтобы на него ответить. Step — один вызов модели плюс все инструменты, которые модель вызвала в ответ. Один turn может содержать несколько step, если модель просит инструменты, получает результаты и думает дальше.

turn/start
  step/start
    user/message
    agent/request -> llm/stream -> assistant/message
    tool/call* -> tools/execute -> tool/result*
  step/end
turn/end

Когда использовать

СитуацияПодходит / не подходитПочему
Нужен собственный агентный продуктПодходитМожно собрать цикл, инструменты и интерфейс под свои задачи
Нужен локальный чат с модельюНе лучший выборПроще взять готовый клиент, не требующий сборки профилей
Нужно исследовать или отлаживать цикл агентаПодходитВсе события записаны, профили позволяют подменять компоненты
Команда не готова к TypeScript и плагинамНе подходитHarness требует понимания Cordis, TypeScript и npm-экосистемы
Нужен headless-запуск в CI/CDПодходитПрофиль headless запускает одну задачу и печатает ответ в stdout
Нужна многопользовательская SaaS-платформаТребует доработкиИз коробки Harness — локальный инструмент, масштабирование и авторизацию придётся добавлять

Пример

Самый быстрый способ познакомиться с Harness — запустить Web UI из npm. После установки Node.js достаточно одной команды:

npx @deepseek-ai/dsh web

Сервер поднимается на `http://127.0.0.1:3080\`, и браузер открывается автоматически. При запуске через SSH браузер не открывается — URL печатается в терминале. Перед первой работой нужно указать рабочий каталог в интерфейсе и добавить ключ DeepSeek в настройках моделей.

Headless-режим удобен для скриптов. Он принимает задачу как обычное сообщение, выполняет её и печатает результат:

dsh --profile headless "Summarize this repository and list main packages"

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

git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web

Совет: для запуска из исходников нужен Node.js версии 22.19 или новее, либо 24+. Сборка требует pnpm 11.7.0, который активируется через corepack.

Ограничения

Ограничения

Технические границы, которые нужно учитывать перед выбором Harness.

Ранний предварительный доступ — Платформа активно меняется: форматы на диске, API плагинов и структура профилей могут сломать совместимость.

Производитель пока не гарантирует плавный переход между версиями.

Требуется экосистема Node.js — Для разработки плагинов нужен TypeScript, pnpm, понимание модульной системы и сборки.

Быстрый старт из npm возможен без этого, но кастомизация потребует погружения.

Web UI не работает без сборки фронтенда — Профиль web требует заранее собранных артефактов браузерной части.

Если запускать из исходников без `pnpm run build`, активация профиля завершится ошибкой.

Многопользовательский режим не входит в поставку — Harness ориентирован на локальную работу одного пользователя или CI-задачу.

Совместный доступ, роли и масштабирование серверной части придётся делать самостоятельно.

Ключ DeepSeek нужен для реальных вызовов — Без API-ключа headless-демонстрации и Web UI не смогут обращаться к моделям DeepSeek.

Некоторые тесты и сценарии работают без ключа, но полноценная работа требует ключа.

Антипаттерны

Антипаттерны

Ошибочные ходы, которые приводят к нестабильной сборке.

Рассматривать Harness как готовый чат — Это не альтернатива ChatGPT или веб-версии DeepSeek.

Инструмент раскрывает себя, когда нужно собрать собственного агента, а не просто поговорить с моделью.

Менять пакеты под капотом без чтения архитектуры — `packages/core/` и `packages/llm/` — связная система.

Прямое изменение привилегированных пакетов без понимания Cordis приведёт к непредсказуемым сбоям.

Игнорировать журнал сеанса — В Harness история строится из журнала событий.

Если пытаться хранить состояние агента отдельно, теряется возможность воспроизведения и ответвления диалога.

Добавлять плагины без обратимых эффектов — Cordis откатывает регистрации при выгрузке плагина только если они созданы через `ctx.effect()` или аналогичные помощники.

Ручная подписка на события и глобальные переменные останутся после остановки профиля.

Полагаться на стабильность API — Пока продукт в предварительном доступе, внутренние контракты могут меняться.

Не стоит строить на них долгосрочную интеграцию без готовности следить за изменениями.

Чеклист

Чеклист

Проверяемые действия перед запуском Harness.

DeepSeek Harness выигрывает там, где важна не сама модель, а контур вокруг неё: как агент думает, какие инструменты использует, как хранит память и как отчитывается о проделанном. Если этот контур нужно контролировать — Harness даёт для этого плагиновую основу.

Цель агента определена — Записано, какую задачу агент решает и как измеряется качество.

Без этого сложно выбрать профиль и набор инструментов.

Окружение Node.js готово — Установлен Node.js 22.19+, corepack активирован, pnpm 11.7.0 доступен.

Для запуска из исходников проект собран через `pnpm run build`.

Ключ API добавлен — В Web UI введён ключ DeepSeek или настроен собственный провайдер.

Headless-режим может работать без ключа в демонстрационных сценариях, но не для реальных задач.

Рабочий каталог выбран — В Web UI выбран проект, с которым агент будет работать.

Без рабочего каталога композитор сеанса недоступен.

Понятен выбранный профиль — Известно, какие bundle входят в профиль и какой патч применяется поверх них.

Команда `dsh —dump-config` показывает итоговое дерево плагинов.

Планируется обновление компонентов

— Если проект рассчитан на длительную эксплуатацию, учтён риск ломающих изменений в ранних версиях.

Ссылки

Ссылки