DeepSeek Harness — агентный каркас от Дипсик, где всё является плагином
📂 Исходный код на GitHubОпенсорсный агентный каркас от DeepSeek AI с архитектурой «всё — плагин» на базе фреймворка Cordis. Web UI, мультимодельность, песочница, Python SDK, ~150K звёзд, лицензия MIT.
DeepSeek Harness (команда dsh) — опенсорсный агентный каркас от DeepSeek AI, построенный на радикальном принципе: всё является плагином. Модель, инструменты, журнал сессий и даже сам агентный цикл — всё это заменяемые модули, которые можно переподключить через конфигурацию, не трогая ядро. Проект набрал около 150 тысяч звёзд на GitHub и распространяется под лицензией MIT.
Что это такое
DeepSeek Harness — это среда исполнения (agent harness) для ИИ-агентов, работающих с кодом. Проект разработан компанией DeepSeek AI и построен поверх фреймворка Cordis, архитектурная концепция которого описана в статье A Programming Paradigm for Spatiotemporal Composability.
Главная идея — отсутствие привилегированного ядра. Плагины добавляют в общий контекст сервисы, типизированные события и обратимые эффекты. Адаптер модели, реестр инструментов, журнал сессий и сам агентный цикл (agent loop) — всё это плагины, которые можно заменить из конфигурации. Расширение dsh происходит подключением нового плагина рядом с существующими, а при выгрузке плагина все его регистрации автоматически откатываются.
Проект находится в стадии developer preview и быстро развивается — разработчики прямо предупреждают о грядущих ломающих изменениях.
Ключевые возможности
- Архитектура «всё — плагин» — каждый компонент продукта заменяем: от адаптера модели до агентного цикла
- Web UI — браузерный интерфейс, запускаемый одной командой
- Мультимодельность — DeepSeek API из коробки, другие провайдеры и кастомные OpenAI-совместимые эндпоинты
- Агентные способности — чтение и редактирование файлов, запуск команд, делегирование задач субагентам, ведение плана
- Политика одобрения — Web UI запрашивает подтверждение перед операциями, требующими одобрения
- Python SDK и headless-режим для запуска без сервера
- Песочница и approval-политика на уровне базового бандла
Быстрый старт
Запуск из npm
Установите Node.js и выполните:
npx @deepseek-ai/dsh web
Команда запускает Web UI, доступный по адресу http://127.0.0.1:3080.
Сборка из исходников
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web
Первая сессия в Web UI
- Откройте Settings → Models, введите ключ DeepSeek API и сохраните — маршрут модели становится доступным сразу, без перезапуска сервера
- Нажмите Choose workspace и добавьте директорию проекта, из которой запускали
dsh— до выбора workspace создание сессии недоступно - Запустите сессию и отправьте агенту задачу, например: «Summarize this repository and identify its main packages»
Процесс dsh использует директорию запуска как файловую систему по умолчанию. Руководство по Web UI доступно в документации.
Архитектура: профили и бандлы
Запущенный dsh — это дерево плагинов, собираемое при старте из упорядоченных слоёв:
- Профиль — именованная композиция, хранящаяся в домашней директории Harness. Перечисляет бандлы, содержит вне-деревьевые плагины и пользовательский
cordis.patch.yml. В поставке есть шаблоныwebиheadless - Бандл — формат дистрибуции для строк конфигурации Cordis и кода, который они подключают
Ключевые бандлы:
| Бандл | Что добавляет |
|---|---|
dsh-base |
Адаптеры моделей, инструменты, персистентность, песочница и approval-политика, настройки, учётные данные, телеметрия |
dsh-web-app |
Браузерное приложение |
dsh-headless |
Одноразовый раннер вообще без сервера |
Посмотреть реальное дерево конфигурации можно командой:
dsh --profile web --dump-config
Любую выведенную строку можно заменить собственным патчем.
Core-пакеты
| Пакет | Ответственность | Ключ ctx |
|---|---|---|
core/session |
Append-only журнал SessionEvent и хранилище в памяти |
ctx.sessions |
core/system-prompt |
Сборка секций промпта и схем инструментов | ctx.systemPrompt |
core/tools |
Реестр инструментов и защищённый пайплайн исполнения | ctx.tools |
core/agent |
Интерфейс Agent, живой реестр, события agent/* |
ctx.agents |
core/agent-loop |
Дефолтный драйвер агентного цикла | ctx.agentLoop |
core/scope |
Примитив scoped-регистрации для каждого агента | библиотека |
llm/llm |
Словарь сообщений и стримов, шов адаптера | ctx.llm |
Ход выполнения
Шаг (step) — это один запрос к модели плюс вызванные ею инструменты. Ход (turn) — ноль или более шагов: он открывается до получения первого входа и закрывается, когда агенту больше ничего не должно.
Цикл выглядит так: запрос входа → сборка секций промпта и схем инструментов → событие agent/pre-step (можно переписать или отклонить вход) → запрос к модели → стриминг ответа → вызовы инструментов через защищённый пайплайн tools/pre-execute → tools/execute → tools/post-execute → завершение шага. Если инструменты требуют нового запроса или пришёл новый вход — стартует следующий шаг.
Событийная модель делится на три домена:
- Сессионные события — устойчивые факты, сохраняемые в журнал и переживают перезагрузку
- Агентные события (
agent/*) — inbox, шаги, статусы, запросы — для наблюдения и перехвата работы в реальном времени - Capability-события (
fs/*,tools/*,telemetry/*) — подключение политики и адаптеров без импорта цикла
Журнал сессий
Журнал сессий — источник контекста, который видит модель. Метод deriveMessages() проецирует историю модели из журнала, а сырые события assistant/chunk сохраняют точность воспроизведения. Форк, resume, транскрипты, телеметрия и персистентность — всё выводится из этого потока.
Ключевой инвариант: model-visible means logged — всё, что попадает в запрос к модели, должно быть восстановимо из журнала.
Capability seams
Шов (seam) — заменяемая capability с тремя ролями: Service Definition (объявление интерфейса), Service Provider (реализация) и Consumer (использование, обычно модельно-ориентированный инструмент). Благодаря швам замена одного провайдера меняет весь продукт: например, файловая система и субпроцессы делят один мир исполнения, поэтому переключение на удалённую песочницу переносит туда же Bash, PTY и LSP — без форков провайдеров.
Куда добавлять новое поведение
События — основные точки расширения. Сессионные события (session/event) — устойчивые факты; агентные события (agent/*) — наблюдение и перехват работы в реальном времени; capability-события (fs/*, tools/*, telemetry/*) — политика и адаптеры:
| Цель | Механизм |
|---|---|
| Добавить провайдера модели | адаптер на ctx.llm |
| Добавить инструмент | регистрация на ctx.tools, схема попадёт в сборку промпта |
| Shell-исполнение | бэкенд ctx.shell |
| Фоновые задачи | ctx.jobs, инструменты job_* |
| Доступ к ФС или политика | провайдер ctx.fs или события fs/* |
| Изолировать процессы | бэкенд ctx.sandbox |
| Перехватить запрос или ход | события agent/* или tools/* |
| Добавить модельно-видимый контекст | agent.inject() |
| Сгенерировать заголовок сессии | провайдер ctx.sessionTitle |
| Форк живой сессии | ctx.sessions.fork(source, boundary?, childSessionId?) |
Пошаговые руководства по добавлению пакетов, инструментов, LLM-адаптеров и Chat-нод собраны в extension cookbook в документации репозитория.
Сообщество и развитие
Проект активно развивается — более 12 000 коммитов. Для обратной связи работают GitHub Discussions и Discord-сообщество. Авторам плагинов рекомендуют добавлять топик dsh-plugin к своему репозиторию для обнаруживаемости.
Лицензия: MIT, сторонние зависимости раскрыты в THIRD_PARTY_NOTICES.md.
DeepSeek Harness — интересный пример нового поколения агентных каркасов: вместо монолитного CLI с захардкоженным поведением — композиционная система, где любой слой, включая сам цикл агента, заменяется конфигурацией. Для команд, строящих собственные агентные пайплайны на моделях DeepSeek, это потенциальная основа для полного контроля над стеком.