SSD Nodes Learn Hosting plans →
Посібники Matt ConnorВід Matt Connor · Оновлено 2026-08-29

Які плагіни DeepSeek Harness варто встановити

П’ять плагінів DeepSeek Harness для VPS: ліміти бюджету, дозволи інструментів, сканування ін’єкцій, довговічна пам’ять і доступ до LAN.

Які плагіни DeepSeek Harness варто встановити

Плагіни DeepSeek Harness — це сторонній код, який виконується всередині вашого агента, із привілеями агента, на машині, за яку ви платите. Список спільноти містить понад twenty категорій і понад thousand записів. На орендованому віртуальному приватному сервері (VPS) вам потрібні п’ять: dsh-budget для обмеження витрат, dsh-permission-rules для керування доступом до інструментів, dsh-defend для виявлення ін’єкцій і секретів, dsh-memory для збереження фактів між сеансами та dsh-web-lan-access лише після того, як ви визначите спосіб автентифікації.

Harness — це dsh, open-source агентський harness від DeepSeek, побудований так, щоб усе було плагіном. У його README зазначено, що це попередня версія для розробників, а також міститься попередження 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-пакета, scoped name на кшталт @towzai/dsh-memory, посилання на GitHub на кшталт github:PerryLink/dsh-budget#main і локальний шлях із link: або ./. Використовуйте форму GitHub, оскільки #main можна замінити на commit і отримати той самий код наступного місяця.

dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"

Шари застосовуються у фіксованому порядку: спочатку кожен bundle у порядку, зазначеному в профілі, потім cordis.patch.yml профілю, далі cordis.patch.yml рівня home і після цього будь-який overlay --patch. Порядок має значення, оскільки пізніший шар може змінити конфігурацію або скасувати те, що налаштував попередній. Тому, якщо плагін виглядає встановленим, але нічого не робить, відкрийте cordis.patch.yml профілю та перевірте дві речі: чи є його insert block і чи не вимикає його пізніший шар.

Станом на 17 August 2026 npm-пакет @deepseek-ai/dsh має версію 0.1.0-rc.7, тоді як усі наведені нижче плагіни оголошують сумісність із версіями від 0.1.0-rc.5 до 0.1.0-rc.6. Така розбіжність у цій екосистемі є нормальною і зазвичай саме через неї плагін припиняє завантажуватися: harness розвивається швидше, ніж пов’язані з ним плагіни. Оновлюйте harness свідомо, а потім тестуйте плагіни по одному.

Прочитайте плагін, перш ніж довіряти йому

Плагін dsh не ізольований від harness. Він завантажується в те саме дерево Cordis і в той самий процес, працює від імені того самого користувача операційної системи та має доступ до тих самих облікових даних моделі й того самого робочого дерева. Його встановлення більше схоже на запуск чужого скрипту з sudo, ніж на додавання розширення браузера. Це те саме питання довіри, яке порушують плагіни Claude Code, і відповідь така сама: прочитайте код або не встановлюйте плагін.

Перевірте чотири речі в такому порядку:

  • До яких точок розширення він підключається. tools/pre-execute означає, що плагін бачить кожен виклик інструмента й може його заблокувати. agent/pre-step означає, що він бачить ваші повідомлення. webServer.tapIndex означає, що він переписує сторінку, яку віддають вашому браузеру. Плагін, підключений до жодної з цих точок, має дуже обмежені можливості; плагін, підключений до всіх них, є вашим кордоном безпеки.
  • Чи взаємодіє він із мережею. Пошукайте у вихідному коді fetch, http і будь-яке жорстко задане ім’я хоста. Лічильник витрат, який передає дані розробнику, надсилає відомості про ваш шаблон використання в невідоме місце.
  • Чи читає він облікові дані. Будь-яка робота з credentials.* або ключем провайдера потребує чітко зазначеної причини у README.
  • Ліцензію й дату останнього коміту. Плагін без ліцензії, який не оновлювали кілька місяців в екосистемі, що змінюється щотижня, створює ризик.

Після цього встановіть плагін, указавши коміт, а не гілку, і прочитайте блок вставки, який інсталятор записав у cordis.patch.yml. У цьому блоці зазначено ідентифікатор плагіна та конфігурацію, яку він зареєстрував. Це найкоротший достовірний опис щойно доданого компонента. Де це дозволяє harness, не надавайте плагіну доступу до ключів провайдерів, дотримуючись підходу не зберігати секрети в AI-агентах.

dsh-budget: як зупинити агента, який витрачає кошти всю ніч?

Агент на VPS працює без нагляду. У цьому й полягає сенс його розміщення там, але це також створює ризик. dsh-budget обліковує токени та орієнтовну вартість для кожної моделі, сеансу й дня та застосовує обмеження до цих сум.

dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"

Стандартні значення досить великі: 10 USD на сеанс, 50 на день і 500 на місяць. Вони підходять для команди з фінансуванням. На персональному сервері цих лімітів достатньо, щоб нескінченний цикл завершив роботу ще до спрацювання обмеження, тому зменште їх у перший день.

Chartdsh-budget default caps and a lower starting point for one small VPS (USD)
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, і harness відхилятиме подальші виклики моделі після досягнення ліміту. У такому разі нічне завдання зупиниться, а не продовжить списувати кошти до ранку. degrade — це третій режим: він замінює модель дешевшою моделлю з мапи degradation. Це зручно, коли завдання потрібно завершити, але найкраща модель для нього не потрібна. Стандартне значення warnRatio0.8, тому ви отримаєте сповіщення після досягнення 80 відсотків ліміту.

Є два важливі обмеження. Вартість обчислюється на основі цін, які ви вказуєте: prices за замовчуванням порожній, а defaultPrice використовує значення 1.0 USD за мільйон вхідних токенів і 3.0 за мільйон вихідних токенів. Укажіть фактичні значення для своїх моделей, інакше інформаційна панель буде лише припущенням, поданим як вимірювання. Друге обмеження полягає в тому, що плагін агрегує дані в запущеному процесі з потоку подій сеансу, тому підсумки скидаються після перезапуску harness. Цикл аварійних перезапусків або supervisor, який перезапускає dsh, скидає денний ліміт. Розглядайте dsh-budget як захист від власних завдань, а фактичним верхнім обмеженням зробіть ліміт витрат в обліковому записі провайдера. Це ширший аспект питання, описаний у матеріалі контроль витрат AI-агента на VPS.

У повсякденній роботі використовуйте /budget для огляду, /budget models для розподілу за моделями, а /budget unblock <scope> — щоб зняти блокування після ухвалення рішення продовжити роботу.

dsh-permission-rules: які виклики інструментів ніколи не мають виконуватися?

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 для підйому вгору до кореня файлової системи. Зіставлення охоплює glob-шаблони назв інструментів, glob-шаблони ключів і значень параметрів, glob-шаблони шляхів відносно робочого простору, селектори агентів, як-от 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 на початку непомітно скасовує всі вужчі правила нижче. Розміщуйте заборони першими, а дозвільні правила — наприкінці. Glob-шаблон назви інструмента охоплює mcp__*. Саме так можна обмежувати інструменти, які надійшли від сервера model context protocol (MCP), а не від самого harness. Це стає важливим одразу, щойно ви запускаєте MCP-сервери на VPS.

Потрібно врахувати одну особливість: ask потребує того, хто надає відповідь. У профілі headless ніхто може не стежити за виконанням, тому правило ask здатне призупинити запуск, доки хтось не з’явиться. Використовуйте deny для всього, що ви ніколи не погодили б, залишайте ask для профілю, за яким ви безпосередньо стежите, а якщо потрібно, щоб погодження працювали без нагляду, налаштуйте реальний шлях отримання відповідей. Саме це розглядається в матеріалі обмеження дій AI-агента за допомогою погоджень.

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. Пошук виконується за ключовими словами в збереженому тексті й тегах. Сервіс embeddings не потрібен, API key не потрібен, додатковий процес не запускається.

dsh plugin --profile web add "github:ben7am1n/dsh-memory#def7c6a"

Зміни в конфігурації мінімальні: path визначає файл бази даних, promptRecentCount (типове значення 10) — кількість незакріплених спогадів, які додаються до запиту, а promptMaxChars (типове значення 2000) — бюджет їх відображення. Плагін використовує node:sqlite. Node 22 і 24 досі позначають цей API як експериментальний, тому оновлення Node потрібно тестувати, а не вважати безпечним за замовчуванням.

Ось як пам’ять фактично впливає на сервер: додані спогади передаються в system prompt під час кожного запиту. Бюджет у 2000 символів означає кілька сотень додаткових вхідних токенів у кожному запиті без обмеження в часі. Це безпосередньо збільшує рахунок, тому dsh-budget потрібно налаштувати на сервері раніше, ніж dsh-memory. Встановіть для promptMaxChars невелике значення та видаляйте непотрібні записи за допомогою memory_forget, не дозволяючи файлу безконтрольно збільшуватися.

Альтернативна збірка зберігає спогади у YAML-файлі та виконує пошук за embeddings з автоматичним додаванням результатів до запиту. Її встановлюють за допомогою dsh plugin --profile web add github:towzai/dsh-memory. Для роботи потрібен локальний екземпляр ollama та модель embeddings — типово qwen3-embedding:0.6b, але це можна змінити через DSH_MEMORY_EMBED_MODEL. Семантичний пошук краще знаходить релевантні записи, ніж пошук за ключовими словами. Водночас він додає другий сервіс і набір ваг моделі, які постійно займають пам’ять на тому самому сервері. На невеликому тарифі це пам’ять, яку ви орендували для основної роботи сервера. Обирайте цей варіант, якщо маєте достатній запас RAM. Загальний компроміс між якістю пошуку та постійними витратами ресурсів описано в розділі локальна пам’ять для агентів.

dsh-web-lan-access: чи має вебінтерфейс приймати з’єднання не лише з loopback?

npx @deepseek-ai/dsh web обслуговує інтерфейс на 127.0.0.1:3080. Браузери відкривають crypto.randomUUID() лише в secure context, тому завантаження цієї самої сторінки через звичайний HTTP з іншої машини завершується помилкою. dsh-web-lan-access виправляє це, використовуючи webServer.tapIndex для ін’єкції невеликого polyfill, а також змінює прив’язку сервера на 0.0.0.0.

Перед інсталяцією прочитайте власне попередження цього інструмента. Прив’язка до 0.0.0.0 робить агента доступним без автентифікації для будь-кого в тій самій локальній мережі (LAN), а на сервері з публічною IP-адресою це означає доступ з усього інтернету. Короткий список чутливих методів (settings.*, credentials.*, llm.discoverModels) залишається прив’язаним до loopback і повертає 403 для віддалених origin, що обмежує можливу шкоду. Але це не усуває ризик, оскільки поверхня виклику інструментів залишається відкритою для кожного, хто знайде цей порт.

У більшості випадків цей плагін узагалі не потрібен. Замість цього прокиньте порт через SSH.

ssh -N -L 3080:127.0.0.1:3080 you@your-server

Після цього відкрийте http://127.0.0.1:3080 у локальному браузері. Harness продовжує слухати лише loopback, тому нічого не відкривається назовні. Крім того, браузери вважають 127.0.0.1 захищеним origin, тому crypto.randomUUID() доступний і polyfill не потрібен. Одна команда, без плагіна та без нової поверхні атаки.

Встановлюйте плагін лише тоді, коли port forwarding не підходить, наприклад якщо телефон у тій самій мережі має отримувати доступ до інтерфейсу. У такому разі прив’яжіть його до інтерфейсу приватної мережі, залиште правило firewall, яке дозволяє доступ лише через цей інтерфейс, і вкажіть імена, які використовуватимете, у trustedHosts запису web-runtime. Для повноцінного доступу кількох користувачів існує dsh-passwords. Він додає дозволи для subuser, погодинні ліміти токенів і добові ліміти часу для кожного subuser, автоматичні TLS (transport layer security) сертифікати через Let's Encrypt та зашифрований audit log. Оцінюйте його як платформу, а не як плагін: йому потрібні порти 80 і 443, він постачається із власним інсталятором, а задокументований швидкий спосіб інсталяції передає shell script з мережі безпосередньо в bash. Надавайте перевагу npm install -g dsh-passwords, а потім dsh-passwords install, щоб код зберігався на диску і ви могли прочитати його до запуску.

Як коректно видалити плагін

Видалення складається з двох кроків, але другий часто пропускають.

dsh plugin --profile web remove dsh-budget
dsh plugin --profile web list

list більше не має його відображати. Потім відкрийте $DSH_HOME/profiles/web/cordis.patch.yml і видаліть усі залишкові блоки insert із назвою цього плагіна, оскільки саме цей запис завантажує його в дерево. Перезапустіть harness, щоб дерево було перебудовано; уже завантажений плагін залишатиметься завантаженим, доки ви цього не зробите. Пам’ятайте: дані зберігаються довше, ніж код. $DSH_HOME/memory/memory.db і .dsh/rules.yaml зберігаються після видалення. Видаліть їх вручну, якщо потрібно було видалити й дані.

Що саме я читав і коли

Усі посилання тут ведуть на коміти, а не на гілки, оскільки main зміниться до того часу, коли ви це прочитаєте. Я перевірив усі матеріали 17 August 2026, і того дня сам harness мав версію 0.1.0-rc.7 в npm.

Точні коміти, на яких ґрунтується цей короткий список
  • Список community plugins на коміті f2918fb, 17 August 2026. Посилання наведено навмисно лише один раз. Це каталог, а каталог не є рекомендацією.
  • dsh-budget на коміті 461d478, 17 August 2026. Apache 2.0. Оголошує dsh 0.1.0-rc.6, Node 22.19 або 24 і новіші версії.
  • dsh-permission-rules на коміті b30b4fb, 17 August 2026. Apache 2.0. Оголошує dsh 0.1.0-rc.5 до 0.1.0-rc.6.
  • dsh-defend на коміті 7ba3427, 17 August 2026. Apache 2.0. Оголошує dsh 0.1.0-rc.6.
  • dsh-memory на коміті def7c6a, 13 August 2026. MIT. Збірка SQLite.
  • dsh-web-lan-access на коміті e27e909, 16 August 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 port forward, ssh -N -L 3080:127.0.0.1:3080 you@your-server або розмістіть порт за приватним мережевим інтерфейсом і правилом firewall. Додайте повноцінну автентифікацію, перш ніж відкривати доступ із зовнішньої мережі.