Короткий ответ
У DeepSeek Harness (dsh) один архитектурный тезис: всё — плагин. Файловая система, shell, адаптер модели, Web UI и субагенты не зашиты в код — это заменяемые плагины, которыми управляет рантайм под названием Cordis.
Это не украшательство. Отсюда напрямую вытекают три свойства dsh: урезаемый набор возможностей, заменяемые провайдеры и настраиваемые инструменты. Разберём по порядку.
Что такое Cordis
Cordis — плагинный рантайм, на котором работает dsh (его устройство описано в статье A Programming Paradigm for Spatiotemporal Composability). Суть передают две идеи:
- Регистрации — это обратимые эффекты: секции промпта, схемы инструментов, адаптеры, провайдеры и слушатели устанавливаются через
ctx.effect()илиctx.on(), поэтому при перезагрузке и выгрузке они предсказуемо откатываются. - Пространственно-временная компонуемость: разные плагины компонуются в одном контексте в порядке объявления; возможности наслаиваются и снимаются.
Читать исходники Cordis не нужно. Достаточно запомнить: возможности dsh = комбинация загруженных вами плагинов. Добавили плагин — получили способность, убрали — потеряли.
Заменяемые компоненты (seams): три роли
В документации dsh постоянно встречается одно слово — seam — интерфейс, позволяющий заменять реализацию отдельной возможности. Это механизм, стоящий за принципом «замени одного провайдера — и изменится весь продукт».
У каждого seam три роли — интерфейс, реализация и потребитель:
| Роль | Ответственность | Пример (shell) |
|---|---|---|
| Service Definition | Объявляет интерфейс | dsh-shell |
| Service Provider | Реализует его | dsh-bash-local (локально) / dsh-bash-sandbox (песочница) |
| Consumer | Обращённый к модели инструмент, который его использует | dsh-tool-bash |
Та же структура проходит через весь фреймворк: провайдер модели (адаптер регистрируется на ctx.llm), файловая система (ctx.fs), веб-рантайм (ctx.web), субагенты (ctx.subagents).
Почему это важно: три роли развязаны, поэтому смена реализации затрагивает только Provider, а интерфейс и Consumer остаются неизменными. Перенесите shell с локальной машины в удалённую песочницу — и видимая модели схема bash не изменится: для агента замена незаметна.
Три практических выигрыша
1. Урезаемый набор возможностей. Сеть нужна не каждому агенту. Подключите только bash + чтение и запись файлов, уберите web_search — и получите более управляемого и дешёвого агента.
2. Заменяемые провайдеры. Бэкенд модели — тоже заменяемый компонент (seam). Переключите DEEPSEEK_BASE_URL с официального API на TeamoRouter — одна переменная окружения, остальные плагины не затронуты:
export DEEPSEEK_BASE_URL="https://api.teamorouter.com/v1"
export DEEPSEEK_API_KEY="sk-teamo-your-key"
3. Настраиваемые инструменты. Нужен инструмент, который обращается к вашей внутренней тикет-системе? Напишите плагин для Cordis, зарегистрируйте его на ctx.tools — и у агента появится новый инструмент. Это быстрее, чем ждать официальной поддержки.
Минимальная ментальная модель
Представьте dsh как плату со слотами:
[ bash ] [ files ] [ subagent ] [ web-search ] [ model-adapter ] ...
└────────── все подключены к среде выполнения Cordis ──────────┘
│
фактические возможности агента
Вы решаете, что вставлено в слоты, а что нет. Эта модель объясняет большинство проектных решений dsh: почему пресет по умолчанию включает bash + чтение и запись файлов и почему headless-режиму хватает одних переменных окружения.
FAQ
Как связаны Cordis и dsh?
Cordis — базовый плагинный рантайм (самостоятельный проект под лицензией MIT); dsh — агентный фреймворк, построенный поверх него. Принцип dsh «всё — плагин» — это «обратимые, компонуемые регистрации» Cordis в применении к агентам.
Нужно ли писать плагины для Cordis, чтобы пользоваться dsh?
Нет. Повседневное использование — это установка плюс переменные окружения. Написание плагинов — продвинутый навык, который понадобится, только когда вы расширяете dsh.
Что такое «пресет агента»?
Пресет — это набор плагинов. Стандартный пресет dsh обычно включает bash, чтение и запись файлов и glob/grep; пользовательские пресеты могут его урезать или расширять. Именно так «урезаемые возможности» реализуются на практике.
Замена провайдера действительно незаметна?
Для набора возможностей агента — да: схемы инструментов не меняются. Но провайдеры различаются способностями моделей, ценой и лимитами запросов — это различия на уровне модели, а не фреймворка.
В чём прямая польза для меня?
В двух вещах. Дешевле: подключите к dsh дешёвую модель (DeepSeek V4) — и тот же агентный цикл обойдётся на порядок дешевле. И контроль: вы точно определяете, к чему агент может прикасаться, а к чему нет.
Чтобы попробовать эту архитектуру в деле, получите ключ в TeamoRouter, направьте на него адаптер модели, а остальные плагины dsh не трогайте.