Сегодня рано утром официально выпущена DeepSeek V4 Pro, вызвав ажиотаж. Теперь, спустя полдня, появился и DeepSeek Harness (предварительная версия для разработчиков)!

Конечно, это не стало неожиданностью, ведь проект готовился уже давно. Например, Цуй Тяньи из команды DeepSeek Harness постоянно размещал анонсы в социальных сетях и набирал сотрудников для своей команды.

Мы также получили доступ к закрытому тестированию DeepSeek Harness в начале августа, опробовав заранее этот фреймворк для агентов, который наверняка снова изменит AI-сообщество.

Адрес с открытым исходным кодом: https://github.com/deepseek-ai/deepseek-harness
Например, мы заставили DeepSeek Harness, настроенный на официальный DeepSeek-V4-Flash, создать для нас шутер от первого лица про зомби. Мы не вмешивались в процесс и за 30 с лишним минут получили хоть и не идеальный, но вполне играбельный результат.
Учитывая недавнюю популярность идеи Андрея Карпати о генерации 3D-мира с помощью ИИ, мы также поставили перед DeepSeek Harness (V4-Flash) задачу «Бенчмарк Хуа Цяна покупает дыню»: воссоздать классический отрывок «Хуа Цян покупает дыню» в 3D-анимации на основе текстового описания (тоже с one-shot промптом):

В целом, хотя до совершенства еще далеко, сюжет анимации в основном передан, и можно разобрать отношения между персонажами. Для сравнения, анимация, созданная нами с помощью Codex, настроенного на GPT-5.6 sol-xhigh с теми же промптами, получилась гораздо хуже:

При этом масштаб параметров DeepSeek-V4-Flash значительно меньше, чем у GPT-5.6 sol. Можно предположить, что заслуга в этом, несомненно, принадлежит DeepSeek Harness.
Сегодня с выпуском официальной версии DeepSeek V4 Pro мы также подключили эту модель к DeepSeek Harness и запустили тест снова:

Результаты действительно стали лучше.
Далее, взглянем на структуру проекта — она впечатляет: репозиторий уже содержит более 230 членов workspace, код распределен по разделам packages/, apps/, examples/, python/, native/, vendor/, website/ и другим. Файловая система, терминал, дочерние процессы, PTY, языковые серверы, доступ к веб-страницам, навыки, под-агенты, рабочие процессы, режим планирования, сохранение сессий, настройки, учетные данные, телеметрия — почти каждая возможность имеет свой собственный пакет.

Если сравнить обычные проекты агентов с уже собранным компьютером, то DeepSeek Harness больше похож на огромную макетную плату: модель, инструменты, интерфейс, хранилище, политики безопасности и управление контекстом можно вставлять и вынимать.
Он предлагает схему сборки по умолчанию, но видно, что DeepSeek действительно хочет создать не какую-то фиксированную форму «DeepSeek-помощника по программированию», а способ сборки агентов.
Что такое DeepSeek Harness?
Сначала проясним возможную путаницу: DeepSeek Harness — это не новая модель DeepSeek и не просто клиент API. Это SDK и фреймворк для создания, запуска и расширения агентов, который по умолчанию может подключаться к моделям DeepSeek (также можно легко настроить подключение к другим моделям), позволяя модели читать проекты, изменять файлы, выполнять команды, управлять задачами, распределять подзадачи и взаимодействовать с пользователем через веб-интерфейс, полноэкранный терминал, безголовую команду (headless) или автоматизированные протоколы.

Веб-интерфейс DeepSeek Harness предоставляет удобный вход для настройки других сервисов моделей, не требуя от пользователя ручного редактирования файлов конфигурации.
В AI-сообществе слово «Harness» уже не ново. Его исходное значение — сбруя, упряжь, привязь и т.д., а на более абстрактном уровне его функция заключается в соединении силы с работающим механизмом, не позволяя этой силе выйти из-под контроля. Применительно к ИИ, Harness отвечает за подключение модели к файловой системе, оболочке, редактору кода, веб-страницам и другим агентам, одновременно регистрируя её действия, ограничивая её возможности и решая в случае ошибки — повторить, отменить, сжать контекст или вернуть проблему пользователю.
Это, возможно, также объясняет, почему объем кода и количество пакетов в этом проекте настолько велики, ведь связанные с этим задачи и выбор инструментов очень обширны. Это включает в себя: можно ли параллельно вызывать инструменты, может ли команда отмены действительно остановить дочерний процесс, загрязнят ли результаты инструментов контекст, куда следует помещать новые сообщения от пользователя во время работы модели, как восстановить ввод модели после возобновления сеанса, какие инструменты есть у под-агента, выходят ли записи файлов за пределы рабочей области, совпадает ли содержание, видимое при воспроизведении в интерфейсе, с реальным выполнением.
DeepSeek Harness пытается превратить все эти проблемы в формальные системные возможности.
Всё — плагин
Наиболее заметный конструктивный принцип DeepSeek Harness — «Всё — плагин», даже сам цикл агента (Agent Loop) рассматривается как плагин.

Проект построен на основе микрокернела Cordis, и работающий Harness, по сути, является Cordis Context. Различные пакеты регистрируют службы, события и возможности в Context, и в конечном итоге конфигурационный файл объединяет их в работающего агента.
packages/core/ — это ядро всей системы, содержащее Session, System Prompt, Tools, Agent и Agent Loop. Они решают самые фундаментальные вопросы: что такое сессия, как формируется системный промпт, как регистрировать и вызывать инструменты, как создавать агента и как вести диалог от пользовательского ввода к запросу модели, выполнению инструментов и финальному ответу.
Помимо ядра существует множество пакетов с возможностями:
- packages/llm/ отвечает за адаптеры моделей и потоковый вывод;
- packages/shell/, packages/subprocess/ и packages/terminal/ отвечают за разовые команды, деревья процессов и непрерывные терминалы;
- packages/fs/ отвечает за чтение/запись, редактирование, поиск файлов и ограничивающие политики;
- packages/lsp/ подключается к языковым серверам, позволяя агенту не только выполнять текстовый поиск, но и получать навигацию по коду на семантическом уровне;
- packages/web/ отвечает за поиск и веб-скрапинг;
- packages/skill/ управляет повторно используемыми навыками;
- packages/subagent/ и packages/workflow/ расширяют одиночного агента до системы множества агентов, которые можно делегировать и координировать.
Если взглянуть дальше, планирование, цели, задачи, фоновые задания, сжатие контекста, запросы сессий, заголовки сессий, учетные данные, пользовательские настройки, механизмы утверждения и телеметрия также разделены на независимые возможности. Самое интересное в этой структуре — то, что она демонстрирует почти навязчивое осознание границ: кто владеет интерфейсом, кто отвечает за реализацию, кто предоставляет возможности модели — стараются не смешивать.
Документация проекта разделяет типичные возможности на три уровня: интерфейс, реализация и потребитель.
Возьмем Bash в качестве примера: интерфейс определяет, что такое «выполнение команды», локальная реализация отвечает за фактическое создание процесса, а пакет инструментов для модели отвечает за превращение этой возможности в понятную для модели схему (schema) и результат. В будущем, если локальную оболочку потребуется заменить на удаленный контейнер, облачную песочницу или корпоративную исполнительную платформу, теоретически потребуется заменить только уровень реализации, без необходимости переписывать инструменты модели и цикл агента.
Это типичное фреймворковое мышление. Оно может сделать репозиторий громоздким на ранних этапах, но также показывает, что цель DeepSeek Harness — не создание готового продукта, который могут поддерживать только официальные разработчики, а предоставление возможности разным сторонам, осуществляющим развертывание, менять модели, хранилища, политики безопасности, добавлять инструменты и даже заменять сам цикл агента.
Здесь мы также видим принцип истинного open-source, которого DeepSeek всегда придерживалась!
cordis.yml
Один конфигурационный файл собирает разных агентов
Плагинная архитектура в конечном итоге доходит до разработчика через cordis.yml. Конфигурационный файл перечисляет имена плагинов, стабильные идентификаторы и параметры, определяя, каким именно набором возможностей будет обладать текущий агент.
Один и тот же код можно собрать в совершенно разные продукты. Добавьте адаптер DeepSeek LLM, файловую систему, Bash и TUI — получите агента для программирования в терминале; замените интерфейс взаимодействия на веб-плагин — получите веб-приложение; используйте headless-вход — он примет задачу, выполнит циклы модели и инструментов, выведет ответ и завершит работу; замените на ACP или JSON-RPC-шлюз — он станет автоматизированной службой, управляемой другими программами.
Конфигурация также поддерживает слои переопределения. TUI и веб-интерфейс могут совместно использовать базовую конфигурацию, добавляя поверх нее свои собственные плагины интерфейса и параметры; персональная конфигурация находится в самом верхнем слое. Таким образом, стороне развертывания не нужно копировать всю конфигурационную структуру, достаточно заменить указанные плагины. Однако здесь есть одна деталь, на которую стоит обратить внимание: конфигурационный патч заменяет всю config целевого плагина, а не объединяет её. Если написать только новое поле, существующие API-ключи, базовые адреса или другие параметры могут исчезнуть. Это понятно, но не обязательно соответствует интуиции новичка.
Проект также позволяет считывать переменные окружения и выражения времени выполнения в YAML через !!js, например, получение ключа из DEEPSEEK_API_KEY. Конфигурация ссылается только на имя учетных данных, а ключ расшифровывается при фактическом вызове. Веб-интерфейс запишет ключ в $DSH_HOME/.credentials.yaml, а переменные окружения и .env могут служить запасными источниками для автоматизации или локальной разработки; ключи не следует напрямую записывать в cordis.yml или помещать в журналы сеансов.
Agent Loop
Не цикл, а набор правил движения
Основной код многих ранних проектов агентов можно упростить до нескольких строк: отправить сообщение модели, если модель возвращает вызов инструмента, выполнить его, отправить результат обратно модели и повторять, пока модель не выведет текст. DeepSeek Harness, конечно, тоже это делает, но он разбивает этот процесс на строгие этапы жизненного цикла.
Одному пользовательскому вводу соответствует Turn (ход), один Turn может содержать несколько Steps (шагов); один Step соответствует одному запросу к модели и последующему выполнению инструмента. Перед запросом система формирует стабильный системный промпт, текущую среду выполнения, схемы инструментов и сообщения сеанса; после запроса потоковые фрагменты (chunk) модели, полное сообщение, вызовы инструментов, результаты инструментов и причина завершения попадают в поток событий.

Вышеупомянутая игра-шутер про зомби выполнила 3 хода, 127 шагов
Инструменты — это тоже не просто «получил имя функции и вызвал». Они проходят через предварительные политики, необратимые стражи безопасности, фактическое выполнение, последующую обработку, организацию содержимого и уведомление о результате. Разрешение или запрет, тайм-аут, повторная попытка, сбор метрик, добавление контекста — все это можно подключить из разных мест конвейера. Инструмент может объявить, что вызовы с определенными параметрами безопасны для параллельного выполнения, тогда планировщик будет выполнять последовательные задачи только для чтения параллельно; как только встретится вызов, изменяющий состояние или с неопределенной безопасностью, он будет рассматриваться как барьер, ожидая завершения предыдущих задач и выполняясь монопольно.
Такой дизайн может показаться установкой системы управления воздушным движением на сельской дороге, но когда агент начинает одновременно искать десять файлов, запускать тесты, получать дополнительные инструкции от пользователя и при этом должен допускать возможность отмены в любой момент, эти правила быстро превращаются из «избыточного проектирования» в «то, что хотелось бы иметь в отчете о расследовании инцидента как можно раньше».
Он также тщательно обрабатывает направление сообщений во время выполнения. Новый контент, отправленный пользователем во время работы агента, может быть следующей задачей или инструкцией по изменению текущей работы. Система различает сообщения в очереди, ввод в контекст (inject) и корректирующие инструкции (steering), а также подтверждает через квитанции (receipt), действительно ли определенная корректирующая инструкция попала в конкретный запрос к модели. Другими словами, он заботится не только о том, «получено ли сообщение», но и о том, «на каком именно этапе модель его увидела».
Session Log
Истинный авторитетный источник всей системы
Еще одна достойная внимания конструктивная особенность DeepSeek Harness — это Session Log (журнал сеанса).
Проект устанавливает, что все, что видит модель, должно быть восстановимо из журнала. Сообщения пользователя, контекст среды выполнения, информация о запросе модели, потоковый вывод, вызовы и результаты инструментов, события сжатия, переключения прав доступа, причины отмены — все записывается в виде событий в добавляемый поток сеанса. Интерфейс, постоянное хранение, восстановление, форки, телеметрия и воспроизведение не должны поддерживать свои собственные «примерно правильные» состояния, а должны выводиться из одного источника событий.
Этот принцип решает очень сложную проблему в системах агентов: когда задача завершается с ошибкой, можем ли мы действительно узнать, что модель видела в тот момент?
Если система сохраняет только итоговый текст чата, многие ключевые факторы теряются. Возможно, перед запросом модели только что был добавлен статус рабочей области, возможно, результаты инструментов были обрезаны, возможно, система автоматически переключила маршрутизацию модели, возможно, пользователь изменил направление в середине потокового вывода. DeepSeek Harness сохраняет на границах запросов записи, достаточные для восстановления сообщений, а исходные потоковые фрагменты также сохраняются, чтобы интерфейс и воспроизведение оставались согласованными.
Само постоянное хранение сеансов по-прежнему является плагином. Проект предоставляет серверные части, такие как JSONL и SQLite, возможности запросов могут в первую очередь обращаться к активным сеансам, а также выполнять полнотекстовый поиск по истории через SQLite. Resume продолжит работу с исходного сеанса, Fork создаст новый сеанс, ответвившись от определенной исторической границы. Для разработчиков это обеспечивает единую основу для отладки, оценки, аудита и автоматизации.
От одного агента к группе агентов
DeepSeek Harness уже имеет встроенные возможности для под-агентов и рабочих процессов.

Основной агент может делегировать задачи под-агенту. Под-агент может быть новым экземпляром, ответвлением (Fork) от завершенной границы существующего сеанса или подключенным через ACP к внешнему дочернему процессу.

Вышеупомянутая игра-шутер про зомби создала 5 параллельно выполняемых под-агентов
Дизайн области видимости здесь очень важен. Каждый агент имеет свой собственный слой контекста и может видеть определенные инструменты, промпты и команды. Одного под-агента можно ограничить только поиском и анализом, другому разрешить изменять файлы. Возможности, зарегистрированные в области видимости агента, автоматически очищаются по окончании его жизненного цикла, не требуя глобальных соглашений об именах для поддержания изоляции.
Рабочие процессы заходят еще дальше: они позволяют управлять оркестровкой нескольких агентов с помощью скриптов, связывая несколько подзадач, структурированный вывод и продолжение выполнения. Проект также предоставляет цели, планы, задачи и фоновые задания — это не просто четыре похожих элемента пользовательского интерфейса, а состояния совместной работы с разными жизненными циклами. Режим планирования записывает текущую фазу сотрудничества, цели могут сохраняться в рамках одного сеанса, задачи предоставляют модели легкий список дел, а фоновые задания отвечают за управление фактически выполняемой работой.

Это говорит о том, что Harness хочет охватить не только «программирование в стиле вопрос-ответ». Он стремится поддерживать длительные задачи, параллельное исследование, автоматическое выполнение и координацию с внешними системами. Способна ли модель стабильно справляться с таким количеством механизмов — это уже другой тест; по крайней мере, фреймворк сначала сделал руль, приборную панель и тормоза.
Web, TUI, Headless и SDK
Для обычных пользователей проект рекомендует веб-интерфейс по умолчанию, прослушивающий http://127.0.0.1:3080. Он предоставляет диалог, боковую панель сеансов, выбор разрешений, режим планирования, карточки инструментов и взаимодействие с рабочей областью.

Веб-интерфейс также предлагает четыре предустановленных режима агента. Это не четыре независимых друг от друга агента, и они не просто меняют стиль промптов. Они основаны на одном и том же хосте Harness и оснащают текущий сеанс разными инструментами, промптами и возможностями времени выполнения:

Стандартный режим: самый функциональный агент для программирования общего назначения, предоставляет редактирование файлов, Shell, поиск по файлам и веб-страницам, Skills, планирование, цели, под-агентов и рабочие процессы. Подходит для большинства повседневных задач разработки.
Режим PTC: сохраняет все возможности стандартного режима, одновременно представляя инструменты модели через SDK Code Mode. Модель может написать программу на TypeScript, объединяющую несколько операций за один run_code, уменьшая затраты на многократные переходы между моделью и инструментами. Больше подходит для сложных задач с длинными цепочками вызовов.
Минималистичный режим: предоставляет только два инструмента — постоянный Bash и str_replace_editor. Меньший набор инструментов снижает нагрузку на выбор и контекст, подходит для задач программирования с четким путем, когда требуется, чтобы агент действовал напрямую.
Творческий режим: поверх стандартного режима добавляет проверки среды выполнения Cordis, эксперименты с временными плагинами и руководство по созданию предустановок агентов. Агент может не только использовать существующие инструменты, но и исследовать и перекомбинировать собственную среду выполнения, создавая новые пользовательские предустановки. Поскольку он способен запускать код плагинов, написанный моделью, это режим высокого доверия для опытных пользователей.
Этот набор предустановок, возможно, является наиболее наглядным продуктовым выражением «Всё — плагин»: базовая маршрутизация модели, постоянное хранение сеансов, песочница и утверждение по-прежнему обеспечиваются общим хостом, а предустановка определяет, какие именно возможности загружаются в контекст одного агента. Один и тот же веб-интерфейс, таким образом, может переключаться с минималистичного агента с двумя инструментами на стандартный режим, способный оркестровать под-агентов, и даже превращаться в творческий режим, способный перестраивать сам себя.

Например, здесь в творческом режиме мы заставили DeepSeek Harness, подключенный к DeepSeek V4 Pro, создать «трехколоночный режим», которого нет в официальном веб-интерфейсе:
Помимо веб-интерфейса, TUI предназначен для разработчиков, предпочитающих оставаться в терминале.

Headless-режим подходит для скриптов и CI: он принимает задачу, ждет полной остановки агента, выводит последний действительный ответ и завершает работу. Если программе требуются структурированные события и постоянный контроль, следует использовать ACP или JSON-RPC/Python SDK.
Для автоматизации проект предоставляет службу ACP и шлюз JSON-RPC. Python SDK работает с прилагаемой средой выполнения JSON-RPC, позволяя приложениям Python запускать сеансы, отправлять задачи, получать уведомления без необходимости напрямую встраивать ядро Node. Репозиторий также содержит примеры Code Mode, самореферентного Cordis, службы памяти MCP и другие.
Стоит отметить, что эти входы — не четыре независимо эволюционирующих агента. Они совместно используют базовую модель возможностей, семантику событий сеанса и большинство основных плагинов, но это не просто замена одного уровня UI, а создание различных форм продуктов, таких как веб, разовые задачи и автоматизированные службы, путем сборки различных наборов (bundle). Это самый наглядный результат «Всё — плагин».
Агент может проверять и даже модифицировать себя
DeepSeek Harness также предоставляет набор инструментов самореферентного Cordis. Они не входят в стандартный, PTC или минималистичный режимы, а предоставляются через «Творческий режим» в веб-интерфейсе в качестве явного расширенного входа. После выбора этой предустановки агент может проверять дерево плагинов текущей среды выполнения и динамически подключать или отключать временные плагины.

Это звучит примерно как заставить автомобиль менять двигатель на ходу, поэтому проект не включает эту функцию по умолчанию. Она подходит для исследований или расширенных сценариев автоматизации: модель может временно написать прослушиватель событий, зарегистрировать новый инструмент, предоставить службу, а затем выгрузить его после завершения задачи.
Самоизменяющиеся агенты легко могут превратиться в демонстрацию концепции, но Harness, по крайней мере, поместил их в существующий жизненный цикл плагинов. Динамические плагины по-прежнему работают в механизме Context и Effect Cordis, у зарегистрированных элементов есть четкий путь очистки.
Это еще далеко не безопасно, но демонстрирует, куда на самом деле стремится эта архитектура: агент не только использует возможности, но и может перекомбинировать свою собственную среду выполнения в контролируемых границах.
Дизайн, лежащий в основе Cordis, можно изучить в официально выпущенной одновременно статье «A Programming Paradigm for Spatiotemporal Composability»:

Адрес статьи: https://github.com/cordiverse/paper
Политики безопасности
Как только агент для программирования получает доступ к файловой системе и оболочке, он может изменять код, устанавливать зависимости, запускать процессы и даже касаться окружения хоста за пределами рабочей области. DeepSeek Harness явно рассматривает это как проблему базовой инфраструктуры, а не просто добавляет всплывающее окно подтверждения в интерфейсе.
Проект по умолчанию использует режим workspace-write, ограничивая выполнение команд и изменение файлов текущей рабочей областью и разрешенными временными каталогами, в сочетании с политикой утверждения ask для обработки операций, требующих расширения прав. Более свободный режим danger-full-access также существует, но должен быть явно выбран стороной развертывания; он не будет замаскирован под безобидную опцию совместимости.

Вызовы инструментов также проходят через предварительные политики, монотонные стражи безопасности, оболочки выполнения и последующую обработку. Операции, отклоненные стражем, не могут быть разрешены повторно последующими плагинами; команды, требующие расширения прав, должны объяснять причину и повторяться через механизм утверждения. Файловая система, Bash и дочерние процессы используют одну и ту же политику песочницы, чтобы избежать разделенных границ, когда «команды ограничены, но файловые инструменты могут обойти это».
Еще более достойно одобрения то, что DeepSeek Harness придерживается принципа «отказ в закрытом состоянии» (fail-closed). Если система не может подтвердить, что механизмы изоляции действительно работают, она отказывается выполнять операцию, а не незаметно деградирует до работы без защиты. Переключения прав доступа, запросы на утверждение, параметры инструментов, результаты выполнения и причины отмены также попадают в Session Log, сохраняя основу для последующего аудита и воспроизведения проблем.
Этот дизайн не устраняет все риски выполнения локальных операций агентом, но демонстрирует редкое инженерное отношение: безопасность — это системное ограничение, пронизывающее конфигурацию, выполнение, утверждение, журналирование и механизмы восстановления. Модель может предложить действие, но решение о том, может ли действие произойти, по-прежнему остается за Harness.
DeepSeek стремится быть не просто «еще одним Codex»
Если смотреть только на веб-интерфейс или TUI, легко понять DeepSeek Harness как DeepSeek-версию Codex, Claude Code или других помощников по программированию. Но взглянув на структуру репозитория, видно, что его цель явно более фундаментальна.
Приложение по умолчанию, конечно, важно — оно позволяет разработчикам сразу получить инструмент, который может читать и записывать проекты, выполнять команды, планировать задачи и вызывать под-агентов. Но истинным центром проекта являются заменяемые интерфейсы возможностей, управляемый событиями жизненный цикл, авторитетный журнал сеансов и декларативная композиция. Другими словами, готовый агент больше похож на первого клиента этого SDK.
Это также добавляет недостающий, ранее не столь заметный пазл в экосистему моделей DeepSeek. Модель определяет интеллектуальный потолок, а Harness определяет, как этот интеллект попадает в реальную среду, как используются инструменты, как сохраняется состояние и как работать в границах разрешений. Для корпоративных разработчиков последнее часто важнее, чем несколько дополнительных кнопок в окне чата, потому что оно определяет, можно ли аудировать, расширять, заменять и долгосрочно поддерживать систему.
DeepSeek Harness еще далеко от стадии «установил — и все работает гладко», но он уже демонстрирует довольно целостное техническое видение: агент не должен быть все более раздуваемым циклом, а должен быть набором возможностей, которые можно комбинировать, наблюдать и заменять; сеанс не должен быть просто историей чата, а должен быть фактом выполнения; инструмент не должен быть просто функцией, а должен одновременно иметь политики, журналы и протоколы представления.
Поэтому самое примечательное в DeepSeek Harness — не то, может ли он сегодня заменить используемого вами помощника по программированию, а то, насколько глубоко он обнародует ответ DeepSeek на инженерию агентов.
Эта статья взята с официального аккаунта WeChat «Машинный разум» (ID:almosthuman2014), автор: Машинный разум, следящий за DSH.





