Open-source агентный харнесс от DeepSeek AI (github.com/deepseek-ai/deepseek-harness) — аналог Claude Code, но модель-агностичный: Node.js/pnpm-монорепо (~246 пакетов), CLI dsh с профилем web (браузерный UI поверх того же агентского движка).
Содержание
Архитектура репозитория: монорепо на pnpm workspaces, сборка через tsc -b (типы) + tsdown/vite (бандл клиента и хоста). Ключевые пакеты: packages/host/apiproxy — RPC-мост браузер↔хост (api-proxy.ts, fetch/handler.ts, схемы запросов вроде agent-presets.schema.ts), packages/bundle/web-app — CLI-обвязка веб-профиля (startup.ts — парсинг dsh --profile web флагов), packages/session/session-persistence-{jsonl,sqlite} — хранение сессий, packages/sandbox/sandbox-windows-acl — песочница для Windows.
Подключение LLM-провайдеров: конфиг $DSH_HOME/settings.yaml, секция llm-pi-ai.providers.<id> — произвольный OpenAI-совместимый провайдер ({apiKeyEnv, api: openai-completions, baseURL, models: [{id: ...}]}). Это открывает путь на любой OpenAI-совместимый шлюз, включая self-hosted — см. deepseek-harness-lab-deployment (подключение к omniroute).
Ключевое ограничение безопасности — --host: флаг веб-профиля схемой принимает только литералы "198.51.100.1" или "198.51.100.2", но 198.51.100.2 дополнительно блокируется в рантайме с явным сообщением "--host 198.51.100.2 is intentionally not supported yet for safety: it would expose remote code execution to the network; use 198.51.100.1 instead" (см. packages/bundle/web-app/src/startup.ts). Инструмент осознанно не имеет собственной авторизации — вся защита сетевой экспозиции возлагается на внешний реверс-прокси.
Второй, менее очевидный защитный слой — --trusted-host. Даже если dsh слушает 198.51.100.1 и наружу его пробрасывает сторонний TCP-форвард/прокси, API-эндпоинты (/api/..., RPC через apiproxy) сверяют заголовок Host запроса с allowlist — это защита от DNS rebinding. По умолчанию доверяется только localhost; любой другой Host (например домен реверс-прокси) получает 403 Forbidden от самого приложения, а не от прокси. Домен добавляется в доверенные через повторяемый флаг --trusted-host <authority...> (например --trusted-host harness.skud24.ru). Это отдельный механизм от --host — легко спутать симптом (403 на конкретных /api/* вызовах, при этом basicAuth реверс-прокси уже пройден) с проблемой самого прокси. См. диагностику этого конкретного случая в deepseek-harness-lab-deployment.
Профили и Cordis-конфигурация. dsh загружается как именованный "профиль" (dsh --profile <name>, web и headless — встроенные примеры) из $DSH_HOME/profiles/<name>/. Каждый профиль — независимое дерево Cordis-плагинов: базовый cordis.yml (пустой список — не редактировать) + пользовательский оверлей cordis.patch.yml (YAML-массив patch-записей: id-targeted overrides, disables, insert-списки; поддерживает !!js-теги для JS-выражений в примерах сборки плагинов, но не в per-profile оверлеях — там кастомный YAML-тег !!js не резолвится парсером оверлеев, packages/boot/app-boot/src/index.ts, кидает YAMLException). headless — второй встроенный профиль, аналог claude -p: dsh --profile headless "<задача>" отвечает на одну задачу и печатает результат, без веб-UI.
MCP-клиент — @deepseek-ai/dsh-mcp-client. dsh умеет подключаться к произвольным MCP-серверам (stdio или streamable-http transport) и добавлять их тулы в свой собственный список под именем mcp__<serverName>__<toolName>. Конфигурируется как запись insert в cordis.patch.yml профиля:
- insert:
- id: mcp-<name>
name: "@deepseek-ai/dsh-mcp-client"
config:
serverName: <name>
transport: streamable-http # или stdio (command/args/env/cwd)
url: http://host:port/mcp-endpoint
headers:
Authorization: "Bearer <token>"
Конкретный пример подключения к n8n-skud24 — см. deepseek-harness-lab-deployment (находка 2026-08-23, включая грабли с !!js).
Связано с
- deepseek-harness-lab-deployment — конкретный инстанс в домашней лабе (LXC 116, pve3)
- claude-code — концептуальный аналог (агентный харнесс для кода), другой вендор
- omniroute — self-hosted AI-шлюз, подключённый как LLM-провайдер в лабной инсталляции
- n8n-skud24 — MCP-сервер, подключённый через
@deepseek-ai/dsh-mcp-clientв лабной инсталляции
Источник
- Рабочая сессия Cowork 2026-08-21 (развёртывание deepseek-harness в лабе, включая чтение исходников
packages/bundle/web-app/src/startup.tsиpackages/host/apiproxy/напрямую из репозитория на LXC 116 через SSH) - Рабочая сессия Cowork 2026-08-23 (MCP-клиент: чтение
.agents/notes/implemented/feature/2026-07-07-mcp-client-plugin.mdи структуры/root/.dsh/profiles/напрямую с LXC 116 через SSH)
Комментарии