DeepSeek выложил не новую модель, а рантайм агента. Репозиторий deepseek-ai/DeepSeek-Harness на 26 августа 2026 около 195 тысяч звёзд. Каноническая страница: deepseek.com/harness. Короткое имя: dsh. Это не Claude Code и не Cursor. Это обвязка: модель, инструменты, сессия, песочница, цикл и UI собираются из плагинов. Для вайб-кодера вопрос простой: агент жрёт одни и те же system и tools каждый ход, а DeepSeek API дешёвый только когда префикс запроса совпал с кэшем. Если префикс пляшет, вы платите cache miss.

Про цену токена и результат уже есть: цена токена или результат. Про задержку первого токена: TTFT и инференс. Про лимиты чужого агента: лимиты Claude Code. Ниже только Harness и кэш префикса. Не курс и не обзор игр.

Что это официально

README репозитория: open-source agent harness от DeepSeek AI. Архитектура: everything is a plugin. Ядро композиции: Cordis. Лицензия MIT. Статус на 26 августа 2026: developer preview. Там прямо написано: будут ломающие совместимость изменения. Это не SLA и не ставьте в прод и забудьте.

На сайте тезис тот же. Модель, инструменты, навыки, сессия, песочница, хранение, цикл, планировщик и UI не зашиты в монолит. Их монтируют плагины. Cordis грузит, снимает и разруливает зависимости. Конкретной агентной логики в ядре нет. Конфиг выбирает, что подключить, без правки исходников Harness.

Документация по архитектуре (docs/architecture.md) раскладывает дерево. Профиль: именованная сборка бандлов плюс ваш cordis.patch.yml. Бандл: кусок конфига и код, который он монтирует. Базовый слой dsh-base даёт адаптеры моделей, инструменты, персистентность, песочницу, настройки и креды. dsh-web-app добавляет браузерный UI. dsh-headless гоняет один прогон без сервера. Посмотреть, что реально поднялось на машине: dsh --profile web --dump-config.

Как запустить

Официальный быстрый путь: поставить Node.js и выполнить пакет @deepseek-ai/dsh с командой web. Web UI по умолчанию слушает порт 3080 на localhost и открывает браузер. Если запускаете по SSH, команда печатает URL хоста и не открывает чужой браузер. Флаг no-open поднимает сервер без окна.

Плагины сообщества ищут по топику dsh-plugin. Баги пишут в Discussions репозитория. На 26 августа 2026 это preview для разработчиков обвязок.

Четыре режима

Сайт перечисляет пресеты. Не выдумывайте пятый.

Минимальный режим про честный замер: меньше обвязки, меньше помощи от харнесса. Бенчмарк агента часто измеряет не модель, а цикл. Если сравниваете модели, фиксируйте пресет. Иначе вы сравниваете два разных рантайма.

Журнал только на дописывание

Официальный тезис: всё, что увидела модель, попадает в журнал сессии только на дописывание. Системный промпт, цепочка рассуждений, вызовы инструментов и ответы, запуск субагентов, любая инъекция контекста. В Trajectory это разбирают по источнику. Восстановление, форк, поиск и реплей читают тот же поток.

В архитектуре инвариант: то, что увидела модель, должно быть в логе. Если кусок дошёл до запроса, его можно восстановить. Новый видимый модели вход требует нового типа события. История не переписывается с нуля каждый ход, а дописывается. Для кэша API это байты в начале запроса, не философия.

Что такое cache hit у DeepSeek

Это уже не фича Harness, а правило Context Caching в API DeepSeek (документация guides/kv_cache). Кэш на диске включён по умолчанию, отдельного флага нет. Попадает только совпавший префикс с нулевого токена. Совпадение куска в середине запроса кэша не даёт.

Цены смотрите на странице Models and Pricing в docs API, они меняются. На 26 августа 2026 для deepseek-v4-flash во внепиковые часы: cache hit 0.007 доллара за миллион входных токенов, cache miss 0.22, выход 0.66. Пик в два раза дороже. Пиковые окна: 01:00-04:00 и 06:00-10:00 UTC, понедельник-пятница. Для deepseek-v4-pro вне пика: hit 0.022, miss 0.66, выход 1.98. Hit примерно в 31 раз дешевле miss на входе Flash. Это не KPI продукта Harness. Это отношение двух колонок прайса.

Откуда тогда цифра 98.2 процента cache hits. Это не цифра с deepseek.com/harness. Так измеряют долю входных токенов, которые реально ушли в hit, когда голова запроса (system плюс определения инструментов) байт в байт та же, а диалог только дописывается. Если агент каждый ход пересобирает tools, вставляет свежую дату в начало system или переставляет блоки, префикс ломается с нулевого токена. Hit падает. Вы платите miss за весь хвост.

Что ломает префикс у вайб-кодера

Типичный самописный цикл делает три вещи, которые убивают кэш.

  1. В system каждый ход пишут сегодняшнюю дату, список открытых файлов или свободную память. Голова запроса новая. Hit ноль.
  2. Набор tools сериализуют в разном порядке или с новым description. Определения инструментов входят в голову. Перестановка одного ключа даёт новый префикс.
  3. Историю переписывают: суммаризуют сверху, выкидывают середину, подмешивают поиск в начало. Для DeepSeek это уже другой запрос с нуля.

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

Проверяйте не ощущением, а полями ответа. Если prompt_cache_hit_tokens близко к нулю на втором ходе той же сессии, префикс уехал. Сначала чините сериализацию, не модель.

Как это стыкуется с вайб-кодом

Если вы сидите в Claude Code, Harness вам не обязателен. Это другой продукт: открытый цикл, который можно патчить плагином.

Не имеет смысла, если нужен готовый редактор с лимитами подписки. Тогда читайте Claude Code Concise и Remote Control. Harness их не заменяет. Это слой агент равно модель плюс обвязка, который DeepSeek открыл, чтобы обвязку можно было менять.

В quick start API DeepSeek уже пишет, что Harness в developer preview, и что модели DeepSeek можно подставить в Claude Code, Copilot и OpenCode. Это про бэкенд-модель, не про то, что dsh живёт внутри Claude Code.

Что не утверждать

Практический минимум на сегодня: поднимите локальный web-интерфейс dsh, посмотрите Trajectory на двух ходах, затем в своём цикле или в usage API сверьте hit. Если голова стабильна, miss остаётся на хвосте. Если нет, сначала чините префикс. Модель тут ни при чём.