Лучшие плагины для DeepSeek Harness: топ 5 расширений
Узнайте, какие пять плагинов для DeepSeek Harness необходимы для управления бюджетом, контроля прав доступа, защиты от инъекций, хранения данных и настройки локальной сети.
Какие плагины DeepSeek Harness стоит установить
Плагины DeepSeek Harness — это сторонний код, который выполняется внутри вашего агента с его привилегиями на машине, за которую вы платите. В списке сообщества представлено более двадцати категорий и свыше тысячи элементов. На арендованном виртуальном выделенном сервере (VPS) вам понадобятся пять: dsh-budget для ограничения расходов, dsh-permission-rules для контроля доступа к инструментам, dsh-defend для сканирования на предмет инъекций и утечек секретов, dsh-memory для хранения фактов, существующих дольше одной сессии, и dsh-web-lan-access только после того, как вы определитесь со способом аутентификации.
Harness — это dsh, агентская среда с открытым исходным кодом от DeepSeek, архитектура которой полностью построена на плагинах. В собственном README она названа предварительной версией для разработчиков (developer preview) и содержит предупреждение THERE WILL BE COMPATIBILITY-BREAKING CHANGES. Этот факт определяет каждый выбор, описанный ниже. Фиксируйте версии устанавливаемых компонентов, будьте готовы к тому, что обновление может нарушить их работу, и поддерживайте минимальный набор плагинов, чтобы вы могли полностью изучить их код. Если Harness еще не запущен, начните с установки DeepSeek Harness на VPS и вернитесь сюда.
Как dsh устанавливает плагин и где размещается конфигурация
dsh собирается из плагинов Cordis, поэтому запущенный экземпляр представляет собой дерево плагинов, а не единую программу. Профиль — это именованная композиция таких плагинов. Существует два шаблона: web и headless. $DSH_HOME по умолчанию использует ~/.dsh, а профиль располагается в $DSH_HOME/profiles/<name>/, содержащем собственный package.json, манифест dsh.profile и cordis.patch.yml.
dsh plugin --profile web list
dsh plugin --profile web add dsh-budget
dsh plugin --profile web remove dsh-budgetПоддерживаются четыре формы источника: имя пакета npm, имя с областью видимости, например @towzai/dsh-memory, ссылка на GitHub, например github:PerryLink/dsh-budget#main, и локальный путь с использованием link: или ./. Рекомендуется использовать форму GitHub, так как вы можете заменить #main на конкретный коммит и гарантированно получить тот же код в будущем.
dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"Слои применяются в фиксированном порядке: каждый пакет в порядке, указанном в профиле, затем cordis.patch.yml профиля, затем cordis.patch.yml на уровне домашнего каталога и, наконец, любой оверлей --patch. Порядок имеет значение, так как последующий слой может изменить конфигурацию или отменить настройки, заданные ранее. Если плагин выглядит установленным, но не работает, откройте cordis.patch.yml профиля и проверьте две вещи: наличие блока вставки и отсутствие настроек в последующих слоях, которые могли бы его отключить.
По состоянию на 17 августа 2026 года пакет npm @deepseek-ai/dsh находится по адресу 0.1.0-rc.7, в то время как каждый плагин ниже объявляет совместимость с версиями от 0.1.0-rc.5 до 0.1.0-rc.6. Этот разрыв является нормальным для данной экосистемы и обычно служит причиной того, что плагин перестает загружаться: среда выполнения обновляется быстрее, чем плагины. Обновляйте среду выполнения целенаправленно, а затем тестируйте плагины по одному.
Изучите плагин, прежде чем доверять ему
Плагин dsh не изолирован от основной среды (harness). Он загружается в то же дерево Cordis, в тот же процесс, от имени того же пользователя операционной системы, имея доступ к тем же учетным данным модели и той же рабочей директории. Установка плагина ближе к запуску чужого скрипта с правами sudo, чем к добавлению расширения для браузера. Это тот же вопрос доверия, который поднимают плагины Claude Code, и ответ на него аналогичен: изучите код или не устанавливайте его.
Четыре аспекта, которые нужно проверить в указанном порядке:
- Точки расширения, которые он использует.
tools/pre-executeозначает, что плагин видит каждый вызов инструмента и может его заблокировать.agent/pre-stepозначает, что он видит ваши сообщения.webServer.tapIndexозначает, что он переписывает страницу, передаваемую в ваш браузер. Плагин, не использующий ни одну из этих точек, практически ничего не может сделать; плагин, использующий их все, является вашим периметром безопасности. - Взаимодействие с сетью. Выполните поиск в исходном коде по
fetch,httpи любым жестко закодированным именам хостов. Счетчик затрат, который отправляет данные на внешний сервер, передает ваши шаблоны использования куда-то еще. - Доступ к учетным данным. Любой код, обращающийся к
credentials.*или ключу провайдера, должен иметь обоснование в файле README. - Лицензия и дата последнего коммита. Плагин без лицензии, к которому не прикасались месяцами в экосистеме, меняющейся еженедельно, является фактором риска.
Устанавливайте плагин по конкретному коммиту, а не по ветке, и изучите блок вставки, который установщик добавил в cordis.patch.yml. Этот блок содержит идентификатор плагина и зарегистрированную им конфигурацию — это краткое и честное описание того, что вы только что добавили. Ограничивайте доступ плагина к ключам провайдеров там, где это позволяет среда, следуя принципам изоляции секретов от AI-агентов.
dsh-budget: как ограничить расходы агента, чтобы он не работал всю ночь?
Агент на VPS работает без присмотра. В этом и заключается смысл размещения на сервере, но в этом же кроется и риск. dsh-budget измеряет количество токенов и оценивает стоимость для каждой модели, сессии и дня, а также обеспечивает соблюдение лимитов для этих показателей.
dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"Значения по умолчанию довольно высокие: 10 USD на сессию, 50 в день и 500 в месяц. Они подходят для финансируемой команды. На личном сервере эти лимиты настолько велики, что зацикленный процесс успеет израсходовать средства до срабатывания ограничения, поэтому снизьте их в первый же день.
The data behind this chart
[
{
"label": "Per session",
"plugin_default_usd": 10,
"suggested_start_usd": 2
},
{
"label": "Per day",
"plugin_default_usd": 50,
"suggested_start_usd": 5
},
{
"label": "Per month",
"plugin_default_usd": 500,
"suggested_start_usd": 40
}
]Предлагаемый столбец — это отправная точка для одного оператора на одной машине, а не фиксированный стандарт. Увеличивайте значения, когда реальный месяц использования покажет необходимость. Месячный лимит в 40 USD с ограничением сессии в 2 позволяет быстро и явно обнаружить превышение, что и требуется, пока вы изучаете аппетиты инструмента.
- id: budget
config:
budgets:
session: 2
daily: 5
monthly: 40
warnRatio: 0.8
overLimit: blockПараметр, определяющий поведение системы, — overLimit. По умолчанию установлено alert: в этом режиме выводится предупреждение, но расходы продолжаются, поэтому «из коробки» плагин работает как панель мониторинга. Установите значение block, и система будет блокировать вызовы моделей при достижении лимита. Это значит, что ночная задача остановится, а не будет расходовать средства до утра. degrade — третий режим: он заменяет модель на более дешевую из карты degradation. Это подходит для случаев, когда задачу нужно завершить, но не обязательно использовать самую мощную модель. warnRatio по умолчанию имеет значение 0.8, поэтому вы получите уведомление при достижении 80 процентов от лимита.
Существует два важных ограничения. Стоимость рассчитывается на основе цен, которые вы указываете: prices по умолчанию пуст, а defaultPrice использует значения 1.0 USD за миллион входных токенов и 3.0 за миллион выходных. Введите реальные цифры для ваших моделей, иначе панель мониторинга будет лишь приблизительной оценкой. Во-вторых, плагин агрегирует данные в запущенном процессе из потока событий сессии, поэтому при перезапуске системы итоговые значения сбрасываются. Циклическая ошибка или супервизор, перезапускающий dsh, обнуляют дневной лимит. Рассматривайте dsh-budget как вспомогательное средство защиты от собственных задач, а в качестве основного потолка используйте лимит расходов в личном кабинете провайдера. Подробнее об этом аргументе читайте в контроль расходов на AI-агентов на VPS.
Для повседневной работы используйте /budget для общего обзора, /budget models для детализации по моделям и /budget unblock <scope> для снятия блокировки, если вы решили продолжить работу.
Правила разрешений dsh: какие вызовы инструментов никогда не должны выполняться?
dsh-permission-rules применяет декларативные правила к каскаду tools/pre-execute, поэтому правило оценивается до запуска инструмента. Существует три действия. allow пропускает вызов, deny блокирует его и возвращает причину, которую может прочитать модель, а ask направляет его в официальный узел утверждения.
dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#b30b4fb"Правила хранятся в .dsh/rules.yaml относительно рабочего каталога сессии, с глобальным fallbackPath и опциональным searchUp для перемещения вверх к корню файловой системы. Сопоставление охватывает шаблоны имен инструментов, шаблоны ключей и значений параметров, шаблоны путей относительно рабочей области, селекторы агентов, такие как main или subagent, а также сетевые цели.
rules:
- match: { tools: [bash], params: { command: "rm -rf*" } }
action: deny
reason: "No recursive deletes"
- match: { tools: [edit, write], paths: ["**/.env*", "**/secrets/**"] }
action: ask
reason: "Secret files need confirmation"
- match: { tools: ["mcp__*"] }
action: ask
reason: "MCP tools need confirmation"При оценке побеждает первое совпадение, поэтому широкое правило allow в начале списка незаметно отменяет все более узкие правила под ним. Сначала записывайте запреты, а в конце — разрешающие правила. Шаблон имени инструмента охватывает mcp__*, что позволяет ограничивать инструменты, полученные с сервера Model Context Protocol (MCP), а не из самой среды исполнения; это становится важным, как только вы начинаете запускать MCP-серверы на VPS.
Поведение, которое следует учитывать: ask требует отвечающего. В профиле headless за процессом может никто не наблюдать, поэтому правило ask может приостановить выполнение до появления пользователя. Используйте deny для всего, что вы никогда не одобрите, оставьте ask для профиля, за которым вы работаете, а если вы хотите, чтобы утверждения работали без присмотра, вам нужен реальный путь ответа, что является темой ограничения действий ИИ-агента с помощью утверждений.
dsh-defend: как насчет prompt injection и утечек секретов?
dsh-defend выполняет сканирование в трех точках: входящие сообщения в agent/pre-step, аргументы инструментов в tools/pre-execute (включая защиту от деструктивного удаления) и результаты работы инструментов в tools/post-execute. Последний пункт наиболее интересен, так как именно здесь контент, полученный с веб-страницы, проверяется перед тем, как модель начнет с ним работать.
dsh plugin --profile web add "github:PerryLink/dsh-defend#7ba3427"Настройки по умолчанию скорее осторожные, чем строгие: detection.injectionAction, detection.jailbreakAction и detection.secretAction имеют значение ask, в то время как detection.secretBlockCritical установлено в true, поэтому критически важный секрет будет заблокирован независимо от других настроек. На сервере, работающем без присмотра, измените важные для вас действия на block, так как ask при отсутствии пользователя, у которого можно спросить подтверждение, не является решением.
Архитектура аудита заслуживает внимания. События defend/detection фиксируют идентификатор правила, семейство, категорию, уровень серьезности, принятое решение и факты сканирования, но никогда не сохраняют совпавший текст; секреты записываются только по их типу. Таким образом, включение журнала аудита не создает вторую копию учетных данных, которые вы пытаетесь защитить.
Четко понимайте, что именно вы получаете. Обнаружение основано на правилах, и в README прямо сказано, что новые формулировки и многошаговые атаки могут обойти защиту. Это снижает частоту очевидных атак. Это не делает агента безопасным при работе с недоверенным контентом, поэтому сохраняйте правила доступа на нижнем уровне.
dsh-memory: что агент помнит на следующий день?
Существуют два различных плагина с названием dsh-memory, о чем стоит знать перед вводом команды установки. Устанавливайте их, явно указывая источник, чтобы получить именно тот вариант, о котором вы читали.
Для небольшого сервера я рекомендую сборку на базе SQLite. Она регистрируется как memory, хранит данные в одном файле по пути $DSH_HOME/memory/memory.db, который является общим для всех профилей, и предоставляет команды memory_write, memory_search и memory_forget. Поиск осуществляется по ключевым словам в сохраненном тексте и тегах. Здесь нет службы эмбеддингов, не требуется API key и не запускаются дополнительные процессы.
dsh plugin --profile web add "github:ben7am1n/dsh-memory#def7c6a"Конфигурация, которую вам предстоит настроить, невелика: path для файла базы данных, promptRecentCount (по умолчанию 10) для количества внедряемых незакрепленных воспоминаний и promptMaxChars (по умолчанию 2000) для бюджета отрисовки. Она опирается на node:sqlite, который в Node 22 и 24 все еще помечен как экспериментальный, поэтому обновление Node — это задача, которую нужно протестировать, а не принимать как должное.
Вот что на самом деле меняет в системе использование памяти: внедренные воспоминания добавляются в системный промпт при каждом обращении. Бюджет в 2000 символов — это несколько сотен дополнительных входных токенов в каждом запросе, постоянно. Это реальная статья расходов в вашем счете, и именно поэтому dsh-budget должен быть установлен на сервере раньше, чем dsh-memory. Держите promptMaxChars в строгих рамках и выполняйте очистку с помощью memory_forget, вместо того чтобы позволять файлу бесконтрольно расти.
Альтернативная сборка хранит воспоминания в YAML-файле и выполняет поиск по эмбеддингам с автоматическим внедрением в промпт; она устанавливается через dsh plugin --profile web add github:towzai/dsh-memory. Для нее требуется локальный экземпляр ollama и модель эмбеддингов, qwen3-embedding:0.6b по умолчанию, которую можно переопределить через DSH_MEMORY_EMBED_MODEL. Семантический поиск работает лучше, чем поиск по ключевым словам. Это также означает наличие второй службы и набора весов модели, постоянно находящихся в памяти сервера, что на тарифе с малым объемом ресурсов отнимает память у задач, ради которых вы арендовали сервер. Выбирайте этот вариант, если у вас есть свободная оперативная память. Общий компромисс между качеством поиска и потреблением ресурсов описан в локальная память для агентов.
dsh-web-lan-access: должен ли веб-интерфейс слушать запросы вне loopback?
npx @deepseek-ai/dsh web предоставляет интерфейс на 127.0.0.1:3080. Браузеры разрешают использование crypto.randomUUID() только в защищенном контексте, поэтому загрузка этой же страницы по обычному HTTP с другого компьютера завершается ошибкой. dsh-web-lan-access решает эту проблему, используя webServer.tapIndex для внедрения небольшого полифилла, и переключает привязку сервера на 0.0.0.0.
Ознакомьтесь с предупреждением перед установкой. Привязка к 0.0.0.0 делает агент доступным без аутентификации для любого пользователя в той же локальной сети (LAN), а на сервере с публичным IP-адресом это означает доступ из всего Интернета. Короткий список чувствительных методов (settings.*, credentials.*, llm.discoverModels) остается привязанным к loopback и возвращает ошибку 403 при удаленных запросах, что ограничивает возможный ущерб. Это не предотвращает угрозу полностью, так как интерфейс вызова инструментов остается открытым для любого, кто обнаружит порт.
В большинстве случаев этот плагин не нужен. Используйте проброс порта через SSH.
ssh -N -L 3080:127.0.0.1:3080 you@your-serverЗатем откройте http://127.0.0.1:3080 в локальном браузере. Инструмент продолжает слушать только loopback, поэтому ничего не выставляется наружу, а поскольку браузеры считают 127.0.0.1 защищенным источником, crypto.randomUUID() доступен и полифилл не требуется. Одна команда, никаких плагинов и новых векторов атак.
Устанавливайте плагин только тогда, когда проброс порта невозможен, например, если к интерфейсу нужно получить доступ с телефона в той же сети. Если вы это делаете, привязывайте его к частному сетевому интерфейсу, настройте правило межсетевого экрана, разрешающее доступ только с этого интерфейса, и укажите имена, которые будете использовать, в trustedHosts в записи web-runtime. Для полноценного многопользовательского доступа существует dsh-passwords, который добавляет права для подпользователей, почасовые токены и суточные квоты времени для каждого подпользователя, автоматические TLS-сертификаты (transport layer security) через Let's Encrypt и зашифрованный журнал аудита. Рассматривайте его как платформу, а не как плагин: он требует порты 80 и 443, поставляется с собственным установщиком, а документированный быстрый путь предполагает передачу shell-скрипта из сети напрямую в bash. Отдавайте предпочтение npm install -g dsh-passwords с последующим dsh-passwords install, чтобы код сохранялся на диске, где его можно изучить перед запуском.
Как правильно удалить плагин
Процесс удаления состоит из двух этапов, но второй часто пропускают.
dsh plugin --profile web remove dsh-budget
dsh plugin --profile web listlist больше не должен отображать его. Затем откройте $DSH_HOME/profiles/web/cordis.patch.yml и удалите все оставшиеся блоки вставки, ссылающиеся на этот плагин, так как именно эта запись загружает его в дерево. Перезапустите harness, чтобы дерево было перестроено; уже загруженный плагин останется в памяти до тех пор, пока вы этого не сделаете. Наконец, помните, что данные сохраняются дольше, чем код. $DSH_HOME/memory/memory.db и .dsh/rules.yaml остаются после удаления. Удалите их вручную, если целью было полное удаление данных.
Что я читал и когда
Каждая ссылка здесь указывает на конкретный коммит, а не на ветку, поскольку main к моменту прочтения вами этого текста будет содержать другой код. Я изучил всё это 17 августа 2026 года, а сам инструментарий в тот день находился на версии 0.1.0-rc.7 в npm.
Точные коммиты, на которых основан этот список
- Список плагинов сообщества на
f2918fb, 17 августа 2026 года. Ссылка приведена один раз намеренно. Это каталог, а каталог не является рекомендацией. - dsh-budget на
461d478, 17 августа 2026 года. Лицензия Apache 2.0. Требует dsh0.1.0-rc.6, Node 22.19 или 24 и выше. - dsh-permission-rules на
b30b4fb, 17 августа 2026 года. Лицензия Apache 2.0. Требует dsh от0.1.0-rc.5до0.1.0-rc.6. - dsh-defend на
7ba3427, 17 августа 2026 года. Лицензия Apache 2.0. Требует dsh0.1.0-rc.6. - dsh-memory на
def7c6a, 13 августа 2026 года. Лицензия MIT. Сборка SQLite. - dsh-web-lan-access на
e27e909, 16 августа 2026 года. Лицензия MIT.
Перепроверяйте эти привязки перед тем, как копировать команду. В экосистеме, находящейся на стадии developer-preview, номер версии с указанием даты — это единственный показатель, имеющий смысл.
FAQ
Какие плагины DeepSeek Harness нужно установить на VPS в первую очередь?
Установите dsh-budget и dsh-permission-rules до всего остального. Бюджет с overLimit: block не даст автоматизированному процессу работать всю ночь, а файл .dsh/rules.yaml предотвратит вызов инструмента, который вы бы не одобрили. Добавьте dsh-defend, как только агент начнет считывать данные из публичного интернета, и dsh-memory, когда заметите, что постоянно копируете один и тот же контекст в каждую сессию. Пропустите темы оформления и статусные индикаторы: они добавляют код, который выполняется с привилегиями вашего агента, не меняя при этом функциональность машины.
Изолированы ли плагины dsh от самой среды harness?
Нет. Плагин загружается в то же дерево Cordis, что и harness, в том же процессе, от имени того же пользователя операционной системы, с теми же учетными данными модели и той же рабочей директорией. Плагин, использующий tools/pre-execute, видит и может блокировать любой вызов инструмента; плагин, использующий agent/pre-step, видит ваши сообщения. Поэтому читайте исходный код, проверяйте лицензию и дату последнего коммита, а также устанавливайте плагины по хешу коммита, а не по ветке, чтобы код не изменился без вашего ведома.
Действительно ли dsh-budget остановит агента или только предупредит меня?
Это зависит от overLimit. По умолчанию используется alert, который выдает предупреждение при warnRatio и продолжает расходовать средства. block блокирует дальнейшие вызовы модели при достижении лимита, а /budget unblock <scope> снимает его, когда вы решаете продолжить работу. degrade переключает на более дешевую модель из карты degradation. Важен один нюанс: итоговые суммы агрегируются в запущенном процессе на основе потока событий сессии, поэтому перезапуск harness сбрасывает их, а цикл перезапусков может обойти суточный лимит. Установите лимит расходов в учетной записи провайдера как основной ограничитель.
Как полностью удалить плагин dsh?
Выполните dsh plugin --profile web remove <package-name>, подтвердите действие через dsh plugin --profile web list, затем откройте $DSH_HOME/profiles/web/cordis.patch.yml и удалите оставшийся блок вставки для этого плагина, так как именно эта запись загружает его. Перезапустите harness, чтобы дерево плагинов было перестроено. Данные, записанные плагином, остаются на диске: $DSH_HOME/memory/memory.db и .dsh/rules.yaml сохраняются после удаления, пока вы не удалите их вручную.
Безопасно ли открывать веб-интерфейс dsh в сеть?
Сам по себе — нет. dsh web слушает 127.0.0.1:3080, а dsh-web-lan-access меняет эту привязку на 0.0.0.0. В README прямо указано, что это делает агента доступным без аутентификации для любого пользователя в той же сети, а при использовании публичного IP-адреса — для всего интернета. Некоторые методы (settings.*, credentials.*, llm.discoverModels) остаются привязанными к loopback и возвращают 403 при запросах с удаленных адресов, что снижает риск, но не устраняет его полностью. Используйте SSH-проброс портов, ssh -N -L 3080:127.0.0.1:3080 you@your-server или разместите порт за частным сетевым интерфейсом с правилом файрвола, а также добавьте полноценную аутентификацию, прежде чем открывать доступ извне.