Главное Авторские колонки Пресс-релизы Промо Вакансии Вопросы
84 0 В избр. Сохранено
Авторизуйтесь
Вход с паролем

SEO-плагины на DeepSeek Harness: что переезжает из Claude Code, а что нет

У DeepSeek появился свой агентный харнесс — dsh. Разбираю, как перенести на него SEO-набор: серверы с данными, правила работы и страховку от ошибок модели.
Мнение автора может не совпадать с мнением редакции

Целый год под SEO-плагинами к нейросети я понимал связку Claude Code с набором MCP-серверов: Search Console, DataForSEO, выгрузки краулера. Модель не сочиняет цифры, а тянет их сама. Потом DeepSeek представил свой агентный харнесс, DeepSeek Harness, он же dsh, и появился резонный вопрос: уехать на него всем набором и платить по тарифам DeepSeek, не переучивая ни проекты, ни себя.

Коротко — да, почти без потерь. А подробно разберу ниже, по слоям.

dsh — это стартёр профилей

Профиль здесь — упорядоченная стопка плагинов, поверх которой лежит ваш слой настроек в файле cordis.patch.yml внутри папки профиля. Из коробки есть веб-интерфейс, headless под разовые задачи и режимы для автоматизации. Ставится из npm, пакет @deepseek-ai/dsh.

Сразу оговорюсь: на момент текста это версия 0.1.5, релиз-кандидат. Документация полная, но для боевых задач я держал бы под рукой привычный клиент — на случай, если что-то изменится между версиями.

Любой харнесс собирает SEO-набор из трёх слоёв: источник данных, правила работы с ними и защита на случай, если модель свернула не туда. Пройдусь по каждому.

Данные идут через MCP

За этот слой отвечает плагин dsh-mcp-client. Одна запись — один сервер, без обёрток. Так выглядит DataForSEO, запущенный прямо на вашей машине: - insert: - id: mcp-dataforseo name: '@deepseek-ai/dsh-mcp-client' config: serverName: dataforseo transport: stdio command: npx args: ['-y', 'dataforseo-mcp-server'] env: DATAFORSEO_LOGIN: !!js process.env.DATAFORSEO_LOGIN DATAFORSEO_PASSWORD: !!js process.env.DATAFORSEO_PASSWORD

Облачные сервисы вроде Ahrefs или Semrush цепляются тем же способом, только на месте stdio пишется transport: streamable-http и адрес. Ключи держите в переменных окружения, в профиль их не кладут.

Ещё одна приятная вещь: инструменты называются как в Claude Code — mcp__dataforseo__.... Всё, что привязано к этим именам — разрешения, привычные формулировки задач, — переезжает без изменений.

Что проверить до переезда:

  • Мост отдаёт только инструменты. MCP-ресурсы и готовые подсказки (prompts) не поддерживаются. Отдаёт ли ваш сервер Search Console отчёты через ресурсы — тогда модель их просто не увидит.
  • Таймаут вызова — 60 секунд по умолчанию. Большая выгрузка выдачи пачкой ключей в него может не поместиться. Это чинится полем toolCallTimeoutMs.
  • Сервер не поднялся — харнесс всё равно стартует, только без его инструментов, с ошибкой в логе. Для ночного прогона это ловушка: задание выполнится, но без данных. Поставьте failOnStartupError: true, чтобы оно честно падало.


Ноутбук с открытым кодом крупным планом. Фото: Marc Mueller, Unsplash, CC0

Домашние правила живут в навыках

Сервер приносит цифры, но не знает ваших порядков: какой длины заголовки, что делаете с дублями, по какому признаку разводите фразы по посадочным. Раньше это оседало в длинной подсказке, и каждый писал её на свой лад. В dsh для этого есть навыки — те же skills, что и в Claude Code.

Навык — это папка с файлом SKILL.md или один файл <имя>.md в одном из корней, которые сканирует харнесс:

  • .dsh/skills в корне проекта;
  • .agents/skills там же;
  • $DSH_HOME/skills — общие навыки пользователя.

В начале файла шапка с обязательными полями name и description. По описанию модель решает, когда подтянуть навык, а тело грузится только в этот момент. Вот пример: —- name: semantika-klastery description: Разбор выгрузки Вордстата на группы под посадочные страницы —- 1. Читай выгрузку целиком, не кусками. 2. Фразы на одну страницу, только если выдача по ним совпадает. 3. В конце сверь число строк на входе и на выходе. Не сошлось — задача не сделана.

Третий пункт я теперь вписываю в каждую пакетную задачу. Модель спокойно обработает сто строк из пятисот и отчитается, будто сделала всё. Счётчик на входе и выходе ловит это куда надёжнее, чем вчитывание в отчёт.

Два удобных момента. Тело навыка перечитывается при каждой загрузке, так что правило можно править прямо по ходу работы, без перезапуска. И второе: папку .claude/skills харнесс по умолчанию не сканирует. Если навыки уже там, пропишите её в customSkillDirs — копировать ничего не нужно.

Хуки как страховка

Главное, что дал мне год работы с плагинами: первые месяц-два не давать модели права на запись. Пусть смотрит и предлагает, а меняет человек. В Claude Code это держат хуки, и тут приятно: у dsh есть мост dsh-hooks-claude-code, который запускает готовый hooks.json без переписывания. - insert: - name: '@deepseek-ai/dsh-hooks-claude-code' config: configPath: ./.claude/hooks.json projectDir: .

Основные события работают: PreToolUse способен запретить вызов инструмента или запросить подтверждение, PostToolUse возвращает модели результат с замечанием, Stop вынуждает сделать ещё шаг, когда проверка не сошлась. Так что хук «не трогай CMS без меня» и хук «не заканчивай, пока не сойдутся счётчики» переносятся как есть. Ограничение одно: мост понимает только командные хуки — те, что зовут внешнюю программу.

Ночной аудит без интерфейса

Под регулярные задачи есть профиль headless: одно задание, один ответ, выход. dsh —profile headless "Сверь страницы из карты сайта с кодами ответа и закрытием в robots. Итог — таблица."

Такую строку несложно повесить в планировщик раз в неделю. Задача стартует в текущей папке — там и лежат навыки проекта, — а сессия сохраняется, так что утром можно открыть и глянуть, что агент делал и где споткнулся.

Где прячется экономия

DeepSeek дешевле не только по прайсу. У агента, который долго сидит в одном проекте, почти весь вход — это повторное чтение кэша: инструкции, описания инструментов, история шагов. У DeepSeek кэш стоит копейки, особенно вне пика.

Но у MCP есть и оборотная сторона: описания всех инструментов подключённого сервера уходят в каждый запрос. Сервер на полсотни инструментов — постоянная надбавка к каждому шагу. Пока список стабилен, эта часть одинаковая и ложится в кэш. Сменил сервер список инструментов — кэш сбился с этого места и дальше.

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

Итог переезда

Перенос SEO-набора на DeepSeek Harness — это скорее перекладывание файлов, чем переделка:

  • MCP-серверы подключаются одной записью, имена инструментов те же, что в Claude Code;
  • навыки — тот же формат SKILL.md, старую папку достаточно указать в настройках;
  • хуки из hooks.json работают через мост, если они командные;
  • не переезжают MCP-ресурсы и готовые подсказки — проверьте, не висит ли на них что-то важное;
  • под регулярные отчёты есть headless, под разные задачи — разные профили.

Не меняется от харнесса к харнессу только одно: модель приносит строки, а не решения. Что развивать, что закрывать и что говорить клиенту — это по-прежнему ваша работа.

0
В избр. Сохранено
Авторизуйтесь
Вход с паролем