SSD Nodes Learn Hosting plans →
Gidsen Matt ConnorDoor Matt Connor · Bijgewerkt 2026-08-29

Beste DeepSeek Harness plugins voor uw VPS installatie

Optimaliseer uw DeepSeek Harness met deze vijf essentiële plugins voor budgetbeheer, tool-gating, injectie-scanning, persistent geheugen en veilige LAN-toegang op uw VPS.

Welke DeepSeek Harness-plugins zijn de moeite waard om te installeren

DeepSeek Harness-plugins zijn externe code die binnen uw agent draait, met de rechten van uw agent, op een machine waarvoor u betaalt. De communitylijst bevat meer dan twintig categorieën en meer dan duizend items. Op een gehuurde virtual private server (VPS) heeft u er vijf nodig: dsh-budget voor uitgavenlimieten, dsh-permission-rules voor tool-gating, dsh-defend voor injectie- en secret-scanning, dsh-memory voor feiten die een sessie overleven, en dsh-web-lan-access pas nadat u heeft besloten hoe u zich gaat authenticeren.

De harness is dsh, de open-source agent-harness van DeepSeek, zo gebouwd dat alles een plugin is. De eigen README noemt het een developer preview en waarschuwt THERE WILL BE COMPATIBILITY-BREAKING CHANGES. Dat ene feit bepaalt elke keuze hieronder. Pin de versies die u installeert, houd er rekening mee dat een upgrade ze kan breken en houd de set klein genoeg zodat u de code daadwerkelijk kunt lezen. Als de harness nog niet draait, begin dan met een DeepSeek Harness-installatie op een VPS en kom daarna hier terug. Als de onderdelen waar deze plugins op inhaken – de agent-loop, de tools en het geheugen – nog onduidelijk zijn, doorloop dan eerst de basisprincipes, omdat elke keuze hieronder makkelijker te beoordelen is zodra u weet wat elke laag doet.

Hoe dsh een plugin installeert en waar de configuratie terechtkomt

dsh stelt zichzelf samen uit Cordis-plugins, waardoor een draaiende instantie een boomstructuur van plugins is in plaats van één enkel programma. Een profiel is een benoemde samenstelling van deze plugins. De twee sjablonen zijn web en headless. $DSH_HOME gebruikt standaard ~/.dsh, en een profiel bevindt zich op $DSH_HOME/profiles/<name>/, waar het zijn eigen package.json, een dsh.profile-manifest en een cordis.patch.yml bevat.

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

Er zijn vier bronvormen mogelijk: een kale npm-pakketnaam, een scoped naam zoals @towzai/dsh-memory, een GitHub-referentie zoals github:PerryLink/dsh-budget#main, en een lokaal pad met link: of ./. Gebruik bij voorkeur de GitHub-vorm, omdat u #main kunt vervangen door een commit-hash om volgende maand exact dezelfde code terug te krijgen.

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

Lagen worden in een vaste volgorde toegepast: elk bundle in de volgorde zoals vermeld in het profiel, daarna de cordis.patch.yml van het profiel, vervolgens de cordis.patch.yml op home-niveau en tot slot eventuele --patch-overlays. De volgorde is van belang omdat een latere laag instellingen van een eerdere laag kan overschrijven of verwijderen. Wanneer een plugin geïnstalleerd lijkt maar niet werkt, open dan de cordis.patch.yml van het profiel en controleer twee zaken: of het insert-blok aanwezig is en of een latere laag de plugin niet uitschakelt.

Sinds 17 augustus 2026 bevindt het npm-pakket @deepseek-ai/dsh zich op 0.1.0-rc.7, terwijl elke onderliggende plugin compatibiliteit verklaart met 0.1.0-rc.5 tot 0.1.0-rc.6. Dit gat is normaal in dit ecosysteem en is de gebruikelijke reden waarom een plugin stopt met laden: de harness ontwikkelt zich sneller dan de plugins eromheen. Upgrade de harness bewust en test daarna één plugin per keer.

Controleer een plugin voordat u deze vertrouwt

Een dsh-plugin draait niet in een sandbox buiten de harness. Deze wordt geladen in dezelfde Cordis-boom, in hetzelfde proces, als dezelfde gebruiker van het besturingssysteem, met toegang tot dezelfde model-credentials en dezelfde werkmap. Het installeren van een plugin komt eerder overeen met het uitvoeren van een script van iemand anders met sudo dan met het toevoegen van een browserextensie. Dit is dezelfde vertrouwenskwestie die Claude Code-plugins oproepen, en het antwoord is hetzelfde: lees de code of installeer deze niet.

Controleer de volgende vier punten, in deze volgorde:

  • Welke extensiepunten worden gebruikt. tools/pre-execute betekent dat de plugin elke tool-aanroep ziet en kan blokkeren. agent/pre-step betekent dat de plugin uw berichten kan inzien. webServer.tapIndex betekent dat de plugin de pagina die aan uw browser wordt geserveerd, herschrijft. Een plugin die geen van deze punten gebruikt, kan zeer weinig uitvoeren; een plugin die ze allemaal gebruikt, is uw beveiligingsgrens.
  • Of er netwerkverkeer plaatsvindt. Zoek in de broncode naar fetch, http en eventuele hardcoded hostnames. Een verbruiksmonitor die gegevens naar buiten stuurt, verstuurt uw gebruikspatroon naar een externe locatie.
  • Of er credentials worden gelezen. Alles wat credentials.* of een provider-key aanraakt, moet in de README van een duidelijke reden zijn voorzien.
  • De licentie en de datum van de laatste commit. Een plugin zonder licentie die maandenlang niet is bijgewerkt in een ecosysteem dat wekelijks verandert, vormt een risico.

Installeer vervolgens op basis van een commit-hash in plaats van een branch, en lees het invoegblok dat het installatieprogramma in cordis.patch.yml heeft geschreven. Dat blok bevat de plugin-id en de configuratie die is geregistreerd; dit is de kortste en meest eerlijke beschrijving van wat u zojuist heeft toegevoegd. Houd provider-keys buiten het bereik van een plugin waar de harness dit toestaat, in lijn met het buiten bereik houden van geheimen voor AI-agents.

dsh-budget: hoe voorkom ik dat een agent de hele nacht doorgaat met uitgeven?

Een agent op een VPS draait onbeheerd. Dat is het doel van het plaatsen op een VPS, maar het is ook het risico. dsh-budget meet tokens en de geschatte kosten per model, per sessie en per dag, en dwingt limieten af op basis van deze totalen.

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

De standaardinstellingen zijn ruim: 10 USD per sessie, 50 per dag en 500 per maand. Dit is geschikt voor een gefinancierd team. Op een persoonlijke server zijn deze bedragen hoog genoeg om een op hol geslagen lus te laten eindigen voordat de limiet wordt bereikt; verlaag deze daarom op de eerste dag.

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
  }
]

De voorgestelde kolom is een startpunt voor één operator op één machine, geen vaststaand cijfer. Verhoog dit wanneer een werkelijke maand aan gebruik daar aanleiding toe geeft. Een maandelijkse limiet van 40 USD met een sessielimiet van 2 zorgt voor een duidelijke en vroege melding, wat wenselijk is terwijl u nog leert wat het verbruik van de tool is.

- id: budget
  config:
    budgets:
      session: 2
      daily: 5
      monthly: 40
    warnRatio: 0.8
    overLimit: block

De instelling die bepaalt hoe de machine zich gedraagt is overLimit. De standaardwaarde is alert, wat een waarschuwing geeft en doorgaat met uitgeven; standaard fungeert deze plugin dus als een dashboard. Stel deze in op block en de harness weigert verdere modelaanroepen zodra een limiet is bereikt. Dit betekent dat een nachtelijke taak stopt in plaats van door te gaan met factureren tot de ochtend. degrade is de derde modus: deze wisselt het model in voor een goedkoper model uit de degradation-map. Dit is de juiste keuze wanneer een taak moet worden voltooid, maar niet het beste model vereist. warnRatio staat standaard op 0.8, zodat u een melding ontvangt bij 80 procent van de limiet.

Er zijn twee belangrijke beperkingen. Kosten worden berekend op basis van prijzen die u zelf opgeeft: prices is standaard leeg en defaultPrice valt terug op 1.0 USD per miljoen input-tokens en 3.0 per miljoen output-tokens. Vul de werkelijke cijfers voor uw modellen in, anders is het dashboard slechts een schatting vermomd als meting. Ten tweede aggregeert de plugin in het actieve proces vanuit de sessie-eventstream, waardoor de totalen worden gereset wanneer de harness opnieuw opstart. Een crash-loop of een supervisor die dsh herstart, reset een dagelijkse limiet. Beschouw dsh-budget als een vangrail tegen uw eigen taken en houd een bestedingslimiet aan op het account van de provider als het werkelijke plafond; dit is het bredere argument in het beheersen van AI-agentkosten op een VPS.

Dagelijks gebruikt u /budget voor het overzicht, /budget models voor de uitsplitsing per model en /budget unblock <scope> om een blokkade op te heffen zodra u heeft besloten door te gaan.

dsh-permission-rules: welke tool-aanroepen mogen nooit worden uitgevoerd?

dsh-permission-rules plaatst declaratieve regels op de tools/pre-execute-waterval, zodat een regel wordt geëvalueerd voordat een tool wordt uitgevoerd. Er zijn drie acties. allow laat de aanroep door, deny blokkeert deze en geeft een reden terug die het model kan lezen, en ask routeert de aanroep naar de officiële goedkeuringslaag.

dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#b30b4fb"

Regels bevinden zich in .dsh/rules.yaml relatief aan de werkmap van de sessie, met een globale fallbackPath en een optionele searchUp om omhoog te navigeren richting de root van het bestandssysteem. Matching omvat globs voor toolnamen, globs voor parametersleutels en -waarden, globs voor paden relatief aan de werkruimte, agent-selectors zoals main of subagent, en netwerkdoelen.

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"

Bij evaluatie geldt dat de eerste match wint; een brede allow bovenaan annuleert dus stilletjes elke specifiekere regel daaronder. Schrijf de weigeringen eerst en de toelatende regels als laatste. De toolnaam-glob dekt mcp__*, wat de manier is om tools te beperken die afkomstig zijn van een model context protocol (MCP)-server in plaats van de harness zelf. Dit is van belang zodra u MCP servers op een VPS draait.

Een gedrag om rekening mee te houden: ask vereist een beantwoorder. Op een headless-profiel kijkt er mogelijk niemand mee, dus een ask-regel kan een uitvoering ophouden totdat er iemand verschijnt. Gebruik deny voor alles wat u nooit zou goedkeuren, bewaar ask voor het profiel waar u zelf achter zit, en als u wilt dat goedkeuringen onbeheerd werken, heeft u een echt antwoordpad nodig. Dit is het onderwerp van AI-agentacties beperken met goedkeuringen.

dsh-defend: hoe zit het met prompt injection en gelekte secrets?

dsh-defend scant op drie punten: inkomende berichten op agent/pre-step, tool-argumenten op tools/pre-execute inclusief een beveiliging tegen destructieve verwijderacties, en tool-resultaten op tools/post-execute. Dat laatste punt is interessant, omdat hier de inhoud die van een webpagina wordt opgehaald wordt gecontroleerd voordat het model actie onderneemt.

dsh plugin --profile web add "github:PerryLink/dsh-defend#7ba3427"

De standaardinstellingen zijn voorzichtig in plaats van strikt: detection.injectionAction, detection.jailbreakAction en detection.secretAction staan allemaal op ask, terwijl detection.secretBlockCritical op true staat, waardoor een kritiek geheim altijd wordt geblokkeerd, ongeacht de overige instellingen. Wijzig op een onbeheerde server de acties die voor u van belang zijn naar block, omdat ask zonder dat er iemand is om het aan te vragen geen beslissing is.

Het ontwerp van de audit verdient lof. defend/detection-events leggen de regel-id, familie, categorie, ernst, beslissing en scanfeiten vast, en nooit de overeenkomende tekst; secrets worden alleen per type geregistreerd. Het inschakelen van het auditlogboek creëert dus geen tweede kopie van de inloggegevens die u probeerde te beschermen.

Wees duidelijk over wat dit u oplevert. Detectie is gebaseerd op regels, en de README vermeldt expliciet dat nieuwe formuleringen en aanvallen in meerdere stappen deze kunnen omzeilen. Het verlaagt het aantal voor de hand liggende aanvallen. Het maakt een agent niet veilig genoeg om op niet-vertrouwde inhoud te richten, dus handhaaf de toegangsregels die eronder liggen.

dsh-memory: wat onthoudt de agent morgen?

Er zijn twee verschillende plugins met de naam dsh-memory; het is nuttig om dit te weten voordat u een installatiecommando uitvoert. Installeer via een expliciete bron zodat u zeker weet dat u de versie krijgt die u heeft gelezen.

De versie die ik op een kleine server zou plaatsen, is de SQLite-build. Deze registreert zich als memory, houdt één bestand bij op $DSH_HOME/memory/memory.db dat gedeeld wordt tussen profielen, en stelt memory_write, memory_search en memory_forget beschikbaar. Zoeken gebeurt op basis van trefwoorden in de opgeslagen tekst en tags. Er is geen embedding-service, geen API-sleutel en geen extra proces.

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

De configuratie die u zult aanpassen is beperkt: path voor het databasebestand, promptRecentCount (standaard 10) voor het aantal niet-gepinde herinneringen dat wordt geïnjecteerd, en promptMaxChars (standaard 2000) voor het rendering-budget. Het leunt op node:sqlite, wat in Node 22 en 24 nog steeds als experimenteel wordt gemarkeerd; een Node-upgrade is dus iets om te testen in plaats van er zomaar vanuit te gaan.

Dit is wat memory daadwerkelijk verandert aan de machine: geïnjecteerde herinneringen worden bij elke beurt in de systeemprompt meegestuurd. Een budget van 2000 tekens betekent honderden extra input-tokens bij elk verzoek, voor altijd. Dat is een reële kostenpost op uw factuur, en daarom hoort dsh-budget op de server te staan voordat u dsh-memory installeert. Houd promptMaxChars krap en ruim op met memory_forget in plaats van het bestand te laten groeien.

De alternatieve build slaat herinneringen op in een YAML-bestand en voert embedding-zoekopdrachten uit met automatische prompt-injectie; deze wordt geïnstalleerd met dsh plugin --profile web add github:towzai/dsh-memory. Hiervoor is een lokale ollama-instantie en een embedding-model vereist, standaard qwen3-embedding:0.6b, overschrijfbaar met DSH_MEMORY_EMBED_MODEL. Semantische herinnering is beter dan herinnering op basis van trefwoorden. Dit betekent echter ook een tweede service en een set modelgewichten die op dezelfde server draaien, wat bij een klein abonnement ten koste gaat van het werkgeheugen waarvoor u de server heeft gehuurd. Kies hiervoor wanneer u RAM over heeft. De algemene afweging tussen de kwaliteit van de herinnering en de belasting van het systeem wordt behandeld in lokaal geheugen voor agents.

dsh-web-lan-access: moet de web-UI buiten loopback luisteren?

npx @deepseek-ai/dsh web serveert de interface op 127.0.0.1:3080. Browsers stellen crypto.randomUUID() alleen beschikbaar in een beveiligde context, waardoor het laden van diezelfde pagina via onversleuteld HTTP vanaf een andere machine mislukt. dsh-web-lan-access lost dit op door webServer.tapIndex te gebruiken om een kleine polyfill te injecteren, en het wijzigt de serverbinding naar 0.0.0.0.

Lees de waarschuwing voordat u het installeert. Door 0.0.0.0 te binden, is de agent zonder authenticatie bereikbaar voor iedereen op hetzelfde lokale netwerk (LAN). Op een server met een publiek IP-adres betekent dit dat de agent voor het hele internet toegankelijk is. Een korte lijst met gevoelige methoden (settings.*, credentials.*, llm.discoverModels) blijft beperkt tot loopback en geeft een 403-foutmelding bij externe verzoeken, wat de schade beperkt. Dit voorkomt het risico echter niet, omdat de interface voor het aanroepen van tools openstaat voor iedereen die de poort vindt.

In de meeste gevallen heeft u deze plugin helemaal niet nodig. Forward de poort in plaats daarvan via SSH.

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

Open vervolgens http://127.0.0.1:3080 in uw lokale browser. De harness blijft alleen op loopback luisteren, waardoor er niets wordt blootgesteld. Omdat browsers 127.0.0.1 als een beveiligde oorsprong beschouwen, is crypto.randomUUID() beschikbaar en is er geen polyfill nodig. Eén commando, geen plugin, geen nieuw aanvalsoppervlak.

Installeer de plugin alleen wanneer een forward niet volstaat, bijvoorbeeld wanneer een telefoon op hetzelfde netwerk de UI moet bereiken. Als u dit doet, bind deze dan achter een privé-netwerkinterface, hanteer een firewallregel die alleen verkeer via die interface toestaat, en vermeld de namen die u gaat gebruiken onder trustedHosts bij de web-runtime-invoer. Voor echte toegang door meerdere gebruikers is er dsh-passwords. Dit voegt permissies voor subgebruikers toe, tokens per uur en dagelijkse tijdquota per subgebruiker, automatische TLS-certificaten (transport layer security) via Let's Encrypt, en een versleuteld auditlogboek. Beschouw dit eerder als een platform dan als een plugin: het vereist poort 80 en 443, het levert een eigen installer, en het gedocumenteerde snelle installatiepad voert een shellscript vanaf het netwerk direct uit in bash. Geef de voorkeur aan npm install -g dsh-passwords gevolgd door dsh-passwords install, zodat de code op schijf staat en u deze kunt inzien voordat deze wordt uitgevoerd.

Een plugin op een schone manier verwijderen

Het verwijderen bestaat uit twee stappen, maar de tweede stap wordt vaak overgeslagen.

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

list zou de plugin niet langer moeten tonen. Open vervolgens $DSH_HOME/profiles/web/cordis.patch.yml en verwijder elk resterend invoegblok dat naar die plugin verwijst, aangezien dat item de plugin in de boomstructuur laadt. Herstart de harness zodat de boomstructuur opnieuw wordt opgebouwd; een reeds geladen plugin blijft actief totdat u dit doet. Onthoud tot slot dat data langer blijft bestaan dan code. $DSH_HOME/memory/memory.db en .dsh/rules.yaml blijven na een deïnstallatie behouden. Verwijder deze zelf als het doel was om ook de data te verwijderen.

Wat ik heb gelezen, en wanneer

Elke referentie hier is een commit, geen branch, omdat main andere code zal bevatten tegen de tijd dat u dit leest. Ik heb alles gelezen op 17 augustus 2026, en de harness zelf bevond zich die dag op 0.1.0-rc.7 op npm.

Exacte commits achter deze shortlist
  • De community pluginlijst op f2918fb, 17 augustus 2026. Met opzet eenmaal gelinkt. Het is een directory, en een directory is geen aanbeveling.
  • dsh-budget op 461d478, 17 augustus 2026. Apache 2.0. Vereist dsh 0.1.0-rc.6, Node 22.19 of 24 en hoger.
  • dsh-permission-rules op b30b4fb, 17 augustus 2026. Apache 2.0. Vereist dsh 0.1.0-rc.5 tot 0.1.0-rc.6.
  • dsh-defend op 7ba3427, 17 augustus 2026. Apache 2.0. Vereist dsh 0.1.0-rc.6.
  • dsh-memory op def7c6a, 13 augustus 2026. MIT. SQLite build.
  • dsh-web-lan-access op e27e909, 16 augustus 2026. MIT.

Controleer deze pins opnieuw voordat u een commando kopieert. In een developer-preview ecosysteem is een versienummer met een datum de enige vorm die betekenis heeft.

FAQ

Welke DeepSeek Harness-plugins moet ik als eerste installeren op een VPS?

Installeer dsh-budget en dsh-permission-rules vóór alle andere. Een budget met overLimit: block voorkomt dat een onbeheerde run de hele nacht doorgaat met uitgeven, en een .dsh/rules.yaml-bestand blokkeert een tool-aanroep die u nooit zou hebben goedgekeurd. Voeg dsh-defend toe zodra de agent informatie van het openbare web leest, en dsh-memory wanneer u merkt dat u steeds dezelfde context in elke sessie plakt. Sla de thema's en status-chips over: deze voegen code toe die met de rechten van uw agent draait zonder de werking van de machine te veranderen.

Zijn dsh-plugins in een sandbox geplaatst ten opzichte van de harness?

Nee. Een plugin wordt geladen in dezelfde Cordis-boom als de harness, in hetzelfde proces, als dezelfde gebruiker van het besturingssysteem, met dezelfde model-inloggegevens en dezelfde werkmap. Een plugin die tools/pre-execute gebruikt, ziet en kan elke tool-aanroep blokkeren; een plugin die agent/pre-step gebruikt, ziet uw berichten. Lees daarom de broncode, controleer de licentie en de datum van de laatste commit, en installeer op basis van een commit-hash in plaats van een branch, zodat de code niet ongemerkt kan veranderen.

Zal dsh-budget de agent daadwerkelijk stoppen, of krijg ik alleen een waarschuwing?

Dat hangt af van overLimit. De standaardinstelling is alert, die waarschuwt bij warnRatio en doorgaat met uitgeven. block weigert verdere model-aanroepen zodra een limiet is bereikt, en /budget unblock <scope> heft deze op wanneer u ervoor kiest om door te gaan. degrade schakelt over naar een goedkoper model uit de degradation-map. Eén limiet is van belang: totalen worden in het actieve proces geaggregeerd op basis van de sessie-eventstream. Het herstarten van de harness reset deze totalen, en een herstart-loop kan een dagelijkse limiet omzeilen. Houd een uitgavenlimiet aan bij de provider als het werkelijke plafond.

Hoe verwijder ik een dsh-plugin volledig?

Voer dsh plugin --profile web remove <package-name> uit, bevestig met dsh plugin --profile web list, open vervolgens $DSH_HOME/profiles/web/cordis.patch.yml en verwijder eventuele achtergebleven invoegblokken voor die plugin, aangezien die vermelding de plugin laadt. Herstart de harness zodat de plugin-boom opnieuw wordt opgebouwd. Gegevens die door de plugin zijn geschreven, blijven op de schijf staan: $DSH_HOME/memory/memory.db en .dsh/rules.yaml overleven beide de de-installatie totdat u ze zelf verwijdert.

Is het veilig om de dsh web UI bloot te stellen aan het netwerk?

Niet op zichzelf. dsh web luistert op 127.0.0.1:3080, en dsh-web-lan-access wijzigt die binding naar 0.0.0.0. De eigen README vermeldt dat de agent hierdoor zonder authenticatie bereikbaar is voor iedereen op hetzelfde netwerk; op een openbaar IP-adres betekent dit het internet. Enkele methoden (settings.*, credentials.*, llm.discoverModels) blijven gebonden aan loopback en retourneren een 403-fout bij externe verzoeken, wat de schade beperkt zonder deze volledig te voorkomen. Gebruik een SSH-port-forward, ssh -N -L 3080:127.0.0.1:3080 you@your-server, of plaats de poort achter een privé-netwerkinterface met een firewallregel, en voeg echte authenticatie toe voordat iets bereikbaar is vanaf de buitenkant.